SlideShare uma empresa Scribd logo
1 de 44
Software Patterns Joseph Bonello
Motivation Building software using new frameworks is more complex And expensive There are many methodologies and frameworks to help developers build enterprise application The main problems are: Changes in business logic Technology updates Maintenance Building software is difficult Building reusable software is even harder!
Why Patterns? We need a common, tried-and-tested way of building and testing software Especially in those areas where common problems recur The aim is to make it easier to change and maintain software Other aims Developers adopt a common design principle Don’t waste time “hacking” your way into a solution Reference on structures that get the work done efficiently
Patterns and Anti-patterns A pattern is a general, re-usable solution to a common problem in software design Gamma, Erich; Richard Helm, Ralph Johnson, and John Vlissides (1995). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 0-201-63361-2 (Gang-Of-Four Book) An anti-pattern is a commonly used pattern but is counterproductive or ineffective in practice Experienced OO designers, in general, do not try to solve a problem from first principles Instead, they prefer to reuse a solution that has worked in the past
What constitutes a pattern? A Pattern has 4 essential elements: A pattern name: Used to refer to a description of a design problem, its solutions and consequences using a descriptive alias.  The alias allows us to communicate with other and design at a higher level of abstraction. The problem: It describes when to apply the pattern. It describes the context of the problem such as class/object structures symptomatic of bad design or a list of conditions that must be met before applying the pattern. The solution: describes the elements that make up the design, the relationships, responsibilities and collaborations. It does not describe a concrete implementation. It is an abstract description of the general arrangement that will solve the problem. The consequences: refer to the results and trade-offs or applying the pattern. They are used to judge the costs and benefits of applying the pattern. Consequences include impact on system flexibility, extensibility and portability.
Categories of Patterns Creational patterns Deal with object creation mechanisms Structural patterns Ease the design of defining relationships between entities Behavioral patterns Used to identify communication patterns between objects and increase flexibility when carrying out this communication
Creational Patterns We shall be looking at the following Creational Patterns Singleton Pattern Abstract Factory (Kit) Pattern
Structural Patterns In this section, we’ll discuss the following patterns Adapter (or Wrapper) Pattern Bridge Pattern Composite Pattern Decorator Pattern Façade Pattern
Behavioural Patterns These are some common behavioural patterns: Iterator Pattern Observer Pattern Strategy Pattern
Creational Patterns We shall be looking at the following Creational Patterns Singleton Pattern Abstract Factory (Kit) Pattern
The Singleton Pattern I Provides a single object throughout the lifetime of an application Provides a single access point to the object An example would be to have one database connection per client application Used when: There must only be one instance of a class Clients need one single way of accessing the instance
The Singleton Pattern II Benefits: Controlled access to sole instance (or multiple instances) Avoids “global variables” in namespace Permits Subclassing More flexible than static member and methods
Abstract Factory (Kit) I Provide an interface for creating families of related or dependent object without specifying their concrete classes Used to de-couple clients from a particular concrete implementation Example: Different implementations of handling an order’s costs (e.g. TaxCalculator(EU,USA, CN,etc), shipping costs, etc)
Abstract Factory (Kit) II
Abstract Factory (Kit) III Use the Abstract Factory pattern when  a system should be independent of how its products are created, composed, and represented.   a system should be configured with one of multiple families of products.   a family of related product objects is designed to be used together, and you need to enforce this constraint.   you want to provide a class library of products, and you want to reveal just their interfaces, not their implementations.
Abstract Factory (Kit) IV Benefits: Isolates concrete classes Allows to change product family easily Promotes consistency among products Factory usually a Singleton; ideally create<Object> should have a type parameter to make it extensible
Structural Patterns In this section, we’ll discuss the following patterns Adapter (or Wrapper) Pattern Bridge Pattern Composite Pattern Decorator Pattern Façade Pattern
Adapter (Wrapper) I Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces. Example Merging a new library with an old library you discover two methods with the same name but different parameters
Adapter (Wrapper) II Benefits: Allow two or more incompatible objects to communicate and interact. Improves reusability of older functionality.
Adapter (Wrapper) III Use when: When you want to use an existing class, and its interface does not match the interface you need. When you want to create a reusable class that cooperates with unrelated or onforeseen classes, classes that don't necessarily have compatible interfaces. When you want to use an object in an environment that expects an interface that is diferent from the object's interface. When you must ensure interface translation among multiple sources.
Bridge (Handle) Pattern I Used to decouple an abstraction from its implementation so that the two can vary independently When an abstraction (abstract class) can have several implementations, the usual way to accommodate them is to use inheritance This isn’t always a flexible approach because the implementation binds to the abstraction permanently Use the pattern when: You want to avoid a permanent binding between an abstraction and its implementation Both the abstractions and the implementations should be extensible by sub-classing Changes in the implementation of an abstraction should not impact clients
Bridge (Handle) Pattern II Use the pattern when (cont): You have a class hierarchy that proliferates because it needs to adapt to various specific implementations You want to share an implementation among multiple objects but you want to keep the fact hidden from the client.
Bridge (Handle) Pattern III Known uses GUI frameworks as discussed previously. Persistence Frameworks Consequences: Implementation is not bound permanently to an interface Eliminates compile time dependencies (no recompilation of abstract class) Decoupling encourages layering, therefore a better structured system Improved extensibility Hiding implementation details from clients
Composite pattern I Used to compose objects into tree structures to represent part-whole hierarchies.   Clients treat individual objects and compositions of objects uniformly Example Consider graphics applications that allow users to build complex diagrams out of simple components which can be grouped into more complex ones A simple implementation would define classes for graphical primitives and other classes that act as containers for these primitives Problem: code using these classes must treat primitives and objects differently The distinction increases the complexity of the system The pattern uses recursive composition so clients do not make this distinction
Composite pattern II Use the pattern when: You want to represent part-whole hierarchies of objects You want clients to be able to ignore differences between compositions of objects and individual objects
Composite pattern III Example Consequences Define class hierarchies consisting of primitive objects and composite objects Simplifies the client’s architecture Simplifies the process of adding new components The design can be overly general (disadvantage)
Decorator (WRAPPER) Pattern I Decorator is used to attach responsibilities to an object dynamically Decorators provide a flexible alternative to sub-classing for extending functionality Why use it? We use it when we need to add responsibilities to individual objects, not the entire class (e.g. adding borders or scrollbars to a visual widget) If you use inheritance will affect every instance which will not allow it to vary the choice as it is statically linked The solution is to add the object, called the decorator or wrapper, within another that adds the required property
Decorator (WRAPPER) Pattern II Use the Decorator To add responsibilities to individual objects dynamically and transparently To withdraw responsibilities from the object When extending by sub-classing is impractical or not permitted A large number of independent extensions would result in an explosion of classes A class definition may be hidden or sealed (final)
Decorator (WRAPPER) Pattern III Consequences More flexible than static inheritance Easier to add a property twice (e.g. a widget with a double border) Avoids feature-laden classes up in the hierarchy, reducing complexity. Features are added incrementally with new decorator objects The decorator and its component are identical, the decorator is a transparent enclosure similar to a photograph frame Lots of little objects (disadvantage), difficult to learn and debug Used frequently in UI Toolkits and in the implementation of IO stream classes
Façade Pattern I Provides a unified interface to a set of interfaces in a subsystem Defines a higher level interface that makes the subsystem easier to use Structuring a system into subsystems helps reduce complexity Common design goal is to minimise communication and dependency between subsystems Façade objects provides a single, simplified interface to more general facilities of the sub-system
Façade Pattern II Example: Programming environment providing access to its compiler subsystem Higher level interface shields clients from intricate details of different parts of compiler by allowing access to specific functionality of different subparts Use Façade when: Provide a simple interface to a complex system There are many dependencies between clients and the implementation classes of an abstraction – Façade decouples the sub-system from clients Layer your subsystems. Façade defines the entry to each subsystem layer
Façade Pattern III Consequences Shields clients from sub-system components Promotes weak coupling between sub-system and its clients Reduces compilation dependencies Does not prevent applications from using subsystem classes if they need to
Behavioural Patterns These are some common behavioural patterns: Iterator Pattern Observer Pattern Strategy Pattern
Iterator (Cursor) Pattern I Provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation An aggregate object (e.g. List) should give you a way to access its elements without exposing its structure You might want to traverse the list in many ways, but you want to keep the design and implementation of the List clean The idea of the pattern is to take the responsibility for accessing and traversing the list using at iterator object The iterator keeps track of the current element The List is responsible for creating its own iterator, possibly using a Factory to generalise the operation
Iterator (Cursor) Pattern II Use this pattern when you want To access an aggregate object’s contents without exposing its internal representation Support multiple traversals of aggregate objects Provide a uniform interface for traversing different aggregate structures
Iterator (Cursor) Pattern III Consequences of using this pattern Supports variations in the traversal of an aggregate Simplify the aggregate interface Mode than one traversal can be pending on the same aggregate Known uses: Collection classes (Lists, Vectors, etc)
Observer (dependents) Pattern I Defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically When partitioning a system into a collection of cooperating classes, one needs to maintain consistency between related objects Note that tightly coupling class is not a solution because it reduces reusability The observer pattern describes how to establish common relationships between objects The key objects are the subject and the observer All observer are notified when the subject changes (publish-subscribe model)
Observer (dependents) Pattern II Used when Abstraction has two aspects, one dependent on the other. Encapsulate the objects separately and reuse them independently When a change to one object requires changing the others, and you do not know how many objects to change When an object needs to be able to notify other objects without making assumptions about who these objects are (not tightly coupled)
Observer (dependents) Pattern III Consequences Abstract coupling between Subject and Observer. Subject knows that it has a list of observers conforming to the observer interface, it does not know the concrete class of the observer – minimal coupling Support for broadcast communication Unexpected updated (disadvantage). Since observers have no knowledge of other observers, changing the subject might result in undesired updates
Strategy (Policy) Pattern I Define a family of algorithms that encapsulate one another and make them interchangeable Strategy lets the algorithm vary independently of the client that uses them Example: Many algorithms exist for breaking a stream of text into lines. Hard-wiring all algorithms into the classes that require them is not desirable because Client get overly complex Different algorithms will be appropriate at different times Difficult to add new algorithms and vary existing ones
Strategy (Policy) Pattern II Use this pattern when Many related classes differ only in their behaviour Need different variants of an algorithm An algorithm uses data that clients shouldn’t know about (avoid exposing complex, algorithm-specific data structures) A class defines many behaviours that appear as multiple conditional statements in its operators
Strategy (Policy) Pattern III Consequences Families of related algorithms. Hierarchies of Strategy classes define a family of algorithms that can be reused An alternative to sub-classing, which is easier to switch to, understand and extend Strategies eliminate conditional statements Provides a choice of implementations Clients must be aware of different strategies (disadvantage) Communication overhead between Strategy and Context (Strategy interface is shared, so some simple concrete classes may use little or none of the parameters passes to them. Tightly couple context and strategy to solve this problem) Increased number of objects
Other Model-View-Controller (MVC) This pattern isolates domain logic from the user interface The model manages the behaviour and data of the application domain,  The view renders the model into a form suitable for interaction, typically a user interface element.  The controller receives input and initiates a response by making calls on model objects. A controller accepts input from the user and instructs the model and viewport to perform actions based on that input. Sometimes considered a framework
Further Reading Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (2007). Design Patterns: Elements of Reusable Object-Oriented Software. USA: Addison-Wesley Professional (ISBN 0-201-63361-2) McConell, S. (2004). Code Complete: A Practical Handbook of Software Construction. USA: MICROSOFT PRESS (ISBN 0-735-61967-0) Alur, D., Malks, D., & Crupi, J. (2003). Core J2EE Patterns: Best Practices and Design Strategies. USA: Prentice Hall (ISBN 0-131-42246-4) http://www.dofactory.com/Patterns/Patterns.aspx http://www.oodesign.com

