{ 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 6 nhau hoặc một pointer.. y Một chương trình là một trật tự các lời
Trang 1CHƯƠNG 1:
NHẬP MÔN LẬP TRÌNH
HƯỚNG ĐỐI TƯỢNG
1
MỤC TIÊU
yNhậ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
yPhâ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
ố
2
yNhận diện một số ngôn ngữ OOP
yNhận biết các khái niệm cơ bản của OOP
NỘI DUNG CHI TIẾT
{ ĐỐI TƯỢNG
3
{ HÀNH VI
{ THÔNG ĐIỆP
{ DỮ LIỆU
{ ĐẶC TÍNH
LẬP TRÌNH THỦ TỤC
y 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
y Kỹ thuật POP:
Program struct XX
4
ỹ
Problem
Data structure
Operation (function)
{
};
type Fun (XX x) {
};
void main() { X x;
Fun(x);
};
pick nouns
pick verbs
Data structure + Algorithm = Program
Trang 2NHƯỢC ĐIỂM CỦA POP
yDiễ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”
VietLyLich(x);
x VietLyLich();
5
“x ơi, viết lý lịch đi em”
x.VietLyLich();
Diễn đạt nào tự nhiên hơn?
NHƯỢC ĐIỂM CỦA POP
yKhó 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
6
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.
yBả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?
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
7
OOP
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
y OOP – Object Oriented Programming.
y Chương trình là sự hoạt động của các đối tượng Æ Giống tự nhiên.
y Đố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
8
một hành vi mà đối tượng này có khả năng.
y 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 3yTừ những đối tượng, sự vật, sự kiện, tạo nên chương
trình
yThiết kế bottom-up
9
Đối tượng = Dữ liệu + Hành vi
ƯU ĐIỂM CỦA OOP
y Dễ mô tả các quan hệ phân cấp trong thế giới tự nhiên.
Tự nhiên Person
class PERSON {
} ;
Hiện thực
10
is a is a class MALE: PERSON
{<dữ liệu thêm>
} ;
class FEMALE: PERSON { <dữ liệu thêm>
} ;
tự nhiên
yCó 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
ƯU ĐIỂM CỦA OOP
12
Tái sử dụng code
Tái sử dụng code
Trang 4SỰ KHÁC BIỆT
y Theo thủ tục ¾ Hướng đối tượng
13
Rút tiền (withdraw), gửi tiền
(deposit), chuyển tiền (transfer)
Khách hàng (customer), tiền (money), tài khoản (account)
SƠ LƯỢC VỀ OOP
Đối tượng = Dữ liệu + Hành vi
14
ĐỐI TƯỢNG
yMột đối tượng như là một hộp đen,
mà chi tiết bên trong được dấu kín
yCác đối tượng giao tiếp với nhau
15
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)
yThông điệp được nhận bởi các hành vi
của đối tượng
girl
class object
16
Lan Cúc Trúc Mai
Trang 5DỮ LIỆU (data):
-Xinh đẹp -Dịu dàng -
17
Mai
HÀNH VI (behavior ):
-mua sắm -làm việc nhà -…
HÀNH VI (BEHAVIOR)
yThao tác (operation)
yPhương thức (method)
yHàm (function)
yThủ tục (procedure)
18
DỮ LIỆU (DATA)
yThông tin (information)
yTính chất (property)
yThuộc tính (attribute)
yTrường (field)
19
NHỮNG GÌ LÀ ĐỐI TƯỢNG
y Vật có thể sờ mó được
(Tangible things)
yVai trò (Roles)
S iệ ả ì h iế
¾ Như là xe hơi, máy in,
¾ Công nhân, người chủ,
20
y Sự việc xảy ra, tình tiết
(Incidents)
y Sự tương tác
(Interactions)
ySự mô tả (Specifications)
¾ Chuyến bay, tràn số,
¾ Ký kết thỏa ước, mua hàng,
¾ Màu, hình dạng
Trang 6THÔNG ĐIỆP
yGửi thông điệp: Yêu cầu 1 đối tượng thực thi một
hành vi
yThí dụ:
x là một HOCSINH < Name, Age>
i i h()
21
x.VietLyLich();
String S= x.getName();
int n= x.getAge();
MỘT SỐ ĐẶC TÍNH
22
TÍNH ĐÓNG GÓI (ENCAPSULATION)
yDữ 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
Account
23
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)
yTạo ra một kiểu dữ liệu mới
từ kiểu đã có
yNhằm sử dụng lại, và bổ sung
hữ ì ầ hiế
24
những gì cần thiết
yThự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)
yTheo 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Đây chính là quan hệ “là một” (“is a”)
25
A car is a vehicle
A teacher is a person
A dog is an animal
TÍNH ĐA HÌNH (POLYMORPHISM)
yNhiều đối tượng cùng chia sẻ đặc tính chung, nhưng
có những tác động khác nhau
yCó cùng yêu cầu, nhưng mỗi đối tượng có đáp ứng khác nhau
yThực chất là tính đa dạng (many form)
26
yThực chất là tính đa dạng (many form)
yĐể hiện thực được tính đa hình, ngôn ngữ đối tượng
có đặc tính như overload, override
Overloaded và Overridden methods ?
yOverloaded 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.
yOverridden methods:
{ Hiện thực lại hành vi đã có của tổ tiên
27
{ 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.
NGÔN NGỮ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
yC++ ( Borland C++, Visual C++)
yC# ( C sharp)
yVisual Basic
28
y
Trang 8yC++, 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
yJava (Sun), C# (Microsoft): chỉ hỗ trợ OOP, hàm
i hải ằ t ột lớ Chỉ hỗ t đ thừ kế
29
main phải nằm trong một lớp Chỉ hỗ trợ đơn thừa kế
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
30
BCPL (1967), MIT Basic Combined Programming Language
B (1969), Bell Labs
C (1970), Bell Labs C++ (1983), Bell Labs Java (1995), Sun
Objective C
Phương pháp giải bài toán theo OOP
properties
Program class XX { type1 prop1;
type2 prop2;
type Method1( )
pick
nouns
31
Problem
Operation (function, method, behavior)
type Method1( ) {
}
};
void main() { XX x; // object variable
x.Method( );
};
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
yViết chương trình nhập, xuất1 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)
yDanh từ: Học sinh Æ cấu trúc HS
32
yĐộ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
Giải bài toán hướng OOP
34
Đối chứng hai cách hiện thực
35
TÓM TẮT
yPOP: Xem dữ liệu và tác vụ rời nhau
yCá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
36
{ 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
Trang 10TÓM TẮT
yOOP: Xem dữ liệu và tác vụ là một thể thống nhất
yƯ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
37
{ 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
TÓM TẮT
TRONG OOP
yĐối tượng phải thuộc một lớp (class)
{TÍNH ĐÓNG GÓI (ENCAPSULATION)
38
{ TÍNH THỪA KẾ (INHERITANCE)
{ TÍNH ĐA HÌNH (POLYMORPHISM)
y 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.
y 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 class ClassName public
39
{
<data>
};
Type1 Func1 (StructName stru)
{ <code>}
Type2 Func2 (StructName stru)
{<code>}
các hàm đều toàn cục
{
<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
yTrình bày phương pháp lập trình POP
yTrình bày phương pháp lập trình OOP
40
Trang 11BÀI TẬP TẠI LỚP
y 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).
41
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.
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
ới b là ố th hậ từ bà hí
42
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.
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
đó.
43
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.
BÀI CHUẨN BỊ TRƯỚ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
44
{ 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ỏ
yLàm bài tập về nhà
Trang 12THANK YOU