310 likes | 569 Views
Design Patterns Introduction to Design Patterns Week #9 Jarungjit Parnjai. Object Oriented Analysis and Design. Lecture Outline. What is A Pattern? Why Patterns? Software Patterns GoF Design Patterns Singleton (Object Creational Design Patterns). What is A Pattern?. A Pattern
E N D
Design PatternsIntroduction to Design PatternsWeek #9Jarungjit Parnjai Object Oriented Analysis and Design
Lecture Outline • What is A Pattern? • Why Patterns? • Software Patterns • GoF Design Patterns • Singleton (Object Creational Design Patterns)
What is A Pattern? • A Pattern • ถูกใช้ในงานของสถาปนิก ชื่อ Christopher Alexander • Alexander ศึกษาแนวทางการปรับปรุงกระบวนการออกแบบอาคาร และสิ่งก่อสร้าง • “Each pattern is a three-part rule, which expresses a relation between a certain context, a problem and a solution.” • definition : • “A solution to a problem in a context”
A Solution to a Problem in a Context • Context • สถานการณ์ที่เกิดปัญหาการออกแบบขึ้น • Problem • ปัญหาที่เกิดขึ้นซ้ำๆ กันใน Context • Solution • แนวทางการแก้ปัญหาที่พิสูจน์แล้วว่าใช้งานได้จริง • ระบุส่วนผสมขององค์ประกอบเพื่อสร้างความสมดุลของแนวทางการแก้ปัญหา
Why Patterns? • Erich Gamma • “Designing object-oriented software is hard and designing reusuable object-oriented software is even harder.” • นักออกแบบที่เชี่ยวชาญนำใช้ Solution ที่สามารถทำงานได้ผลในอดีตกลับมาใช้ไหม่ • โครงสร้างของระบบเชิงวัตถุที่ดีจะมี Pattern ของ Class และ Object เกิดขึ้นซ้ำแบบเดิม • ความรู้เกี่ยวกับ Pattern ที่สามารถทำงานได้ผลในอดีต ทำให้นักออกแบบระบบสามารถทำงานได้อย่างมีประสิทธิผล และทำให้เกิดความยืดหยุ่นในการออกแบบ และนำมาใช้ใหม่
Software Patterns History • 1987 - CunningHam และ Beck ใช้แนวคิดของ Alexander ในการพัฒนา Pattern Language สำหรับ Smalltalk • 1990 - Gang of Four (Gamma, Helm, Johnson และ Vlissides ; GoF) เริ่มต้นรวบรวม catalog ของ design pattern • 1991 - Bruce Anderson จัด Patterns Workshop ครั้งแรกขึ้นที่ OOPSLA • 1993 - Kent Back และ Grady Booch ให้การสนับสนุน meeting ครั้งแรกของ Hillside Group • 1994 - จัดประชุม Pattern Languages of Programs (PLoP) ครั้งแรก • 1995 - GoF ตีพิมพ์หนังสือ “Design Pattern”
Types of Software Patterns • Analysis • Design • Organizational • Process • Project Planning • Configuration Management
Types of Software Patterns • Software Pattern 3 ประเภท (Riehel และ Zullighoven) • Conceptual Pattern • Pattern whose form is described by means of terms and concepts from the application domain. • Design Pattern • Pattern whose form is described by means of software design constructs such as objects. Classes, inheritance and aggregation. • Programming Pattern • Pattern whose form is described by means of programming langugage
More Abstract More Concrete Design Patterns Levels of Abstraction • Complex design for an entire application or subsystem • Solution to a general design problem in a particular context • Simple reusable design class such as a linked list, hash table, etc.
GoF Classification of Design Patterns • GoF Design Patterns อยู่ในตรงกลางของ Levels of Abstraction • “ A design pattern names, abstracts, and identifies key aspects of a common design structure that makes it useful for creating a reusable object-oriented design.” • GoF Design Pattern • “description of communicating objects and classes that are customized to solve a general design problem in a particular context.”
GoF Design Patterns • Purposes - what a pattern does • Creational Patterns เกี่ยวกับกระบวนการสร้าง Object • Structural Patternsเกี่ยวกับโครงสร้าง และองค์ประกอบของ Class และ Object • Behavioral Patternsเกี่ยวกับปฏิสัมพันธ์ระหว่าง Class และ Object • Scope - what the pattern applies to • Class Patterns เน้นความสัมพันธ์ระหว่าง Class และ Subclass ซึ่งเกี่ยวข้องกับการนำ Inheritance กลับมาใช้ใหม่ • Object Patternsเน้นความสัมพันธ์ระหว่าง Object ซึ่งเน้นการนำ Composition กลับมาใช้ใหม่
Purpose Creational Structural Behavioral Scope Factory Method Adapter InterpreterTemplate Method Class Object Abstract FactoryBuilderPrototypeSingleton AbstractBridgeCompositeFaçadeFlyweightProxy Chain of ResponsibilityCommandIteratorMediatorMementoStateStrategy GoF Design Patterns
Design for Change • Creating an object by specifying a class explicitly • Abstract Factory, Factory Method, Prototype • Dependence on specific operation • Chain of Responsibility, Command • Dependence on h/w and s/w platforms • Abstract Factory, Bridge • Dependence on object representations or implementations • Abstract Factory, Bridge, Memento, Proxy • Algorithm Dependencies • Builder, Iterator, Strategy, Template Method, Visitor
Design for Change (Continued) • Tight Coupling • Abstract factory, Bridge, Chain of Responsibility, Command, Façade, Mediator, Observer • Extending functionality of subclassing • Bridge, Chain of Responsibility, Composite, Decorator, Observer, Strategy • Inability to alter classes conveniently • Adapter, Decorator, Visitor
GoF Essential Elements of Design Patterns • Pattern Name • ชื่อสั้น และมีความหมาย เอื้อประโยชน์ในการสื่อสารภายในทีมผู้พัฒนา • Problem • problem และ context ที่ใช้ใน Pattern นี้ • เงื่อนไขที่ต้องมีก่อนที่จะใช้ Pattern นี้ • Solution • คำอธิบายของ Element ที่ประกอบเป็น Design Pattern • เน้นที่ relationship responsibilities และ collaboration • ไม่ใช่ concrete design หรือการ implemenation แต่เป็น abstract description • Consequences • Pros และ Cons ของการใช้ pattern ซึ่งรวมถึงผลกระทบต่างๆ
GoF Pattern Template • Pattern Name และ Classification • ชื่อสั้น และมีความหมาย สำหรับ Pattern และ ประเภทของ Pattern • Intent • ประโยคสั้นๆ ที่อธิบายหน้าที่การทำงานของ pattern • Also Known As • ชื่ออื่นที่เป็นที่รู้จักของ Pattern นี้ • Motivation • สถานการณ์ที่ใช้ในการจำลองเหตุการณ์ที่นำ Pattern ไปใช้ประโยชน์ • Applicability • แนวทาง และ เทคนิคสำหรับการ implement
GoF Pattern Template (Continued) • Structure • การนำเสนอ pattern โดยใช้รูปภาพ • Participants • Class และ Object ที่มีส่วนร่วมใน pattern นี้ • Collaborations • การปฏิสัมพันธ์ระหว่าง participant เพื่อทำหน้าที่ที่ตัวเองมี responsibilities • Consequences • Pros และ Cons ของการเลือกใช้ Pattern นี้ • Implementation • แนวทาง และ เทคนิคสำหรับการ implement
GoF Pattern Template (Continued) • Sample Code • ส่วนของ Code ที่เป็นตัวอย่างสำหรับการ implement • Known Uses • ตัวอย่างของ Pattern ในระบบที่มีการใช้งานจริง • Relatted Patterns • Patterns อื่นที่ใกล้เคียงกับ Pattern นี้
Singleton • Case Study • พิจารณาบริษัทแห่งหนึ่งต้องการพัฒนาระบบ ที่ต้องการเก็บข้อมูลต่างๆ เกี่ยวกับบริษัทได้แก่ ชื่อ, ที่อยู่ของสำนักงานใหญ่, ข้อมูลการจดทะเบียนของบริษัท และสามารถนำข้อมูลเหล่านั้นมาแสดงผ่านทาง application interface และพิมพ์รายงาน • ข้อมูลต่างๆ ควรเก็บอยู่ในที่ใดที่หนึ่งภายใน application แต่สามารถถูกนำไปใช้โดยวัตถุที่แตกต่างกัน หลายๆ วัตถุ
Singleton • First Design approach : • อาจออกแบบให้สร้าง global data ภายใน ที่สามารถเข้าถึงได้จากวัตถุใดๆภายนอก • ละเมิดกฏของ Encapsulation • การเปลี่ยนแปลงใดๆที่เกิดขึ้นกับโครงสร้างข้อมูลที่เป็น global data มีผลกระทบถึงวัตถุที่เรียกใช้ข้อมูลเหล่านั้น
Company - CompanyName- CompanyAddress- CompanyRegistrationNumber + getCompanyDetails() Singleton • Second Design approach : • วัตถุใดๆ ที่ต้องการเรียกใช้ วัตถุ “Company” ต้องรู้ Object Identifier (อาจอยู่ในรูปของตัวแปรอ้างอิง) ไปยังวัตถุ • Object Identfier ต้องประกาศให้เป็น global • ละเมิดกฏของ Encapsulation!!!
Singleton publicclass Company { private String name; private String address; private String regNumber; public Company(String n, String a, String r) { name = n; address = a; regNumber = r; } public String getCompanyName() { return name; } public String getCompanyAddress() { return address; } public String getCompanyRegistrationNumber() { return regNumber; } } • Second Design approach :
Singleton • Third Design approach : • คลาส “Company” มีเพียง instance เดียวเท่านั้น • ใช้ Class Operation (Static Operation ในจาวา) ในการเข้าถึง Object Identifier Company - CompanyInstance : Company- CompanyName : String- CompanyAddress : String- CompanyRegistrationNumber : int + getCompanyInstance( ) : Comapany+ getCompanyDetails() : String
Singleton publicclass Company { privatestatic Company instance = new Company("Company., Ltd.", "Burapha Unviersity", "99999"); private String name; private String address; private String regNumber; private Company(String n, String a, String r) { name = n; address = a; regNumber = r; } publicstatic Company getCompanyInstance() { return instance; } public String getCompanyName() { return name; } public String getCompanyAddress() { return address; } public String getCompanyRegistrationNumber() { return regNumber; } } • Third Design approach :
Singleton publicclass TestCompany { publicstaticvoid main(String[] args) { Company instance1 = Company.getCompanyInstance(); if (instance1 == null) { System.out.println("null!!!"); } else { System.out.println("not null!!!"); System.out.println(instance1); System.out.println(instance1.getCompanyName()); System.out.println(instance1.getCompanyAddress()); System.out.println(instance1.getCompanyRegistrationNumber()+"\n"); } • Third Design approach :
Company instance2 = Company.getCompanyInstance(); if (instance2 == null) { System.out.println("null!!!"); } else { System.out.println("not null!!!"); System.out.println(instance2); System.out.println(instance2.getCompanyName()); System.out.println(instance2.getCompanyAddress()); System.out.println(instance2.getCompanyRegistrationNumber()); } } }
not null!!! Company@256a7c Company., Ltd. Burapha Unviersity 99999 not null!!! Company@256a7c Company., Ltd. Burapha Unviersity 99999
Singleton Design Pattern • Pattern Name • Singleton / Object creational • Problem • class หนึ่ง class ใดมีเพียง instance เดียวเท่านั้น และกำหนด global point ที่ใช้ในการเข้าถึง instance ของ class นั้น • Context • สร้าง global data ภายใน ที่สามารถเข้าถึงได้จากวัตถุใดๆภายนอก หรือประกาศ Object Identifier เป็น global • หรือใช้ class operation ในการเข้าถึง Object identifier ที่ถูกสร้างโดยคลาส • รูปแบบอื่นๆ ของ Singleton Pattern อาจขึ้นอยู่กับสถานการณ์ตอนเริ่มต้นสร้าง instance
Singleton Design Pattern • Solution • สร้าง class ที่มี Class Operation ในการให้ค่า instance ของ class • อาจสร้าง instance ของ class ไว้ตั้งแต่เริ่มแรกที่มีการ load class เข้ามาในระบบ • หรืออาจสร้าง instance ของ class ในครั้งแรกที่มีการเรียก Class Operation เพื่อสอบถามค่า instance ของ class • Consequences • มีการควบคุมการเข้าถึง object instance ที่ถูก encapsulate ไว้ใน class • ไม่จำเป็นต้องประกาศ name space ไว้เป็น global • อาจมีการทำ subclass ของ Singleton class และให้ user สามารถเลือกว่าต้องการสร้าง subclass ใดเมื่อตอน run-time • อาจมีการดัดแปลงให้มีการสร้าง instance ที่มากกว่า 1 instance ภายในคลาส ตามต้องการ
Summary • What is A Pattern? • Why Patterns? • Software Patterns • GoF Design Patterns • Singleton (Object Creational Design Patterns)