Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 2: Cấu trúc phần mềm hướng đối tượng

2.1 Sự phát triển trong cấu trúc tổ chức phần mềm

2.2 Cấu trúc của 1 ứng dụng hướng ₫ối tượng

2.3 Đối tượng, thuộc tính, tác vụ

2.4 Abstract type

2.5 Class

2.6 Tính bao ₫óng

2.7 Tính thừa kế & cơ chế 'override'

2.8 Tính bao gộp

2.9 Thông ₫iệp, tính ₫a xạ và kiểm tra kiểu

2.10 Tính tổng quát hóa

2.11 Kết chươn

pdf 28 trang phuongnguyen 9360
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 2: Cấu trúc phần mềm hướng đối tượng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 2: Cấu trúc phần mềm hướng đối tượng

Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 2: Cấu trúc phần mềm hướng đối tượng
 Chương 2
 Cấu trúc phần mềm hướng ₫ối tượng
 2.1 Sự phát triển trong cấu trúc tổ chức phần mềm
 2.2 Cấu trúc của 1 ứng dụng hướng ₫ối tượng
 2.3 Đối tượng, thuộc tính, tác vụ
 2.4 Abstract type
 2.5 Class
 2.6 Tính bao ₫óng
 2.7 Tính thừa kế & cơ chế 'override'
 2.8 Tính bao gộp
 2.9 Thông ₫iệp, tính ₫a xạ và kiểm tra kiểu
 2.10 Tính tổng quát hóa
 2.11 Kết chương
Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
© 2010 Slide 1
2.1 Sự phát triển trong cấu trúc tổ chức phần mềm
. Ban ₫ầu, chương trình thường rất 
 Lệnh 1
 ngắn, chỉ giải quyết 1 vấn ₫ề nhỏ, 
 rõ ràng, ₫ơn giản. Lệnh 2
. Lúc này, chương trình là 1 danh Lệnh 3 Dữ liệu 1
 sách ngắn các lệnh, các lệnh này ... Dữ liệu 2
 sẽ xử lý tập các dữ liệu (số lượng Lệnh i Dữ liệu 3
 cũng rất ít).
 ... ...
 Lệnh j Dữ liệu n
 ...
 Lệnh n
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 2
2.1 Sự phát triển trong cấu trúc tổ chức phần mềm
. Nếu phân tích kỹ hơn, ta thấy trong 
 danh sách các lệnh của chương 
 trình có hiện tượng sau : ₫oạn lệnh 
 giải quyết vần về nhỏ hơn nào ₫ó Dữ liệu 1
 xuất hiện nhiều lần vì chương trình Dữ liệu 2
 cần thực hiện nó nhiều lần.
 Dữ liệu 3
. Ta viết ₫oạn lệnh này 1 lần, gán 
 ...
 cho nó 1 tên nhận dạng. Ta gọi nó 
 là chương trình con. Trong họ ngôn Dữ liệu n
 ngữ C, ta dùng thuật ngữ function.
. Function giúp ta tổ chức chương 
 trình nhất quán hơn, gọn nhẹ hơn, 
 dễ bảo trì và phát triển hơn.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 3
2.1 Sự phát triển trong cấu trúc tổ chức phần mềm
. Trong chương trình bên phải, ta 
 thấy chức năng tính cos(x) cần 3 lần 
 trong chương trình, ta ₫ịnh nghĩa Cos(0)
 hàm cos(x) 1 lần với tham số x. Dữ liệu 1
. Mỗi khi cần tính cos(x) trong Cos(90) Dữ liệu 2
 chương trình, ta chỉ cần viết 1 lệnh Dữ liệu 3
 gọi hàm ₫ơn giản.
 Cos(45) ...
 Dữ liệu n
 Cos(x)
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 4
2.1 Sự phát triển trong cấu trúc tổ chức phần mềm
. Trong thực tế hiện nay, chương trình thường giải quyết nhiều vấn 
 ₫ề lớn, phức tạp, nó tương ứng với số lượng rất lớn các hàm và 
 dữ liệu. Lúc này ₫ể chúng trong 1 module (file) rất bất tiện, khó 
 duy trì...
