BÀI2:
TÌM HIỂUVỀHƯỚNGĐỐITƯỢNG(OBJECT-ORIENTATION)
Nội dung chính trong bài học:
+ Sự trừu tượng hóa (abstraction)
+ Sự thừa kế (inheritance)
+ Tính đa hình (polymorphism)
+ Tính đóng gói (encapsulation)
+ Việc truyền thông điệp (message sending)
+ Mối kết hợp (association)
+ Sự tập hợp (aggregation)
Hướng đốitượng đem lại những đổi thay rất lớn cho thế giới phần mềm. Nó được xem là
một cách thức mới để tạo chương trình và có rất nhiều ưu điểm. Nó hướng theo cách tiếp
cận dựa trên thành phần (component-based approach) để phát triển phần mềm sao cho một
hệ thống chính là một tập các đốitượng (object). Sau đó, ta có thể mở rộng hệ thống bằng
cách tăng cường khả năng cho các thành phần sẵn có hoặc thêm các thành phần mới. cuối
cùng, ta có thể tái sử dụng các object đã tạo cho hệ thống trước đó khi xây dựng một hệ
thống mới, làm cắt giảm đáng kể thời gian phát triển hệ thống.
Hướng đốitượng rất quan trọng đối với ngành công nghệ phần mềm và OMG (Object
Management Group) là một tổ chức đã thiết lập các chuẩn cho việc phát triển hướngđối
tượng. UML cho phép ta xây dựng các mô hình dễ dùng, dễ hiểu của các đốitượng sao cho
các lập trình viên có thể tạo ra chúng trong phần mềm.
Hướng đốitượng chỉ là một tập ý tưởng dựa trên một số nguyên lý cơ sở. Trong bài này,
chúng ta sẽ tìmhiểu các nguyên lý đó.
Đối tượng (object) có mọi nơi
Đối tượng có tính cụ thể, nói cách khác chúng tồn tại xung quanh ta, chúng tạo nên thế giới.
Như đã đề cập trong bài trước, phần mềm ngày nay có xu hướng mô phỏng thế giới hoặc
một phần nhỏ của thê 1giới, do vậy các chương trình thường “bắt trước” các object trong thế
giới thực.
Thuật ngữ: Đốitượng (object) là một thể hiện (instance) của một lớp (class). Mỗi người
chúng ta là một thể hiện của lớp con người (person class). Một object có cấu trúc
(structure). Nghĩa là nó có các thuộc tính (attribute, property) và hành vi (behavior). Một
hành vi của object bao gồm các hành động (operation) mà nó thực hiện. Thuộc tính và hành
vi kết hợp thành đặc trưng (feature) của object.
Vì là các object trong lớp person nên mỗi người chúng ta có các thuộc tính như: chiều cao,
cân nặng, tuổi, … Chúng ta cũng thực hiện một số hành động như: ăn, ngủ, đọc, viết, nói, đi
Trang 1 – Bài 2
làm, … Nếu chúng ta cần tạo một hệ thống xử lý các thông tin về con người, chẳng hạn như
hệ thống quản lý lương hay hệ thống quản lý nhân sự, chúng ta cần kết hợp chặt chẽ các
thuộc tính và hành động này trong phần mềm của chúng ta.
Trong thế giới hướngđối tượng, một class là một mẫu (template) để sinh các object. Trở lại
với ví dụ về máy giặt (washing machine). Nếu lớp washing machine được mô tả bởi các
thuộc tính như brand name, model name, serial number và capacity cùng với các hành vi
như add clothes, add detergent và remove clothes. Với các thuộc tính và hành vi trên, ta có
được cơ chế để sản xuất ra các thể hiện (instance) mới của lớp washing machine, có nghĩa là
ta có thể tạo các object mới. Xem hình 2.1
Hình 2.1
Lớp washing machine –
mô hình gốc của một
máy giặt – là một mẫu
(template) cho việc tạo
ra các thể hiện mới của
các máy giặt.
Chú ý rằng mục tiêu của hướngđốitượng là phát triển phần mềm có khả năng phản ánh một
phần cụ thể của thế giới thực. Càng nhiều thuộc tính (attribute) và hành vi (behavior) thu
thập được thì mô hình sẽ càng có tính thực tiễn. Trong ví dụ trước, có thể bổ sung thêm các
thuộc tính như drum volume, internal timer, trap, motor và motor speed. Các hành vi có thể
bổ sung gồm add bleach, time the soak, time the wash, time the rise và time the spin. Xem
hình 2.2
Hình 2.2
Thêm các thuộc tính và
hành vi giúp cho mô
hình gần với thực tế
hơn.
Trang 2 – Bài 2
Các khái niệm
Sự trừu tượng hóa (abstraction):
Thuật ngữ: sự trừu tượng hóa là sự đơn giản hóa, lược bỏ đi các tính chất, hành động của
một thực thể để chỉ còn lại những gì cần thiết.
Các loại vấn đề khác nhau đòi hỏi mức độ thông tin khác nhau. Hình 2.2 xây dựng một mô
hình washing machine với nhiều thuộc tính và hành vi hơn so với Hình 2.1. Làm như thế có
cần thiết không?
Nếu ta là thành viên trong một nhóm với nhiệm vụ tạo một chương trình máy tính mô phỏng
chính xác cách thức một máy giặt hoạt động thì việc bổ sung thuộc tính, hành vi như đã nói
là rất cần thiết. Một chương trình máy tính như thế (dùng cho kỹ sư thiết kế máy giặt) phải
có đủ thông tin để dự tính chính xác về những sẽ diễn ra khi máy giặt được tạo ra, khi nó
vận hành thực tế. Đối với các loại chương trình như thế, có thể loại bỏ những thuộc tính
không thực sự hữu dụng như thuộc tính serial number.
Với ví dụ khác, nếu chúng ta tạo một phần mềm theo dõi các giao dịch trong một cửa hàng
giặt ủi có nhiều máy giặt thì việc bổ sung thuộc tính, hành vi như đã nói là không cần thiết.
Chúng ta có thể giữ lại thuộc tính serial number cho mỗi đốitượng máy giặt.
Sự thừa kế (inheritance):
Thuật ngữ: Một class là một lớp các object (trong phần mềm, nó là một mẫu cho việc tạo
object mới). Ngược lại, một object là một thể hiện (instance) của một class và nó có tất cả
các đặc tính mà class có. Điều này gọi là sự thừa kế (inheritance). Bất cứ thuộc tính và
hành vi nào ta quyết định cho lớp washing machine, mỗi object thuộc lớp cũng sẽ thừa kế
các thuộc tính và hành vi đó.
Không phải chỉ có object thừa kế từ class mà một class cũng có thể thừa kế từ một class
khác. Ví dụ washing machines, refrigerators, microwave ovens, toasters, dishwashers,
radios, waffle makers, blenders và irons đều là các class, nhưng chúng là thành viên của một
class chung hơn: appliances (đồ điện gia dụng). Một appliance có các thuộc tính như công
tắc on-off, dây điện và các hành vi tắt , mở.
Thuật ngữ: Nói cách khác các lớp washing machines, refrigerators, microwave ovens, … là
các lớp con (subclass) của lớp appliance. Lớp appliance gọi là lớp cha (super class) của các
lớp khác. Hình 2.3 cho thấy quan hệ superclass và subclass.
Trang 3 – Bài 2
Hình 2.3
Các loại đồ gia dụng
khác nhau thừa kế các
thuộc tính và hành vi
của lớp appliance. Mỗi
loại đồ điện gia dụng
khác nhau là một
subclass của lớp
appliance. Ngược lại,
lớp appliance là một
superclass
Sự thừa kế không dừng ở đó. Chẳng hạn Appliance tiếp tục là subclass của lớp Household
Item (đồ gia dụng). Một subclass khác của Household Item là lớp Furniture
Hình 2.4
Superclass cũng có thể
là subclass
Tính đa hình (polymorphism):
Thuật ngữ: đôi khi, một hành vi (operation) có cùng tên trong các class khác nhau. Ví dụ,
“open” cửa lớn, “open” cửa sổ, “open” tạp chí, món quà, tài khoản ngân hàng, …Trong mỗi
trường hợp đó, chúng ta thực hiện một hành vi khác nhau. Trong hướngđối tượng, một
hành vi cùng tên có thể được thực hiện khác nhau với những class khác nhau. Điều này
được gọi là tính đa hình (polymorphism).
Hình 2.5
Trong tính đa hình, một
hành vi có thể có cùng
tên trong những class
khác nhau và tiến hành
khác nhau trong mỗi
class.
Trang 4 – Bài 2
Tính đóng gói (encapsulation):
Khi một object thực thi các hành vi của nó, các hành vi này bị che dấu (xem hình 2.6). Khi
chúng ta xem tivi, chúng ta không biết và không quan tâm đến các linh kiện điện tử phức
tạp phía sau màn hình tivi, cũng như nhiều hành vi nhằm quét ảnh lên màn hình.
Hình 2.6
Các object đóng gói
những gì chúng thực
hiện. Nghĩa là, chúng
dấu đi các hoạt động
bên trong của các hành
vi đối với thế giới bên
ngoài và các object
khác.
Việc truyền thông điệp (message sending):
Trong một hệ thống, các object làm việc cùng nhau bằng cách gửi các thông điệp (message)
qua lại. Một object gửi message đến object kia để thực thi một hành vi (operation) và object
nhận message sẽ thực thi hành vi đó.
Lấy ví dụ giữa một TV với một điều khiển từ xa (remote). Khi muốn xem TV, chúng ta
nhấn nút ON trên remote. Điều gì xảy ra? đốitượng remote gửi một message đến đốitượng
TV để bật TV lên. Đốitượng TV khi nhận được message này sẽ ‘biết’ cần làm gì để thực
hiện hành vi bật TV. Khi muốn xem kênh khác, chúng ta nhấn vào nút kênh tương ứng trên
remote và đốitượng remote sẽ gửi message khác (thay đổi kênh) đến đốitượng TV. Ngoài
ra còn rất nhiều chức năng khác, …
Đề cập chút ít về giao tiếp (interface). Hầu hết các chức năng điều khiển TV bằng remote
đều có thể thực hiện nhờ các nút bấm ngay trên TV. Nhưng rõ ràng, interface mà TV thể
hiện đối với chúng ta (tập các nút bấm trên TV) không giống với interface mà nó thể hiện
đối với remote (thông qua bộ nhận tia hồng ngoại).
Hình 2.7
Ví dụ về việc truyền
message từ một object này
đến một object khác.
Remote-object gửi một
message đến TV-object để
bật TV. TV-object nhận
message thông qua
interface của nó, đó là bộ
nhận tia hồng ngoại.
Trang 5 – Bài 2
Mối kết hợp (association):
Thông thường, các object không độc lập mà có quan hệ với nhau. Ví dụ, khi bạn bật Tivi,
theo thuật ngữ hướngđối tượng, bạn và tivi có một mối kết hợp (association). Mối kết hợp
“turn-on” là mối kết hợp đơn hướng (unidirectional), như hình 2.8.
Ngoài ra còn có mối kết hợp hai hướng (bidirectional), chẳng hạn như “is married to”.
Hình 2.8
Các object thường kết
hợp với nhau theo một
vài cách. Khi một người
bật TV, người đó đang
trong mối kết hợp đơn
hướng với TV.
Đôi khi một object có thể kết hợp với một object khác theo nhiều cách. Nếu bạn và đồng
nghiệp là bạn bè thì giữa 2 người có 2 association là “is the friend of” và “is the coworker
of”. Xem hình 2.9.
Hình 2.9
Các object đôi khi kết
hợp với nhau theo
nhiều cách.
Một class có thể kết hợp cùng lúc với nhiều class khác nhau. Một người có thể đi trên ô tô
và người cũng có thể đi trên xe bus. Xem hình 2.10.
Hình 2.10
Một class có thể kết hợp
với nhiều class khác.
Trang 6 – Bài 2
Thuật ngữ: Lượng số (multiplicity) là một khía cạnh quan trọng của association giữa các
object. Nó cho biết số lượng object trong một class có quan hệ với với 1 object của class kết
hợp. Khóa học (course) và người hướng dẫn (instructor) là mối kết hợp 1-1 (one-to-one
association). Trong trường hợp đặc biệt, khi một vài instructor cùng dạy một course trong
suốt học kỳ thì mối kết hợp giữa course và instructor là one-to-many.
Sự tập hợp (aggregation):
Hãy xem xét hệ thống máy tính của bạn. Nó bao gồm 1 thùng CPU, 1 keyboard, 1 mouse, 1
monitor, 1 CD-ROM drive, 1 hoặc nhiều HD, 1 modem, 1 FD, 1 printer và có thể có thêm
vài hộp loa. Bên trong thùng CPU còn có 1 CPU, 1 graphics card, 1 sound card và một số
linh kiện cần thiết khác.
Thuật ngữ: Máy tính của bạn được xem là một sự tập hợp (aggregation), là một loại khác
của association giữa các object. Giống như nhiều thứ khác, máy tính được tạo nên từ một số
linh kiện khác nhau (xem hình 2.11).
Hình 2.11
Một hệ thống máy tính
đặc thù là một ví dụ cho
aggregation-một object
được tạo nên từ sự tập
hợp của một vài loại
object khác nhau.
Thuật ngữ: Một dạng đặc biệt của aggregation liên quan đến quan hệ chặt chẽ giữa một
aggregation object với các thành phần của nó. Nó được gọi là sự cấu thành (composition).
Điểm chính yếu của composition là các thành phần tồn tại như là những component chỉ
trong composite object thôi. Ví dụ, 1 sáo sơmi (shirt) là một composite của 1 thân (body), 1
cổ áo (collar), 2 tay áo (sleeve), một số nút áo (button), khuyết áo (buttonhold) và cổ tay áo
(cuff). Nếu tách khỏi shirt thì collar trở nên vô dụng.
Đôi khi, một thành phần trong một composition không tồn tại mãi cùng composition. Ví dụ
lá (leaf) tên một cây (tree) có thể tàn trước khi cây chết. Dĩ nhiên, nếu ta hủy cây thì lá cũng
chết theo (xem hình 2.12)
Khái niệm aggregation và composition quan trọng bởi chúng phản ánh những sự việc rất
thông thường và giúp chúng ta tạo ra các mô hình gần giống với thực tế.
Trang 7 – Bài 2
Hình 2.11
Trong một composition,
một thành phần có thể
“chết” trước khi
composition “chết”.
Nếu ta hủy sự cấu thành
(composite) thì các
thành phần cũng bị hủy
theo.
Tóm lược
Hướng đốitượng là một tập các tư tưởng dựa trên một số nguyên lý cơ bản. Một đốitượng
là một thể hiện của một lớp. Một lớp loại tổng quát của các đốitượng có củng thuộc tính và
hành vi. Khi ta tạo một đối tượng, vấn đề là cần xác định những thuộc tính và hành vi cho
đối tượng.
Thừa kế (inheritance) là một mặt quan trọng trong hướngđối tượng: Một đốitượng thừa kế
các thuộc tính và hành vi từ lớp của nó. Một lớp cũng có thể thừa kế các thuộc tính và hành
vi từ một lớp khác.
Tính đa hình (polymorphism) là một mặt quan trọng khác. Nó chỉ ra rằng một hành vi có thể
có cùng tên trong các lớp khác nhau, nhưng mỗi lớp sẽ thực thi hành vi theo một cách khác
nhau.
Các object che dấu việc thực thi các hành vi đối với object khác và cả đối với thế giới bên
ngoài. Mỗi object đưa ra một giao diện (interface) sao cho các object khác có thể yêu cầu nó
thực thi các hành vi của chính nó.
Các object làm việc với nhau bằng cách gửi thông điệp (message) qua lại. Thông điệp là các
yêu cầu thực thi hành vi.
Các object thường có mối kết hợp với một objedt khác. Mối kết hợp (assocition) đó có
nhiều dạng khác nhau. Một object trong một class có thể kết hợp với nhiều objest trong
class khác.
Sự tập hợp (aggregation) là một loại kết hợp. Một đốitượng tập hợp (aggregate object) bao
gồm một tập các đốitượng thành phần.
Sự cấu thành (composition) là một loại aggregation đặc biệt. Trong một đốitượng cấu thành
(composite object), các thành phần tồn tại như là một bộ phận chỉ của đốitượng cấu thành.
Trang 8 – Bài 2
. BÀI 2:
TÌM HIỂU VỀ HƯỚNG ĐỐI TƯỢNG (OBJECT-ORIENTATION)
Nội dung chính trong bài học:
+ Sự trừu tượng hóa (abstraction)
+. phần mềm.
Hướng đối tượng chỉ là một tập ý tưởng dựa trên một số nguyên lý cơ sở. Trong bài này,
chúng ta sẽ tìm hiểu các nguyên lý đó.
Đối tượng (object)