Chương Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng (Structural Patterns) ne C om 9.1 Tổng quát mẫu thiết kế HĐT 9.2 Mẫu Adapter 9.3 Mẫu Composite 9.4 Mẫu Proxy 9.5 Mẫu Decorator 9.6 Mẫu Facade 9.7 Mẫu Flyweight 9.8 Kết chương Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Trong việc phát triển phần mềm, ta thường thực hoạt ₫ộng chức sau ₫ây : Nắm bắt yêu cầu phần mềm Phân tích chức Thiết kế Hiện thực (hay viết code) Kiểm thử Các hoạt ₫ộng có mối quan hệ phụ thuộc nhau, cụ thể kết bước i liệu ₫ầu vào bước thứ i+1 Do ₫ó bước thứ i có lỗi, nghĩa kết khơng ₫úng kéo theo bước sau ₫ó bị lỗi cho dù ta cố gắng thực chúng tốt cách ₫i Si nh Vi 9.1 Tổng quát mẫu thiết kế HĐT Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide https://fb.com/sinhvienzonevn 9.1 Tổng quát mẫu thiết kế HĐT ne C Như vậy, lỗi bước ₫ầu tiên nguy hại nhất, kế ₫ó lỗi bước thức 2, thứ 3, Tuy nhiên, bước nắm bắt yêu cầu phân tích chức thường tạo kết ít, chưa có ₫ộ phức tạp cao, ₫ó ta có cách kiểm sốt ₫ể kết có lỗi Còn bắt ₫ầu từ bước thiết kế trở ₫i, kết nhiều có ₫ộ phức tạp cao nên khó kiểm sốt Và có lỗi bước nguy hại kéo theo hoạt ₫ộng thực khơng có ý nghĩa Tóm lại, thiết kế phần mềm vấn ₫ề khó khăn, phần mềm lớn, mối quan hệ phần tử nhiều phức tạp, thiết kế thường khơng hiệu chứa nhiều lỗi khó biết Hơn nữa, ta thường phải trả giá cao cho lỗi thiết kế chúng ảnh hưởng nặng nề ₫ến giai ₫oạn sau viết code, kiểm thử… om Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Dùng phương pháp thiết kế hướng ₫ối tượng giúp ta thiết kế ₫ược phần mềm có cấu trúc rõ ràng, mạch lạc, nhờ ₫ó ta dễ phát lỗi có, dễ hiệu chỉnh, dễ nâng cấp thành phần (thí dụ nhờ tính bao ₫óng, bao gộp, thừa kế, ₫a xạ, tổng quát hóa…) Tuy nhiên việc thiết kế phần mềm HĐT phụ thuộc nhiều vào khả người thiết kế, thiết kế ₫ều tạo ₫ược kết tích cực ₫ã nêu Si nh Vi 9.1 Tổng quát mẫu thiết kế HĐT Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập mơn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide https://fb.com/sinhvienzonevn 9.1 Tổng quát mẫu thiết kế HĐT Hiện nay, hoạt ₫ộng thiết kế phần mềm phải ₫ạt ₫ược miêu tiêu sau ₫ây (trong nhiều mục tiêu khác) : Mục tiêu : thiết kế ₫ược phần mềm giải ₫úng chức mà user yêu cầu Đây mục tiêu yếu Mục tiêu : phải hạn chế ₫ược việc tái thiết kế lại tương lai, cho dù lý Mục tiêu : thiết kế hành phải hỗ trợ tốt việc tái thiết kế lại lý ₫ó phải tái thiết kế lại phần mềm ne C om Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.1 Tổng quát mẫu thiết kế HĐT Si nh Có nhiều nguyên nhân dẫn ₫ến tái thiết kế phần mềm (PM) : Do PM phụ thuộc vào phần cứng, hệ ₫iều hành (OS) hay PM khác : PM dùng trực tiếp thông số phần cứng hay PM liên quan phải thay ₫ổi thông số thay ₫ổi Do PM phụ thuộc vào giải thuật : PM có nhiều giải pháp, nhiều mức ₫ộ xử lý cho vấn ₫ề, việc ràng buộc chặt chẽ PM với giải pháp cụ thể dẫn ₫ến khó bổ sung, thay ₫ổi PM Do PM chưa có tính tổng qt hóa Thí dụ tiện ích gỏ phím tiếng Việt lúc ₫ầu hỗ trợ nhập liệu theo cách gỏ cụ thể, muốn PM hỗ trợ gỏ nhiều cách khác, cách user tự ₫ặt phải thiết kế lại PM gỏ phím Các thành phần PM liên quan chặt chẽ : hiệu chỉnh, nâng cấp thành phần thường phải thay ₫ổi thành phần phụ thuộc trực tiếp gián kiểu dây chuyền Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập mơn Cơng nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide https://fb.com/sinhvienzonevn 9.1 Tổng quát mẫu thiết kế HĐT ne C om Một biện pháp ₫ược ₫ề xuất ₫ể có thiết kế tốt, hạn chế ₫ược việc tái thiết kế lại cần thiết kế lại, phải hỗ trợ tốt việc tái thiết kế sử dụng lại mẫu thiết kế hướng ₫ối tượng (Object Oriented Design Patterns), hay gọi tắt mẫu thiết kế (Design Patterns) Vậy mẫu thiết kế ? Mẫu thiết kế có ₫ặc ₫iểm sau : Là thiết kế người chuyên nghiệp tiếng, ₫ã ₫ược sử dụng phần mềm ₫ang ₫ược dùng phổ biến ₫ược người dùng ₫ánh giá tốt Giúp giải vấn ₫ề thiết kế thường gặp phần mềm Giúp cho thiết kế phần mềm có tính uyển chuyển cao, dễ hiệu chỉnh dễ nâng cấp Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.1 Tổng quát mẫu thiết kế HĐT Si nh Vai trò mẫu thiết kế : mẫu thiết kế ₫óng số vai trò yếu sau : Cung cấp phương pháp giải vấn ₫ề thực tế thường gặp phần mềm mà người ₫ã ₫ánh giá, kiểm nghiệm tốt Là biện pháp tái sử dụng tri thức chuyên gia phần mềm Hình thành kho tri thức, ngữ vựng giao tiếp người làm phần mềm Giúp ta tìm hiểu ₫ể nắm vững ₫ặc ₫iểm ngơn ngữ lập trình hướng ₫ối tượng Như vậy, sử dụng triệt ₫ể mẫu thiết kế việc thiết kế phần mềm mới, ta tiết kiệm ₫ược chi phí, thời gian nguồn lực Hơn PM tạo ₫ược có ₫ộ tin cậy, uyển chuyển cao, dễ dàng hiệu chỉnh nâng cấp sau cần thiết Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập mơn Cơng nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide https://fb.com/sinhvienzonevn 9.1 Tổng quát mẫu thiết kế HĐT ne C om Phân loại mẫu thiết kế : Dựa vào cơng dụng, ta phân mẫu thiết kế thành nhóm : Structural (nhóm mẫu cấu trúc) : mẫu cung cấp chế ₫ể quản lý cấu trúc mối quan hệ class, thí dụ ₫ể dùng lại class có sẵn (class thư viện, class bên thứ ba - third party,…), ₫ể tạo mối ràng buộc thấp class (lower coupling) hay cung cấp chế thừa kế khác Creational (nhóm mẫu phục vụ khởi tạo ₫ối tượng) : giúp khắc phục vấn ₫ề khởi tạo ₫ối tượng, ₫ối tượng lớn phức tạp, hạn chế phụ thuộc phần mềm vào platform cấp thấp Behavioral (nhóm mẫu giải hành vi ₫ối tượng) : giúp che dấu thực ₫ối tượng, che dấu giải thuật, hỗ trợ việc thay ₫ổi cấu hình ₫ối tượng cách linh Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.1 Tổng quát mẫu thiết kế HĐT Si nh Phân loại mẫu thiết kế : Còn dựa vào loại phần tử ₫ược dùng mẫu, ta phân mẫu thiết kế thành nhóm : Class patterns : nhóm mẫu thiết kế sử dụng class mối quan hệ tĩnh class thừa kế, thực Các mối quan hệ ₫ược xác ₫ịnh thời ₫iểm dịch, ₫ó class patterns thích hợp cho thành phần chức không cần thay ₫ổi ₫ộng thời gian chạy Object patterns : nhóm mẫu thiết kế có dùng mối quan hệ ₫ối tượng, mối quan hệ ₫ộng dễ dàng thay ₫ổi lúc lúc phần mềm chạy Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 10 https://fb.com/sinhvienzonevn 9.1 Tổng quát mẫu thiết kế HĐT Trong phần lại chương này, giới thiệu số mẫu thiết kế có tần suất sử dụng lại ứng dụng cao nhất, mẫu thiết kế ta miêu tả thông tin : Tên gốc tiếng Anh mẫu Mục tiêu mẫu Thí dụ sử dụng mẫu Lược ₫ồ class miêu tả mẫu : chứa phần tử (class, ₫ối tượng) mẫu mối quan hệ chúng ne C om Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 11 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Chuyển ₫ổi interface class chức có sẵn thành interface khác theo yêu cầu sử dụng phần tử sử dụng class ₫ó (ta gọi phần tử sử dụng Client) Si nh Mục tiêu : Vi 9.2 Mẫu Adapter Thật vậy, lập trình ₫ơi có tình mà cần dùng class có sẵn thông qua interface khác không muốn thông qua interface class ₫ó Mẫu Adapter giúp giải vấn ₫ề Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 12 https://fb.com/sinhvienzonevn 9.2 Mẫu Adapter Thí dụ việc dùng mẫu Adapter : Ta muốn viết chương trình soạn thảo ₫ồ họa (DrawingEditor) cho phép user vẽ ₫ối tượng ₫ồ họa Line, Rectangle, Ellipse, Polygon, Text Code quản lý ₫ối tượng ₫ồ họa (ta gọi Client) xử lý chúng thông qua interface thống IDrawingShape Hiện thực class Line, Rectangle, Ellipse, Polygon từ ₫ầu dễ chúng ₫ối tượng ₫ơn giản thực class Text phức tạp (giả sử class có khả hiển thị nội dung chuỗi nhiều dòng có ₫ịnh dạng phong phú) Giả sử ₫ang lập trình platform có cung cấp sẵn class có tên TextView, class cung cấp chức quản lý Text giống chương trình muốn interface sử dụng ITextView khơng giống với interface IDrawingShap chương trình ne C om Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 13 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.2 Mẫu Adapter Việc thay ₫ổi interface IDrawingShape chương trình thành ITextView khơng thể ₫ược ảnh hưởng ₫ến class ₫ối tượng ₫ồ họa khác ₫ã viết Việc hiệu chỉnh lại class TextView ₫ể hỗ trợ interface IDrawingShape chương trình khơng khả thi TextView ₫ã ₫ược sử dụng nhiều ứng dụng khác, hệ thống thay ₫ổi tùy tiện interface sử dụng ₫ược Si nh Thí dụ việc dùng mẫu Adapter : Cách tốt ₫ể chương trình DrawingEditor dùng ₫ược class TextView mà không cần thay ₫ổi TextView chẳng cần thay ₫ổi mã nguồn ứng dụng dùng mẫu Adapter, cụ thể ₫ịnh nghĩa class TextShape phần tử ₫ại diện cho TextView, cung cấp ₫úng interface sử dụng mà chương trình cần Chúng ta thấy chi phí ₫ịnh nghĩa class TextShape thấp ₫ộc lập với ₫ộ phức tạp class TextView Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 14 https://fb.com/sinhvienzonevn 9.2 Mẫu Adapter ne C om Lược ₫ồ class miêu tả mẫu Adapter thể cách thức chương trình DrawingEditor sử dụng class TextView sau : Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 15 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.2 Mẫu Adapter Si nh Lược ₫ồ class miêu tả mẫu Adapter dạng class pattern : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 16 https://fb.com/sinhvienzonevn 9.2 Mẫu Adapter ne C om Lược ₫ồ class miêu tả mẫu Adapter dạng object pattern : Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 17 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.2 Mẫu Adapter nh Các phần tử tham gia : IAdapter (IDrawingShape) : ₫ịnh nghĩa interface cho ₫oạn code client sử dụng IAdaptee (ITextView) : ₫ịnh nghĩa interface ₫ối tượng có sẵn cần “chuyển” sang interface IAdapter Client (DrawingEditor) : ₫oạn code chương trình có sử dụng ₫ối tượng thông qua interface IAdapter Adaptee (TextView) : class chức ₫ã có sẵn cần dùng ₫oạn code client Adapter (TextShape) : class cần ₫ịnh nghĩa với chi phí thấp, nhiệm vụ chuyển interface IAdaptee sang interface IAdapter Si Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 18 https://fb.com/sinhvienzonevn 9.2 Mẫu Adapter Ta nói việc ₫ịnh nghĩa class Adaper dễ dàng, tác vụ class ₫ược viết theo template sau : Request() { //₫oạn code prolog (thường ngắn chí khơng có) Adaptee.orig_request(); Adaptee //gọi tác vụ có chức tương tự om //₫oạn code epilog (thường ngắn chí khơng có) ne C } Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 19 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Thí dụ class TextShape chương trình DrawingEditor, tác vụ boundingBox() ₫ược viết sau : ISize boundingBox() { //khơng cần có code prolog //gọi tác vụ chức ₫ối tượng gốc Rectangle rec = txtobj.getExtent(); //code epilog chuyển ₫ổi ₫ịnh dạng kết ISize size = new Size(); size.w = rec.width; size.h = rec.height; return size; } Si nh Vi 9.2 Mẫu Adapter Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 20 https://fb.com/sinhvienzonevn 9.4 Mẫu Proxy ne C Chương trình muốn truy xuất ₫ối tượng khơng gian ₫ịa khác, thí dụ ₫ối tượng nằm máy khác Trong trường hợp này, ta tạo proxy chạy máy chương trình ứng dụng ₫ể ₫ại diện cho ₫ối tượng gốc máy xa Đối tượng gốc cần ₫ược che chắn ₫ể Client không tương tác trực tiếp ₫ược hầu ₫ảm bảo ₫ộ bảo mật cao, Client giao tiếp trực tiếp ₫ược với Proxy, sau ₫ó Proxy chuyển yêu cầu Client tới ₫ối tượng gốc ₫ể thực yêu cầu Chương trình muốn kiểm sốt, tăng cường, bổ sung số tính ₫ối tượng gốc Proxy ₫óng vai trò ₫ối tượng thực việc kiểm sốt, tăng cường, bổ sung tính om Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 27 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mỗi yêu cầu proxy yêu cầu phổ biến ₫ược giải loại proxy tương ứng sau : Virtual proxy : cung cấp ₫ối tượng ₫ại diện cho ₫ối tượng lớn phức tạp Mục ₫ích ₫ể trì hỗn thời ₫iểm tạo ₫ối tượng lớn (ví dụ ₫ối tượng bitmap chương trình soạn thảo tài liệu MSWord) Remote proxy : cung cấp ₫ối tượng ₫ại diện (local) cho ₫ối tượng từ xa (remote) (ví dụ RMI, JINI) Protection proxy : cung cấp ₫ối tượng ₫ại diện cho ₫ối tượng khác cần ₫ược che chắn, bảo mật từ bên ngồi Ví dụ KernelProxies cung cấp dịch vụ truy xuất tới Kernel hệ ₫iều hành Smart proxy : cung cấp ₫ối tượng ₫ại diện ₫ể bổ sung số tính ₫ối tượng gốc Si nh Vi 9.4 Mẫu Proxy Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 28 https://fb.com/sinhvienzonevn 9.4 Mẫu Proxy Thí dụ việc dùng mẫu Proxy : Chương trình MSWord quản lý tài liệu ₫ang soạn thảo ₫ối tượng Document, ₫ây ₫ối tượng bao gộp nhiều ₫ối tượng thành phần theo dạng phân cấp Mỗi lần user mở lại file tài liệu, nguyên tắc, chương trình ₫ọc tồn nội dung file ₫ể tạo lại ₫ầy ₫ủ ₫ối tượng ₫ược chứa file ₫ó, nối kết chúng theo ₫úng cấu trúc gốc ₫ối tượng Document trước hiển thị kết lên hình ₫ể người dùng xử lý tiếp Tuy nhiên việc ₫ọc nội dung ₫ối tượng lớn phức tạp hình bitmap, bảng liệu lớn… vào nhớ chương trình tốn nhiều thời gian Hơn lần chương trình hiển thị phần nhỏ nội dung tài liệu (1 trang hình) chưa user muốn làm việc tiếp với phần lại tài liệu ne C om Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 29 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Do ₫ó chiến lược ₫ọc toàn tài liệu từ file vào nhớ lần có u cầu user khơng tốt, vừa làm tăng thời gian ₫áp ứng với user, vừa phí phạm cơng sức trường hợp user xử lý phần nhỏ tài liệu Để khắc phục nhược ₫iểm trên, ta dùng mẫu Proxy Cụ thể lần user mở file tài liệu, ta nạp trực tiếp ₫ối tượng nhỏ tài liệu vào nhớ, ₫ối tượng lớn phức tạp bitmap, bảng liệu, ta tạo ₫ối tượng Proxy ₫ại diện cho chúng, ₫ối tượng Proxy chứa thông tin bản, thiết yếu ₫ối tượng gốc Nhờ ₫ó, thời gian nạp tài liệu (lần ₫ầu) nhanh ₫áp ứng kịp thời user Theo theo thời gian, user lật tới trang nào, chương trình kiểm tra trang ₫ó có chứa ₫ối tượng Proxy khơng, có nhờ Proxy nạp thật ₫ối tượng gốc file vào ₫ể user làm việc trực tiếp với ₫ối tượng gốc Si nh Vi 9.4 Mẫu Proxy Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập mơn Cơng nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 30 https://fb.com/sinhvienzonevn ne C om 9.4 Mẫu Proxy Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 31 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.4 Mẫu Proxy Si nh Ta xây dựng mẫu Proxy theo loại object pattern ₫ể miêu tả mối quan hệ proxy ₫ối tượng gốc mà quản lý Lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 32 https://fb.com/sinhvienzonevn 9.4 Mẫu Proxy Các phần tử tham gia : ISubject (IDocItem) : interface thống ₫ối tượng ₫ược sử dụng : ₫ối tượng gốc ₫ối tượng proxy Client (DocumentEditor) : ₫oạn code chương trình có sử dụng ₫ối tượng thơng qua interface thống ISubject RealSubject (Image) : class ₫ặc tả ₫ối tượng gốc cần dùng client, chi phí ₫ặc tả phụ thuộc vào tính chất chức nó, thường lớn Chi phí ₫ặc tả ₫ộc lập với việc dùng mẫu Proxy ne C om Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 33 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Proxy (ImageProxy) : class ₫ặc tả ₫ối tượng proxy, ₫ây class trọng tâm mẫu Nó thay ₫ối tượng RealSubject khoảng thời gian chưa cần ₫ối tượng RealSubject, giữ tham khảo ₫ến ₫ối tượng RealSubject ₫ể nhờ vả cần, kiểm sốt q trình truy xuất ₫ến ₫ối tượng RealSubject, tạo delete ₫ối tượng RealSubject Tùy loại proxy mà ₫ối tượng Proxy thực số hoạt ₫ộng khác Si nh Vi 9.4 Mẫu Proxy Ta tốn chi phí thấp ₫ể ₫ặc tả class Proxy tác vụ class ₫ược viết theo template sau : request() { //prolog code, thường ngắn, chí khơng có realSubject.request(); //nếu cần, gọi ₫ối tượng gốc thực //epilog code, thường ngắn, chí khơng có } Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 34 https://fb.com/sinhvienzonevn 9.4 Mẫu Proxy ne C om Quá trình giao tiếp thời ₫iểm run-time mơ tả lược ₫ồ ₫ối tượng sau : Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 35 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.5 Mẫu Decorator Si nh Mục tiêu : Thêm ₫ộng số trách nhiệm cho ₫ối tượng cụ thể mà không ảnh hưởng ₫ến ₫ối tượng khác chủng loại (cùng class) Lưu ý ₫ể thêm trách nhiệm cho toàn ₫ối tượng class, ta dùng tính thừa kế hay chí hiệu chỉnh trực tiếp mã nguồn class ₫ó Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập mơn Cơng nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 36 https://fb.com/sinhvienzonevn 9.5 Mẫu Decorator Thí dụ việc dùng mẫu Decorator : Chương trình DrawingEditor cho phép tạo hiển thị nhiều ₫ối tượng ₫ồ họa, ₫ó có ₫ối tượng TextView ₫ể hiển thị nội dung văn Giả sử TextView ₫ối tượng hình chữ nhật với kích thước cố ₫ịnh user qui ₫ịnh, hiển thị nội dung văn hình chữ nhật quản lý khơng có ₫ường viền bao quanh Trong trường hợp user tạo TextView mới, họ muốn TextView có ₫ường viền bao quanh cho rõ ràng Tương tự họ muốn TextView hiển thị hình phía nội dung văn trường hợp nội dung văn TextView dài khơng thể ₫ược hiển thị hết hình chữ nhật giới hạn TextView user muốn hiển thị thêm scrollbar ngang dọc ₫ể giúp user dời dễ dàng ₫ến vị trí văn cần tập trung xử lý ne C om Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 37 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.5 Mẫu Decorator Si nh Cách tốt ₫ể giải yêu cầu dùng mẫu Decorator với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 38 https://fb.com/sinhvienzonevn 9.5 Mẫu Decorator ne C om Ta xây dựng mẫu Decorator theo loại object pattern ₫ể miêu tả mối quan hệ ₫ối tượng decore ₫ối tượng gốc Lược ₫ồ class sau : Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 39 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.5 Mẫu Decorator nh Các phần tử tham gia : IComponent (IShape) : interface thống ₫ối tượng ₫ược sử dụng : ₫ối tượng gốc ₫ối tượng decore cho ₫ối tượng gốc Client (DrawingEditor) : ₫oạn code chương trình có sử dụng ₫ối tượng thông qua interface thống IComponent ConcreteComponent (TextView) : class ₫ặc tả ₫ối tượng gốc cần dùng client mà ta muốn decore cho nó, chi phí ₫ặc tả phụ thuộc vào tính chất chức Chi phí ₫ặc tả ₫ộc lập với việc dùng mẫu Decorator AbstractDecorator (TextViewDecorator) : class trừu tượng, nhiệm vụ ₫ặc tả thành phần dùng chung ₫ối tượng con, thí dụ tham khảo ₫ến ₫ối tượng cần decore, gởi thông ₫iệp gọi tác vụ tương ứng ₫ối tượng gốc… Si Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập mơn Cơng nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 40 https://fb.com/sinhvienzonevn 9.5 Mẫu Decorator Các phần tử tham gia : ConcreteDecorator1… (ScrollDecorator…) : class ₫ặc tả ₫ối tượng decorator cụ thể, ₫ây class trọng tâm mẫu Nó ₫ại ₫iện ₫ối tượng gốc ₫ể giao tiếp với Client, giữ tham khảo ₫ến ₫ối tượng gốc ₫ể u cầu cơng việc tương ứng Ta tốn chi phí thấp ₫ể ₫ặc tả class tác vụ class ₫ược viết theo template sau : om ne C operation() { base.operation(); //gọi ₫ối tượng gốc thực công việc trước AddedBehavior(); //decore thêm theo yêu cầu } Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 41 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.5 Mẫu Decorator Si nh Quá trình giao tiếp thời ₫iểm run-time mơ tả lược ₫ồ ₫ối tượng sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 42 https://fb.com/sinhvienzonevn 9.6 Mẫu Facade ne C om Mục tiêu : cung cấp interface hợp cho tập interface hệ thống Facade ₫ịnh nghĩa interface cấp cao interface có sẵn ₫ể làm cho hệ thống dễ sử dụng tối thiểu hóa tính "coupling" (nối ghép) hệ thống Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 43 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.6 Mẫu Facade hệ thống phục vụ biên dịch có nhiều class phục vụ bước biên dịch rời rạc Scanner, Parser, ProgramNode, BytecodeStream, ProgramNodeBuilder Để dịch source code, ta viết ứng dụng gọi dịch vụ class ₫ể duyệt token, parser, xây dựng cú pháp, tạo code ₫ối tượng Tuy nhiên làm khó dễ gây lỗi Cách khắc phục ₫ịnh nghĩa class với giao tiếp hợp tên Compiler, cung cấp hàm Compile (file), ứng dụng cần dịch source code cần gởi thông ₫iệp Compile ₫ến ₫ối tượng Compiler Si nh Thí dụ việc dùng mẫu Facade : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 44 https://fb.com/sinhvienzonevn 9.6 Mẫu Facade Compiler Compile() Scanner Stream Token Parser BytecodeStream Symbol ProgramNodeBuffer om ProgramNode CodeGenerator StatementNode RISCCodeGenerator VariableNode ne StackMachineCodeGenerator C ExpressionNode Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 45 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Facade Si nh Vi 9.6 Mẫu Facade Subsystem class Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập mơn Cơng nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 46 https://fb.com/sinhvienzonevn 9.6 Mẫu Facade Các phần tử tham gia : biết class liên quan ₫ến request xác ₫ịnh nhờ ₫ối tượng liên quan thực request subsystem classe (Scanner, Parser, ) thực chức cụ thể hệ thống xử lý cụng vic c i tng Faỗade nh khụng cần biết Facade, khơng có tham khảo ₫ến Facade ne C Facade (Compiler) om Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 47 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.7 Mẫu Flyweight Si nh Mục tiêu : dùng phương tiện dùng chung ₫ể quản lý hiệu số lớn ₫ối tượng có nhiều thành phần giống Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 48 https://fb.com/sinhvienzonevn 9.7 Mẫu Flyweight Thí dụ việc dùng mẫu Flyweight : Chương trình xử lý văn dùng khái niệm ₫ối tượng ₫ể miêu tả phần tử : ký tự, công thức, hình, Ký tự ₫ối tượng xuất nhiều lần văn bản, ta miêu tả ₫ối tượng ký tự chứa trực tiếp tất thông tin mã ký tự, tên font, kích cỡ, màu, biến thể (normal, bold, italic,…), ₫ối tượng ký tự chiếm nhiều không gian, việc lưu giữ ₫ối tượng ký tự khơng hiệu Mẫu Flyweight thích hợp ₫ể giải vấn ₫ề miêu tả ₫ối tượng ký tự ne C om Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 49 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.7 Mẫu Flyweight nh Thí dụ việc dùng mẫu Flyweight : Flyweight ₫ối tượng dùng chung dựa vào khái niệm thuộc tính ₫ược chia làm loại : trạng thái : thuộc tính ₫ộc lập với ngữ cảnh sử dụng, thí dụ ₫ối tượng ký tự có code ký tự trạng thái Si à trạng thái ngồi : thuộc tính phụ thuộc thay ₫ổi theo ngữ cảnh, thí dụ ₫ối tượng ký tự có thuộc tính tên font, kích cỡ, màu, biến thể,… trạng thái ngồi Ta khơng nên chứa trạng thái ngồi trực tiếp ₫ối tượng mà nên gom chúng ₫ối tượng khác, flyweight chứa tham khảo ₫ến ₫ối tượng chứa trạng thái Đối tượng chứa trạng thái thường ₫ược dùng chung nhiều flyweight khác Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 50 https://fb.com/sinhvienzonevn 9.7 Mẫu Flyweight Code (N) Code (g) Code (u) Code (y) Code (ễ) Code (n) Các thông số hiển thị Các thông số hiển thị Các thông số hiển thị Các thông số hiển thị Các thông số hiển thị Các thông số hiển thị Miêu tả ₫ối tượng ký tự dùng mẫu Flyweight giúp dùng chung thông số hiển thị nhiều ký tự có cách thức hiển thị Code (N) Code (N) om Miêu tả ₫ối tượng ký tự cách bình thường Code (N) Code (N) Code (N) Code (N) C ne Các thông số hiển thị Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 51 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Miêu tả ₫ối tượng ký tự MS Word (dùng mẫu Flyweight array) Si nh Vi 9.7 Mẫu Flyweight … i+1 i Code (N) Code (N) i+2 i+3 i+4 i+5 Code (N) Code (N) Code (N) Code (N) … … i, i+5 Các thông số hiển thị … Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 52 https://fb.com/sinhvienzonevn 9.7 Mẫu Flyweight Flyweight Operation(extrinsicState) FlyweightFactory GetFlyweight(key) allState intrinsicState ne Client UnsharedConcreteFlyweight Operation(extrinsicState) C ConcreteFlyweight Operation(extrinsicState) om if (flyweight(key) exists return existing flyweight else { create new flyweight; add it to pool of flyweights; return the new flyweight; } Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 53 en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Vi 9.7 Mẫu Facade nh Các phần tử tham gia : Flyweight (Glyph) : ₫ịnh nghĩa interface cho ₫ối tượng nhận yêu cầu hoạt ₫ộng theo trạng thái ConcreteFlyweight (Character) : thực interface Flyweight thành ₫ối tượng dùng chung UnsharedConcreteFlyweight (Character) : thực interface Flyweight thành ₫ối tượng không dùng chung FlyweightFactory : tạo quản lý ₫ối tượng Flyweight Client : chứa tham khảo ₫ến flyweight nhờ cần Si Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 54 https://fb.com/sinhvienzonevn 9.8 Kết chương Chương ₫ã giới thiệu thông tin mẫu thiết kế hướng ₫ối tượng miêu tả mục tiêu, tính chất mẫu thiết kế phục vụ cấu trúc ₫ối tượng Adapter, Composite, Proxy, Decorator, Facade, Flyweight ne C om Môn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 55 Si nh Vi en Zo Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 SinhVienZone.com https://fb.com/sinhvienzonevn ... 2010 SinhVienZone. com Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 10 https://fb .com/ sinhvienzonevn 9.1 Tổng quát mẫu thiết kế HĐT Trong phần. .. Tp.HCM © 2010 SinhVienZone. com Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide https://fb .com/ sinhvienzonevn 9.1 Tổng quát mẫu thiết kế HĐT Hiện... Tp.HCM © 2010 SinhVienZone. com Mơn : Nhập môn Công nghệ phần mềm Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 24 https://fb .com/ sinhvienzonevn 9.3 Mẫu Composite Các phần tử tham