際際滷

際際滷Share a Scribd company logo
L畉p tr狸nh h動畛ng 畛i t動畛ng
Kh叩i ni畛m
(D畛a tr棚n slides c畛a PGS. TS. Nguy畛n Vi畛t H)
OOP: Kh叩i ni畛m2
N畛i dung
 L畛ch s畛 ph叩t tri畛n c畛a k畛 thu畉t l畉p tr狸nh
 H畉n ch畉 c畛a k畛 thu畉t l畉p tr狸nh truy畛n th畛ng
 Kh叩i ni畛m l畉p tr狸nh h動畛ng 畛i t動畛ng
 坦ng g坦i/Che gi畉u th担ng tin
OOP: Kh叩i ni畛m3
Ti li畛u tham kh畉o
 Gi叩o tr狸nh L畉p tr狸nh HT, ch動董ng 3
OOP: Kh叩i ni畛m4
Ph畉n m畛m ngy cng l畛n
 M畛t s畛 h畛 Unix ch畛a kho畉ng 4M d嘆ng l畛nh
 MS Windows ch畛a hng ch畛c tri畛u d嘆ng l畛nh
 Ng動畛i d湛ng ngy cng 嘆i h畛i nhi畛u ch畛c nng, 畉c
bi畛t l ch畛c nng th担ng minh
 Ph畉n m畛m lu担n c畉n 動畛c s畛a 畛i
OOP: Kh叩i ni畛m5
V狸 v畉y
 C畉n ki畛m so叩t chi ph鱈
 Chi ph鱈 ph叩t tri畛n
 Chi ph鱈 b畉o tr狸
 Gi畉i ph叩p ch鱈nh l s畛 d畛ng l畉i
 Gi畉m chi ph鱈 v th畛i gian ph叩t tri畛n
 N但ng cao ch畉t l動畛ng
 動畛c s畛 d畛ng l畉i ch畛ng t畛 c坦 ch畉t l動畛ng t畛t
OOP: Kh叩i ni畛m6
畛 s畛 d畛ng l畉i (m達 ngu畛n)
 C畉n d畛 hi畛u
 動畛c coi l ch鱈nh x叩c
 C坦 giao di畛n r探 rng
 Kh担ng/鱈t y棚u c畉u thay 畛i khi s畛 d畛ng trong ph畉n
m畛m m畛i
OOP: Kh叩i ni畛m7
C叩c ph動董ng ph叩p l畉p tr狸nh
 L畉p tr狸nh kh担ng c坦 c畉u tr炭c
 L畉p tr狸nh c坦 c畉u tr炭c (l畉p tr狸nh th畛 t畛c)
 L畉p tr狸nh logic
 L畉p tr狸nh hm
 L畉p tr狸nh h動畛ng 畛i t動畛ng
OOP: Kh叩i ni畛m8
L畉p tr狸nh kh担ng c坦 c畉u tr炭c
(non-structured programming)
 L ph動董ng ph叩p xu畉t hi畛n 畉u ti棚n
 c叩c ng担n ng畛 nh動 Assembly, Basic
 s畛 d畛ng c叩c bi畉n t畛ng th畛
 l畉m d畛ng l畛nh GOTO
 C叩c nh動畛c i畛m
 kh坦 hi畛u, kh坦 b畉o tr狸, h畉u nh動 kh担ng th畛 s畛 d畛ng l畉i
 ch畉t l動畛ng k辿m
 chi ph鱈 cao
 kh担ng th畛 ph叩t tri畛n c叩c 畛ng d畛ng l畛n
OOP: Kh叩i ni畛m9
V鱈 d畛
10 k =1
20 gosub 100
30 if y > 120 goto 60
40 k = k+1
50 goto 20
60 print k, y
70 stop
100 y = 3*k*k + 7*k-3
110 return
OOP: Kh叩i ni畛m10
L畉p tr狸nh c坦 c畉u tr炭c/l畉p tr狸nh th畛 t畛c
(structured/procedural programming)
 S畛 d畛ng c叩c l畛nh c坦 c畉u tr炭c: for, do while, if then
else...
 C叩c ng担n ng畛: Pascal, C, ...
 Ch動董ng tr狸nh l t畉p c叩c hm/th畛 t畛c
 働u i畛m
 Ch動董ng tr狸nh 動畛c c畛c b畛 h坦a, do 坦 d畛 hi畛u, d畛 b畉o tr狸