Mais conteúdo relacionado

Mais procurados

Creational pattern
Creational patternCreational pattern
Creational patternHimanshu
 
Software Architecture and Project Management module III : PATTERN OF ENTERPRISE
Software Architecture and Project Management module III : PATTERN OF ENTERPRISESoftware Architecture and Project Management module III : PATTERN OF ENTERPRISE
Software Architecture and Project Management module III : PATTERN OF ENTERPRISEsreeja_rajesh
 
Design Pattern For C# Part 1
Design Pattern For C# Part 1Design Pattern For C# Part 1
Design Pattern For C# Part 1Shahzad
 
Vb net xp_03
Vb net xp_03Vb net xp_03
Vb net xp_03Niit Care
 
Design Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur UniversityDesign Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur UniversityShubham Narkhede
 
Design patterns creational patterns
Design patterns creational patternsDesign patterns creational patterns
Design patterns creational patternsMalik Sajid
 
Behavioral pattern By:-Priyanka Pradhan
Behavioral pattern By:-Priyanka PradhanBehavioral pattern By:-Priyanka Pradhan
Behavioral pattern By:-Priyanka PradhanPriyanka Pradhan
 
PATTERNS04 - Structural Design Patterns
PATTERNS04 - Structural Design PatternsPATTERNS04 - Structural Design Patterns
PATTERNS04 - Structural Design PatternsMichael Heron
 
The SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsThe SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsHayim Makabee
 
PATTERNS02 - Creational Design Patterns
PATTERNS02 - Creational Design PatternsPATTERNS02 - Creational Design Patterns
PATTERNS02 - Creational Design PatternsMichael Heron
 
P Training Presentation
P Training PresentationP Training Presentation
P Training PresentationGaurav Tyagi
 
PATTERNS03 - Behavioural Design Patterns
PATTERNS03 - Behavioural Design PatternsPATTERNS03 - Behavioural Design Patterns
PATTERNS03 - Behavioural Design PatternsMichael Heron
 
Factory method, strategy pattern & chain of responsibilities
Factory method, strategy pattern & chain of responsibilitiesFactory method, strategy pattern & chain of responsibilities
Factory method, strategy pattern & chain of responsibilitiesbabak danyal
 
Factory method & strategy pattern
Factory method & strategy patternFactory method & strategy pattern
Factory method & strategy patternbabak danyal
 

Mais procurados (19)

Sequence diagrams in UML
Sequence diagrams in UMLSequence diagrams in UML
Sequence diagrams in UML
 
Creational pattern
Creational patternCreational pattern
Creational pattern
 
Software Architecture and Project Management module III : PATTERN OF ENTERPRISE
Software Architecture and Project Management module III : PATTERN OF ENTERPRISESoftware Architecture and Project Management module III : PATTERN OF ENTERPRISE
Software Architecture and Project Management module III : PATTERN OF ENTERPRISE
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
Design Pattern For C# Part 1
Design Pattern For C# Part 1Design Pattern For C# Part 1
Design Pattern For C# Part 1
 
