Bài giảng Phân tích & thiết kế phần mềm hướng đối tượng - Chương 4: Các mẫu thiết kế phục vụ tổ chức cấu trúc các đối tượng (Structural Patterns) cung cấp cho người học các kiến thức: Tổng quát về mẫu thiết kế HĐT, mẫu Adapter, mẫu Composite, mẫu Proxy, mẫu Decorator.... Mời các bạn cùng tham khảo nội dung chi tiết.
Chương Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng (Structural Patterns) 4.1 Tổng quát mẫu thiết kế HĐT 4.2 Mẫu Adapter 4.3 Mẫu Composite 4.4 Mẫu Proxy 4.5 Mẫu Decorator 4.6 Mẫu Facade 4.7 Mẫu Flyweight 4.8 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 : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4.1 Tổng quát mẫu thiết kế HĐT 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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4.1 Tổng quát mẫu thiết kế HĐT 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ử… Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4.1 Tổng quát mẫu thiết kế HĐT 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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4.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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4.1 Tổng quát mẫu thiết kế HĐT 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 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4.1 Tổng quát mẫu thiết kế HĐT 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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4.1 Tổng quát mẫu thiết kế HĐT 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 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4.1 Tổng quát mẫu thiết kế HĐT 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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4.1 Tổng quát mẫu thiết kế HĐT 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 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 10 4.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 ₫ể yê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 : 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 } Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 41 4.5 Mẫu Decorator 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 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 42 4.6 Mẫu Facade 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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 43 4.6 Mẫu Facade Thí dụ việc dùng 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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 44 4.6 Mẫu Facade Compiler Compile() Scanner Stream Token Parser BytecodeStream Symbol ProgramNodeBuffer CodeGenerator ProgramNode StatementNode ExpressionNode StackMachineCodeGenerator Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 RISCCodeGenerator VariableNode Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 45 4.6 Mẫu Facade Facade Subsystem class Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 46 4.6 Mẫu Facade Các phần tử tham gia : Facade (Compiler) 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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 47 4.7 Mẫu Flyweight 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 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 48 4.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ự Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 49 4.7 Mẫu Flyweight 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 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 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 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 50 4.7 Mẫu Flyweight Miêu tả ₫ối tượng ký tự cách bình thường 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) Code (N) Code (N) Code (N) Code (N) 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 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 51 4.7 Mẫu Flyweight Miêu tả ₫ối tượng ký tự MS Word (dùng mẫu Flyweight array) 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 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 52 4.7 Mẫu Flyweight Flyweight FlyweightFactory Operation(extrinsicState) GetFlyweight(key) if (flyweight(key) exists return existing flyweight else { create new flyweight; add it to pool of flyweights; return the new flyweight; } ConcreteFlyweight Operation(extrinsicState) intrinsicState UnsharedConcreteFlyweight Operation(extrinsicState) allState Client Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 53 4.7 Mẫu Facade 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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 54 4.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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 55 ... Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4. 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ái thiết kế lại lý ₫ó phải tái thiết kế lại phần mềm Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết. .. : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế phục vụ tổ chức cấu trúc ₫ối tượng Slide 4. 1 Tổng quát mẫu thiết kế HĐT Một biện pháp ₫ược ₫ề xuất ₫ể có thiết kế