h董n
 D畛 dng t畉o ra c叩c th動 vi畛n ph畉n m畛m
OOP: Kh叩i ni畛m11
V鱈 d畛
struct Date {
int nam, mon, day;
};
...
print_date(Date d) {
printf(%d / %d / %dn, d.day,
d.mon, d.nam);
}
OOP: Kh叩i ni畛m12
L畉p tr狸nh c坦 c畉u tr炭c/l畉p tr狸nh th畛 t畛c
 Nh動畛c i畛m
 d畛 li畛u v m達 x畛 l箪 l t叩ch r畛i
 ng動畛i l畉p tr狸nh ph畉i bi畉t c畉u tr炭c d畛 li畛u (v畉n 畛 ny
m畛t th畛i gian di 動畛c coi l hi畛n nhi棚n)
 khi thay 畛i c畉u tr炭c d畛 li畛u th狸 m達 x畛 l箪 (thu畉t to叩n)
ph畉i thay 畛i theo
 kh坦 畉m b畉o t鱈nh 炭ng 畉n c畛a d畛 li畛u
 kh担ng t畛 畛ng kh畛i t畉o hay gi畉i ph坦ng d畛 li畛u 畛ng
OOP: Kh叩i ni畛m13
T畉i sao ph畉i thay 畛i c畉u tr炭c d畛 li畛u?
 C畉u tr炭c d畛 li畛u l m担 h狸nh c畛a bi to叩n c畉n gi畉i
quy畉t
 Do thi畉u ki畉n th畛c v畛 bi to叩n, v畛 mi畛n 畛ng d畛ng...,
kh担ng ph畉i l炭c no c滴ng t畉o 動畛c c畉u tr炭c d畛 li畛u
hon thi畛n ngay t畛 畉u.
 T畉o ra m畛t c畉u tr炭c d畛 li畛u h畛p l箪 lu担n l v畉n 畛 au
畉u c畛a ng動畛i l畉p tr狸nh.
 B畉n th但n bi to叩n c滴ng kh担ng b畉t bi畉n
 C畉n ph畉i thay 畛i c畉u tr炭c d畛 li畛u 畛 ph湛 h畛p v畛i c叩c
y棚u c畉u thay 畛i.
OOP: Kh叩i ni畛m14
C叩c v畉n 畛
 Thay 畛i c畉u tr炭c
 d畉n 畉n vi畛c s畛a l畉i m達 ch動董ng tr狸nh (thu畉t to叩n)
t動董ng 畛ng v lm chi ph鱈 ph叩t tri畛n tng cao.
 kh担ng t叩i s畛 d畛ng 動畛c c叩c m達 x畛 l箪 畛ng v畛i c畉u tr炭c
d畛 li畛u c滴.
 畉m b畉o t鱈nh 炭ng 畉n c畛a d畛 li畛u
 m畛t trong nh畛ng nguy棚n nh但n ch鱈nh g但y ra l畛i ph畉n
m畛m l g叩n c叩c d畛 li畛u kh担ng h畛p l畛
 c畉n ph畉i ki畛m tra t鱈nh 炭ng 畉n c畛a d畛 li畛u m畛i khi
thay 畛i gi叩 tr畛
OOP: Kh叩i ni畛m15
V鱈 d畛: MyDate
MyDate.java:
class MyDate {
private int year, month, day;
}
MyCalendar.java:
MyDate d = new MyDate();
d.day = 32; // invalid day
d.day = 31; d.month = 2; // how to check
d.day = d.day + 1; //
OOP: Kh叩i ni畛m16
V鱈 d畛: MyDate (2)
Thay 畛i c畉u tr炭c d畛 li畛u:
MyDate.java:
class MyDate {
public short year;
public short mon_n_day;
}
OOP: Kh叩i ni畛m17
Gi畉i ph叩p
 Che gi畉u d畛 li畛u (che gi畉u c畉u tr炭c)
 Truy c畉p d畛 li畛u th担ng qua giao di畛n x叩c 畛nh
