BÀI 2: TÌM HIỂU VỀ HƯỚNG ĐỐI TƯỢNG (OBJECT-ORIENTATION)

Chia sẻ: Luongnguyenviet Cuong | Ngày: | Loại File: PDF | Số trang:8

0
146
lượt xem
44
download

BÀI 2: TÌM HIỂU VỀ HƯỚNG ĐỐI TƯỢNG (OBJECT-ORIENTATION)

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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 đối tượ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...

Chủ đề:
Lưu

Nội dung Text: BÀI 2: TÌM HIỂU VỀ HƯỚNG ĐỐI TƯỢNG (OBJECT-ORIENTATION)

  1. 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) + 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 đối tượ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 đối tượ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 đối tượ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 đối tượ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 đố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) 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ữ: Đối tượ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
  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 đối tượ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
  3. 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 đối tượ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
  4. 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
  5. 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? đối tượng remote gửi một message đến đối tượng TV để bật TV lên. Đối tượ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à đối tượng remote sẽ gửi message khác (thay đổi kênh) đến đối tượ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
  6. 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
  7. 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
  8. 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 đối tượ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 đối tượ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 đối tượ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 đối tượ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 đối tượng tập hợp (aggregate object) bao gồm một tập các đối tượng thành phần. Sự cấu thành (composition) là một loại aggregation đặc biệt. Trong một đối tượ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 đối tượng cấu thành. Trang 8 – Bài 2

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản