• Một chương trình là một trật tự các lời yêu cầu đối tượng thực hiện hành vi của mình.. tạo nên chương trình • Thiết kế bottom-up Đối tượng = Dữ liệu + Hành vi 9 OOP-CHƯƠNG 1- NHẬP MÔN
Trang 1Chương 1:
NHẬP MÔN LẬP TRÌNH
HƯỚNG ĐỐI TƯỢNG
Giáo viên: Võ Hồng Bảo Châu Khoa CNTT trường ĐH Lạc Hồng
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
MỤC TIÊU
• Nhận biết sự khác biệt giữa lập trình hướng thủ tục và lập trình hướng đối tượng.
• Phân tích, thiết kế và hiện thực được một chương trình theo phương pháp hướng đối tượng
• Nhận diện một số ngôn ngữ OOP.
• Nhận biết các khái niệm cơ bản của OOP.
2 OOP-CHƯƠNG 1- NHẬP MÔN OOP
NỘI DUNG CHI TIẾT
• LẬP TRÌNH THỦ TỤC – POP
• LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG – OOP
• SƠ LƯỢC VỀ OOP
– ĐỐI TƯỢNG
– HÀNH VI
– THÔNG ĐIỆP
– DỮ LIỆU
– ĐẶC TÍNH
• GIẢI BÀI TOÁN VỚI OOP
• TÓM TẮT
3 OOP-CHƯƠNG 1- NHẬP MÔN OOP
LẬP TRÌNH THỦ TỤC
• POP- Procedure Oriented Programming.
– Phân công việc những việc nhỏ hơn – Là các chương trình con
– Thiết kế top-down
• Kỹ thuật POP:
Problem
Data structure
Operation (function)
Program
struct XX {
};
type Fun (XX x) {
};
void main() { X x;
Fun(x);
};
pick nouns
pick verbs
Data structure + Algorithm = Program
4 OOP-CHƯƠNG 1- NHẬP MÔN OOP
Trang 2NHƯỢC ĐIỂM CỦA POP
• Diễn đạt “thiếu tự nhiên”
Có học sinh x
“Viết lý lịch cho học sinh x”
“x ơi, viết lý lịch đi em”
“x ơi, viết lý lịch đi em”
VietLyLich(x);
x.VietLyLich();
Diễn đạt nào tự nhiên hơn?
5 OOP-CHƯƠNG 1- NHẬP MÔN OOP
NHƯỢC ĐIỂM CỦA POP
• Khó mô tả những quan hệ phức tạp của thế giới tự nhiên
Biểu diễn dạng cấu trúc “phức tạp”, không phải là dễ dàng
đối với nhiều người.
– Quan hệ giữa các dữ liệu được biểu diễn bằng cấu trúc lồng nhau hoặc một pointer Tính phân lớp khó được phát hiện, có khó khăn trong biểu diễn lẫn tính dễ hiểu
• Bảo mật kém do không thể giới hạn truy xuất đến một dữ liệu.
struct STUDENT { char Name[21];
int Age;
int Score;
};
void main() {STUDENT x = { “Hoa”, 19, 5};
x.Age=1000;
x.Score=-20;
};
Bạn nghĩ sao về 2 tác vụ này?
6 OOP-CHƯƠNG 1- NHẬP MÔN OOP
OOP
Cần một phương pháp lập trình khác giúp giải quyết những nhược điểm này.
OOP có những đặc điểm vượt trội so với POP và là hướng lập trình chủ đạo hiện nay.
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
• OOP – Object Oriented Programming.
• Chương trình là sự hoạt động của các đối tượng Giống
tự nhiên.
• Đối tượng thực thi một hoạt động tức là đối tượng thực
hiện một hành vi mà đối tượng này có khả năng.
• Một chương trình là một trật tự các lời yêu cầu đối tượng thực hiện hành vi của mình
Chương trình là một kích bản (script).
Trang 3• Từ những đối tượng, sự vật, sự kiện, tạo nên chương
trình
• Thiết kế bottom-up
Đối tượng = Dữ liệu + Hành vi
9 OOP-CHƯƠNG 1- NHẬP MÔN OOP
ƯU ĐIỂM CỦA OOP
• Dễ mô tả các quan hệ phân cấp trong thế giới tự nhiên.
Tự nhiên
Person
Male Female
is a is a
class PERSON {
} ;
class MALE: PERSON {<dữ liệu thêm>
} ;
class FEMALE: PERSON { <dữ liệu thêm>
} ;
tự nhiên
Hiện thực
10 OOP-CHƯƠNG 1- NHẬP MÔN OOP
ƯU ĐIỂM CỦA OOP
• Có tính bảo mật cao: Bên ngoài không thể tùy tiện
truy cập một dữ liệu thuộc tính.
11 OOP-CHƯƠNG 1- NHẬP MÔN OOP
ƯU ĐIỂM CỦA OOP
Tái sử dụng code
Tái sử dụng code
12 OOP-CHƯƠNG 1- NHẬP MÔN OOP
Trang 4SỰ KHÁC BIỆT
Theo thủ tục
Rút tiền (withdraw), gửi tiền
(deposit), chuyển tiền (transfer)
Hướng đối tượng
Khách hàng (customer), tiền (money), tài khoản (account)
13 OOP-CHƯƠNG 1- NHẬP MÔN OOP
SƠ LƯỢC VỀ OOP
Đối tượng = Dữ liệu + Hành vi
14 OOP-CHƯƠNG 1- NHẬP MÔN OOP
ĐỐI TƯỢNG
Một đối tượng như là một hộp đen, mà chi tiết bên trong được dấu kín
Các đối tượng giao tiếp với nhau thông qua việc truyền các thông điệp
(messages)
Thông điệp được nhận bởi các hành vi của đối tượng
Lan Cúc Trúc Mai
girl
class object
Trang 5DỮ LIỆU (data):
-Xinh đẹp -Dịu dàng -
HÀNH VI (behavior ):
-mua sắm -làm việc nhà -…
17 OOP-CHƯƠNG 1- NHẬP MÔN OOP
HÀNH VI (BEHAVIOR)
• Thao tác (operation)
• Phương thức (method)
• Hàm (function)
• Thủ tục (procedure)
18 OOP-CHƯƠNG 1- NHẬP MÔN OOP
DỮ LIỆU (DATA)
• Thông tin (information)
• Tính chất (property)
• Thuộc tính (attribute)
• Trường (field)
19 OOP-CHƯƠNG 1- NHẬP MÔN OOP
NHỮNG GÌ LÀ ĐỐI TƯỢNG
Vật có thể sờ mó được
(Tangible things)
Vai trò (Roles)
Sự việc xảy ra, tình tiết
(Incidents)
Sự tương tác (Interactions)
Sự mô tả (Specifications)
Như là xe hơi, máy in,
Công nhân, người chủ,
Chuyến bay, tràn số,
Ký kết thỏa ước, mua hàng,
Màu, hình dạng
20 OOP-CHƯƠNG 1- NHẬP MÔN OOP
Trang 6THÔNG ĐIỆP
• Gửi thông điệp: Yêu cầu 1 đối tượng thực thi một hành vi.
• Thí dụ:
x là một HOCSINH < Name, Age>
x.VietLyLich();
String S= x.getName();
int n= x.getAge();
21 OOP-CHƯƠNG 1- NHẬP MÔN OOP
MỘT SỐ ĐẶC TÍNH
• TÍNH ĐÓNG GÓI (ENCAPSULATION)
• TÍNH THỪA KẾ (INHERITANCE)
• TÍNH ĐA HÌNH (POLYMORPHISM)
22 OOP-CHƯƠNG 1- NHẬP MÔN OOP
TÍNH ĐÓNG GÓI (ENCAPSULATION)
• Dữ liệu và thao tác được nhóm lại với nhau
Thực chất là sự ghép chung những hiểu biết về thế giới thực
Có sự đồng nhất giữa
dữ liệu và thao tác trên dữ liệu
Account
Withdraw
Deposit
Transfer
TÍNH THỪA KẾ (INHERITANCE)
Tạo ra một kiểu dữ liệu mới từ kiểu đã có
Nhằm sử dụng lại, và bổ sung những gì cần thiết
Thực chất là sự phân lớp
(classification) trong việc thiết
kế hệ thống theo hướng đối tượng
Trang 7TÍNH THỪA KẾ (INHERITANCE)
Theo ngôn ngữ lớp, sự thừa kế có nghĩa là một lớp
thừa kế các đặc tính của lớp khác.
Đây chính là quan hệ “là một” (“is a”)
A car is a vehicle
A teacher is a person
A dog is an animal
25 OOP-CHƯƠNG 1- NHẬP MÔN OOP
TÍNH ĐA HÌNH (POLYMORPHISM)
• Nhiều đối tượng cùng chia sẻ đặc tính chung, nhưng có những tác động khác nhau.
• Có cùng yêu cầu, nhưng mỗi đối tượng có đáp ứng khác nhau.
• Thực chất là tính đa dạng (many form)
• Để hiện thực được tính đa hình, ngôn ngữ đối tượng có đặc tính như overload, override.
26 OOP-CHƯƠNG 1- NHẬP MÔN OOP
Overloaded và Overridden methods ?
• Overloaded methods:
– Nhằm cung cấp các dạng khác nhau của hành vi, nhưng vẫn có
cùng tên gọi
• Overridden methods:
– Hiện thực lại hành vi đã có của tổ tiên
– Phải có cùng tên và trùng mọi yếu tố tạo nên hành vi này
27 OOP-CHƯƠNG 1- NHẬP MÔN OOP
NGÔN NGỮ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
• C++ ( Borland C++, Visual C++)
• Java
• C# ( C sharp)
• Visual Basic.
•
28 OOP-CHƯƠNG 1- NHẬP MÔN OOP
Trang 8• C++, MS VC++: hỗ trợ cả POP lẫn OOP Lai OOP Hỗ trợ
đa thừa kế Đối tượng là biến của chương trình Hàm
main() là POP.
• Java (Sun), C# (Microsoft): chỉ hỗ trợ OOP, hàm main phải
nằm trong một lớp Chỉ hỗ trợ đơn thừa kế.
29 OOP-CHƯƠNG 1- NHẬP MÔN OOP
NGÔN NGỮ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Fortran (1954)
Algol (1958) LISP (1957)
Scheme (1975)
CPL (1963), U Cambridge Combined Programming Language BCPL (1967), MIT
Basic Combined Programming Language
B (1969), Bell Labs
C (1970), Bell Labs C++ (1983), Bell Labs
Java (1995), Sun
Objective C
30 OOP-CHƯƠNG 1- NHẬP MÔN OOP
Phương pháp giải bài toán theo OOP
Problem
properties
Operation (function, method, behavior)
Program
class XX { type1 prop1;
type2 prop2;
type Method1( ) {
}
};
void main() { XX x; // object variable
x.Method( );
};
pick nouns
pick verbs
Bao gói dữ liệu và hành vi thành class
SO SÁNH 2 CÁCH ViẾT CHƯƠNG TRÌNH
• Viết chương trình nhập, xuất 1 học sinh Thông tin cần quan tâm về 1 học sinh : Mã học sinh (8 ký tự), tên học sinh (30 ký tự), điểm (int).
• Danh từ: Học sinh cấu trúc HS
• Động từ:
– Bắt đầu;
– Nhập một hs Hàm Nhap(HS&hs) – Xuất một hs Hàm Xuat(HS hs);
– Ngưng
Trang 9Giải bài toán hướng POP với C++
33 OOP-CHƯƠNG 1- NHẬP MÔN OOP
Giải bài toán hướng OOP
34 OOP-CHƯƠNG 1- NHẬP MÔN OOP
Đối chứng hai cách hiện thực
35 OOP-CHƯƠNG 1- NHẬP MÔN OOP
TÓM TẮT
• POP: Xem dữ liệu và tác vụ rời nhau.
• Các nhược điểm của POP
– Mô tả các quan hệ giữa các đối tượng dữ liệu trong tự nhiên theo
cac1h “không tự nhiên”.
– Khó tái sử dụng code
– Bảo mật kém
Chương trình=cấu trúc dữ liệu + thuật toán
36 OOP-CHƯƠNG 1- NHẬP MÔN OOP
Trang 10TÓM TẮT
• OOP: Xem dữ liệu và tác vụ là một thể thống nhất.
• Ưu điểm của OOP:
– Mô tả các quan hệ giữa các đối tượng dữ liệu trong tự nhiên theo
cách “ tự nhiên”.
– Dễ tái sử dụng code
– Có cơ chế bảo mật dữ liệu
Đối tượng = Dữ liệu + Hành vi
37 OOP-CHƯƠNG 1- NHẬP MÔN OOP
TÓM TẮT
TRONG OOP
• Đối tượng phải thuộc một lớp (class).
• OOP CÓ 3 ĐẶC TÍNH CƠ BẢN:
– TÍNH ĐÓNG GÓI (ENCAPSULATION)
– TÍNH THỪA KẾ (INHERITANCE) – TÍNH ĐA HÌNH (POLYMORPHISM)
38 OOP-CHƯƠNG 1- NHẬP MÔN OOP
• Lập trình OOP cũng tương tự như lập trình POP nhưng mô tả bài toán dưới
dạng các class, các tác vụ xử lý dữ liệu thành các hành vi của class.
• Khai báo class cũng tương tự như khai báo struct nhưng có khác struct ở chỗ
đưa các tác vụ thao tác lên struct vào trong class và gọi chúng là các methods
của lớp
struct StructName
{
<data>
};
Type1 Func1 (StructName stru)
{ <code>}
Type2 Func2 (StructName stru)
{<code>}
các hàm đều toàn cục
class ClassName
{
<data>
Modifier : Type1 Func1 ()
{ <code>}
Modifier : Type2 Func2 ()
{ <code>}
};
Chỉ có method public là toàn cục
public private protected
CÂU HỎI PHẦN TỰ HỌC
TỰ DIỄN TẢ THEO Ý BẢN THÂN
• Trình bày phương pháp lập trình POP.
• Trình bày phương pháp lập trình OOP.
• Nhận xét ưu và khuyết điểm của cả 2 phương pháp
Trang 11BÀI TẬP TẠI LỚP
• HÃY PHÂN TÍCH CÁC BÀI TẬP SAU, XÁC ĐỊNH ĐỐI TƯỢNG
CẦN QUAN TÂM LÀ GÌ, THÀNH PHẦN DỮ LiỆU VÀ THÀNH
PHẦN HÀNH VI CỦA CÁC ĐỐI TƯỢNG ĐÓ, TỪ ĐÓ XÂY
DỰNG THÀNH LỚP (CHƯA YÊU CẦU VIẾT CODE).
1) Nhập vào 3 số thực Kiểm tra xem đó có phải là 3 cạnh của
tam giác hay không Nếu phải, hãy cho biết tam giác đó là
tam giác gì (vuông, cân, đều, thường) và tính diện tích tam
giác đó.
2) Nhập vào 3 số ngày, tháng, năm Kiểm tra xem ngày tháng
năm đó có hợp lệ không? Nếu có in ra ngày hôm sau.
3) Nhập vào 1 ma trận mxn Tính tổng các phần tử nằm trên
đường chéo chính.
41 OOP-CHƯƠNG 1- NHẬP MÔN OOP
BÀI TẬP TẠI LỚP
4 Viết chương trình tính tổng, hiệu, tích, thương của 2 phân
số nhập từ bàn phím In ra kết quả dưới dạng tối giản.
5 Viết chương trình giải phương trình bậc 1: ax+b=0 với a,b
là 2 số thực nhập từ bàn phím.
6 Viết chương trình nhập hồ sơ học sinh của lớp học gồm:
tên, tuổi, điểm trung bình cả năm
– In ra tuổi lớn nhất, tuổi nhỏ nhất của lớp, – Học sinh có điểm trung bình lớn nhất, học sinh có điểm trung bình nhỏ nhất
– In danh sách theo thự tự của tên
42 OOP-CHƯƠNG 1- NHẬP MÔN OOP
BÀI TẬP TẠI LỚP
7 Nhập vào tọa độ 2 điểm trong mặt phẳng Tính và in ra tọa
độ trung điểm của chúng.
8 Nhập vào thời gian bắt đầu chạy và thời gian đến của một
vận động viên Cho biết thời gian chạy của vận động viên
đó.
9 Tính diện tích của hình tròn, hình vuông, hình chữ nhật,
hình tam giác.
10 Nhập danh sách n học sinh gồm họ lót, tên, ngày sinh,
điểm văn, toán, lí, hoá.
a) In ra màn hình họ tên của học sinh có điểm trung bình
cao nhất.
b) In ra màn hình danh sách được xếp theo điểm trung
bình giảm dần.
43 OOP-CHƯƠNG 1- NHẬP MÔN OOP
BÀI CHUẨN BỊ TRƯỚC
• ÔN LẠI NGÔN NGỮ LẬP TRÌNH C/C++
– Kiểu dữ liệu – Biến, hằng, biểu thức, phép toán – Câu lệnh điều kiện: if, switch – Câu lệnh lặp: for, while, do while – Hàm: khai báo, truyền tham số, gọi hàm,…
– Mảng 1 chiều, 2 chiều – Chuỗi ký tự
– Cấu trúc struct – Con trỏ
• Làm bài tập về nhà
44 OOP-CHƯƠNG 1- NHẬP MÔN OOP
Trang 12THANK YOU
45 OOP-CHƯƠNG 1- NHẬP MÔN OOP