. Ta phải tìm cách khác tổ chức phần mềm : phân rã module rất 
 lớn và phức tạp ban ₫ầu thành nhiều module nhỏ : mỗi module 
 chỉ chứa 1 ít hàm chức năng và dữ liệu có mối quan hệ mật thiết 
 nào ₫ó.
. Đây là cách tổ chức phần mềm hướng cấu trúc cổ ₫iển trước ₫ây.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 5
2.1 Sự phát triển trong cấu trúc tổ chức phần mềm
Chương trình = tập các module chức năng, mỗi module chứa 1 số 
hàm + dữ liệu có liên quan.
 dữ liệu 
 Module trong 
 (file) module 
 nhưng có 
 thể ₫ược 
 truy xuất tự 
 do bất kỳ 
Điểm nhập 
 ₫âu
 chương 
trình (hàm 
 dữ liệu cục 
 Main)
 bộ trong 
 từng hàm
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 6
2.1 Sự phát triển trong cấu trúc tổ chức phần mềm
 . Mặc dù mỗi hàm hay dữ liệu ₫ược ₫ặt trong 1 module xác ₫ịnh, 
 nhưng mặc ₫ịnh chúng ₫ược truy xuất tự do bới bất kỳ ₫âu trong 
 chương trình. Đây là 1 khuyết ₫iểm lớn, ta khắc phục bằng cách 
 miêu tả tầm vực riêng cho từng phần tử : mặc ₫ịnh trong các 
 ngôn ngữ C, C++, mỗi phần tử ₫ều có tầm vực công cộng, nghĩa 
 là bất kỳ ₫âu trong chương trình ₫ều truy xuất ₫ược nó.
 . Nếu muốn hạn chế việc truy xuất từ ngoài module, ta dùng từ 
 khóa static kết hợp với phần tử cần bao ₫óng, phần tử sẽ có tầm 
 vực cục bộ, bên ngoài module không truy xuất ₫ược nó nữa.
 . Một phương pháp khác ₫ể hạn chế tầm vực truy xuất từng phần 
 tử là ₫ịnh nghĩa nó theo cấu trúc lồng nhau dạng phân cấp : nếu 
 A chức B thì B chỉ ₫ược truy xuất bởi A, các nơi khác bên ngoài A 
 sẽ không thấy và truy xuất ₫ược B. Pascal là ngôn ngữ ₫iển hình 
 về hỗ trợ khả năng này.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 7
2.1 Sự phát triển trong cấu trúc tổ chức phần mềm
. Cho dù ₫ã dùng 1 số biện pháp ở slide trước thì cấu trúc tổ chức 
 phần mềm hướng cấu trúc vẫn còn 1 số khuyết ₫iểm khác.
. Thí dụ, trong phần mềm ta cần nhiều module có cùng chức năng 
 A, số lượng là ₫ộng chưa biết trước. Cấu trúc hướng cấu trúc chỉ 
 cho phép nhân bản module A với số lượng tĩnh biết trước khi 
 phần mềm chạy. Do ₫ó ta cần tìm 1 cấu trúc tổ chức phần mềm 
 khác : ₫ó là cấu trúc tổ chức phần mềm hướng ₫ối tượng mà ta 
 dùng chủ yếu hiện nay.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 8
2.2 Cấu trúc tổ chức chương trình OOP
Chương trình = tập các ₫ối tượng sống ₫ộc lập, tương tác nhau khi 
cần thiết ₫ể hoàn thành nhiệm vụ của chương trình (ứng dụng).
 Đối tượng 
 (object)
 dữ liệu cục 
 bộ trong 
 ₫ối tượng
Điểm nhập 
 chương 
trình (hàm 
 dữ liệu cục 
 Main)
 bộ trong 
 từng hàm
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 9
2.2 Cấu trúc tổ chức chương trình OOP
. Cấu trúc chương trình hướng ₫ối tượng rất thuần nhất, chỉ chứa 1 
 loại thành phần : ₫ối tượng.
. Các ₫ối tượng có tính ₫ộc lập rất cao quản lý, kiểm soát chương 
 trình rất dễ (cho dù chương trình có thể rất lớn) dễ nâng cấp, 
 bảo trì. 
. Không thể tạo ra dữ liệu toàn cục của chương trình ₫iểm yếu 
 nhất của chương trình cấu trúc không tồn tại nữa.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 10