class MyDate {
private int year, mon, day;
public int getDay() {...}
public boolean setDay(int day)
{day=day}
...
}
OOP: Kh叩i ni畛m18
S畛 d畛ng giao di畛n
MyCalendar.java:
MyDate d = new MyDate();
...
d.day = 32; // error
d.setDay(32);
d.setMonth(2); // should return False
OOP: Kh叩i ni畛m19
Data
Method 1 Method 2 Method 3
Data
Method 1 Method 2 Method 3
an object
another object
Function 1 Function 2
Global data
Function 4 Function 3
OOP: Kh叩i ni畛m20
坦ng g坦i/che gi畉u th担ng tin
 坦ng g坦i d畛 li畛u v c叩c thao t叩c t叩c 畛ng l棚n d畛 li畛u
thnh m畛t th畛 th畛ng nh畉t (l畛p 畛i t動畛ng) thu畉n ti畛n
cho s畛 d畛ng l畉i
 Che gi畉u th担ng tin
 thao t叩c v畛i d畛 li畛u th担ng qua c叩c giao di畛n x叩c 畛nh
 che gi畉u ng動畛i l畉p tr狸nh kh叩ch (client programmer) c叩i c坦
kh畉 nng thay 畛i (t叩ch c叩i b畉t bi畉n ra kh畛i c叩i kh畉 bi畉n)
OOP: Kh叩i ni畛m21
L畛p v 畛i t動畛ng
 L畛p 畛i t動畛ng (class) l khu担n m畉u 畛 sinh ra 畛i
t動畛ng
 畛i t動畛ng l th畛 hi畛n (instance) c畛a m畛t l畛p. 畛i
t動畛ng c坦
 thu畛c t鱈nh (d畛 li畛u)
 畛nh danh
 hnh vi (ph動董ng th畛c)
OOP: Kh叩i ni畛m22
H畛 th畛ng h動畛ng 畛i t動畛ng
 Bao g畛m m畛t t畉p c叩c 畛i t動畛ng
 m畛i 畛i t動畛ng ch畛u tr叩ch nhi畛m m畛t c担ng vi畛c
 C叩c 畛i t動畛ng t動董ng t叩c th担ng qua trao 畛i th担ng
i畛p (message passing)
 C叩c 畛i t動畛ng c坦 th畛 t畛n t畉i ph但n t叩n/c坦 th畛 ho畉t
畛ng song song
M担 h狸nh h坦a 畛i t動畛ng
MyDate
--year
--month
--day
+ getDay()
+ setDay(int)
+ getMonth()
+ setMonth(int)
+ getYear()
+ setYear(int)
- validDate(int, int, int)
OOP: Kh叩i ni畛m23
OOP: Kh叩i ni畛m24
L畛i 鱈ch c畛a l畉p tr狸nh h動畛ng 畛i t動畛ng
 nng su畉t l畉p tr狸nh (nng su畉t ph叩t tri畛n)
 ch畉t l動畛ng ph畉n m畛m
 t鱈nh hi畛u 動畛c c畛a ph畉n m畛m
 v嘆ng 畛i c畛a ph畉n m畛m
OOP: Kh叩i ni畛m25
OOP v OOL
 C坦 th畛 th畛 hi畛n ph畉n no t動 t動畛ng 坦ng g坦i/che
gi畉u th担ng tin tr棚n ng担n ng畛 th畛 t畛c
 kh担ng tri畛t 畛, kh坦 ki畛m so叩t
 Ng担n ng畛 h動畛ng 畛i t動畛ng cung c畉p kh畉 nng ki畛m
so叩t truy c畉p; ngoi ra
 k畉 th畛a
 a h狸nh
26

More Related Content

Similar to 2 introduction to oop (20)

