Tài liệu Design Patterns Tiếng Việt

33 7.4K 118
Tài liệu Design Patterns Tiếng Việt

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tài liệu Design Patterns Tiếng Việt

Hệ thống mẫu design patte of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh GIỚI THIỆU DESIGN PATTERN Trong kỹ thuật phần mềm(software engineering), design pattern giải pháp tổng quát dùng lại cho vấn đề phổ biến thiết kế phần mềm Design pattern design cuối dùng để chuyển thành code Nó gợi ý, mẫu mà cách giải vấn đề trường hợp Các design pattern thiết kế hướng đối tượng thường mối quan hệ tương tác lớp hay đối tượng, không lớp, đối tượng cụ thể Thuật tốn khơng phải design patterns chúng qiải vấn đề tính tốn không giải vấn đề thiết kế 10/25/2009 2:21 PM Hệ thống mẫu design patte of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh Ứng dụng Design pattern 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, đồng thời giúp code dễ đọc Thông thường, biết áp dụng kĩ thuật thiết kế định để giải tốn định Các kĩ thuật khó áp dụng với vấn đề phạm vi rộng Design pattern cung cấp giải pháp dạng tổng quát Design pattern gồm phần Structure, Participants, Collaboration, Các phần mô tả design motif: micro-architecture nguyên mẫu mà developer lấy áp dụng vào thiết kế cụ thể họ Micro-architecture tập hợp thành phần (class, method ) mối quan hệ chúng Developer sử dụng design pattern cách đưa micro-architecture vào thiết kế họ, nghĩa micro-architecture thiết kế họ có cấu trúc cách tổ chức tương tự design motif chọn Hệ thống mẫu design pattern có 23 mẫu định nghĩa “Design patterns Elements of Reusable Object Oriented Software” Hệ thống mẫu nói đủ tối ưu cho việc giải hết vấn đề tốn phân tích thiết kế xây dựng phần mềm thời điểm Phân loại Pattern phân loại làm nhóm sau đây: 10/25/2009 2:21 PM Hệ thống mẫu design patte of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh • Nhóm cấu thành (Creational Pattern): Gồm Factory, Abstract Factory, Singleton, Prototype, Builder Liên quan đến trình khởi tạo đối tượng cụ thể từ định nghĩa trừu tượng (abstract class, interface) • Nhóm cấu trúc tĩnh (Structural Pattern): Gồm Proxy, Adapter, Wrapper, Bridge, Facade, Flyweight, Visitor Liên quan đến vấn đề làm để lớp đối tượng kết hợp với tạo thành cấu trúc lớn • Nhóm tương tác động (Behavioral Pattern): Gồm Observer, State, Command, Iterator Mô tả cách thức để lớp đối tượng giao tiếp với Stuctural Patterns: Nhóm cấu trúc tĩnh (Structural Pattern): Liên quan đến vấn đề làm để lớp đối tượng kết hợp với tạo thành cấu trúc lớn Cung cấp chế xử lý lớp thay đổi , ràng bụộc muộn giảm kết nối thành phần (late binding and lower coupling) cung cấp chế khác để thừa kế Gồm : STT Tên Mục đích Adapter Do vấn đề tương thích, thay đổi interface lớp thành (adapteur) interface khác phù hợp với yêu cầu người sử dụng lớp Bridge Tách rời ngữ nghĩa vấn đề khỏi việc cài đặt ; mục đích (Pont) để hai phận (ngữ nghĩa cài đặt) thay đổi độc lập Composite Tổ chức đối tượng theo cấu trúc phân cấp dạng cây; Tất đối tượng cấu trúc thao tác theo cách Tạo quan hệ thứ bậc bao gộp đối tượng Client xem đối tượng bao gộp bị bao gộp -> khả tổng quát hoá code client -> dễ phát triển, nâng cấp, bảo trì Decorator Gán thêm trách nhiệm cho đối tượng (mở rộng chức năng) vào (Décorateur) lúc chạy (dynamically) Facade Cung cấp interface cho hp cỏc (Faỗade) interface mt h thng (subsystem) Nó định nghĩa interface cao interface có sẵn để làm cho hệ thống dễ sử dụng Flyweight Sử dụng việc chia sẻ để thao tác hiệu số lượng lớn (Poids mouche) đối tượng “cở nhỏ” (chẳng hạn paragraph, dòng, cột, ký tự…) Proxy Cung cấp đối tượng đại diện cho đối tượng khác để hỗ trợ (Procuration) kiểm sốt q trình truy xuất đối tượng Đối tượng thay gọi proxy Creational Patterns : Nhóm cấu thành (Creational Pattern): Liên quan đến q trình khởi tạo đối tượng cụ thể từ định nghĩa trừu tượng (abstract class, interface) Khắc phục vấn đề khởi tạo đối tượng, hạn chế phụ thuộc platform STT Tên Mục đích Abstract Factory Cung cấp interface cho việc tạo lập đối tượng (có liên hệ với (Fabrique Abstraite) nhau) mà không cần qui định lớp hay xác định lớp cụ thể (concrete) tạo đối tượng Builder (Monter) Tách rời việc xây dựng (construction) đối tượng phức tạp khỏi biểu diễn cho tiến trình xây dựng tạo biểu diễn khác Factory Method (Fabrication) Định nghĩa Interface để sinh đối tượng lớp định lớp dùng để sinh đối tượng Factory method cho phép lớp chuyển trình khởi tạo đối tượng cho lớp 10/25/2009 2:21 PM Hệ thống mẫu design patte of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh Prototype Qui định loại đối tượng cần tạo cách dùng đối tượng mẫu, tạo nhờ vào chép đối tượng mẫu nầy Singleton Đảm bảo class có instance cung cấp điểm truy xuất tồn cục đến Behavioral Patterns : Nhóm tương tác động (Behavioral Pattern) : Mơ tả cách thức để lớp đối tượng giao tiếp với 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 động STT Tên Mục đích Khắc phục việc ghép cặp gởi nhận thơng Chain of Responsibility(Chne de điệp; Các đối tượng nhận thông điệp kết nối thành chuỗi thông điệp chuyển dọc theo responsabilités) chuỗi nầy đến gặp đối tượng xử lý nó.Tránh việc gắn kết cứng phần tử gởi request với phần tử nhận xử lý request cách cho phép đối tượng có có hội xử lý request liên kết đối tượng nhận request thành dây chuyền “pass” request xuyên qua đối tượng xử lý đến gặp đối tượng xử lý cụ thể Command(Commande) Mỗi yêu cầu (thực thao tác đó) bao bọc thành đối tượng Các yêu cầu lưu trữ gởi đối tượng.Đóng gói request vào Object , nhờ nthơng số hố chương trình nhận request thực thao tác request: xếp, log, undo… Interpreter(Interpreteur)Hỗ trợ việc định nghĩa biểu diễn văn phạm thông dịch cho ngôn ngữ Iterator(Itérateur) Truy xuất phần tử đối tượng dạng tập hợp (list, array, …) mà không phụ thuộc vào biểu diễn bên phần tử Mediator(Médiateur) Định nghĩa đối tượng để bao bọc việc giao tiếp số đối tượng với Memento Hiệu chỉnh trả lại cũ trạng thái bên đối tượng mà không vi phạm việc bao bọc liệu Observer(Observateur) Định nghĩa phụ thuộc một-nhiều đối tượng cho đối tượng thay đổi trạng thái tất đối tượng phụ thuộc thay đổi theo State(Etat) Cho phép đối tượng thay đổi hành vi trạng thái bên thay đổi , ta có cảm giác class đối tượng bị thay đổi Strategy Bao bọc họ thuật toán lớp đối tượng để thuật tốn thay đổi độc lập chương trình sử dụng thuật tốn.Cung cấp họ giải thuật cho phép client chọn lựa linh động giải thuật cụ thể sử dụng Template method(Patron Định nghĩa phần khung thuật toán, tức de méthode) thuật toán tổng quát gọi đến số phương thức chưa cài đặt lớp sở; việc cài đặt phương thức ủy nhiệm cho lớp kế thừa 10 Visitor(Visiteur) Cho phép định nghĩa thêm phép toán tác động lên phần tử cấu trúc đối tượng mà không cần thay đổi lớp định nghĩa cấu trúc Tài liệu tham khảo - PCWorld – ID: A0506_116 – Thực hiện: Phạm Đình Trường - http://www.codeproject.com/KB/architecture/CSharpClassFactory.aspx 10/25/2009 2:21 PM Hệ thống mẫu design patte of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh - Design Patterns – Phương Lan số tác giả – Nhà Xuất Bản Phương Đông - [1] Design Patterns in C# and VB.NET – Gang of Four (GOF) http://www.dofactory.com/Patterns /Patterns.aspx - [2] Head First Design Pattern – O’REILLY.http://www.oreilly.com - http://www.oodesign.com - http://exciton.cs.rice.edu Editor and Poster: Đặng Thanh Tùng 1.Mẫu kiến tạo(Creational Pattern) Những mẫu hỗ trợ cho nhiệm vụ lập trình hướng đối tượng – khởi tạo đối tượng hệ thống Hầu hết hệ thống hướng đối tượng phức tạp yêu cầu nhiều đối tượng thể theo thời gian, mẫu hỗ trợ cho việc tạo tiến trình việc cung cấp khả năng: - Sự thể chung – Điều cho phép đối tượng tạo hệ thống không cần phải định nghĩa đặc tả kiểu lớp mã nguồn - Đơn giản – Một vài mẫu làm cho việc khởi tạo đối tượng trở nên dễ dàng, lớp “gọi” khởi tạo đối tượng viết mã nhiều phức tạp 1.1.Abstract Factory Method Pattern - Ý nghĩa Đóng gói nhóm lớp đóng vai trị “sản xuất” (Factory) ứng dụng, lớp dùng để tạo lập đối tượng Các lớp sản xuất có chung giao diện lập trình kế thừa từ lớp cha ảo gọi “lớp sản xuất ảo” - Cấu trúc mẫu Trong đó: o AbstractFactory: lớp trừu tượng, tạo đối tượng thuộc lớp trừu tượng là: AbstractProductA AbstractProductB o ConcreteFactoryX: lớp kế thừa từ AbstractFatory, lớp tạo đối tượng cụ thể o AbstractProduct: lớp trừu tượng, đối tượng cụ thể thể lớp dẫn xuất từ lớp - Tình áp dụng o Phía trình khách khơng phụ thuộc vào việc sản phẩm tạo o Ứng dụng cấu hình với nhiều họ sản phẩm o Các đối tượng cần phải tạo tập hợp để tương thích với o Chúng ta muốn cung cấp tập lớp muốn thể ràng buộc, mối quan hệ chúng mà thực thi chúng(interface) - Ví dụ Giả sử ta cần viết ứng dụng quản lý địa số điện thoại cho quốc gia giới Điạ số địa thoại quốc gia có số điểm giống số điểm khác Ta xây dựng sơ đồ lớp sau: 10/25/2009 2:21 PM Hệ thống mẫu design patte of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh Ta xây dựng phương thức tạo Address, PhoneNumber cụ thể lớp USAAddressPhoneFactory, FrechAddressPhoneFactory Với phương thực createProductAddress() lớp USAAddressPhoneFactory trả đối tượng lớp USAAddress Với phương thực createProductAddress() lớp FrechAddressPhoneFactory trả đối tượng lớp FrechAddress Tương tự với PhoneNumber AddressFactory.java public interface AddressFactory { public Address createAddress(); public PhoneNumber createPhoneNumber(); } Address.java public abstract class Address { private String street; private String city; private String region; private String postalCode; public static final String EOL_STRING = System.getProperty("line.separator"); public static final String SPACE = " "; public String getStreet() { return street; } public String getCity() { return city; } 10/25/2009 2:21 PM Hệ thống mẫu design patte of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh public String getPostalCode() { return postalCode; } public String getRegion() { return region; } public abstract String getCountry(); public String getFullAddress() { return street + EOL_STRING + city + SPACE + postalCode + EOL_STRING; } public void setStreet(String newStreet) { street = newStreet; } public void setCity(String newCity) { city = newCity; } public void setRegion(String newRegion) { region = newRegion; } public void setPostalCode(String newPostalCode) { postalCode = newPostalCode; } } USAddressFactory.java public class USAddressFactory implements AddressFactory { public Address createAddress() { return new USAddress(); } public PhoneNumber createPhoneNumber() { return new USPhoneNumber(); } } USAddress.java public class USAddress extends Address { private static final String COUNTRY = "UNITED STATES"; private static final String COMMA = ","; public String getCountry() { return COUNTRY; } public String getFullAddress() { return getStreet() + EOL_STRING + getCity() + COMMA + SPACE + getRegion() + SPACE + getPostalCode() + EOL_STRING + COUNTRY + EOL_STRING; } } Tương tự cho lớp PhoneNumber USAPhoneNumber 1.2.Builder Pattern - Ý nghĩa Phân tách khởi tạo thành phần đối tượng phức hợp, để khởi tạo mà tạo nên nhiều định dạng khác - Cấu trúc mẫu 10/25/2009 2:21 PM Hệ thống mẫu design patte of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh Trong đó: o Director: lớp điều khiển tạo đối tượng Product o Builder: lớp trừu tượng cho phép tạo đối tượng Product từ phương thức nhỏ khởi tạo thành phần Product o ConcreteBuilder: lớp dẫn xuất Builder, khởi tạo đối tượng cụ thể, lớp khởi tạo đối tượng - Tình áp dụng o Có cấu trúc bên phức tạp (đặc biệt biến tập đối tượng liên quan với nhau) o Có thuộc tính phụ thuộc vào thuộc tính khác o Sử dụng đối tượng khác hệ thống mà khó khởi tạo khởi tạo phức tạp - Ví dụ Ta lại xét đối tượng Address, có thành phần sau: Street, City Region Ta phân tách việc khởi tạo đối tượng Address thành phần : buildStreet, buildCity buildRegion Trong đó: o AddressDirector: lớp tạo đối tượng Address o AddressBuilder: lớp trừu tượng cho phép tạo đối tượng Address phương thức khởi tạo thành phần Address o USAddressBuilder: lớp tạo Address USAddressBuilder tạo địa theo chuẩn USA Address.java class Address { private String street; private String city; private Stringregion ; 10/25/2009 2:21 PM Hệ thống mẫu design patte of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh /** * @return the city */ public String getCity() { return city; } /** * @param city the city to set */ public void setCity(String city) { this.city = city; } /** * @return the region */ public String getRegion() { return region; } /** * @param region the region to set */ public void setRegion(String region) { this.region = region; } /** * @return the street */ public String getStreet() { return street; } /** * @param street the street to set */ public void setStreet(String street) { this.street = street; } } AddressBuilder.java abstract class AddressBuilder { abstract public void buildStreet(String street) { } abstract public void buildCity(String city) { } abstract public void buildRegion(String region) { } } USAddressBuilder.java class USAddressBuilder extends AddressBuilder { private Address add; public void buildStreet(String street) { add.setStreet(street); } 10/25/2009 2:21 PM Hệ thống mẫu design patte 10 of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh public void buildCity(String city) { add.setCity(city); } public void buildRegion(String region) { add.setRegion(region); } public Address getAddress() { return add; } } AddressDirector.java class AddressDirector { public void Contruct(AddressBuilder builder, String street, String city, String region) { builder.buildStreet(street); builder.buildCity(city); builder.buildRegion(region); } } Client.java class Client { AddressDirector director = new AddressDirector(); USAddressBuilder b = new USAddressBuilder(); director.Contruct (b, "Street 01", "City 01", "Region 01"); Address add = b.getAddress(); } 1.3.Factory Method - Ý nghĩa Định nghĩa phương thức chuẩn để khởi tạo đối tượng, phần phương thức tạo, việc định kiểu đối tượng tạo phụ thuộc vào lớp - Cấu trúc mẫu Trong đó: o Creator lớp trừu tượng, khai báo phương thức factoryMethod() không cài đặt o Product lớp trừu tượng o ConcreteCreatorA ConcreteCreatorB lớp kế thừa từ lớp Creator để tạo đối tượng riêng biệt o ConcreteProductA ConcreteProductB lớp kế thừa lớp Product, đối tượng lớp lớp ConcreteCreatorA ConcreteCreatorB tạo - Tình áp dụng o Khi bạn muốn tạo framework mở rộng, có nghĩa cho phép tính mềm dẻo số 10/25/2009 2:21 PM Hệ thống mẫu design patte 19 of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh Ta biểu diễn tóan thành cấu trúc duyệt theo Ba Lan (hay Ba Lan đảo khơng cịn nhớ nữa) Mã nguồn cho ví dụ sau import java.util.*; public class Context extends Stack { } public interface Expression { public void interpret(Context context); } public class TerminalExpressionNumber implements Expression { private int number; public TerminalExpressionNumber(int number) { this.number = number; } public void interpret(Context context) { context.push(this.number); 10/25/2009 2:21 PM Hệ thống mẫu design patte 20 of 33 http://docs.google.com/View?id=dfb3z868_179d6hrc7dh } } public class TerminalExpressionPlus implements Expression { public void interpret(Context context) { //Cong phan tu phia tren dinh Stack context.push(context.pop() + context.pop()); } } public class TerminalExpressionMutil implements Expression { public void interpret(Context context) { //Nhan phan tu phia tren dinh Stack context.push(context.pop() * context.pop()); } } public class NonterminalExpression implements Expression { private ArrayList expressions;//tham chieu den mang Exoression public ArrayList getExpressions() { return expressions; } public void setExpressions(ArrayList expressions) { this.expressions = expressions; } public void interpret(Context context) { if (expressions != null) { int size = expressions.size(); for (Expression e : expressions) { e.interpret(context); } } } } public class Client { public static void main(String[] agrs) { Context context = new Context(); // 3 * ArrayList treeLevel1 = new ArrayList(); treeLevel1.add(new TerminalExpressionNumber(3)); treeLevel1.add(new TerminalExpressionNumber(3)); treeLevel1.add(new TerminalExpressionMutil()); // (3 *) + ArrayList treeLevel2 = new ArrayList(); treeLevel2.add(new TerminalExpressionNumber(5)); Expression nonexpLevel1 = new NonterminalExpression(); ((NonterminalExpression) nonexpLevel1).setExpressions(treeLevel1); treeLevel2.add(nonexpLevel1); treeLevel2.add(new TerminalExpressionPlus()); // (5 (3 *) +) + ArrayList treeLevel3 = new ArrayList(); Expression nonexpLevel2 = new NonterminalExpression(); ((NonterminalExpression) nonexpLevel2).setExpressions(treeLevel2); treeLevel3.add(nonexpLevel2); treeLevel3.add(new TerminalExpressionNumber(6)); treeLevel3.add(new TerminalExpressionPlus()); 10/25/2009 2:21 PM ... http://docs.google.com/View?id=dfb3z868_179d6hrc7dh - Design Patterns – Phương Lan số tác giả – Nhà Xuất Bản Phương Đông - [1] Design Patterns in C# and VB.NET – Gang of Four (GOF) http://www.dofactory.com /Patterns /Patterns. aspx -... Developer sử dụng design pattern cách đưa micro-architecture vào thiết kế họ, nghĩa micro-architecture thiết kế họ có cấu trúc cách tổ chức tương tự design motif chọn Hệ thống mẫu design pattern... cấu trúc Tài liệu tham khảo - PCWorld – ID: A0506_116 – Thực hiện: Phạm Đình Trường - http://www.codeproject.com/KB/architecture/CSharpClassFactory.aspx 10/25/2009 2:21 PM Hệ thống mẫu design patte

