Design Pattern là một kỹ thuật dành cho lập trình hướng đối tượng. Nó cung cấp cho ta cách tư duy trong từng tình huống của việc lập trình hướng đối tượng, và phân tích thiết kế hệ thống phần mềm. Nó cần thiết cho cả các nhà lập trình và nhà phân tích thiết kế. Đối với những người chuyên về lập trình thì việc nắm vững công cụ lập trình thôi chưa đủ, họ cần phải có một tư duy, một kỹ năng giải quyết các tình huống nhỏ của công việc xây dựng phần mềm mà họ là người thi hành. Việc giải quyết này phải đảm bảo tính ổn định là họ có thể giải quyết được trong mọi tình huống, với thời gian đúng tiến độ, phương pháp giải quyết hợp lý và đặc biệt là phải theo một chuẩn nhất định. Những nhà phân tích thiết kế mức cao, việc nắm vững công cụ lập trình có thể là không cần thiết, nhưng họ cũng cần phải biết được ở những khâu nhỏ nhất chi tiết nhất của thiết kế của họ đưa ra có thể thực hiện được hay không và nếu thực hiện được thì có thể thực hiện như thế nào, và sẽ theo một chuẩn ra sao. Design pattern được dùng khắp ở mọi nơi, trong các phần mềm hướng đối tượng các hệ thống lớn. Trong các chương trình trò chơi, … Và cả trong các hệ thống tính toán song song,.. Design pattern thể hiện tính kinh nghiệm của công việc lập trình, xây dựng và thiết kế phần mềm.Có thể chúng ta đã gặp design pattern ở đâu đó, trong các ứng dụng, cũng có thể chúng ta đã từng sử dụng những mẫu tương tự như design pattern để giải quyết những tình huống của mình, nhưng chúng ta không có một khái niệm gì về nó cả.
Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 BỘ GIÁO DỤC VÀ ĐÀO TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ HỘI KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MÔN HỌC: DESGIN PATTERNS ĐỀ TÀI: Mẫu Decorator Lớp: ĐH KTPM CLC – K8 Sinh viên thực hiện: Đỗ Văn Trường - 0841360083 Giáo viên hướng dẫn: Ths PHÙNG ĐỨC HÒA 2015 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Mục Lục TỔNG QUAN VỀ DEGSIN PATTERNS Design Pattern kỹ thuật dành cho lập trình hướng đối tượng Nó cung cấp cho ta cách tư tình việc lập trình hướng đối tượng, phân tích thiết kế hệ thống phần mềm Nó cần thiết cho nhà lập trình nhà phân tích thiết kế Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Đối với người chuyên lập trình việc nắm vững công cụ lập trình chưa đủ, họ cần phải có tư duy, kỹ giải tình nhỏ công việc xây dựng phần mềm mà họ người thi hành Việc giải phải đảm bảo tính ổn định họ giải tình huống, với thời gian tiến độ, phương pháp giải hợp lý đặc biệt phải theo chuẩn định Những nhà phân tích thiết kế mức cao, việc nắm vững công cụ lập trình không cần thiết, họ cần phải biết khâu nhỏ chi tiết thiết kế họ đưa thực hay không thực thực nào, theo chuẩn Design pattern dùng khắp nơi, phần mềm hướng đối tượng hệ thống lớn Trong chương trình trò chơi, … Và hệ thống tính toán song song, Design pattern thể tính kinh nghiệm công việc lập trình, xây dựng thiết kế phần mềm.Có thể gặp design pattern đâu đó, ứng dụng, sử dụng mẫu tương tự design pattern để giải tình mình, khái niệm Design Pattern gì? Design patterns tập giải pháp cho cho vấn đề phổ biến thiết kế hệ thống máy tính Đây tập giải pháp công nhận tài liệu có giá trị, người phát triển áp dụng giải pháp để giải vấn đề tương tự.Giống với yêu cầu thiết kế phân tích hướng đối tượng (nhằm đạt khả sử dụng Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 thành phần thư viện lớp), việc sử dụng mẫu cần phải đạt khả tái sử dụng giải pháp chuẩn vấn đề thường xuyên xảy Tại sử dụng Design Pattern? Design pattern cung cấp giải pháp dạng tổng quát, giúp tăng tốc độ phát triển phần mềm cách đưa mô hình test, mô hình phát triển qua kiểm nghiệm Thiết kế phần mềm hiệu đòi hỏi phải cân nhắc vấn đề nảy sinh trình thực hóa (implementation) Dùng lại design pattern giúp tránh vấn đề tiềm ẩn gây lỗi lớn, dễ dàng nâng cấp, bảo trì sau Một lợi lớn để sử dụng mẫu thiết kế lập trình viên khác dễ dàng nhận (đặc biệt bạn sử dụng quy ước đặt tên tốt) Khi nên sử dụng Design pattern? Đó bạn muốn giữ cho chương trình thực đơn giản Việc sử dụng design pattern giúp giảm thời gian công sức suy nghĩ cách giải cho vấn đề có lời giải Bạn đọc qua “Head First Design Patterns” để có nhìn tổng quát design pattern.Hệ thống mẫu design pattern có 23 mẫu định nghĩa “Design patterns Elements of Reusable Object Oriented Software” Các tác giả sách Erich Gamma, Richard Helm, Ralph Johnson John Vlissides, hay biết đến với tên “Gang of Four” hay đơn giản “GoF” Hệ thống mẫu nói đủ tối ưu cho việc giải hết vấn đề toán phân tích thiết kế xây dựng phần mềm thời điểm Hệ thống mẫu design pattern chia thành nhóm: nhóm Creational (5 mẫu), nhóm Structural (7 mẫu) nhóm Behavioral (11 mẫu) Phần I: Giới Thiệu Mẫu Decorator I Vấn đề đặt "Hôm có gì?" bạn hỏi tay đầu bếp khó chịu đứng sau bếp nướng "Cho hamburger," bạn nói xoay xoay khay tay Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Người đầu bếp mang hamburger đến bàn tính tiền, không quên hỏi lại "Có thêm thịt rán không?" "Chắc chắn rồi", bạn nói Người đầu bếp xóa phiếu ăn cũ máy tính tiền khởi động lại "Hamburger thịt rán" Vừa nói vừa gõ vào máy tính tiền "Cho thêm mát" Bạn nói Người đầu bếp ném ánh nhìn khó chịu , xóa phiếu ăn, mổ mổ bàn phím nói "Hamburger với mát thịt nướng Ok Đủ chứ?" "Hmm", bạn nói, nhìn quét qua thực đơn "Hay thêm chút thịt xông khói?" Người đầu bếp nhìn chằm chằm vào bạn dường định văng vài câu khó chịu nhập phiếu ăn vào máy "Này”, bạn nói "Anh chắn lợi nhiều từ việc sử dụng mẫu thiết kế trang trí Decorator hả?" "Vâng", anh đầu bếp nói, ngạc nhiên bạn nói vấn đề "Tôi nói vấn đề ngàn lần rồi" Bạn cầm Hamburger mát thịt xông khói với vẻ hạnh phúc nói "Thêm vài lát cà chua tuyệt!" Mẫu trang trí Decorator lựa chọn hoàn hảo cho tình vừa nêu ta nói khả mở rộng chức cho lớp có sẵn Sau viết lớp, bạn thêm phần trang trí Decorator (các lớp mở rộng) để mở rộng lớp Khi bạn sửa đổi lên lớp gốc Kết Hamburger bạn trở thành Hamburger mát, Hamburger mát thịt xông khói, thứ thật dễ dàng a Định nghĩa Decorator thuộc nhón cấu trúc: • Decorator pattern sử dụng để mở rộng chức đối tượng cách linh hoạt mà không cần phải thay đổi mã nguồn class gốc • Nó thực cách tạo đối tượng wrapper, gọi decorator (nhà trang trí) “Trang trí” xung quanh đối tượng ban đầu b Sơ đồ UML Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Component: Là thành phần đại diện để chứa hành vi chung đối tượng Nó abstract class interface ConcreteComponent: kế thừa từ component Là đối tượng gốc mà chức bổ sung thêm Decorator: abstract class, chứa quan hệ HAS A tham chiếu tới Component implement method component ConcreteDecorator: kế thừa từ decorator có thêm chức mở rộng riêng Trung tâm sơ đồ UML lớp Decorator Nó bao gồm hai loại quan hệ với giao diện Component: Is-a Quan hệ is-a thể mũi tên tam giác Decorator đến Component, Decorator thưc thi giao diện Component Thực tế Decorator thừa kế từ Component có nghĩa đối tượng Decorator sử dụng nơi đối tượng Component mong đợi Lớp ConcreteComponent mối quan hệ is-a với Component Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Has-a Quan hệ has-a thể hình thoi mở Decorator, liên kết với Component Điều cho thấy Decorator khởi tạo nhiều đối tượng Component đối tượng trang trí sống lâu gốc Decorator sử dụng thuộc tính thành phần (loại Component) để gọi hoạt động thay ghi đè lên Đây cách mẫu Decorator đạt mục tiêu c Mẫu Decorator đươc sử dụng ? • Decorator pattern sử dụng khi: Khi bạn muốn thay đổi động mà không ảnh hưởng đến người dùng, không phụ thuộc vào giới hạn class Có số đặc tính phụ thuộc mà bạn muốn ứng dụng cách linh động bạn muốn kết hợp chúng vào đối tượng Khi class không khả thi, mà cần số lượng lớn kết hợp đối tượng d Decorator, Adapter Composite: Ta thấy có tương đồng mẫu Apdapter “trang trí” class có sẵn Nhưng thay đổi interface hay nhiều class thành interface chung có lợi cho chương trình Composite giống decorator nhất, với mục đích khác e Ưu - Nhược điểm mẫu Decorator • Ưu điểm: - Decorator Pattern cung cấp giải pháp linh hoạt thêm chức cho đối tượng so với cách kế thừa (inheritance) truyền - thống Các decorator cung cấp giải pháp để dễ dàng thay đổi hành vi đối - tượng Ngoài ra, code dễ dàng đáng kể Bởi bạn code class chức riêng rẽ cụ thể, thay gộp chung nhiều chức khác vào class -> Điều làm cho thành phần dễ mở rộng tương lai • Nhược điểm: Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 - Nhược điểm việc sử dụng Decorator Pattern việc bảo trì vấn đề cung cấp nhiều loại object class chức *So sánh Decorator Pattern - Kế thừa DECORATOR PATTERN KẾ THỪA Được sử dụng để mở rộng chức đối tượng cụ thể Không yêu cầu class Được sử dụng để mở rộng chức lớp đối tượng Yêu cầu class Ngăn chặn gia tăng class dẫn đến phức tạp nhầm lẫn Có thể dẫn đến nhiều class con, làm cho phân cấp class trở nên phức tạp Linh hoạt Kém linh hoạt Client lựa chọn linh hoạt chức mong muốn Có class để kết hợp chức bổ sung, mà client mong đợi, dẫn đến gia tăng lớp Dễ dàng thêm kết hợp chức Rất khó Chức tương tự chí thêm hai lần hay nhiều lần f Ví dụ Bây giải vấn đề nêu trên: Ta có sơ đồ UML chi tiết sau: 10 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 component Thực hiện: Class Food: Public abstract class Food { String description = “”; public String getDescription() { return description; } public abstract double cost(); } Class CondimentDecorator 11 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 public abstract class CondimentDecorator extends Food { public abstract String getDescription(); } Class Hamburger public class Hamburger extends Food { public Hamburger() { description = “Hamburger”; } public double cost() { return 2; } } Class Town public class Town extends CondimentDecorator { Food food; public Mocha(Food food) { this.food = food; } public String getDescription() { return food.getDescription() + “, Town”; } public double cost() { return 0.50 + food.cost(); } } 12 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Class Cheese public class Cheese extends CondimentDecorator { Food food; public Cheese(Food food) { this.food = food; } public String getDescription() { return food.getDescription() + “, Chesse”; } public double cost() { return + food.cost(); } } Class Tomato public class Tomato extends CondimentDecorator { Food food; public Tomato(Food food) { this.food = food; } public String getDescription() { return food.getDescription() + “, Tomato”; } public double cost() { return 0.2 + food.cost(); } } 13 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Class Smokedpork public class Smokedpork extends CondimentDecorator { Food food; public Smokedpork(Food food) { this.food = food; } public String getDescription() { return food.getDescription() + “, Smoked pork”; } public double cost() { return 1.2 + food.cost(); } } Class LooFood public class LooFoodDemo { public static void main(String[] args) { Food food = new Hamburger(); System.out.println(food.getDescription() + food.cost() + "$"); Food food1 = new Hamburger(); food1 = new Town(food1); food1 = new Town(food1); food1 = new Tomato(food1); food1 = new Smokedpork(food1); System.out.print(food1.getDescription()); System.out.format("%s",food1.cost()+"$ \n"); } 14 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 } Kết : TỔNG KẾT Sau tìm hiểu mẫu decorator hướng dẫn thầy, em đưa công dụng ứng dụng mẫu Trong trình thực hiện, em chưa nắm vững kiến thức degsin patterns, việc ứng dụng kiến thức chưa hoàn toàn đạt hiệu tốt nên làm em có thiếu sót, em tiếp tục tiếp thu kiến thức để ứng dụng tốt 15 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Em cảm ơn thầy truyền đạt kiến thức giúp đỡ kiến thức cho em thời gian học tập dạy dỗ thầy! Tài liệu tham khảo: [1] Head First Design Patterns By Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra Publisher: O'Reilly Media 16 [...].. .Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 component Thực hiện: Class Food: Public abstract class Food { String description = “”; public String getDescription() { return description; } public abstract double cost(); } Class CondimentDecorator 11 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 public abstract class CondimentDecorator extends Food... System.out.format("%s",food1.cost()+"$ \n"); } 14 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 } Kết quả : TỔNG KẾT Sau khi tìm hiểu về mẫu decorator và được sự hướng dẫn của thầy, em đã đưa ra công dụng và các ứng dụng của mẫu Trong quá trình thực hiện, do em cũng chưa nắm vững kiến thức về degsin patterns, việc ứng dụng kiến thức cũng chưa hoàn toàn đạt hiệu quả tốt nhất nên trong bài làm của em còn có những... Tomato public class Tomato extends CondimentDecorator { Food food; public Tomato(Food food) { this.food = food; } public String getDescription() { return food.getDescription() + “, Tomato”; } public double cost() { return 0.2 + food.cost(); } } 13 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Class Smokedpork public class Smokedpork extends CondimentDecorator { Food food; public Smokedpork(Food... Class Town public class Town extends CondimentDecorator { Food food; public Mocha(Food food) { this.food = food; } public String getDescription() { return food.getDescription() + “, Town”; } public double cost() { return 0.50 + food.cost(); } } 12 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Class Cheese public class Cheese extends CondimentDecorator { Food food; public Cheese(Food food)... hiệu quả tốt nhất nên trong bài làm của em còn có những thiếu sót, em sẽ tiếp tục tiếp thu kiến thức để ứng dụng được tốt hơn 15 Bài Tập Lớn Degsin Patterns– Đỗ Văn Trường – ĐH KTPM.CLC-K8 Em cảm ơn thầy đã truyền đạt kiến thức và giúp đỡ kiến thức cho em trong thời gian học tập dưới sự dạy dỗ của thầy! Tài liệu tham khảo: [1] Head First Design Patterns By Eric Freeman, Elisabeth Robson, Bert Bates, ... thêm Decorator: abstract class, chứa quan hệ HAS A tham chiếu tới Component implement method component ConcreteDecorator: kế thừa từ decorator có thêm chức mở rộng riêng Trung tâm sơ đồ UML lớp Decorator. .. Quan hệ is-a thể mũi tên tam giác Decorator đến Component, Decorator thưc thi giao diện Component Thực tế Decorator thừa kế từ Component có nghĩa đối tượng Decorator sử dụng nơi đối tượng Component... nghĩa Decorator thuộc nhón cấu trúc: • Decorator pattern sử dụng để mở rộng chức đối tượng cách linh hoạt mà không cần phải thay đổi mã nguồn class gốc • Nó thực cách tạo đối tượng wrapper, gọi decorator