Tổng Quan 
Lập Trình Hướng Đối Tượng
Môn Lập Trình Hướng Đối Tượng – Chương 2
Nguyễn Minh Thành
[M] : 
[email protected]
1
Giới thiệu
 Học một ngôn ngữ lập trình mới là quan trọng. Tuy 
nhiên việc hiểu ý nghĩa của 1 khái niệm, 1 cách suy 
nghĩ mới còn quan trọng hơn gấp nhiều lần.
 Hiểu được “hướng đối tượng” không phải thông qua 
cách học 1 ngôn ngữ hay một bộ công cụ nào đó 
 Mà đó là 1 cách tiếp cận, 1 cách suy nghĩ khác
2
Nội dung
1. Tổng quan về phát triển phần mềm
2. Các phương pháp lập trình cổ điển
▫ PP lập trình tuyến tính
▫ PP lập trình thủ tục/hàm
▫ PP lập trình đơn thể
3. Phương pháp lập trình hướng đối tượng
▫ Các khái niệm
▫ Đặc điểm
▫ Các bước thực hiện
3
1. Phần Mềm
 Viết 1 phần mềm bao gồm rất nhiều công đoạn: phân tích & 
thiết kế, cài đặt, kiểm tra/thử nghiệm và bảo trì.
 Cài đặt (programming/coding) chỉ là 1 phần trong quá trình 
trên.
 C++/C#/Java v.v… là ngôn ngữ lập trình để cài đặt.
 PP lập trình là các cách tiếp cận giúp cho quá trình cài đặt hiệu 
quả hơn.
4
Phần mềm (tt)
 Phương pháp lập trình phải có :
 Tính tái sử dụng (reusability): thiết kế các thành phần có thể được 
sử dụng trong nhiều phần mềm khác nhau
 Tính mở rộng (extensibility): hỗ trợ các plug-ins.
 Tính mềm dẻo (flexibility): 
 Có thể dễ dàng thay đổi khi thêm mới dữ liệu hay tính năng.
 Các thay đổi không làm ảnh hưởng nhiều đến toàn bộ hệ thống 
5
2. Các pp lập trình cổ điển
1.Lập trình tuyến tính
 Chương trình là một dãy các lệnh.
 Lập trình là xây dựng các lệnh trong dãy lệnh.
 Không mang tính tái sử dụng, mở rộng & mềm dẻo.
2.Lập trình thủ tục / hàm
 Chương trình là một hệ thống các thủ tục và hàm. Mỗi thủ 
tục và hàm là một dãy các lệnh.
 Lập trình là xác định xem chương trình gồm bao nhiêu thủ 
tục và hàm, và sau đó xác định các lệnh trong từng thủ tục 
và hàm.
 Kết quả là hệ thống cấu trúc và mối quan hệ giữa các 
hàm/thủ tục
6
Các pp lập trình cổ điển (tt)
3. Lập trình đơn thể
 Chương trình là một hệ thống những đơn thể. Đơn thể là một 
hệ thống các thủ tục và hàm có liên quan mật thiết với nhau. 
Mỗi thủ tục và hàm là một dãy các lệnh. Các đơn thể được 
lưu trên các tập tin đặc biệt và được biên dịch các tập tin 
khác nhau.
 Phân tích và tìm ra các đơn thể bao gồm thành phần dữ liệu 
và các hàm/thủ tục liên quan.
 Cách thực hiện dựa vào việc gom nhóm các thành phần 