Ngày đăng: 06/09/2012, 14:31

Hình ảnh liên quan

Design pattern giúp tăng tốc độ phát triển phần mềm bằng cách đưa ra các mô hình test, mô hình phát triển đã qua kiểm nghiệm - Tài liệu Design Patterns Tiếng Việt

esign.

pattern giúp tăng tốc độ phát triển phần mềm bằng cách đưa ra các mô hình test, mô hình phát triển đã qua kiểm nghiệm Xem tại trang 2 của tài liệu.
- Che dấu hiện thực của đối tượng, che dấu giải thuậ t, hỗ trợ việc thay đổi cấu hình đối tượng một cách linh động - Tài liệu Design Patterns Tiếng Việt

he.

dấu hiện thực của đối tượng, che dấu giải thuậ t, hỗ trợ việc thay đổi cấu hình đối tượng một cách linh động Xem tại trang 4 của tài liệu.
- Mô hình mẫu - Tài liệu Design Patterns Tiếng Việt

h.

ình mẫu Xem tại trang 13 của tài liệu.
- Mô hình mẫu - Tài liệu Design Patterns Tiếng Việt

h.

ình mẫu Xem tại trang 23 của tài liệu.
- Mô hình mẫu - Tài liệu Design Patterns Tiếng Việt

h.

ình mẫu Xem tại trang 25 của tài liệu.
- Mô hình mẫu - Tài liệu Design Patterns Tiếng Việt

h.

ình mẫu Xem tại trang 27 của tài liệu.
- Mô hình mẫu - Tài liệu Design Patterns Tiếng Việt

h.

ình mẫu Xem tại trang 29 của tài liệu.
3.6. Flyweight Pattern - Tài liệu Design Patterns Tiếng Việt

3.6..

Flyweight Pattern Xem tại trang 29 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan