• Ưu điểm của lập trình hướng đối tượng • Các khái niệm căn bản của OOP • Những gợi ý cần thiết khi lập trình OO... Diễn đạt hướng đối tượng• Diễn đạt tác vụ theo hướng thủ tục : TênTác
Trang 1Chương 02
NHẬP MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Introduction to OOP
(3 giờ)
Trang 2Mụ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
Trang 3Mục tiêu
• Nắm vững một số định nghĩa trong OOP bao gồm:
– Trừu tượng hóa dữ liệu.
– Lớp, đối tượng, thể hiện.
– Thông điệp và gửi thông điệp.
– Tính bao đóng.
– Tính kế thừa.
– Tính đa hình
Trang 4Nội dung chi tiết
• Nhược điểm của lập trình thủ tục.
• Tư duy hướng đối tượng.
• Diễn đạt hướng đối tượng.
• Ưu điểm của lập trình hướng đối tượng
• Các khái niệm căn bản của OOP
• Những gợi ý cần thiết khi lập trình OO.
Trang 52.1- Lập trình thủ tục
• POP- Procedure Oriented Programming.
• Data structure + Algorithm = Program
• Kỹ thuật POP:
Problem
Data structure
Operation (function)
Program
struct XX {
};
type Fun (XX x) {
}
void main() { XX x;
Fun(x);
}
pick nouns
pick verbs
Trang 62.2- Nhượ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”
Diễn đạt nào tự nhiên hơn?
“x ơi, viết lý lịch đi em”
VietLyLich(x); x.VietLyLich();
Trang 7Nhượ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.
• Thí dụ ở slide sau.
Trang 8Nhược điểm của POP
} ;
struct MALE { PERSON Data <dữ liệu thêm>
} ;
struct FEMALE { PERSON Data <dữ liệu thêm>
} ;
Diễn đạt phải tường minh
không
tự nhiên
Hiện thực
Trang 9Nhược điểm của POP
• Bảo mật kém do không thể giới hạn truy xuất đến một dữ liệu.
x.Age=1000;
x.Score=-20;
}
Bạn nghĩ sao về 2 tác vụ này?
Trang 10Nhược điểm của POP
• 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.
Trang 112.2- Tư duy hướng đối tượng
• Đối tượng-Object
• Lớp-Class
• Tính thừa kế- Inheritance
• Tính đa hình-Polymorphism
Trang 12• Real-world objects share two
characteristics: They all have state and
behavior
Trang 13• Identifying the state and behavior for real-world
objects is a great way to begin thinking in terms of object-oriented programming
States name
color breed (nòi) hungry
current gear (nhông số hiện hành) current pedal cadence (nhịp đạp- rpm) current speed (m/h)
Behaviors barking
fetching wagging tail
changing gear changing pedal cadence applying brakes
Trang 14How to describe a real-object?
• Ask yourself two questions:
– "What possible states can this object be in?“ – "What possible behavior can this object
perform?"
• Real-world objects vary in complexity
Trang 15How to describe a real-object? …
states (on and off) and two possible behaviors (turn on, turn off).
(on, off, current volume, current station) and
behavior (turn on, turn off, increase volume,
decrease volume, seek, scan, and tune)
• These real-world observations all translate into the world of object-oriented programming
Trang 16Software Object- Đối tượng phần mềm
• An object is a software bundle of related state and behavior
• Software objects are often used to model the real-world objects that you find in
everyday life
Trang 17Software objects
Trang 18• In object-oriented terms, we say that your bicycle is an
instance of the class of objects known as bicycles
• A class is the blueprint from which individual objects are
created
Trang 192.3-Diễn đạt hướng đối tượng
• Nhân viên văn phòng viết lý lịch cho sinh viên
“Hoàng” ViếtLýLịch(Hoàng);
• Hoàng ơi, viết lý lịch đi em.Hoàng.ViếtLýLịch();
Theo bạn, tình huống nào đúng với thực tế?
• Tính tổng mảng a có n phần tử Tổng(a,n);
• Mảng a ơi, tình tổng đi em: a.Tổng();
Xem a là một đối tượng.
Trang 20Diễn đạt hướng đối tượng
• Diễn đạt tác vụ theo hướng thủ tục :
TênTácVụ(ĐốiTượngDữLiệu); Tổng(a,n);
• Diễn đạt tác vụ theo hướng đối tượng :
ĐốiTượngDữLiệu.TênTácVụ(); a.Tổng();
• Xem dữ liệu là đối tượng làm chương trình
tự nhiên hơn vì giống tự nhiên hơn.
Trang 212.4- Ưu điểm của OOP
• Dễ mô tả các quan hệ phân cấp trong thế giới tự nhiên.
Hiện thực
Trang 22Benefits software objects
be written and maintained independently of the source code for other objects
2 Information-hiding: By interacting only with
an object's methods, the details of its internal implementation remain hidden from the outside world
3 Code re-use: you can use (perhaps written by
another software developer) that object in your program
4 Pluggability and debugging ease : If a bolt
(con ốc) breaks, you replace it, not the entire
machine
Trang 23Thí dụ về che dấu thông tin
• Bên ngoài không thể tùy tiện truy cập một dữ liệu thuộc tính Security
Trang 24Thí dụ về tái sử dụng code
Tái sử dụng code
Tái sử dụng code
Trang 252.5- Some OOP languages
Trang 26Ngôn ngữ OOP
• 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ế.
Trang 272.6- Các khái niệm căn bản của OOP
• 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.
• Trong tự nhiên: Đối tượng được biểu diễn bằng trạng thái (states) + hành vi (behaviors).
• Đố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 282.7- Lớp - Kiểu dữ liệu trừu tượng
• Abstract Data Type
• Kết qủa của việc khái quát hóa các thực thể.
Khái quát hóa
Khái quát hóa
1 5 7 -3 8 Số nguyên ( int )
Người ( PERSON )
<Code, Name, date_of_birth, Address, e-mail
Danh từ chung trong ngôn ngữ tự nhiên
attributes
int, NGUOI, PERSON
là các ADT
Trang 292.8- Lớp- Kiểu dữ liệu trừu tượng
• Đối tượng (object): Bao gói dữ liệu + hành vi.
• Đối tượng phải thuộc một lớp (class).
• Xây dựng một đối tượng là xây dựng một lớp
Class = data (biến mô tả)+ methods (code).
data members function members
Trang 302.9-Ba đặc điểm của OOP
• 3 khái niệm cơ bản của OOP
– Bao gói (đóng gói) dữ liệu + hành vi + che đi những thành phần có tính “tế nhị” mà bên
ngoài không thể truy cập.
– Tính thừa kế: Một lớp có thể thừa kế từ lớp khác.
– Tính đa hình: Kỹ thuật cho phép có khác biệt giữa code của cùng một hành vi trong lớp cha
và trong lớp con.
Trang 312.10- Bao gói - Encapsulation
• Che dấu đi dữ liệu.
• Bên ngoài chỉ tương
tác được với đối
vi xử lý dữ liệu nội tại
của đối tượng mà bên
ngoài không thể truy
cập.
class NGƯỜI
Tên NămSinh TênNgườiYêu
getTen() getNamSinh() getTenNguoiYeu() TiêuHóa() Nuốt() Đi() Đứng() Chạy() Nhẩy()
getTen() getNamSinh() getTenNguoiYeu()
Đi() Đứng()
interfaces
Trang 32public double getPerimeter()
public double getArea()
Với khai báo này, bên ngoài có thể truy cập 2 thuộc tính mầu hay không?
Trang 33Bao gói…
class
CASSETTE
ĐọcBăng();
GhiBăng();
XửLýNhiễu();
Play() Stop() Rewind() Forward() Record()
Môi trường bên
ngoài
Interfaces (public
(private methods)
Trang 34Bao gói… interface
• Set of common methods of a class
through them, an object can interact with the outside world.
• The buttons on the front of your television set, for example, are the interface between you and the electrical wiring on the other side of its plastic casing You press the
"power" button to turn the television on
and off
Trang 36Tính thừa kế…
• Từ những lớp đối tượng đã có, ta có thể đặc tả lớp đối
tượng mới, lớp mới sẽ mang những đặc tính của những lớp đã có (di truyền) + những đặc tính mới của riêng nó
Con = Cha + một tí khác biệt.
Tiết kiệm công sức viết code và test.
• Tồn tại mối quan hệ cha (lớp nền,base,parent)- con ( lớp dẫn xuất,derived class).
• C++ cho phép đa thừa kế (1 lớp có thể là dẫn xuất của
nhiều lớp khác).
• C#, Java là ngôn ngữ OO đơn thừa kế
Thừa kế là đặc điểm tái sử dụng thông tin của OOP.
Trang 37Tính thừa kế…
ID_Num Name YearOfBirth Address
getID_Num() setID_Num(newID)
class PERSON
RollNum Score
getScore() setSore(newScore)
ID_Num Name YearOfBirth Address
getID_Num() setID_Num(newID)
class STUDENT
RollNum Score
getScore() setSore(newScore)
thừa kế
tính chất riêng
Con = Cha + một tí
Trang 38• Đa hình tạo ra khả năng cho phép gọi một hành
vi của một lớp mà không cần quan tâm đến hiện thực của hành vi này.
Trang 39class CIRCLE
int x,y,r;
void Draw () { circle (x,y,r);
}
class RECTANGLE
int x1,y1, x2, y2;
void Draw () { rectangle(x1,y1, x2, y2); }
class TRIANGLE
int x1,y1, x2, y2 , x3, y3; void Draw ()
{ line(x1,y1, x2, y2); line(x2,y2, x3, y3); line(x3,y3, x1, y1); }
Đa hình tạo được tính mềm dẻo/linh động
Trang 402.13-Phân biệt Lớp, Thể hiện, Biến
đối tượng
• class : Hiện thực của một tập
các đối tượng (object) cùng loại
Cùng dữ mô tả (data), cùng
hành vi (methods).
• Thể hiện – instance : Một thông
tin về một đối tượng có trong
Trang 412.14- Thông điệp, thông báo - Message
• Gửi thông báo: Yêu cầu 1 đối tượng thực thi một hành vi.
Trang 422.15- Gợi ý khi thiết kế một lớp
• Ta cần biết những thông tin gì về một đối tượng thuộc lớp này Dữ liệu mô tả.
• Ta (bên ngoài) thực sự cần xử lý gì (động từ)
trên đối tượng Hành vi giao tiếp.
• Để có được hành vi giao tiếp, có cần những xử
lý thêm mà bên ngoài không cần biết đến
Trang 43char* getCode() void setCode(char* newCode) char* getName()
void setName(char* newName) int getScore1()
void setScore1(int s1)
int getScore2() void setScore2(int s2) int getScore3()
void setScore3(int s3) float avg()
Trang 442.16- Gợi ý về phân tích thừa kế
(1) Liệt kê đặc điểm của các
đối tượng cần quan tâm.
Trang 45Thừa kế - Bài mẫu
Phân tích phân cấp thừa kế cho các lớp:
• Hàng điện máy <mã hàng, tên hàng, nhà sản xuất, giá, thời gian bảo hành, điện áp, công suất>
• Hàng sành sứ < mã hàng, tên hàng, nhà sản xuất, giá, loại nguyên liệu>
• Hàng thực phẩm <mã hàng, tên hàng, nhà sản xuất, giá, ngày sản xuất, ngày hết hạn dùng>
Trang 47Thừa kế- Bài tập làm tại chỗ
Phân tích phân cấp thừa kế cho các đối tượng trong một học viện:
• Nhân viên quản lý < mã nv, tên nv, năm sinh, trình độ, trường đào tạo, chuyên môn , lương cb , phụ cấp chức vụ>
• Nhân viên nghiên cứu < mã nv, tên nv, năm sinh, trình độ, trường đào tạo, chuyên môn , lương cb , phụ cấp độc hại>
• Nhân viên phục vụ < mã nv, tên nv, năm sinh, trình độ, lương cb >
NhanVienQL
pccv
NhanVienNC
pcđh
Trang 482.17- Gợi ý về cách 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
Trang 49Đề bài
• 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
Trang 50Giải bài toán hướng POP với C++
Trang 51Giải bài toán hướng OOP
Thành phần public là thành phần cho phép bên ngoài truy cập.
Trang 52Đối chứng hai cách hiện thực
Trang 53Tó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 cách “không tự nhiên”.
– Khó tái sử dụng code.
– Bảo mật kém.
Trang 54Tó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”.
Trang 55Câu hỏi – Phần tự học
• 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.
Trang 56Trắc nghiệm
(1) Với khai báo struct, ta vẫn có thể tạo cơ
chế bảo mật một thành phần dữ liệu (a) Đúng (b) Sai.
(2) Với khai báo struct, muốn thao tác đến
dữ liệu bắt buộc phải thông qua một
hàm (a) Đúng (b) Sai.
(3) Để tái sử dụng code C++, code được tái
sử dụng phải được để trong một file và
không có hàm main (a) đúng (b) sai.
Trang 57Bài tập
Phân tích phả hệ thừa kế cho các khái niệm sau:
- Window < x_position, y_position, width, height,
backColor, foreColor>
- ListBox < x_position, y_position, width, height,
backColor, foreColor, lineCount, lineHeight, contentList, selectedText>
- Button < x_position, y_position, width, height,
backColor, forColor, title, icon>
- ComboBox < x_position, y_position, width, height,
backColor, foreColor, lineCount, lineHeight, contentList, dropdownCount, selectedText>
Trang 58Question 1
OOP stands for
a- Object Online Programming
b- Object Of a Program
c- Object Oriented Programming
c
Trang 59Question 2
What descriptions below are not OOP format ?
a- Write the record for student Phúc
b- Write the record of student Phúc
c- Hello Phúc, write your record.
a
b
Trang 62Question 5
class is:
a- Data which describes a concept.
b- A code segment of a program.
c- Template of a set of objects which
have the same properties and behaviors.
d- All of the above are wrong.
c
Trang 63Question 6
Select incorrect statements:
a- class = properties + methods
Trang 64Question 7
Indentify the correct statement.
a- Encapsulation: the packaging of attributes
(properties) and functionality (methods or behaviors)
to create an object that is essentially a “black box” b- inheritance: The transfer of the characteristics of a class in object-oriented programming to other
classes derived from it.
c- polymorphism :The ability to redefine a routine in a derived class.
d- All of the above.
d
Trang 65Question 8
Identify the advantages of OOP
a- High level modulization.
b- Able to describe the complex relations
in real objects.
c- Able to reuse code.
d- Easy to maintain application
e- All of the above
e
Trang 66Question 9
C++ is a
a- Multiple inheritance OOP language.
b- Single inheritance OOP language.
a
Trang 67Question 10
Identify the correct keywords that will
be used when a class is implemented using C++:
a- Class, Private, Public
b- Class, private, public
c- class, private, public
d- CLASS, PRIVATE, PUBLIC
c
Trang 68Question 11
What is the correct syntax when a
method is implemented outside the class declaration block.
a- DataType Method (params)
{ <Code>}
b- DataType ClassName::Method (params) { <Code>}
b
Trang 70Question 13
Identify the wrong statement
a- All objects of a program will be alive and
dead at the same time.
b- The life of an object begins at the time when the code line, that defines it, is executed,
and ends when the code block, that contains
it, is executed completely
c- Scope of an object is code block that begins
at the line that the object is defined and ends
at the curly closed brace of the block.
a
Trang 72THANK YOU