ƯƠ

ƯỚ

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