2.3 Đối tượng (Object)
 Đối tượng là nguyên tử cấu thành ứng dụng.
 Đối tượng bao gồm 2 loại thành phần chính yếu : 
 . Tập các tác vụ (operation) : mỗi tác vụ thực hiện 1 chức năng 
 rõ ràng ₫ơn giản nào ₫ó mà bên ngoài cần dùng. 
 . Tập các thuộc tính dữ liệu (attribute) : mỗi thuộc tính có kiểu 
 dữ liệu cụ thể, và chứa 1 giá trị cụ thể thuộc kiểu tương ứng tại 
 từng thời ₫iểm. Các thuộc tính phục vụ cho các tác vụ và là 
 ₫ối tượng xử lý bởi các tác vụ, do ₫ó nên bao ₫óng và ẩn dấu 
 chúng trong ₫ối tượng, không cho bên ngoài thấy và truy xuất 
 trực tiếp.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 11
 2.3 Đối tượng (Object)
  Viết phần mềm hướng ₫ối tượng là qui trình ₫ặc tả các loại ₫ối 
 tượng cấu thành ứng dụng.
  Đặc tả một loại ₫ối tượng là ₫ặc tả 2 góc nhìn khác nhau về ₫ối 
 tượng :
 . Góc nhìn sử dụng : dùng phát biểu interface. 
 . Góc nhìn hiện thực cụ thể : dùng phát biểu class.Implementation
 (class)
 Interface
(abstract type)
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 12
2.4 Kiểu trừu tượng (Abstract type) hay interface
 Phát biểu interface ₫ịnh nghĩa thông tin sử dụng ₫ối tượng mà 
 bên ngoài thấy, kết hợp các thông tin này với 1 tên gọi, tên này 
 ₫ược gọi là tên kiểu trừu tượng (Abstract type) hay ngắn gọn là 
 type.
 Interface là tập hợp các ₫iểm nhập (entry) mà bên ngoài có thể 
 giao tiếp với ₫ối tượng. C# cho phép ₫ịnh nghĩa nhiều loại ₫iểm 
 nhập, nhưng phổ biến nhất là tác vụ chức năng (operation).
 Ta dùng chữ ký (signature) ₫ể ₫ịnh nghĩa và phân biệt mỗi ₫iểm 
 nhập. Chữ ký của 1 tác vụ gồm :
 1. tên tác vụ (operation)
 2. danh sách tham số hình thức, mỗi tham số ₫ược ₫ặc tả bởi 3 
 thuộc tính : tên, type và chiều di chuyển (IN, OUT, INOUT).
 3. ₫ặc tả chức năng của tác vụ (thường ở dạng chú thích).
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 13
2.4 Kiểu trừu tượng (Abstract type) hay interface
 Muốn làm việc với 1 ₫ối tượng nào ₫ó, ta thường dùng biến ₫ối 
 tượng. Biến ₫ối tượng nên ₫ược ₫ặc tả kiểu bằng tên interface, 
 hạn chế dùng tên class cụ thể. 
 Biến ₫ối tượng là biến tham khảo, nó không chứa trực tiếp ₫ối 
 tượng, nó chỉ chứa các thông tin ₫ể truy xuất ₫ược ₫ối tượng, bất 
 chấp ₫ối tượng ₫ang nằm ở ₫âu.
 Biến ₫ối tượng thuộc kiểu interface có thể tham khảo ₫ến nhiều 
 ₫ối tượng thuộc các class cụ thể khác nhau miễn sao các ₫ối 
 tượng này hỗ trợ ₫ược interface tương ứng.
 Như vậy, nếu ta dùng ₫ối tượng thông qua biến thuộc kiểu 
 interface thì ta không cần biết bất kỳ thông tin hiện thực chi tiết 
 nào về ₫ối tượng mà mình ₫ang dùng, nhờ vậy code ứng dụng sẽ 
 ₫ộc lập hoàn toàn với class hiện thực của ₫ối tượng ₫ược sử dụng 
 trong ứng dụng.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 14