1.OOP Introduction (1).pptx
1.OOP Introduction (1).pptx1.OOP Introduction (1).pptx
1.OOP Introduction (1).pptx
H畉i Nguy畛n ng
BI GI畉NG L畉P TRNH H働畛NG 畛I T働畛NG
BI GI畉NG L畉P TRNH H働畛NG 畛I T働畛NGBI GI畉NG L畉P TRNH H働畛NG 畛I T働畛NG
BI GI畉NG L畉P TRNH H働畛NG 畛I T働畛NG
Tr動畛ng Ph畉m
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
tPhan78
Dotnet
DotnetDotnet
Dotnet
daicathu
Bg ngonngulaptrinh c++
Bg ngonngulaptrinh c++Bg ngonngulaptrinh c++
Bg ngonngulaptrinh c++
Cu Chu畉n
Oop 0
Oop 0Oop 0
Oop 0
Thai Hoc Vu
Lap trinh huong_doi_tuong_cpp_dhct_lesson06
Lap trinh huong_doi_tuong_cpp_dhct_lesson06Lap trinh huong_doi_tuong_cpp_dhct_lesson06
Lap trinh huong_doi_tuong_cpp_dhct_lesson06
xcode_esvn
L畛p h畛c l畉p tr狸nh android t畉i h 担ng
L畛p h畛c l畉p tr狸nh android t畉i h 担ngL畛p h畛c l畉p tr狸nh android t畉i h 担ng
L畛p h畛c l畉p tr狸nh android t畉i h 担ng
Enter Focus
B叩o c叩o k挑 thu畉t ph畉n m畛m v 畛ng d畛ng
B叩o c叩o k挑 thu畉t ph畉n m畛m v 畛ng d畛ngB叩o c叩o k挑 thu畉t ph畉n m畛m v 畛ng d畛ng
B叩o c叩o k挑 thu畉t ph畉n m畛m v 畛ng d畛ng
V動畛ng 畉ng
Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++
Da To
Gi畛i thi畛u m担n h畛c
Gi畛i thi畛u m担n h畛cGi畛i thi畛u m担n h畛c
Gi畛i thi畛u m担n h畛c
Nguyen Tran
畛 叩N thi畉t k畉 web tuy畛n d畛ng s畛 d畛ng asp.net
畛 叩N thi畉t k畉 web tuy畛n d畛ng s畛 d畛ng asp.net畛 叩N thi畉t k畉 web tuy畛n d畛ng s畛 d畛ng asp.net
畛 叩N thi畉t k畉 web tuy畛n d畛ng s畛 d畛ng asp.net
nataliej4
C叩c ph動董ng ph叩p ph但n t鱈ch thi畉t k畉 ph畉n.pptx
C叩c ph動董ng ph叩p ph但n t鱈ch thi畉t k畉 ph畉n.pptxC叩c ph動董ng ph叩p ph但n t鱈ch thi畉t k畉 ph畉n.pptx
C叩c ph動董ng ph叩p ph但n t鱈ch thi畉t k畉 ph畉n.pptx
dong92356
Kich ban bai 3 chuong 2(inh th畛 h k33103225)
Kich ban bai 3 chuong 2(inh th畛 h k33103225)Kich ban bai 3 chuong 2(inh th畛 h k33103225)
Kich ban bai 3 chuong 2(inh th畛 h k33103225)
Tin 5CBT
Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake php
laonap166
1.OOP Introduction (1).pptx
1.OOP Introduction (1).pptx1.OOP Introduction (1).pptx
1.OOP Introduction (1).pptx
H畉i Nguy畛n ng
BI GI畉NG L畉P TRNH H働畛NG 畛I T働畛NG
BI GI畉NG L畉P TRNH H働畛NG 畛I T働畛NGBI GI畉NG L畉P TRNH H働畛NG 畛I T働畛NG
BI GI畉NG L畉P TRNH H働畛NG 畛I T働畛NG
Tr動畛ng Ph畉m
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
lap-trinh-huong-doi-tuong_nguyen-manh-son_lthdt_ptit - [cuuduongthancong.com]...
tPhan78
Bg ngonngulaptrinh c++
Bg ngonngulaptrinh c++Bg ngonngulaptrinh c++
Bg ngonngulaptrinh c++
Cu Chu畉n
Lap trinh huong_doi_tuong_cpp_dhct_lesson06
Lap trinh huong_doi_tuong_cpp_dhct_lesson06Lap trinh huong_doi_tuong_cpp_dhct_lesson06
Lap trinh huong_doi_tuong_cpp_dhct_lesson06
xcode_esvn
L畛p h畛c l畉p tr狸nh android t畉i h 担ng
L畛p h畛c l畉p tr狸nh android t畉i h 担ngL畛p h畛c l畉p tr狸nh android t畉i h 担ng
L畛p h畛c l畉p tr狸nh android t畉i h 担ng
Enter Focus
B叩o c叩o k挑 thu畉t ph畉n m畛m v 畛ng d畛ng
B叩o c叩o k挑 thu畉t ph畉n m畛m v 畛ng d畛ngB叩o c叩o k挑 thu畉t ph畉n m畛m v 畛ng d畛ng
B叩o c叩o k挑 thu畉t ph畉n m畛m v 畛ng d畛ng
V動畛ng 畉ng
Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++Ngon ngu lap_trinh_c++
Ngon ngu lap_trinh_c++
Da To
Gi畛i thi畛u m担n h畛c
Gi畛i thi畛u m担n h畛cGi畛i thi畛u m担n h畛c
Gi畛i thi畛u m担n h畛c
Nguyen Tran
畛 叩N thi畉t k畉 web tuy畛n d畛ng s畛 d畛ng asp.net
畛 叩N thi畉t k畉 web tuy畛n d畛ng s畛 d畛ng asp.net畛 叩N thi畉t k畉 web tuy畛n d畛ng s畛 d畛ng asp.net
畛 叩N thi畉t k畉 web tuy畛n d畛ng s畛 d畛ng asp.net
nataliej4
C叩c ph動董ng ph叩p ph但n t鱈ch thi畉t k畉 ph畉n.pptx
C叩c ph動董ng ph叩p ph但n t鱈ch thi畉t k畉 ph畉n.pptxC叩c ph動董ng ph叩p ph但n t鱈ch thi畉t k畉 ph畉n.pptx
C叩c ph動董ng ph叩p ph但n t鱈ch thi畉t k畉 ph畉n.pptx
dong92356
Kich ban bai 3 chuong 2(inh th畛 h k33103225)
Kich ban bai 3 chuong 2(inh th畛 h k33103225)Kich ban bai 3 chuong 2(inh th畛 h k33103225)
Kich ban bai 3 chuong 2(inh th畛 h k33103225)
Tin 5CBT
Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake php
laonap166

