ƯƠ
ƯỚ
Ố
CH
NG Đ I
Ậ ƯỢ
NG 7: L P TRÌNH H NG (OOP)
T
ệ
ế
ứ ơ ả i thi u các ki n th c c b n v L p trình h ể ặ
ướ ủ ậ
ề ậ ặ
ư
ượ
ng ng; các đ c đi m, đ c tr ng c a l p
ậ
ậ
M c tiêu ụ ớ Gi ố đ i (HĐT) t trình HĐT . N i dung ộ ấ ậ L p trình có c u trúc và L p trình HĐT ơ ả ệ ộ ố M t s khái ni m c b n ủ ể ặ Đ c đi m c a L p trình HĐT
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 1/24
ậ
ậ
ấ 7.1 L p trình có c u trúc và L p trình HĐT
ươ
ậ
ấ
(cid:0) Ph
ng pháp L p trình có c u trúc:
ấ
ổ ứ
ươ
ch c ch
ng trình thành các
ươ
là t ượ ọ
Lập trình c u trúc ch
ng trình con (đ
c g i là hàm trong C++).
ữ ệ
ươ
ấ
ấ
ồ
ng trình c u trúc g m các c u trúc d li u ả
M t ch ộ ả ư ế (nh bi n, m ng, b n ghi) và các hàm.
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 2/24
ậ
ậ
HĐT (OOP) ậ
ướ
ấ
ng pháp L p trình ng
ấ 7.1 L p trình có c u trúc và L p trình HĐT Ph ươ L p trình h ậ ừ ượ tr u t
ậ ố ượ là l p trình có c u trúc + ng đ i t ữ ệ ng hóa d li u.
ổ ng trình t ế ế ươ t k ch
ấ ướ ạ ứ i d ng c u trúc. ch c d ữ ẽ ng trình s xoay quanh d
ệ
Có nghĩa là ch ươ ệ Tuy nhiên, vi c thi ấ ữ ệ li u, l y d li u làm trung tâm.
ươ ậ ấ ậ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 3/24
ậ
ậ
ậ
HĐT (OOP)
ươ ớ ậ
ữ ệ ượ
c ử . Do đó, vi c ệ ươ ng trình
ườ
ấ 7.1 L p trình có c u trúc và L p trình HĐT Ph ng pháp L p trình V i l p trình c u trúc thu n túy, trong đó d li u đ ấ ầ ẽ ờ ớ khai báo riêng r , tách r i v i thao tác x lý ườ ữ ệ ử x lý d li u th ừ ự ượ c xây d ng t đ
ng không th ng nh t khi ch ề nhi u ng
ấ ố i dùng khác nhau.
ậ
ươ
ng pháp phân tích và thi
ế ế t k
HĐT là ph ế
ố ượ
ề
ầ
ớ
=> L p trình ự ph n m m d a trên ki n trúc l p và đ i t
ng.
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 4/24
ậ
ậ
ươ
ậ
ấ 7.1 L p trình có c u trúc và L p trình HĐT Ph
ng pháp L p trình
HĐT (OOP)
ươ
ậ
ng pháp l p trình
ể ủ các ph ế ấ
Quá trình phát tri n c a L p trình tuy n tính ậ L p trình có c u trúc ậ S tr u t ự ừ ượ L p trình h ậ
ữ ệ ng hóa d li u ố ượ ướ ng
ng đ i t
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 5/24
ậ
ậ
ấ 7.1 L p trình có c u trúc và L p trình HĐT
ươ
So sánh 2 ph
ậ ng pháp l p trình:
ố ượ
ướ
ậ
ấ
L p trình c u trúc H ng đ i t
ng
Hàm
Hàm
Đ i ố ngượ t Các thao tác ữ ệ D li u
Hàm
Đ i ố ngượ t Các thao tác ữ ệ D li u
Đ i ố ngượ t Các thao tác ữ ệ D li u
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 6/24
ộ ố
ơ ả
ệ
7.2 M t s khái ni m c b n
ng hóa ng
ươ
ứ ng th c
ề
Tr u t ừ ượ Đ i t ố ượ Thu c tính và ph ộ L pớ Truy n thông đi p ệ
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 7/24
ự ừ ượ
S tr u t
ng hóa
ỉ
ỹ
ậ
ể
ầ
ng hóa ề
t c a v n đ mà không trình bày nh ng chi ti
ặ là k thu t ch trình bày các đ c đi m c n ữ ế ụ ể t c th hay ề
ứ ạ ủ ấ i thích ph c t p c a v n đ đó. ặ ườ i có các đ c tính sau:
ỉ
ể
ọ
(cid:0)
ừ ượ Tr u t ế ủ ấ thi ả ờ ữ i gi nh ng l Ví dụ: Con ng Tên Tu iổ Đ a ch ị Chi u cao ề Màu tóc … ế Nh ng chi ti
t nào là quan tr ng khi phát tri n
ữ Ứ
ụ
ắ
ộ
ng d ng khách hàng mua s m? Đi u tra t ề
ạ i ph m?
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 8/24
ự ừ ượ
S tr u t
ng hóa
ượ
ạ
ng hóa đ
c phân làm 2 lo i:
Tr u tr ượ ừ Tr u t ừ ượ
ng hóa d li u ị
ộ ể ặ
ứ
ộ ụ
ữ ệ (Data Abstraction): là ti n ế trình xác đ nh và nhóm các thu c tính và các hành ự ế đ ng liên quan đ n các th c th đ c thù trong ng ể d ng đang phát tri n
ượ
Tr u ừ
t
ng hóa
trình
ng ch ộ ự ừ ượ ổ ụ
ị
ươ (Program ữ ệ Abstraction): là m t s tr u t ng hóa d li u mà ữ ệ làm cho các d ch v thay đ i theo d li u
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 9/24
ố ượ
Đ i t
ng
ể
ề
ầ
ộ
ọ
ươ
ứ
ng Đ i t ộ thu c tính và các ph
ự ố ượ (Object) là m t th c th ph n m m bao b c các ng th c liên quan
ố ượ
ể ể
ượ
ậ ướ
ỹ
ố
ng là chìa khóa đ hi u đ
c k thu t h
ng đ i
Các đ i t ngượ t
ả ạ
ự
ố ượ
ể ụ ể i th c là th c th c th có c tr ng thái
ế ớ ng th gi ộ
ố ượ
ố
ướ
tên, màu, gi ng, vui s
ng
con chó có các tr ng thái: ẫ
ạ ủ ủ
ệ
ạ
ộ
ủ
ộ
ố ượ
ng xe
Đ i t ự (states) và hành đ ng (behaviour) Ví dụ: Đ i t ng ăn, ng , s a, v y tai, ch y, b nh… … và các hành đ ng: ạ ị => xác đ nh các tr ng thái và hành đ ng c a đ i t đ p?ạ Ngôn ng lữ p trình C ậ
ươ ậ ậ ấ Ch ++ ng 7: L p trình có c u trúc và L p trình HĐT 10/24
ố ượ
Đ i t
ng
ầ
ề
ể
ể
ế ớ
ư
ạ
ố ượ ng th gi
ể ượ ượ ọ
ươ
ế
ộ
ữ ệ
Đ i t ố ễ ng ph n m m có th dùng đ bi u di n đ i ộ ọ ự ượ c g i là thu c i th c nh ng tr ng thái đ t tính attribute (các bi n) và hành đ ng đ ng c g i là ph ứ th c method (các hàm) trong JAVA. Còn trong C++ thì ọ g i là d li u thành viên và hàm thành viên
Ví dụ:
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 11/24
ố ượ
Đ i t
ng
ầ
ỏ
ủ
ể
ề ạ ị ề ộ
ư
ề
ậ ậ ươ
ứ
ệ
ữ ộ ố ượ Ví dụ: M t đ i t ng ph n m m mô ph ng cho hình ch ữ ộ nh t có các thu c tính đ xác đ nh tr ng thái c a hình ch nh t nh chi u dài 10cm và chi u r ng là 6cm. Và có các ph
ng th c: tính chu vi, di n tích
ộ ố ượ
ụ ể ượ
ng c th đ
ọ c g i
Trong l p trình OOP thì m t đ i t ậ ể ệ (instance) là m t ộ th hi n
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 12/24
ộ
ươ
Thu c tính và Ph
ứ ng th c
ề ộ
ữ ệ
ể
ặ
(attribute) là d li u trình bày các đ c đi m v m t
ộ Thu c tính ố ượ đ i t
ng
ọ
ộ ớ
ủ
ả
ộ
ng c a m t l p ph i có cùng các thu c tính ể
ố ượ ị ủ
ư
M i đ i t ộ nh ng giá tr c a các thu c tính thì có th khác nhau
ộ
ể
ố ượ
ậ
ị
ng có th nh n các giá tr khác
ủ ể i các th i đi m khác nhau ậ
ữ
ộ
ề ỗ
ể
ạ
ậ
ờ
ị
ề ộ
ề
ặ
M t thu c tính c a đ i t ộ ờ ạ nhau t ố ượ Ví dụ: đ i t ng hình ch nh t có các thu c tính chi u dài, ề ộ chi u r ng có th nh n các giá tr khác nhau. Và t i m i th i ị ể đi m khác nhau thì giá tr chi u dài ho c chi u r ng cũng khác nhau.
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 13/24
ộ
ươ
Thu c tính và Ph
ứ ng th c
ươ
ứ
ứ
ứ (method) là cách đáp ng ch c năng tác
ng th c
ữ ệ ủ ố ượ
Ph ộ đ ng lên d li u c a đ i t
ng
ủ
ị
ứ ượ
ự
ươ ng và đ
ộ ứ ng th c xác đ nh cách th c ho t đ ng c a m t ụ ể ượ ạ ố ượ c t o c th c thi khi đ i t
ạ ộ ng c th đ
Các ph ố ượ đ i t ra
ạ ộ ệ
ữ
ộ ớ ỉ ộ ố ượ c t o ra thì các ph
ớ ượ
ể ứ
ậ ữ ủ Ví dụ: các ho t đ ng chung c a m t l p hình ch nh t là ụ ư ng c tính chu vi và di n tích. Nh ng ch khi m t đ i t ươ ậ ượ ạ ộ ớ ng th thu c l p hình ch nh t đ th c đó m i đ
ự c th c thi.
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 14/24
L pớ
ộ
ẫ
ộ
ế ế ươ
ị ầ ấ ả
ứ
ố
t k hay m t m u ban đ u đ nh nghĩa t c các đ i
ng th c chung cho t
ộ ủ
ạ
L pớ (class) là m t thi các thu c tính và các ph ượ t
ộ ng c a cùng m t lo i nào đó.
ộ ố ượ
ộ
M t đ i t
ộ ớ ể ệ ụ ể ủ ng là m t th hi n c th c a m t l p
ữ
ề
ậ
ớ
ố ượ
ữ ng hình ch
ậ ớ
ị
Ví dụ: Trong l p hình ch nh t có nhi u đ i t ộ nh t v i các giá tr thu c tính khác nhau.
ng h p m t thu c tính hay ph
ố ượ
ượ
t
ươ ng thì đ
ủ ứ ng th c nào đó c a thu c ộ ọ c g i là
Trong tr ợ ườ ố ớ l p là gi ng nhau ươ tính l pớ và ph
ộ ộ ở ấ ả t c các đ i t ứ ớ ng th c l p
ươ ậ ấ ậ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 15/24
L pớ
ộ ạ
ế ớ ị
ớ
ể ệ ớ
ượ
Thu c tính l p ụ ữ ệ ớ (class attribute) là m t h ng m c d li u ộ ể ụ ể ộ ớ ế ớ liên k t v i m t l p c th mà không liên k t v i các th ệ ủ ớ hi n c a l p. Nó đ c đ nh nghĩa bên trong đ nh nghĩa l p ẽ ở và đ
ượ ị c chi s b i các th hi n l p
ộ ớ
ộ ươ ứ ng th c ả ớ ấ ỳ ộ ố i b t k m t đ i ưở ế ứ ớ ả ng đ n ng th c l p nh h ẽ ộ ớ ế ưở ng đ n m t l p riêng r
Ph ươ ứ ớ (class method) là m t ph ng th c l p ọ ệ ượ c tri u g i mà không tham kh o t đ ươ ấ ả ượ ng nào. T t c các ph t ả ứ toàn b l p ch không nh h nào.
ươ ậ ấ ậ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 16/24
ệ
ề
Truy n thông đi p
ụ
ườ
ứ
ứ ng trình hay ng d ng l n th
ề ằ
ớ ng ch a nhi u ớ ươ ng tác v i nhau b ng
ươ ng khác nhau. Và chúng t ệ
M t ch ộ ố ượ đ i t ử cách g i các thông đi p.
ố
ệ
ọ ứ ộ
ố ượ ữ ố ượ ậ ng h c sinh mu n đ i t ng hình ch nh t ệ ố ượ ươ ng ng th c tính chu vi, di n tích thì đ i t ữ ệ ớ ố ượ ử ng hình ch i đ i t
Ví dụ: Đ i t ự th c hi n ph ầ ọ h c sinh c n g i m t thông đi p t nh t.ậ
ươ ậ ấ ậ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 17/24
ệ
ề
Truy n thông đi p
ộ ờ
ạ ộ
ầ
ộ i yêu c u m t ho t đ ng
Thông đi pệ (message) là m t l
M t thông đi p g m có:
ệ ệ ng nh n thông đi p ự
ứ ươ
ồ ộ Đ i t ậ ố ượ Tên c a ph ệ ươ ủ ng th c th c hi n Các tham s mà ph ứ ầ ố
ng th c c n
ộ
ệ
ọ
ượ ươ
ề ứ
ộ ố ượ c truy n khi m t đ i t ố ượ ủ ng th c c a đ i t
ệ ng tri u g i ể ng khác đ yêu
M t thông đi p đ ề ộ m t hay nhi u ph ầ c u thông tin
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 18/24
ủ ậ
ể
ặ
7.3 Đ c đi m c a l p trình HĐT
Tính đóng gói Tính th a kừ ế Tính đa hình
ươ ậ ấ ậ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 19/24
Tính đóng gói (Encapsulation)
ủ
ạ
ộ
Trong OOP thì các thu c tính là trung tâm, là h t nhân c a ố ượ đ i t
ng
ủ
ấ
ươ ố ượ
ạ ươ ng khác trong ch
ệ
Các ph các đ i t Vi c này đ
ứ ng th c bao quanh và che gi u đi h t nhân c a ố ượ ừ các đ i t ng t ng trình. ự ượ ọ c g i là s đóng gói
ấ
ế
ệ
ệ ủ
ự ươ
ữ ệ
ng đ i t
ướ
ộ
ố ữ ệ
ữ ệ
ể
ớ
Đóng gói là ti n trình che gi u vi c th c thi chi ti ộ ế t m t ậ ố ượ ng; là khái ni m trung tâm c a ph ng pháp l p trình đ i t ố ượ ử ướ ng, trong đó d li u và các thao tác x lý nó h ị ẽ ượ c và “đóng” thành m t “gói” th ng c qui đ nh tr s đ ạ ệ ớ ấ t v i các d li u khác t o thành ki u d li u nh t, riêng bi ớ ọ v i tên g i là l p. Ngôn ng lữ p trình C ậ
ươ ậ ậ ấ 7: L p trình có c u trúc và L p trình HĐT Ch ++ ng 20/24
Tính đóng gói (Encapsulation)
ượ
c l
ử
Các thao tác đ ỉ ử ữ ệ c khai báo trong gói d li u nào ch x ộ ượ ạ ữ ệ ữ ệ i d li u trong m t lý d li u trong gói đó và ng ở ộ ị ỉ gói ch b tác đ ng, x lý b i thao tác đã khai báo trong gói đó.
ế ủ
ế
t c a thi
t
ệ ẩ ố ượ
ừ
Che gi u thông tin ấ ế k hay thi công t
là vi c n đi các chi ti ng khác
các đ i t
ươ ậ ấ ậ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 21/24
ừ ế
Tính th a k (Inheritance)
ớ
ượ
ế ừ
ị
c đ nh nghĩa k th a
L p trình OOP cho phép các l p đ ừ t
ậ ớ các l p khác
ớ
ớ
ữ ượ
ạ ớ
ạ
ạ
ớ
ạ ớ Ví dụ: L p xe đ p leo núi và l p xe đ p đua là nh ng l p ọ ủ ớ con (subclass) c a l p xe đ p. Lúc này l p xe đ p đ c g i là l p cha (superclass)
ươ
ộ
ừ ế nghĩa là các ph
ộ ớ
ng th c và các thu c tính đ ừ ế
ứ ể ượ
c th a k ho c đ
ượ c ặ ượ ử c s
ạ ở ớ
ị ụ
Th a k đ nh nghĩa trong m t l p có th đ d ng l
i b i l p khác
ớ
ứ
ộ
ượ
ng th c hay thu c tính đ
c
là l p có các ph ộ
ng b i m t hay nhi u l p khác
ậ ấ ậ
L p cha ớ ừ ưở th a h Ngôn ng lữ p trình C ậ
ở ++
ươ ề ớ ươ ng
Ch 7: L p trình có c u trúc và L p trình HĐT 22/24
ừ ế
Tính th a k (Inheritance)
ộ ố ặ
ủ
ớ
là l p th a h
ng m t s đ c tính chung c a
ộ ố ặ
L p con ừ ưở ớ ớ l p cha và thêm vào m t s đ c tính riêng khác.
ừ ế
ộ
ươ
ng th c t
ứ ừ
ủ
Các l p con th a k các thu c tính và ph ớ ớ l p cha c a nó.
ể ị
ươ
ạ
ứ
ng th c
ớ ừ ế ể ử
i các ph ủ
ộ
Các l p con có th đ nh nghĩa l ượ đ
c th a k đ x lý các thu c tính riêng c a chúng
ươ ậ ấ ậ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 23/24
Tính đa hình (Polymorphism)
ươ
ứ
ề
ự
ứ ố ượ c th c hi n khác nhau đ i v i các đ i t
ng th c cùng tên ng, các
Đa hình nghĩa là “nhi u hình th c”, ph ố ớ ệ ể ượ có th đ ớ l p khác nhau.
ứ ứ
ươ
ụ
ộ
ữ
ớ
ộ
ng th c ng d ng cho các ể ư ế ng thu c các l p khác nhau thì có th đ a đ n nh ng
V i đa hình, n u cùng m t ph ế ớ ố ượ đ i t ả ế k t qu khác nhau.
ớ
ữ
ệ
ữ ậ
ạ
ậ Ví dụ: hai l p Hình ch nh t và hình tròn cùng có các ứ ươ ph ng th c tính chu vi, di n tích. Nh ng cách tính chu vi ủ ố ượ c a đ i t
ư ng hình ch nh t và hình tròn l
i khác nhau.
ươ ậ ậ ấ ậ Ngôn ng lữ p trình C ++ Ch ng 7: L p trình có c u trúc và L p trình HĐT 24/24