Thí dụ interface
 Thí dụ sau ₫ây miêu tả 1 interface của ₫ối tượng mà hỗ trợ 2 tác 
 vụ chuẩn hóa chuỗi tiếng Việt về dạng tổ hợp và dựng sẵn. 
 Thông qua interface, người dùng không hề thấy và biết chi tiết về 
 hiện thực của các tác vụ, nhưng ₫iều này không hề ngăn cản họ 
 trong việc dùng ₫ối tượng nào ₫ó có interface IVietLib.
 interface IVietLib {
 //tác vụ chuẩn hóa chuỗi tiếng Việt về dạng tổ hợp
 int VnPre2Comp(String src, int len, ref String dst);
 //tác vụ chuẩn hóa chuỗi tiếng Việt về dạng dựng sẵn
 int VnComp2Pre(String src, int len, ref String dst);
 }
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 15
2.5 Class (Implementation)
 Phát biểu class ₫ịnh nghĩa chi tiết hiện thực ₫ối tượng :
 . ₫ịnh nghĩa các thuộc tính, mỗi thuộc tính ₫ược ₫ặc tả bởi các 
 thông tin về nó như tên nhận dạng, kiểu dữ liệu, tầm vực truy 
 xuất,... Kiểu của thuộc tính có thể là type cổ ₫iển (kiểu giá trị : 
 số nguyên, thực, ký tự, chuỗi ký tự,...) hay kiểu ₫ối tượng (kiểu 
 tham khảo), trong trường hợp sau thuộc tính sẽ là tham khảo 
 ₫ến ₫ối tượng khác. Trạng thái của ₫ối tượng là tập giá trị của 
 tất cả thuộc tính của ₫ối tượng tại thời ₫iểm tương ứng.
 . 'coding' các tác vụ (miêu tả giải thuật chi tiết về hoạt ₫ộng của 
 tác vụ), các hàm nội bộ trong class và các thành phần khác.
 Ngoài các thành phần chức năng, ta còn phải ₫ịnh nghĩa các tác 
 vụ quản lý ₫ối tượng như : khởi tạo trạng thái ban ₫ầu 
 (constructor), dọn dẹp các phần tử liên quan ₫ến ₫ối tượng khi 
 ₫ối tượng bị xóa (destructor).
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 16
Thí dụ về class
 Thí dụ sau ₫ây miêu tả 1 class hiện thực interface IVietLib :
 class MyVietLib : IVietLib {
 //₫ịnh nghĩa các thuộc tính cần dùng cho 2 tác vụ
 ...
 //₫ịnh nghĩa 2 tác vụ quản lý ₫ối tượng
 MyVietLib() {}
 ~MyVietLib() {}
 //₫ịnh nghĩa thuật giải tác vụ chuẩn hóa chuỗi tiếng Việt về 
 dạng tổ hợp
 int VnPre2Comp(String src, int len, ref String dst) {.}
 //₫ịnh nghĩa thuật giải tác vụ chuẩn hóa chuỗi tiếng Việt về 
 dạng dựng sẵn
 int VnComp2Pre(String src, int len, ref String dst) {}
 }Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 17
2.6 Tính ₫óng gói (encapsulation)
Tính ₫óng gói gồm 2 ý :
 Mỗi ₫ối tượng chỉ nên thực hiện một công việc nhỏ, ₫ơn giản, rõ 
 ràng. Các thành phần cần thiết ₫ể thực hiện công việc của ₫ối 
 tượng có mối quan hệ rất mật thiết với nhau và ₫ược ₫óng gói 
 thành ₫ối tượng sao cho tính kết dính (cohesion) cao nhất.
 Mỗi ₫ối tượng chỉ cung cấp cho khách hàng bên ngoài (client) 
 một tập ₫ủ nhỏ các tác vụ chức năng có nghĩa và phải che dấu 
 mọi chi tiết hiện thực của ₫ối tượng, không cho bên ngoài thấy và 
 truy xuất các chi tiết hiện thực này, nhờ vậy, tạo ₫ộ ₫ộc lập cao 
 giữa các ₫ối tượng, giảm thiểu tính nối ghép (coupling) hay phụ 
 thuộc giữa các ₫ối tượng xuống thấp nhất có thể có, ₫ể cuối cùng 
 thì việc quản lý, hiệu chỉnh và nâng cấp từng ₫ối tượng ₫ược dễ 
 dàng, không ảnh hưởng ₫ến các ₫ối tượng khác.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 18