tương tự nhau về ý nghĩa, phạm vi…
7
Các pp lập trình cổ điển (tt)
• Ví dụ 1: Xét chương trình nhập vào họ tên, điểm văn, điểm 
toán của một học sinh và xuất điểm trung bình tương ứng. 
Hãy viết chương trình trên bằng các cách viết có thể có.
8
Các pp lập trình cổ điển (tt)
• Cài đặt với pp lập trình tuyến tính (chỉ dùng 1 hàm main và biến toàn 
cục)
9
class Program
{
static string hoten;
static int van, toan;
static float dtb;
static void Main(string[] args)
{
Console.Write("Nhap ho ten: ");
hoten = Console.ReadLine();
Console.Write("Nhap diem toan: ");
toan = int.Parse(Console.ReadLine());
Console.Write("Nhap diem van: ");
van = int.Parse(Console.ReadLine());
dtb = (float)(toan + van) / 2;
Console.WriteLine("Diem trung binh: {0: 0.00}", dtb);
}
}
Các pp lập trình cổ điển (tt)
• Cài đặt với pp lập trình tuyến tính (chỉ dùng 1 hàm main và biến cục 
bộ)
10
class Program
{
static void Main(string[] args)
{
string hoten;
int van, toan;
float dtb;
Console.Write("Nhap ho ten: ");
hoten = Console.ReadLine();
Console.Write("Nhap diem toan: ");
toan = int.Parse(Console.ReadLine());
Console.Write("Nhap diem van: ");
van = int.Parse(Console.ReadLine());
dtb = (float)(toan + van) / 2;
Console.WriteLine("Diem trung binh: {0: 0.00}", dtb);
}
}
Các pp lập trình cổ điển (tt)
• Cài đặt với pp lập trình tuyến tính (chỉ dùng 1 hàm main và cấu trúc 
toàn cục)
11
class Program
{
static HOCSINH hs; 
static void Main(string[] args)
{
Console.Write("Nhap ho ten: ");
hs.hoten = Console.ReadLine();
Console.Write("Nhap diem toan: ");
hs.toan = int.Parse(Console.ReadLine());
Console.Write("Nhap diem van: ");
hs.van = int.Parse(Console.ReadLine());
hs.dtb = (float)(hs.toan + hs.van) / 2;
Console.WriteLine("Diem trung binh: {0: 
0.00}", hs.dtb);
}
}
struct HOCSINH
{
public string hoten;
public int van, toan;
public float dtb;
}
Các pp lập trình cổ điển (tt)
• Cài đặt với pp lập trình tuyến tính (chỉ dùng 1 hàm main và cấu trúc 
cục bộ)
12
class Program
{ 
static void Main(string[] args)
{
HOCSINH hs;
Console.Write("Nhap ho ten: ");
hs.hoten = Console.ReadLine();
Console.Write("Nhap diem toan: ");
hs.toan = int.Parse(Console.ReadLine());
Console.Write("Nhap diem van: ");
hs.van = int.Parse(Console.ReadLine());
hs.dtb = (float)(hs.toan + hs.van) / 2;
Console.WriteLine("Diem trung binh: {0: 
0.00}", hs.dtb);
}
}
struct HOCSINH
{
public string hoten;
public int van, toan;
public float dtb;
}
Các pp lập trình cổ điển (tt)
• Cài đặt với pp lập trình thủ tục (dùng biến toàn cục)
13
class Program
{
static string hoten;
static int van, toan; static float dtb;
static void Main(string[] args)
{
Nhap();
TinhTrungBinh();
Xuat(); 
}
static void Nhap()
{ 
Console.Write("Nhap ho ten: ");
hoten = Console.ReadLine();
Console.Write("Nhap diem toan: ");
toan = int.Parse(Console.ReadLine());
Console.Write("Nhap diem van: ");
van = int.Parse(Console.ReadLine());
}
static void Xuat()
{ 
Console.WriteLine("Diem trung 
binh: {0: 0.00}", dtb);
}
static void TinhTrungBinh()
{
dtb = (float)(toan + van) / 2;
}
}
Các pp lập trình cổ điển (tt)
• Cài đặt với pp lập trình thủ tục (dùng biến cục bộ)
14
static void Xuat(string hoten, int 
van, int toan, float dtb)
{ 
Console.WriteLine("Diem trung 
binh: {0: 0.00}", dtb);
}
static float TinhTrungBinh(int 
van, int toan)
{
return (float)(toan + van) / 2;
}
}
class Program
{ 
static void Main(string[] args)
{
string hoten; int van, toan; float dtb;
Nhap(out hoten, out van, out toan);
dtb = TinhTrungBinh(van, toan);
Xuat(hoten, van, toan, dtb); 
}
static void Nhap(out string hoten, out int van, 
out int toan)
{ 
Console.Write("Nhap ho ten: ");
hoten = Console.ReadLine();
Console.Write("Nhap diem toan: ");
toan = int.Parse(Console.ReadLine());
Console.Write("Nhap diem van: ");
van = int.Parse(Console.ReadLine());
}
 Phải quan tâm đến tham số: Trị, 
chiếu và giá trị trả về của mỗi 
phương thức.
Các pp lập trình cổ điển (tt)
• Cài đặt với pp lập trình thủ tục (dùng biến cấu trúc cục bộ)
15
struct HOCSINH
{
public string hoten; public int van, toan; public float dtb;
}
class Program
{ static void Main(string[] args)
{
HOCSINH hs; Nhap(out hs); Xuat(hs); 
}
static void Nhap(out HOCSINH hs)
{ 
Console.Write("Nhap ho ten: "); hs.hoten = Console.ReadLine();
Console.Write("Nhap diem toan: "); hs.toan = int.Parse(Console.ReadLine());
Console.Write("Nhap diem van: "); hs.van = int.Parse(Console.ReadLine());
hs.dtb = (float)(hs.toan + hs.van) / 2;
}
static void Xuat(HOCSINH hs)
{ 
Console.WriteLine("Diem trung binh: {0: 0.00}", hs.dtb);
}
}
Các pp lập trình cổ điển (tt)
• Cài đặt với pp lập trình thủ tục (dùng biến cấu trúc toàn cục)
16
struct HOCSINH
{
public string hoten; 
public int van, toan; 
public float dtb;
}
class Program
{ 
static HOCSINH hs;
static void Main(string[] args)
{
Nhap();
Xuat(); 
}
static void Nhap()
{ 
Console.Write("Nhap ho ten: ");
hs.hoten = Console.ReadLine();
Console.Write("Nhap diem toan: ");
hs.toan = 
int.Parse(Console.ReadLine());
Console.Write("Nhap diem van: ");
hs.van = 
int.Parse(Console.ReadLine()); 
hs.dtb = (float)(hs.toan + hs.van) / 2;
}
static void Xuat()
{ 
Console.WriteLine("Diem trung binh: 
{0: 0.00}", hs.dtb);
}
}
3. PP Lập trình hướng đối tượng
 Phương pháp lấy đối tượng làm nền tảng để xây dựng chương 
trình.
 Chương trình là một hệ thống những lớp đối tượng. Mỗi một 
lớp đối tượng tương ứng với những đối tượng có xuất hiện trong 
thực tế mà chương trình cần quản lý.
 Lập trình hướng đối tượng là xây dựng những lớp đối tượng, từ 
đó tạo ra các đối tượng cần quản lý.
 Lập trình hướng đối tượng là phương pháp lập trình dựa trên 
kiến trúc lớp (class) và đối tượng (object)
17
3. Lập trình hướng đối tượng (tt)
• Đối tượng là sự gắn kết giữa dữ liệu của đối tượng và các hàm 
(còn gọi là phương thức) thao tác trên các dữ liệu này.
Đối tượng = Dữ liệu + Phương thức
• Khi viết chương trình theo phương pháp hướng đối tượng ta 
phải trả lời các câu hỏi:
▫ Chương trình liên quan tới những lớp đối tượng nào?
▫ Mỗi đối tượng cần có những dữ liệu và thao tác nào?
▫ Các đối tượng quan hệ với nhau như thế nào trong chương trình?
• Ví dụ : Chương trình quản lý đào tạo có những lớp đói tượng 
nào ? Đối tượng nào ?
18
Sự trừu tượng hoá
19
Thực thể
Thuộc tính
Hành động
Thế giới thực Trừu tượng hóa Phần mềm
Dữ liệu
hàm
Đặc điểm của pp lập trình HĐT
• Tính đóng gói (Encapsulation): Đây là quan điểm trung tâm
trong lập trình hướng đối tượng với việc che dấu dữ liệu thông
qua sự đóng gói. Sự đóng gói chính là khả năng cất giữ riêng 
biệt dữ liệu và phương thức tác động lên dữ liệu đó. Do vậy 
chúng ta không phải quan tâm tới việc “phải làm như thế nào” 
mà chỉ điều khiển bằng “làm việc gì”. Sự đóng gói không chỉ
đơn thuần là gom chung dữ liệu và chương trình vào trong 
một khối mà phải có sự đồng nhất giữa dữ liệu và các thao 
tác tác động lên dữ liệu đó.
20
Đặc điểm của pp lập trình HĐT
• Tính thừa kế (inheritance): Mục tiêu của lập trình hướng đối tượng 
là sử dụng lại những gì đã được xây dựng. Với tính thừa kế chúng ta
không phải mất công xây dựng lại từ đầu những đối tượng mới, chỉ 
cần bổ sung để có được những đặc tính cần thiết trong đối tượng 
mới. Những lớp đối tượng đã có được sử dụng lại gọi là lớp cơ sở. 
Những lớp thừa kế những hành vi và dữ liệu của lớp cơ sở gọi là lớp 
dẫn xuất, ngoài những đặc điểm của lớp cơ sở chúng còn có những 
tính chất riêng của mình. Cứ như vậy lớp dẫn xuất lại đóng vai trò 
lớp cơ sở của các lớp dẫn xuất khác.
• Tính đa hình (pholymorphism): Cho phép gởi cùng một thông điệp 
đến những đối tượng khác nhau cùng có chung một đặc điểm
21
Một số khái niệm
Thế giới thực Phương pháp lập 
trình
Ngôn ngữ lập trình
Đối tượng trong thế giới thực Đối tượng Biến có kiểu cấu trúc
Khái niệm chung về đối tượng Lớp đối tượng Kiểu dữ liệu cấu trúc
Các thông tin được quan tâm 
về 1 đối tượng
Thuộc tính Thành phần thuộc tính 
của kiểu cấu trúc
Các khả năng của đối tượng Hành động Các phương thức
Phân công giữa các đối tượng Yêu cầu Gọi thực hiện phương
thức
22
Một đối tượng phải có: 
•Một tên gọi.
•Có chu trình sống (sinh ra, hoạt động và mất đi).
Một số ngôn ngữ lập trình HĐT
• C++
• C#, VB.Net, J#, VC++
• Java
• JavaScript
• PHP
• …
23
FAQs
24
Hết Chương 2
Môn Lập Trình Hướng Đối Tượng
25