c tiêu
L P TRÌNH
NG
IT
NG
Nh p Môn
Tr n Ph c Tu n
• 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.
1
i dung chi ti t
c tiêu
• N m v ng m t s
bao g m:
nh ngh a trong OOP
– Tr u t ng hóa d li u.
– L p, i t ng, th hi n.
– Thông
p và g i thông
– Tính bao óng.
– Tính k th a.
– Tính a hình
p.
1.
2.
3.
4.
5.
6.
Nh c
m c a l p trình th
c.
T duy h ng i t ng.
Di n t h ng i t ng.
u
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 OOP.
1- L p trình th
c
1- Nh
• POP- Procedure Oriented Programming.
• Data structure + Algorithm = Program
• K thu t POP:
Program
pick
nouns
Data
structure
pick
verbs
Operation
(function)
type Fun (XX x)
{.....
}
Problem
1- Nh
c
struct XX
{.....
};
m c a POP...
– 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.
slide sau.
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
void main()
{ XX x;
Fun(x);
}
• 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.
• Thí d
c
t nào t
VietLyLich(x);
x.VietLyLich();
nhiên h n?
“x i, vi t lý l ch i em”
1- Nh
c
m c a POP...
nhiên
struct PERSON
{....
};
Person
is a
Male
Hi n th c
is a
Female
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
1- 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;
};
2-
duy h
void main()
{STUDENT x = { “Hoa”, 19, 5};
x.Age=1000;
n ngh sao v 2
x.Score=-20;
tác v này?
}
ng
it
i t ng-Object
• L p-Class
• Tính th a k - Inheritance
• Tính a hình-Polymorphism
ng
1- Nh
c
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
m này.
• OOP có nh ng c
m v t tr i so v i
POP và là
ng l p trình ch
o hi n
nay.
What is an object?
• Objects are key to understanding objectoriented 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
Objects…
States
Behaviors
How to describe a real-object?
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)
barking
fetching
wagging tail
changing gear
changing pedal cadence
applying brakes
•
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
• Identifying the state and behavior for real-world
objects is a great way to begin thinking in terms of
object-oriented programming.
How to describe a real-object? …
Software Object-
it
ng ph n m m
• 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.
What is a class?
Software objects
• 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
p trình H
ng
it
ng
• 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
it
ng (object):
– Trong th gi i th c, khái ni m i t ng
c
hi u nh là m t th c th : ng i, v t ho c m t
ng d li u….
– M i i t ng s
n t i trong m t h th ng và có
ý ngh a nh t nh trong h th ng.
–
i t ng giúp bi u di n t t h n th gi i th c
trên máy tính
t s khái ni m
t s khái ni m
• L p:
– Các i t ng có các c tính
ng t nhau
c
gom chung l i thành l p i t ng. Ví d Ng i là
t l p
i t ng. M t l p
i t ng
c
c
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ó.
it
• 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
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.
p và
ng
Sinh viên
Tên lớp
• 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
Thuộc tính
• S
p mơ t các l p
th ng, m t l p i t ng
hình ch nh t có 3 ph n:
Họ tên
Năm sinh
Mã số
Điểm TB
Thao tác
Đi học
Đi thi
Phân loại
– ph n
it
ng trong h
c di n t
ng m t
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
ng trong l p ó.
c g i là
Sơ đồ lớp
i
it
th hi n
(Sinh viên)
Nguyễn Văn A
1984
0610234T
9.2
Sơ đồ thể hiện
ng = D li u + Ph
ng th c
3- Di n
th
ng
it
3- Di n
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.
4-
u i m c a OOP
is a
Male
Hi n th c
class PERSON
{....
};
Person
is a
ng
it
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.
Benefits software objects
• D mô t các quan h phân c p trong th gi i t nhiên.
nhiên
th
class MALE: PERSON
{<d li u thêm>
};
Female
class FEMALE: PERSON
{ <d li u thêm>
};
nhiên
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..
4. Pluggability and debugging ease: If a bolt
(con c) breaks, you replace it, not the entire
machine.
Thí d
che d u thông tin
Thí d
tái s
ng code
• 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
Tái s
Some OOP languages
•
•
•
•
•
C++ ( Borland C++, Visual C++)
Java
C# ( C sharp)
Visual Basic.
.....
Ngôn ng
ng code
ng code
OOP
• C++, MS VC++: h tr
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
tr
OOP, hàm main ph i n m trong m t l p.
Ch
tr
n th a k .
5- 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
ng th c hi n m t hành vi mà i t ng này
có kh
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).
5- L p- Ki u d li u tr u t
it
ng
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
p
Class = data (bi n mô t )+ methods (code).
data members
function members
5- 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 .
1
-3
5 7
8 ....
Khái
quát
hóa
nguyên
( int )
int, NGUOI, PERSON
là các ADT
Khái
quát
hóa
5- Ba
c
attributes
Danh t chung trong
ngôn ng
nhiên
Ng i
( PERSON )
date_of_birth,
Address, e-mail
.......>
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
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.
Bao gói.....
5- Bao gói - Encapsulation
•
•
•
•
Che d u i d li u.
Bên ngoài ch
ng
tác
cv 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 CIRLCE
class NG
I
Tên
mSinh
getTen()
TênNg iYêu
....
getNamSinh()
getTen()
getNamSinh()
getTenNguoiYeu() getTenNguoiYeu()
TiêuHóa()
i()
Nu t()
i()
ng()
ng()
Ch y()
Nh y()
interfaces
.......
Bao gói…
Play()
Stop()
Rewind()
Forward()
CASSETTE
cB ng();
GhiB ng();
LýNhi u();
Record()
Interfaces
(public methods)
public void setX(int xx)
public int getY()
public void setY(int yy)
public int getR()
int x, y, r;
int BorderColor;
int BkColor;
public void setR(int r)
public double getPerimeter()
public double getArea()
Bao gói… interface
class
Môi tr ng
bên ngoài
i khai báo này,
bên ngoài có th
truy c p 2 thu c tính
u hay không?
public int getX()
Hành vi n i
(private methods)
• 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.
5-Tính th a k -Inheritance
Tính th a k …
•
• Các lo i i
ng khác
nhau th ng
có chung m t
c
m.
nh ng l p i t ng ã có, ta có th
ct
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à
Tính th a k …
ng
quan h
“là 1”
Ch ph i
hi n th c
ng này
c cái
ng
class PERSON
class STUDENT
ID_Num
Name
YearOfBirth
Address
getID_Num()
setID_Num(newID)
......
ID_Num
Name
YearOfBirth
Address
getID_Num()
setID_Num(newID)
......
RollNum
Score
getScore()
setSore(newScore)
......
class STUDENT
RollNum
Score
getScore()
setSore(newScore)
......
th a
tính
ch t
riêng
Con = Cha + m t tí
5-
c
m tái s
ng thông tin c a OOP.
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.
Thí d
5- Phân bi t L p, Th hi n, Bi n
tính a hình…
class CIRCLE
class ànBà
int x,y,r;
void Draw ()
{ circle (x,y,r);
}
void DiChuy n();
class RECTANGLE
class SHAPE
class Ng
int x1,y1, x2, y2;
void Draw ()
{ rectangle(x1,y1, x2, y2);
}
void Draw ()
{
}
i
void DiChuy n();
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);
}
class ànÔng
void DiChuy n();
a hình t o
c tính m m d o/linh
a ch ng trình
ng
it
• 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.
• Bi n i t ng (g i t t là
i
ng):
• Pointer c a
i t ng:Tham
chi u n m t th c th
a l p.
ng
7
5
1000
“Hoa”
300
1000
obj
Student obj= new Student(“Hoa”,5,7);
5- Thông i p, thông báo - Message
6- G i ý khi thi t k
• G i thông báo: Yêu c u 1
thi m t hành vi.
• Thí d :
• 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.
it
x là m t HOCSINH < Name, Age>
x.VietLyLich();
String S= x.getName();
int n= x.getAge();
ng th c
tl p
Bài t p t i ch
class Student
void input()
• 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.
void output()
char* getCode()
void setCode(char* newCode)
char* getName()
void setName(char* newName)
int getScore1()
void setScore1(int s1)
int getScore2()
char code [12];
char name[30];
int score1;
int score2;
int score3;
void setScore2(int s2)
int getScore3()
void setScore3(int s3)
float avg()
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
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
n xu t, giá, ngày s n xu t, ngày h t h n
dùng>
6- G i ý v phân tích th a k
(1) Li t kê c
m c a các
i t ng c n quan tâm.
(2) Tìm t p giao c a các tính
ch t gi a các l p, tách t p
giao này
xây d ng l p
cha.
(3)
t 1 tên g i có ý ngh a
cho l p cha.
(4) Ph n còn l i sau khi tách
p giao là các l p con.
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
Th 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ý
o, chuyên môn,
ng cb, ph
p ch c v >
• Nhân viên nghiên c u
ào t o, chuyên môn,
ng cb, ph
p c h i>
• Nhân viên ph c v
ng cb>
6- G i ý v cách gi i bài toán theo OOP
Program
pick
nouns
Problem
NhanVienQL
NhanVien
maNV, tenNV
ns, , luongCb
NhanVien
T
tr ng
chuyênmôn
NhanVienNC
pick
verbs
pc h
Gi i bài toán h
• 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
Xu t m t hs
Ng ng.
Bao gói d li u và
hành vi thành class
pccv
bài
–
–
–
–
Hàm Nhap(HS&hs)
Hàm Xuat(HS hs);
properties
Operation
(function,
method,
behavior)
class XX
{ type1 prop1;
type2 prop2;
.......
type Method1(...)
{
}
.....
};
void main()
{ XX x; // object variable
x.Method(...);
}
ng POP v i C++
Gi i bài toán h
i ch ng hai cách hi n th c
ng OOP
Thành ph n public là
thành ph n cho phép
bên ngoài truy c p.