Vb net xp_03
Vb net xp_03Vb net xp_03
Vb net xp_03
 
Design Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur UniversityDesign Pattern Notes: Nagpur University
Design Pattern Notes: Nagpur University
 
Design patterns creational patterns
Design patterns creational patternsDesign patterns creational patterns
Design patterns creational patterns
 
Behavioral pattern By:-Priyanka Pradhan
Behavioral pattern By:-Priyanka PradhanBehavioral pattern By:-Priyanka Pradhan
Behavioral pattern By:-Priyanka Pradhan
 
PATTERNS04 - Structural Design Patterns
PATTERNS04 - Structural Design PatternsPATTERNS04 - Structural Design Patterns
PATTERNS04 - Structural Design Patterns
 
The SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsThe SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design Patterns
 
PATTERNS02 - Creational Design Patterns
PATTERNS02 - Creational Design PatternsPATTERNS02 - Creational Design Patterns
PATTERNS02 - Creational Design Patterns
 
Design UML diagrams
Design UML diagramsDesign UML diagrams
Design UML diagrams
 
P Training Presentation
P Training PresentationP Training Presentation
P Training Presentation
 
Design patterns
Design patternsDesign patterns
Design patterns
 
PATTERNS03 - Behavioural Design Patterns
PATTERNS03 - Behavioural Design PatternsPATTERNS03 - Behavioural Design Patterns
PATTERNS03 - Behavioural Design Patterns
 
Factory method, strategy pattern & chain of responsibilities
Factory method, strategy pattern & chain of responsibilitiesFactory method, strategy pattern & chain of responsibilities
Factory method, strategy pattern & chain of responsibilities
 
Composite Pattern
Composite PatternComposite Pattern
Composite Pattern
 
Factory method & strategy pattern
Factory method & strategy patternFactory method & strategy pattern
Factory method & strategy pattern
 

Destaque

Edited Treatment for 'Tamam Shud'
Edited Treatment for 'Tamam Shud'Edited Treatment for 'Tamam Shud'
Edited Treatment for 'Tamam Shud'Gabrielle Orr
 
Jim Shelton Recommendation
Jim Shelton RecommendationJim Shelton Recommendation
Jim Shelton Recommendationjshelton
 
Современная бизнес реальность как вызов для риэлторской услуги.Pptx
Современная бизнес реальность как вызов для риэлторской услуги.PptxСовременная бизнес реальность как вызов для риэлторской услуги.Pptx
Современная бизнес реальность как вызов для риэлторской услуги.PptxKA_Personal
 
LYNKOS Intro
LYNKOS IntroLYNKOS Intro
LYNKOS IntroLYNKOS
 
LYNKOS Overview - Financial Institutions
LYNKOS Overview - Financial InstitutionsLYNKOS Overview - Financial Institutions
LYNKOS Overview - Financial InstitutionsLYNKOS
 
μαντω μαυρογενους
μαντω μαυρογενουςμαντω μαυρογενους
μαντω μαυρογενουςChrysa Arabatzoglou
 
Advantage MRI - Letter of Recommendation 2016
Advantage MRI - Letter of Recommendation 2016Advantage MRI - Letter of Recommendation 2016
Advantage MRI - Letter of Recommendation 2016ccstrain
 
'Help Wanted' script
'Help Wanted' script'Help Wanted' script
'Help Wanted' scriptMonty Sansom
 
Enfermedad de quervain
Enfermedad de quervainEnfermedad de quervain
Enfermedad de quervainDaniel Cano
 
Conhecendo as funções analogread, analogwrite e analogreference
Conhecendo as funções analogread, analogwrite e analogreferenceConhecendo as funções analogread, analogwrite e analogreference
Conhecendo as funções analogread, analogwrite e analogreferenceFábio dos Reis
 
Bits and Bytes
Bits and BytesBits and Bytes
Bits and Bytesadil raja
 

Destaque (17)

Edited Treatment for 'Tamam Shud'
Edited Treatment for 'Tamam Shud'Edited Treatment for 'Tamam Shud'
Edited Treatment for 'Tamam Shud'
 
Zaproszenie
ZaproszenieZaproszenie
Zaproszenie
 