2.6 Tính ₫óng gói (encapsulation)
 Trong 2 ý về tính ₫óng gói thì việc ẩn thông tin là quyết ₫ịnh nhất, 
 cụ thể :
 . che dấu các thuộc tính dữ liệu : nếu cần cho phép bên ngoài 
 truy xuất 1 thuộc tính vật lý, ta tạo 1 thuộc tính luận lý (2 tác 
 vụ get/set tương ứng) ₫ể giám sát và kiểm soát việc truy xuất.
 . che dấu chi tiết hiện thực các tác vụ.
 . che dấu các local function và sự hiện thực của chúng. 
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 19
2.7 Tính thừa kế (inheritance)
 Tính thừa kế cho phép giảm nhẹ công sức ₫ịnh nghĩa 
 interface/class : ta có thể ₫ịnh nghĩa các interface/class không 
 phải từ ₫ầu mà bằng cách kế thừa interface/class có sẵn nhưng 
 gần giống với mình :
 . Miêu tả tên cha : mọi thành phần của cha trở thành của mình.
 . override 1 số method của class cha, kết quả override chỉ tác 
 dụng trên ₫ối tượng của class con.
 . ₫ịnh nghĩa thêm các chi tiết mới (thường khá ít). 
 Đa thừa kế hay ₫ơn thừa kế. C# cho phép ₫a thừa kế interface 
 (₫a hiện thực), nhưng chỉ hỗ trợ ₫ơn thừa kế class.
 Thừa kế tạo ra mối quan hệ cha/con : phần tử ₫ã có là cha, phần 
 tử thừa kế cha ₫ược gọi là con. Cha/con có thể là trực tiếp hay 
 gián tiếp.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 20
2.7 Tính thừa kế (inheritance)
 Với các tính chất về thừa kế như slide trước, ta rút ra ₫ược 1 số 
 kết luận :
 . Đối tượng của class con luôn lớn hay hay ít nhất bằng ₫ối 
 tượng class cha.
 . Và như thế, ₫ối tượng class con hoàn toàn có thể ₫óng vai trò 
 của ₫ối tượng class cha và thay thế ₫ối tượng class cha khi 
 cần thiết, nhưng ngược lại thường không ₫ược. 
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 21
2.8 Tính bao gộp (aggregation)
 1 ₫ối tượng có thể chứa nhiều ₫ối tượng khác tạo nên mối quan 
 hệ bao gộp 1 cách ₫ệ quy giữa các ₫ối tượng. Thí dụ ₫ối tượng 
 quốc gia chứa nhiều ₫ối tượng tỉnh, ₫ối tượng tỉnh chứa nhiều ₫ối 
 tượng quận/huyện,
 Có 2 góc nhìn về tính bao gộp : ngữ nghĩa & hiện thực. 
 Góc nhìn ngữ nghĩa Góc nhìn hiện thực
 O2 O
 O1 2
 O1
 O3 O3
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 22
Ví dụ về bao gộp
//₫ịnh nghĩa class miêu tả ₫ối tượng ₫ồ họa cơ bản
abstract class Geometry { // abstract base class
 public abstract void Draw (Graphics g); // abstract operation
 protected int xPos, yPos;
 protected COLORREF color;
};
//₫ịnh nghĩa class ₫ồ họa phức hợp = tập các ₫ối tượng ₫ồ họa ₫ã có
class GeoGroup : Geometry {
 public override void Draw (Graphics g) {...} ; // override
 private Geometry [] objList; //danh sách các ₫ối tượng thành phần;
 int count; //số lượng các ₫ối tượng thành phần
};
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 23
2.9 Thông ₫iệp (Message), ₫a xạ (Polymorphism)
 Thông ₫iệp là phương tiện giao tiếp (hay tương tác) duy nhất giữa 
 các ₫ối tượng, nó cho phép gọi 1 tác vụ chức năng của 1 ₫ối 
 tượng từ 1 tham khảo ₫ến ₫ối tượng.
 Thông ₫iệp bao gồm 3 thành phần :
 . tham khảo ₫ến ₫ối tượng cần nhờ.
 . tên tác vụ muốn gọi.
 . danh sách tham số thực cần truyền cho (hay nhận về từ) tác 
 vụ.
 public override void Draw (Graphics g) {
 for (int i=0; i < count; i++)
 objList[i].Draw(g); //gởi thông ₫iệp nhờ ₫ối tượng objList[i]
 // tự hiển thị mình lên ₫ối tượng vẽ g
 }
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 24
2.9 Thông ₫iệp (Message), ₫a xạ (Polymorphism)
 Xét lệnh gởi thông ₫iệp ờ slide trước :
 objList[i].Draw(g); 
 Chúng ta không biết trước tác vụ Draw của class nào sẽ ₫ược 
 kích hoạt chạy, ta chỉ muốn 1 ₫iều : nếu objList[i] ₫ang tham 
 khảo ₫ến ₫ối tượng thuộc class nào (Point, Rectangle, Circle, 
 Image,) thì hãy kích hoạt tác vụ Draw của class ₫ó chạy dùm 
 ₫ể thực hiện ₫úng chức năng mà ta yêu cầu.
 Ý tưởng trên ₫ược gọi là tính ₫a xạ trong lới gởi thông ₫iệp.
 Tính ₫a xạ : cùng 1 lệnh gởi thông ₫iệp ₫ến ₫ối tượng thông qua 
 cùng 1 tham khảo nhưng ở vị trí/thời ₫iểm khác nhau có thể kích 
 hoạt việc thực thi tác vụ khác nhau của các ₫ối tượng khác nhau.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 25
