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