Cast and Crew List
Cast and Crew ListCast and Crew List
Cast and Crew List
 
Sjr education
Sjr education Sjr education
Sjr education
 
Jim Shelton Recommendation
Jim Shelton RecommendationJim Shelton Recommendation
Jim Shelton Recommendation
 
Современная бизнес реальность как вызов для риэлторской услуги.Pptx
Современная бизнес реальность как вызов для риэлторской услуги.PptxСовременная бизнес реальность как вызов для риэлторской услуги.Pptx
Современная бизнес реальность как вызов для риэлторской услуги.Pptx
 
LYNKOS Intro
LYNKOS IntroLYNKOS Intro
LYNKOS Intro
 
Certificate
CertificateCertificate
Certificate
 
LYNKOS Overview - Financial Institutions
LYNKOS Overview - Financial InstitutionsLYNKOS Overview - Financial Institutions
LYNKOS Overview - Financial Institutions
 
μαντω μαυρογενους
μαντω μαυρογενουςμαντω μαυρογενους
μαντω μαυρογενους
 
Advantage MRI - Letter of Recommendation 2016
Advantage MRI - Letter of Recommendation 2016Advantage MRI - Letter of Recommendation 2016
Advantage MRI - Letter of Recommendation 2016
 
'Help Wanted' script
'Help Wanted' script'Help Wanted' script
'Help Wanted' script
 
Enfermedad de quervain
Enfermedad de quervainEnfermedad de quervain
Enfermedad de quervain
 
Testes ágeis: saindo da zona de conforto
Testes ágeis: saindo da zona de confortoTestes ágeis: saindo da zona de conforto
Testes ágeis: saindo da zona de conforto
 
Conhecendo as funções analogread, analogwrite e analogreference
Conhecendo as funções analogread, analogwrite e analogreferenceConhecendo as funções analogread, analogwrite e analogreference
Conhecendo as funções analogread, analogwrite e analogreference
 
Awareness of Children Internet Addiction
Awareness of Children Internet Addiction Awareness of Children Internet Addiction
Awareness of Children Internet Addiction
 
Bits and Bytes
Bits and BytesBits and Bytes
Bits and Bytes
 

Semelhante a Software Patterns

Facade pattern presentation(.pptx)
Facade pattern presentation(.pptx)Facade pattern presentation(.pptx)
Facade pattern presentation(.pptx)VishalChavan83
 
Architecture and design
Architecture and designArchitecture and design
Architecture and designhimanshu_airon
 
Introduction To Design Patterns
Introduction To Design PatternsIntroduction To Design Patterns
Introduction To Design Patternssukumarraju6
 
chapter 5 Objectdesign.ppt
chapter 5 Objectdesign.pptchapter 5 Objectdesign.ppt
chapter 5 Objectdesign.pptTemesgenAzezew
 
Object Oriented Analysis and Design
Object Oriented Analysis and DesignObject Oriented Analysis and Design
Object Oriented Analysis and DesignDr. C.V. Suresh Babu
 
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...Luis Valencia
 
Nina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design PatternsNina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design Patternsiasaglobal
 
Patterns (contd)Software Development ProcessDesign patte.docx
Patterns (contd)Software Development ProcessDesign patte.docxPatterns (contd)Software Development ProcessDesign patte.docx
Patterns (contd)Software Development ProcessDesign patte.docxdanhaley45372
 
UNIT IV DESIGN PATTERNS.pptx
UNIT IV DESIGN PATTERNS.pptxUNIT IV DESIGN PATTERNS.pptx
UNIT IV DESIGN PATTERNS.pptxanguraju1
 
Cs 1023 lec 8 design pattern (week 2)
Cs 1023 lec 8 design pattern (week 2)Cs 1023 lec 8 design pattern (week 2)
Cs 1023 lec 8 design pattern (week 2)stanbridge
 
Design pattern (week 2)
Design pattern (week 2)Design pattern (week 2)
Design pattern (week 2)stanbridge
 
UML-Advanced Software Engineering
UML-Advanced Software EngineeringUML-Advanced Software Engineering
UML-Advanced Software EngineeringAmit Singh
 

Semelhante a Software Patterns (20)

Design patterns
Design patternsDesign patterns
Design patterns
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
Sda 9
Sda   9Sda   9
Sda 9
 
Facade pattern presentation(.pptx)
Facade pattern presentation(.pptx)Facade pattern presentation(.pptx)
Facade pattern presentation(.pptx)
 
Architecture and design
Architecture and designArchitecture and design
Architecture and design
 
Introduction To Design Patterns
Introduction To Design PatternsIntroduction To Design Patterns
Introduction To Design Patterns
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
chapter 5 Objectdesign.ppt
chapter 5 Objectdesign.pptchapter 5 Objectdesign.ppt
chapter 5 Objectdesign.ppt
 