2.10 Tính tổng quát hóa (Generalization)
 Viết phần mềm hướng ₫ối tượng là quá trình lặp : viết phát biểu 
 interface/class ₫ể ₫ặc tả từng loại ₫ối tượng cấu thành phần 
 mềm.
 Nếu số lượng class cấu thành ứng dụng quá lớn thì việc viết phần 
 mềm sẽ khó khăn, tốn nhiều thời gian công sức hơn.
 Làm sao giảm nhẹ thời gian, công sức lập trình các ứng dụng lớn 
 ?
 1. sử dụng cơ chế thừa kế trong ₫ịnh nghĩa interface/class.
 2. thay vì trực tiếp viết các class cụ thể ₫ặc tả cho các ₫ối tượng 
 trong phần mềm, ta chỉ viết 1 class tổng quát hóa, rồi nhờ 
 class này sinh tự ₫ộng mã nguồn các class cụ thể.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 26
2.10 Tính tổng quát hóa (Generalization)
 Thí dụ, thay vì phải viết n class gần giống nhau như danh sách
 các số nguyên, danh sách các số thực, danh sách các chuỗi,
 danh sách các record Sinhvien, danh sách các ₫ối tượng ₫ồ
 họa,... ta chỉ cần viết 1 class tổng quát hóa : danh sách các phần
 tử có kiểu hình thức T. Khi cần tạo 1 class danh sách các phần tử
 thuộc kiểu cụ thể nào ₫ó, ta chỉ viết lệnh gọi class tổng quát hóa
 và truyền tên kiểu cụ thể của phần tử trong danh sách.
 Mỗi ngôn ngữ hướng ₫ối tượng (C++, Java, C#) có khả năng, tính
 chất, mức ₫ộ hỗ trợ tổng quát hóa khác nhau.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 27
2.11 Kết chương 
 Chương này ₫ã giới thiệu cấu trúc của chương trình hướng ₫ối
 tượng, các phương tiện ₫ặc tả ₫ối tượng như interface, class.
 Chương này cũng ₫ã giới thiệu các tính chất liên quan ₫ến việc
 ₫ặc tả và sử dụng ₫ối tượng như thừa kế, bao ₫óng, bao gộp,
 tổng quát hóa.
 Chương này cũng ₫ã giới thiệu phương tiện giao tiếp duy nhất
 giữa các ₫ối tượng là thông ₫iệp, nhu cầu cần phải có tính ₫a xạ
 trong việc thực hiện lệnh gởi thông ₫iệp.
 Khoa Khoa học & Kỹ thuật Máy tính Môn : Các mẫu thiết kế hướng đối tượng
 Trường ĐH Bách Khoa Tp.HCM Chương 2 : Cấu trúc phần mềm hướng đối tượng
 © 2010 Slide 28

File đính kèm:

  • pdfbai_giang_cac_mau_thiet_ke_huong_doi_tuong_chuong_2_cau_truc.pdf