2 introduction to oop

  • 1. L畉p tr狸nh h動畛ng 畛i t動畛ng Kh叩i ni畛m (D畛a tr棚n slides c畛a PGS. TS. Nguy畛n Vi畛t H)
  • 2. OOP: Kh叩i ni畛m2 N畛i dung L畛ch s畛 ph叩t tri畛n c畛a k畛 thu畉t l畉p tr狸nh H畉n ch畉 c畛a k畛 thu畉t l畉p tr狸nh truy畛n th畛ng Kh叩i ni畛m l畉p tr狸nh h動畛ng 畛i t動畛ng 坦ng g坦i/Che gi畉u th担ng tin
  • 3. OOP: Kh叩i ni畛m3 Ti li畛u tham kh畉o Gi叩o tr狸nh L畉p tr狸nh HT, ch動董ng 3
  • 4. OOP: Kh叩i ni畛m4 Ph畉n m畛m ngy cng l畛n M畛t s畛 h畛 Unix ch畛a kho畉ng 4M d嘆ng l畛nh MS Windows ch畛a hng ch畛c tri畛u d嘆ng l畛nh Ng動畛i d湛ng ngy cng 嘆i h畛i nhi畛u ch畛c nng, 畉c bi畛t l ch畛c nng th担ng minh Ph畉n m畛m lu担n c畉n 動畛c s畛a 畛i
  • 5. OOP: Kh叩i ni畛m5 V狸 v畉y C畉n ki畛m so叩t chi ph鱈 Chi ph鱈 ph叩t tri畛n Chi ph鱈 b畉o tr狸 Gi畉i ph叩p ch鱈nh l s畛 d畛ng l畉i Gi畉m chi ph鱈 v th畛i gian ph叩t tri畛n N但ng cao ch畉t l動畛ng 動畛c s畛 d畛ng l畉i ch畛ng t畛 c坦 ch畉t l動畛ng t畛t
  • 6. OOP: Kh叩i ni畛m6 畛 s畛 d畛ng l畉i (m達 ngu畛n) C畉n d畛 hi畛u 動畛c coi l ch鱈nh x叩c C坦 giao di畛n r探 rng Kh担ng/鱈t y棚u c畉u thay 畛i khi s畛 d畛ng trong ph畉n m畛m m畛i
  • 7. OOP: Kh叩i ni畛m7 C叩c ph動董ng ph叩p l畉p tr狸nh L畉p tr狸nh kh担ng c坦 c畉u tr炭c L畉p tr狸nh c坦 c畉u tr炭c (l畉p tr狸nh th畛 t畛c) L畉p tr狸nh logic L畉p tr狸nh hm L畉p tr狸nh h動畛ng 畛i t動畛ng
  • 8. OOP: Kh叩i ni畛m8 L畉p tr狸nh kh担ng c坦 c畉u tr炭c (non-structured programming) L ph動董ng ph叩p xu畉t hi畛n 畉u ti棚n c叩c ng担n ng畛 nh動 Assembly, Basic s畛 d畛ng c叩c bi畉n t畛ng th畛 l畉m d畛ng l畛nh GOTO C叩c nh動畛c i畛m kh坦 hi畛u, kh坦 b畉o tr狸, h畉u nh動 kh担ng th畛 s畛 d畛ng l畉i ch畉t l動畛ng k辿m chi ph鱈 cao kh担ng th畛 ph叩t tri畛n c叩c 畛ng d畛ng l畛n
  • 9. OOP: Kh叩i ni畛m9 V鱈 d畛 10 k =1 20 gosub 100 30 if y > 120 goto 60 40 k = k+1 50 goto 20 60 print k, y 70 stop 100 y = 3*k*k + 7*k-3 110 return
  • 10. OOP: Kh叩i ni畛m10 L畉p tr狸nh c坦 c畉u tr炭c/l畉p tr狸nh th畛 t畛c (structured/procedural programming) S畛 d畛ng c叩c l畛nh c坦 c畉u tr炭c: for, do while, if then else... C叩c ng担n ng畛: Pascal, C, ... Ch動董ng tr狸nh l t畉p c叩c hm/th畛 t畛c 働u i畛m Ch動董ng tr狸nh 動畛c c畛c b畛 h坦a, do 坦 d畛 hi畛u, d畛 b畉o tr狸 h董n D畛 dng t畉o ra c叩c th動 vi畛n ph畉n m畛m
  • 11. OOP: Kh叩i ni畛m11 V鱈 d畛 struct Date { int nam, mon, day; }; ... print_date(Date d) { printf(%d / %d / %dn, d.day, d.mon, d.nam); }
  • 12. OOP: Kh叩i ni畛m12 L畉p tr狸nh c坦 c畉u tr炭c/l畉p tr狸nh th畛 t畛c Nh動畛c i畛m d畛 li畛u v m達 x畛 l箪 l t叩ch r畛i ng動畛i l畉p tr狸nh ph畉i bi畉t c畉u tr炭c d畛 li畛u (v畉n 畛 ny m畛t th畛i gian di 動畛c coi l hi畛n nhi棚n) khi thay 畛i c畉u tr炭c d畛 li畛u th狸 m達 x畛 l箪 (thu畉t to叩n) ph畉i thay 畛i theo kh坦 畉m b畉o t鱈nh 炭ng 畉n c畛a d畛 li畛u kh担ng t畛 畛ng kh畛i t畉o hay gi畉i ph坦ng d畛 li畛u 畛ng
  • 13. OOP: Kh叩i ni畛m13 T畉i sao ph畉i thay 畛i c畉u tr炭c d畛 li畛u? C畉u tr炭c d畛 li畛u l m担 h狸nh c畛a bi to叩n c畉n gi畉i quy畉t Do thi畉u ki畉n th畛c v畛 bi to叩n, v畛 mi畛n 畛ng d畛ng..., kh担ng ph畉i l炭c no c滴ng t畉o 動畛c c畉u tr炭c d畛 li畛u hon thi畛n ngay t畛 畉u. T畉o ra m畛t c畉u tr炭c d畛 li畛u h畛p l箪 lu担n l v畉n 畛 au 畉u c畛a ng動畛i l畉p tr狸nh. B畉n th但n bi to叩n c滴ng kh担ng b畉t bi畉n C畉n ph畉i thay 畛i c畉u tr炭c d畛 li畛u 畛 ph湛 h畛p v畛i c叩c y棚u c畉u thay 畛i.
  • 14. OOP: Kh叩i ni畛m14 C叩c v畉n 畛 Thay 畛i c畉u tr炭c d畉n 畉n vi畛c s畛a l畉i m達 ch動董ng tr狸nh (thu畉t to叩n) t動董ng 畛ng v lm chi ph鱈 ph叩t tri畛n tng cao. kh担ng t叩i s畛 d畛ng 動畛c c叩c m達 x畛 l箪 畛ng v畛i c畉u tr炭c d畛 li畛u c滴. 畉m b畉o t鱈nh 炭ng 畉n c畛a d畛 li畛u m畛t trong nh畛ng nguy棚n nh但n ch鱈nh g但y ra l畛i ph畉n m畛m l g叩n c叩c d畛 li畛u kh担ng h畛p l畛 c畉n ph畉i ki畛m tra t鱈nh 炭ng 畉n c畛a d畛 li畛u m畛i khi thay 畛i gi叩 tr畛
  • 15. OOP: Kh叩i ni畛m15 V鱈 d畛: MyDate MyDate.java: class MyDate { private int year, month, day; } MyCalendar.java: MyDate d = new MyDate(); d.day = 32; // invalid day d.day = 31; d.month = 2; // how to check d.day = d.day + 1; //
  • 16. OOP: Kh叩i ni畛m16 V鱈 d畛: MyDate (2) Thay 畛i c畉u tr炭c d畛 li畛u: MyDate.java: class MyDate { public short year; public short mon_n_day; }
  • 17. OOP: Kh叩i ni畛m17 Gi畉i ph叩p Che gi畉u d畛 li畛u (che gi畉u c畉u tr炭c) Truy c畉p d畛 li畛u th担ng qua giao di畛n x叩c 畛nh class MyDate { private int year, mon, day; public int getDay() {...} public boolean setDay(int day) {day=day} ... }
  • 18. OOP: Kh叩i ni畛m18 S畛 d畛ng giao di畛n MyCalendar.java: MyDate d = new MyDate(); ... d.day = 32; // error d.setDay(32); d.setMonth(2); // should return False
  • 19. OOP: Kh叩i ni畛m19 Data Method 1 Method 2 Method 3 Data Method 1 Method 2 Method 3 an object another object Function 1 Function 2 Global data Function 4 Function 3
  • 20. OOP: Kh叩i ni畛m20 坦ng g坦i/che gi畉u th担ng tin 坦ng g坦i d畛 li畛u v c叩c thao t叩c t叩c 畛ng l棚n d畛 li畛u thnh m畛t th畛 th畛ng nh畉t (l畛p 畛i t動畛ng) thu畉n ti畛n cho s畛 d畛ng l畉i Che gi畉u th担ng tin thao t叩c v畛i d畛 li畛u th担ng qua c叩c giao di畛n x叩c 畛nh che gi畉u ng動畛i l畉p tr狸nh kh叩ch (client programmer) c叩i c坦 kh畉 nng thay 畛i (t叩ch c叩i b畉t bi畉n ra kh畛i c叩i kh畉 bi畉n)
  • 21. OOP: Kh叩i ni畛m21 L畛p v 畛i t動畛ng L畛p 畛i t動畛ng (class) l khu担n m畉u 畛 sinh ra 畛i t動畛ng 畛i t動畛ng l th畛 hi畛n (instance) c畛a m畛t l畛p. 畛i t動畛ng c坦 thu畛c t鱈nh (d畛 li畛u) 畛nh danh hnh vi (ph動董ng th畛c)
  • 22. OOP: Kh叩i ni畛m22 H畛 th畛ng h動畛ng 畛i t動畛ng Bao g畛m m畛t t畉p c叩c 畛i t動畛ng m畛i 畛i t動畛ng ch畛u tr叩ch nhi畛m m畛t c担ng vi畛c C叩c 畛i t動畛ng t動董ng t叩c th担ng qua trao 畛i th担ng i畛p (message passing) C叩c 畛i t動畛ng c坦 th畛 t畛n t畉i ph但n t叩n/c坦 th畛 ho畉t 畛ng song song
  • 23. M担 h狸nh h坦a 畛i t動畛ng MyDate --year --month --day + getDay() + setDay(int) + getMonth() + setMonth(int) + getYear() + setYear(int) - validDate(int, int, int) OOP: Kh叩i ni畛m23
  • 24. OOP: Kh叩i ni畛m24 L畛i 鱈ch c畛a l畉p tr狸nh h動畛ng 畛i t動畛ng nng su畉t l畉p tr狸nh (nng su畉t ph叩t tri畛n) ch畉t l動畛ng ph畉n m畛m t鱈nh hi畛u 動畛c c畛a ph畉n m畛m v嘆ng 畛i c畛a ph畉n m畛m
  • 25. OOP: Kh叩i ni畛m25 OOP v OOL C坦 th畛 th畛 hi畛n ph畉n no t動 t動畛ng 坦ng g坦i/che gi畉u th担ng tin tr棚n ng担n ng畛 th畛 t畛c kh担ng tri畛t 畛, kh坦 ki畛m so叩t Ng担n ng畛 h動畛ng 畛i t動畛ng cung c畉p kh畉 nng ki畛m so叩t truy c畉p; ngoi ra k畉 th畛a a h狸nh
  • 26. 26