Object Oriented Analysis and Design
Object Oriented Analysis and DesignObject Oriented Analysis and Design
Object Oriented Analysis and Design
 
Design pattern
Design patternDesign pattern
Design pattern
 
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
 
Encapsulation
EncapsulationEncapsulation
Encapsulation
 
Nina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design PatternsNina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design Patterns
 
Patterns (contd)Software Development ProcessDesign patte.docx
Patterns (contd)Software Development ProcessDesign patte.docxPatterns (contd)Software Development ProcessDesign patte.docx
Patterns (contd)Software Development ProcessDesign patte.docx
 
UNIT IV DESIGN PATTERNS.pptx
UNIT IV DESIGN PATTERNS.pptxUNIT IV DESIGN PATTERNS.pptx
UNIT IV DESIGN PATTERNS.pptx
 
Cs 1023 lec 8 design pattern (week 2)
Cs 1023 lec 8 design pattern (week 2)Cs 1023 lec 8 design pattern (week 2)
Cs 1023 lec 8 design pattern (week 2)
 
Design patterns
Design patternsDesign patterns
Design patterns
 
designpatterns-.pdf
designpatterns-.pdfdesignpatterns-.pdf
designpatterns-.pdf
 
Design pattern (week 2)
Design pattern (week 2)Design pattern (week 2)
Design pattern (week 2)
 
UML-Advanced Software Engineering
UML-Advanced Software EngineeringUML-Advanced Software Engineering
UML-Advanced Software Engineering
 

Último

Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 

Último (20)

Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 

