• Some real-world objects: your dog, your desk, your television set, your bicycle.. • Real-world objects share two characteristics: They all have state and behavior... • Identifying the
Trang 1L P TRÌNH
Tr n Ph c Tu n
tuantp@hcmup.edu.vn http://giaotrinh.tranphuoctuan.com
c tiêu
• Nh n bi t s khác bi t gi a l p trình
ng th c và l p trình h ng i ng.
• Luy n t p t duy l p trình h ng i
ng
• Nh n di n m t s ngôn ng OOP.
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.
– Tính bao óng.
– Tính k th a.
– Tính a hình
i dung chi ti t
5 Các khái ni m c n b n c a OOP
6 Nh ng g i ý c n thi t khi l p trình OOP.
Trang 21- L p trình th 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
• 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();
• 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
– Quan h gi a các d li u c bi u di n
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.
nhiên
Person
is a is a
struct PERSON {
} ; struct MALE { PERSON Data
<d li u thêm>
} ;
struct FEMALE { PERSON Data
<d li u thêm>
} ;
Di n t
ph i
ng minh không nhiên
Hi n th c
Trang 31- Nh c 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.
struct STUDENT
{ char Name[21];
int Age;
int Score;
};
void main() {STUDENT x = { “Hoa”, 19, 5};
x.Age=1000;
x.Score=-20;
}
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
nay.
i t ng-Object
• L p-Class
• Tính th a k - Inheritance
• Tính a hình-Polymorphism
What is an object?
• Objects are key to understanding object-oriented technology.
• Some real-world objects: your dog, your desk, your television set, your bicycle.
• Real-world objects share two characteristics: They all have state and
behavior
Trang 4• Identifying the state and behavior for real-world
objects is a great way to begin thinking in terms of
object-oriented programming.
changing gear changing pedal cadence applying brakes
barking
fetching
wagging tail
Behaviors
current gear (nhông s hi n hành) current pedal cadence (nh p p- rpm) current speed (m/h)
name
color
breed (nòi)
hungry
States
How 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
How to describe a real-object? …
• Your desktop lamp may have only two possible
states (on and off) and two possible behaviors
(turn on, turn off).
• Your desktop radio might have additional states
(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.
• 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 5Software objects What is a class?
• In the real world, many individual objects belong of the same kind.
• Each bicycle was built from the same set of blueprints and therefore contains the same components.
• 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
• Trong th gi i th c, chung quanh chúng ta là
nh ng i t ng, ó là các th c th có m i
quan h i nhau Ví d : các phòng trong m t
công ty
• L p trình h ng i t ng (Object Oriented
Programming - LTH T) là ph ng pháp l p
trình l y i t ng làm n n t ng xây d ng
thu t gi i, xây d ng ch ng trình
t s khái ni m
i t ng (object):
hi u nh là m t th c th : ng i, v t ho c m t
ng d li u….
ý ngh a nh t nh trong h th ng.
trên máy tính
Trang 6t s khái ni m
• L p:
tr ng b ng các thu c tính, và các ho t ng (hành
vi, thao tác).
– Thu c tính (attribute) là m t thành ph n c a i
ng, cĩ giá tr nh t nh cho m i i t ng t i m i
th i m trong h th ng Vd: Tên, Tu i, Cân n ng là
các thu c tính c a Ng i
– Thao tác (operation) th hi n hành vi c a m t i
ng tác ng qua l i v i các i t ng khác ho c
i chính nĩ.
t s khái ni m
• M i thao tác trên m t l p i t ng c th
ng ng v i m t cài t c th khác nhau.
t cài t nh v y c g i là m t ph ng
th c (method).
• Cùng m t thao tác(ph ng th c) cĩ th c
áp d ng cho nhi u l p i t ng khác nhau,
t thao tác nh v y c g i là cĩ tính a hình (polymorphism).
• M t i t ng c th thu c m t l p c g i là
t th hi n (instance) a l p ĩ.
– Joe Smith, 25 tu i, n ng 58kg, là m t th hi n c a l p
ng i
• Ta dùng s i t ng mơ t các l p i
ng i t ng bao g m s p và
th hi n
• S p mơ t các l p i t ng trong h
th ng, m t l p i t ng c di n t ng m t
hình ch nh t cĩ 3 ph n:
– ph n u ch tên l p,
– ph n th hai mơ t các thu c tính
– ph n th ba mơ t các thao tác c a các i
ng trong l p ĩ.
Sinh viên Họ tên Năm sinh Mã số Điểm TB
Đi học
Đi thi Phân loại
(Sinh viên) Nguyễn Văn A 1984
0610234T 9.2
Tên lớp
Thuộc tính
Thao tác
Sơ đồ lớp Sơ đồ thể hiện
i t ng = D li u + Ph ng th c
Trang 73- Di n t h ng i t ng
Thí d 1 : Xét hai di n t:
• 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 ?
Thí d 2 : Xét hai di n t:
• Tính t ng m ng a có n ph n 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.
• Di n t tác v theo h ng th c :
TênTácV iT ngD Li u);
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 nhiên h n vì gi ng t nhiên h n.
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.
nhiên
Person
is a is a
class PERSON {
} ;
class MALE: PERSON {<d li u thêm>
} ;
class FEMALE: PERSON { <d li u thêm>
} ;
nhiên
Hi n th c
Benefits software objects
1 Modularity : The source code for an object can
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
(con c) breaks, you replace it, not the entire machine.
Trang 8Thí d 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
Tái s ng code
Tái s ng code
Some OOP languages
• C++ ( Borland C++, Visual C++)
• Java
• C# ( C sharp)
• Visual Basic.
•
Ngôn ng OOP
là bi n c a ch ng trình Hàm main() là POP.
• Java (Sun), C# (Microsoft): ch tr OOP, hàm main ph i n m trong m t l p.
Trang 95- 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.
tr ng thái (states) + hành vi (behaviors).
i t ng th c thi m t ho t ng t c là i
ng th c hi n m t hành vi mà i t ng nà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).
• 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
nguyên ( int )
Ng i ( PERSON )
<Code, Name, date_of_birth, Address, e-mail >
Danh t chung trong ngôn ng nhiên
attributes
int, NGUOI, PERSON
là các ADT
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).
p
Class = data (bi n mô t )+ methods (code).
• 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 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 105- Bao gói - Encapsulation
• Che d u i d li u.
tác c v i i
ng qua m t s
hành vi.
• Hành vi giao ti p
(public, interface
methods) : Hành vi giúp
i t ng giao ti p v i
môi tr ng.
• Hành vi riêng/n i
(private, internal): hành
vi x lý d li u n i t i
a i t ng mà bên
ngoài không th truy
p.
class NG I
Tê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
Bao gói
class CIRLCE
int x , y , r;
int BorderColor;
int BkColor;
public int getX() public void setX(int xx)
public int getY() public void setY(int yy)
public int getR() public void setR(int r) public double getPerimeter() public double getArea()
i khai báo này, bên ngoài có th truy c p 2 thu c tính
u hay không?
Bao gói…
class
CASSETTE
cB ng();
GhiB ng();
LýNhi u();
Play() Stop() Rewind() Forward() Record()
Môi tr ng
bên ngoài
Interfaces (public methods)
Hành vi n i (private methods)
Bao 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 115-Tính th a k -Inheritance
• Các lo i i
ng khác
nhau th ng
có chung m t
c m.
Tính th a k …
• nh ng l p i t ng ã có, ta có th c t p i
ng m i, l p m i s mang nh ng c tính c a nh ng
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.
• n t i m i quan h cha (l p n n,base,parent)- con ( l p
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 m tái s ng thông tin c a OOP.
Tính th a k …
ID_Num
Name
YearOfBirth
Address
getID_Num()
setID_Num(newID)
class PERSON
RollNum
Score
getScore()
setSore(newScore)
class STUDENT
quan h
“là 1”
Ch ph i
hi n th c
ng này
c cái
ng ng
ID_Num Name YearOfBirth Address getID_Num() setID_Num(newID)
class STUDENT
RollNum Score getScore() setSore(newScore)
th a
tính
ch t riêng
Con = Cha + m t tí
5- a hình-Polymorphism
• Kh ng có nh ng hi n th c khác nhau cho cùng m t hành vi.
• K thu t cho phép thay i n i dung c a cùng
t hành vi trong 2 l p cha –con.
• B n ch t: S a code c a cùng m t hành vi 2
p cha con các code này khác nhau.
a hình t o ra kh 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 12Thí d tính a hình…
class Ng i
void DiChuy n();
class ànÔng
void DiChuy n();
class ànBà
void DiChuy n();
class SHAPE void Draw () {
}
class 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
a ch ng trình
• 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 : t thông tin v t i t ng có trong
nh a ch ng trình.
ng):
chi u n m t th c th a l p. 300
1000 “Hoa”
Student obj= new Student(“Hoa”,5,7);
5 7
5- Thông i p, thông báo - Message
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();
• Ta c n bi t nh ng thông tin gì v t i t ng thu c l p này li u mô t
• Ta (bên ngoài) th c s 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 Hành vi n i.
n gi n nh t: V i m i thu c tính d li u c a
p, s có 2 hành vi thao tác (g i là accessors )
get, set (g i là getter , setter )thao tác lên d li u này.
Trang 13Bài t p t i ch
• Thi t k
p mô
và x
lý m t
c
sinh,
bi t
ng
c sinh
ph i h c
3 môn
c.
class Student
char code [12];
char name[30];
int score1;
int score2;
int score3;
void input() void output()
char* 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()
6- G i ý v phân tích th a k
(2) Tìm t p giao c a các tính
ch t gi a các l p, tách t p
cha.
cho l p cha.
(4) Ph n còn l i sau khi tách
p giao là các l p con
Th a k - Bài m u
Phân tích phân c p th a k cho các l p:
• Hàng n máy <mã hàng, tên hàng, nhà
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à
n xu t, giá, lo i nguyên li u>
• Hàng th c ph m <mã hàng, tên hàng, nhà
n xu t, giá, ngày s n xu t, ngày h t h n
dùng>
Bài gi i
• Hang ienMay < maH,tenH,nsx,gia, tgbh, a,cs >
• HangSanhSu < maH,tenH,nsx,gia, lnl >
• HangThucPham < maH,tenH,nsx,gia, ngsx,nhhd >
HangHoa maH
tenH nsx gia
HangDienMay tgbh
a cx
HangSanhSu lnl
HangThucPham ngsx
nghhd
Trang 14Th 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, m sinh, trình , tr ng ào
o, chuyên môn , ng cb , ph p ch c v >
• Nhân viên nghiên c u < mã nv, tên nv, m sinh, trình , tr ng
ào t o, chuyên môn , ng cb , ph p c h i>
• Nhân viên ph c v < mã nv, tên nv, m sinh, trình , ng cb >
NhanVien
maNV, tenNV
ns, , luongCb
NhanVien T
tr ng chuyênmôn
NhanVienQL pccv
NhanVienNC
pc h
6- 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
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 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 15Gi 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.
i ch ng hai cách hi n th c