Software Patterns

  • 2. Motivation Building software using new frameworks is more complex And expensive There are many methodologies and frameworks to help developers build enterprise application The main problems are: Changes in business logic Technology updates Maintenance Building software is difficult Building reusable software is even harder!
  • 3. Why Patterns? We need a common, tried-and-tested way of building and testing software Especially in those areas where common problems recur The aim is to make it easier to change and maintain software Other aims Developers adopt a common design principle Don’t waste time “hacking” your way into a solution Reference on structures that get the work done efficiently
  • 4. Patterns and Anti-patterns A pattern is a general, re-usable solution to a common problem in software design Gamma, Erich; Richard Helm, Ralph Johnson, and John Vlissides (1995). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. ISBN 0-201-63361-2 (Gang-Of-Four Book) An anti-pattern is a commonly used pattern but is counterproductive or ineffective in practice Experienced OO designers, in general, do not try to solve a problem from first principles Instead, they prefer to reuse a solution that has worked in the past
  • 5. What constitutes a pattern? A Pattern has 4 essential elements: A pattern name: Used to refer to a description of a design problem, its solutions and consequences using a descriptive alias. The alias allows us to communicate with other and design at a higher level of abstraction. The problem: It describes when to apply the pattern. It describes the context of the problem such as class/object structures symptomatic of bad design or a list of conditions that must be met before applying the pattern. The solution: describes the elements that make up the design, the relationships, responsibilities and collaborations. It does not describe a concrete implementation. It is an abstract description of the general arrangement that will solve the problem. The consequences: refer to the results and trade-offs or applying the pattern. They are used to judge the costs and benefits of applying the pattern. Consequences include impact on system flexibility, extensibility and portability.
  • 6. Categories of Patterns Creational patterns Deal with object creation mechanisms Structural patterns Ease the design of defining relationships between entities Behavioral patterns Used to identify communication patterns between objects and increase flexibility when carrying out this communication
  • 7. Creational Patterns We shall be looking at the following Creational Patterns Singleton Pattern Abstract Factory (Kit) Pattern
  • 8. Structural Patterns In this section, we’ll discuss the following patterns Adapter (or Wrapper) Pattern Bridge Pattern Composite Pattern Decorator Pattern Façade Pattern
  • 9. Behavioural Patterns These are some common behavioural patterns: Iterator Pattern Observer Pattern Strategy Pattern
  • 10. Creational Patterns We shall be looking at the following Creational Patterns Singleton Pattern Abstract Factory (Kit) Pattern
  • 11. The Singleton Pattern I Provides a single object throughout the lifetime of an application Provides a single access point to the object An example would be to have one database connection per client application Used when: There must only be one instance of a class Clients need one single way of accessing the instance
  • 12. The Singleton Pattern II Benefits: Controlled access to sole instance (or multiple instances) Avoids “global variables” in namespace Permits Subclassing More flexible than static member and methods
  • 13. Abstract Factory (Kit) I Provide an interface for creating families of related or dependent object without specifying their concrete classes Used to de-couple clients from a particular concrete implementation Example: Different implementations of handling an order’s costs (e.g. TaxCalculator(EU,USA, CN,etc), shipping costs, etc)
  • 15. Abstract Factory (Kit) III Use the Abstract Factory pattern when a system should be independent of how its products are created, composed, and represented. a system should be configured with one of multiple families of products. a family of related product objects is designed to be used together, and you need to enforce this constraint. you want to provide a class library of products, and you want to reveal just their interfaces, not their implementations.
  • 16. Abstract Factory (Kit) IV Benefits: Isolates concrete classes Allows to change product family easily Promotes consistency among products Factory usually a Singleton; ideally create<Object> should have a type parameter to make it extensible
  • 17. Structural Patterns In this section, we’ll discuss the following patterns Adapter (or Wrapper) Pattern Bridge Pattern Composite Pattern Decorator Pattern Façade Pattern
  • 18. Adapter (Wrapper) I Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces. Example Merging a new library with an old library you discover two methods with the same name but different parameters
  • 19. Adapter (Wrapper) II Benefits: Allow two or more incompatible objects to communicate and interact. Improves reusability of older functionality.
  • 20. Adapter (Wrapper) III Use when: When you want to use an existing class, and its interface does not match the interface you need. When you want to create a reusable class that cooperates with unrelated or onforeseen classes, classes that don't necessarily have compatible interfaces. When you want to use an object in an environment that expects an interface that is diferent from the object's interface. When you must ensure interface translation among multiple sources.
  • 21. Bridge (Handle) Pattern I Used to decouple an abstraction from its implementation so that the two can vary independently When an abstraction (abstract class) can have several implementations, the usual way to accommodate them is to use inheritance This isn’t always a flexible approach because the implementation binds to the abstraction permanently Use the pattern when: You want to avoid a permanent binding between an abstraction and its implementation Both the abstractions and the implementations should be extensible by sub-classing Changes in the implementation of an abstraction should not impact clients
  • 22. Bridge (Handle) Pattern II Use the pattern when (cont): You have a class hierarchy that proliferates because it needs to adapt to various specific implementations You want to share an implementation among multiple objects but you want to keep the fact hidden from the client.
  • 23. Bridge (Handle) Pattern III Known uses GUI frameworks as discussed previously. Persistence Frameworks Consequences: Implementation is not bound permanently to an interface Eliminates compile time dependencies (no recompilation of abstract class) Decoupling encourages layering, therefore a better structured system Improved extensibility Hiding implementation details from clients
  • 24. Composite pattern I Used to compose objects into tree structures to represent part-whole hierarchies. Clients treat individual objects and compositions of objects uniformly Example Consider graphics applications that allow users to build complex diagrams out of simple components which can be grouped into more complex ones A simple implementation would define classes for graphical primitives and other classes that act as containers for these primitives Problem: code using these classes must treat primitives and objects differently The distinction increases the complexity of the system The pattern uses recursive composition so clients do not make this distinction
  • 25. Composite pattern II Use the pattern when: You want to represent part-whole hierarchies of objects You want clients to be able to ignore differences between compositions of objects and individual objects
  • 26. Composite pattern III Example Consequences Define class hierarchies consisting of primitive objects and composite objects Simplifies the client’s architecture Simplifies the process of adding new components The design can be overly general (disadvantage)
  • 27. Decorator (WRAPPER) Pattern I Decorator is used to attach responsibilities to an object dynamically Decorators provide a flexible alternative to sub-classing for extending functionality Why use it? We use it when we need to add responsibilities to individual objects, not the entire class (e.g. adding borders or scrollbars to a visual widget) If you use inheritance will affect every instance which will not allow it to vary the choice as it is statically linked The solution is to add the object, called the decorator or wrapper, within another that adds the required property
  • 28. Decorator (WRAPPER) Pattern II Use the Decorator To add responsibilities to individual objects dynamically and transparently To withdraw responsibilities from the object When extending by sub-classing is impractical or not permitted A large number of independent extensions would result in an explosion of classes A class definition may be hidden or sealed (final)
  • 29. Decorator (WRAPPER) Pattern III Consequences More flexible than static inheritance Easier to add a property twice (e.g. a widget with a double border) Avoids feature-laden classes up in the hierarchy, reducing complexity. Features are added incrementally with new decorator objects The decorator and its component are identical, the decorator is a transparent enclosure similar to a photograph frame Lots of little objects (disadvantage), difficult to learn and debug Used frequently in UI Toolkits and in the implementation of IO stream classes
  • 30. Façade Pattern I Provides a unified interface to a set of interfaces in a subsystem Defines a higher level interface that makes the subsystem easier to use Structuring a system into subsystems helps reduce complexity Common design goal is to minimise communication and dependency between subsystems Façade objects provides a single, simplified interface to more general facilities of the sub-system
  • 31. Façade Pattern II Example: Programming environment providing access to its compiler subsystem Higher level interface shields clients from intricate details of different parts of compiler by allowing access to specific functionality of different subparts Use Façade when: Provide a simple interface to a complex system There are many dependencies between clients and the implementation classes of an abstraction – Façade decouples the sub-system from clients Layer your subsystems. Façade defines the entry to each subsystem layer
  • 32. Façade Pattern III Consequences Shields clients from sub-system components Promotes weak coupling between sub-system and its clients Reduces compilation dependencies Does not prevent applications from using subsystem classes if they need to
  • 33. Behavioural Patterns These are some common behavioural patterns: Iterator Pattern Observer Pattern Strategy Pattern
  • 34. Iterator (Cursor) Pattern I Provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation An aggregate object (e.g. List) should give you a way to access its elements without exposing its structure You might want to traverse the list in many ways, but you want to keep the design and implementation of the List clean The idea of the pattern is to take the responsibility for accessing and traversing the list using at iterator object The iterator keeps track of the current element The List is responsible for creating its own iterator, possibly using a Factory to generalise the operation
  • 35. Iterator (Cursor) Pattern II Use this pattern when you want To access an aggregate object’s contents without exposing its internal representation Support multiple traversals of aggregate objects Provide a uniform interface for traversing different aggregate structures
  • 36. Iterator (Cursor) Pattern III Consequences of using this pattern Supports variations in the traversal of an aggregate Simplify the aggregate interface Mode than one traversal can be pending on the same aggregate Known uses: Collection classes (Lists, Vectors, etc)
  • 37. Observer (dependents) Pattern I Defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically When partitioning a system into a collection of cooperating classes, one needs to maintain consistency between related objects Note that tightly coupling class is not a solution because it reduces reusability The observer pattern describes how to establish common relationships between objects The key objects are the subject and the observer All observer are notified when the subject changes (publish-subscribe model)
  • 38. Observer (dependents) Pattern II Used when Abstraction has two aspects, one dependent on the other. Encapsulate the objects separately and reuse them independently When a change to one object requires changing the others, and you do not know how many objects to change When an object needs to be able to notify other objects without making assumptions about who these objects are (not tightly coupled)
  • 39. Observer (dependents) Pattern III Consequences Abstract coupling between Subject and Observer. Subject knows that it has a list of observers conforming to the observer interface, it does not know the concrete class of the observer – minimal coupling Support for broadcast communication Unexpected updated (disadvantage). Since observers have no knowledge of other observers, changing the subject might result in undesired updates
  • 40. Strategy (Policy) Pattern I Define a family of algorithms that encapsulate one another and make them interchangeable Strategy lets the algorithm vary independently of the client that uses them Example: Many algorithms exist for breaking a stream of text into lines. Hard-wiring all algorithms into the classes that require them is not desirable because Client get overly complex Different algorithms will be appropriate at different times Difficult to add new algorithms and vary existing ones
  • 41. Strategy (Policy) Pattern II Use this pattern when Many related classes differ only in their behaviour Need different variants of an algorithm An algorithm uses data that clients shouldn’t know about (avoid exposing complex, algorithm-specific data structures) A class defines many behaviours that appear as multiple conditional statements in its operators
  • 42. Strategy (Policy) Pattern III Consequences Families of related algorithms. Hierarchies of Strategy classes define a family of algorithms that can be reused An alternative to sub-classing, which is easier to switch to, understand and extend Strategies eliminate conditional statements Provides a choice of implementations Clients must be aware of different strategies (disadvantage) Communication overhead between Strategy and Context (Strategy interface is shared, so some simple concrete classes may use little or none of the parameters passes to them. Tightly couple context and strategy to solve this problem) Increased number of objects
  • 43. Other Model-View-Controller (MVC) This pattern isolates domain logic from the user interface The model manages the behaviour and data of the application domain, The view renders the model into a form suitable for interaction, typically a user interface element. The controller receives input and initiates a response by making calls on model objects. A controller accepts input from the user and instructs the model and viewport to perform actions based on that input. Sometimes considered a framework
  • 44. Further Reading Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (2007). Design Patterns: Elements of Reusable Object-Oriented Software. USA: Addison-Wesley Professional (ISBN 0-201-63361-2) McConell, S. (2004). Code Complete: A Practical Handbook of Software Construction. USA: MICROSOFT PRESS (ISBN 0-735-61967-0) Alur, D., Malks, D., & Crupi, J. (2003). Core J2EE Patterns: Best Practices and Design Strategies. USA: Prentice Hall (ISBN 0-131-42246-4) http://www.dofactory.com/Patterns/Patterns.aspx http://www.oodesign.com

Notas do Editor

  1. Code is platform-dependent. Concrete classes here have a specific implementation
  2. Widgets with all possible types of borders, scrollbars, etc.
  3. Widgets with all possible types of borders, scrollbars, etc.
  4. Spreadsheet – same data, different views
  5. Spreadsheet – same data, different views
  6. Spreadsheet – same data, different views