A Smalltalk Patterns Safari - PowerPoint PPT Presentation

About This Presentation
Title:

A Smalltalk Patterns Safari

Description:

Title: Escape from the Spaghetti Code Jungle Author: Brian Foote Last modified by: Brian Foote Created Date: 2/9/1998 2:37:42 AM Document presentation format – PowerPoint PPT presentation

Number of Views:119
Avg rating:3.0/5.0
Slides: 62
Provided by: BrianF159
Learn more at: http://www.laputan.org
Category:

less

Transcript and Presenter's Notes

Title: A Smalltalk Patterns Safari


1
A Smalltalk Patterns Safari
  • Brian Foote
  • The Refactory, Inc.

2
Why Patterns?
  • Whats New Here is that Nothing is New Here
  • Patterns are about what works
  • Patterns give us a way to talk about what works
  • Patterns distill experience
  • Patterns give us a pithy design vocabulary

3
Alexander on Patterns
  • Patterns in solutions come from patterns in
    problems.
  • "A pattern is a solution to a problem in a
    context."
  • "Each pattern describes a problem which occurs
    over and over again in our environment, and then
    describes the core of the solution to that
    problem, in such a way that you can use this
    solution a million times over, without ever doing
    it the same way twice."
  • Christopher Alexander -- A Pattern Language

4
Why Patterns in the Wild?
  • Learn where to look
  • Learn how to spot em and recognize em
  • See how they evolve
  • Appreciate their history, and our history
  • Understand their ecosystem and interdependence
  • Helps us discern and discover new ones

5
The Gang of FourThe Essential Field Guide
  • Design Patterns Elements of Reusable
    Object-Oriented Software
  • Erich Gamma, Richard Helm, Ralph Johnson, and
    John Vlissides
  • Addison Wesley, 1995
  • A landmark book that changed the way programmers
    think about building object-oriented programs

6
Dr. Johnson, I presume?
  • Great explorers, like Livingstone and Johnson
    neither necessarily create nor invent, nor, do
    they even always discover
  • Often, their greatest skill is communication...

7
Your Guide
  • Over Twenty Years in the Bush...
  • Stalking Smalltalk since 81 or 85 Patterns?
  • An long-time associate of Dr. Johnson...

8
Field Guides (cont.)
  • The Design Patterns Smalltalk Companion
  • Alpert, Brown, and Woolf
  • Addison Wesley, 1998
  • Pattern-Oriented Software Architecture
  • Buschmann, Meunier, Rohnert, Sommerlad, and
    Stahl
  • Wiley, 1996
  • The Pattern Languages of Program Design Series
  • Volumes 1-4
  • Addison Wesley, 1995-2000

9
VisualWorksThe Image A Virtual Veldt
  • The Cradle of Object-OrientedArchitecture
  • An Olduvai Gorge Teeming with Patterns

10
GoF Design Patterns
  • Creational patterns
  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton
  • Structural patterns
  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Proxy
  • Behavioral Patterns
  • Chain of Responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor

11
The Big Five
  • Composite
  • Proxy
  • Strategy
  • Observer
  • Visitor
  • Lion
  • Leopard
  • Elephant
  • Buffalo
  • Rhino

12
Objects within Objects
13
Composite
  • Context
  • Developing OO software
  • Problem
  • Complex part-whole hierarchy has lots of similar
    classes.
  • Example document, chapter, section, paragraph.
  • Forces
  • simplicity -- treat composition of parts like a
    part
  • power -- create new kind of part by composing
    existing ones
  • safety -- no special cases, treat everything
    the same

14
Composite
Idea make abstract "component"
class. Alternative 1 every component has a
(possibly empty) set of components.
Component
Children
Paragraph
Chapter
...
Problem many components have no components
15
Composite
Component
Container
Children
Composite
Leaf
Composite and Component have the exact same
interface. interface for enumerating children
Component implements Children() by returning
empty set interface for adding/removing
children?
16
Composite Pattern
Component
Container
Children
Composite
Leaf
Composite and Component have the exact same
interface. interface for enumerating children
Component implements Children() by returning
empty set interface for adding/removing
children?
17
Two Design Alternatives
Component does not know what it is a part
of. Component can be in many composite. Component
can be accessed only through composite.
Component knows what it is a part of. Component
can be in only one composite. Component can be
accessed directly.
18
Component Knows its Composite
  • Rules when component knows its single composite.
  • A is a part of B if and only if B is the
    composite of A.
  • Duplicating information is dangerous!
  • Problem how to ensure that pointers from
    components to composite and composite to
    components are consistent.

19
Ensuring Consistency
  • The public operations on components and
    composites are
  • Composite can enumerate components.
  • Component knows its container.
  • Add/remove a component to/from the composite.
  • The operation to add a component to a composite
    updates the container of the component. There
    should be no other way to change the container of
    a component.
  • Smalltalk does not enforce private methods.

20
Example Equipment
Equipment
weight
cost
CompositeEq.
FloppyDisk
...
  • weight
  • total
  • total 0.
  • self childrenDo each total total each
    weight.
  • total

21
VisualComponentgtgtadd
22
Composite Pattern in VisualWorks
VisualComponent
Children
VisualPart
ComposedText
Container
CompositePart
ListView
  • Most operations in CompositePart simply iterate
    over the children and repeat the operation on
    them.

23
CompositePart
  • addComponent aVisualComponent
  • self isOpen
  • ifTrue ...
  • ifFalse components addLast aVisualComponent.
  • aVisualComponent container self
  • displayOn aGraphicsContext
  • "Display each of the receiver's components."
  • clipBox
  • clipBox aGraphicsContext clippingBounds.
  • components do
  • component
  • (component intersects clipBox)
  • ifTrue component displayOn aGraphicsContext
    copy

24
Summary of Composite
  • Composite is a kind of Component
  • Permits arbitrary hierarchies
  • Add/remove Component from Composite
  • Operations on Composite iterate over Components

25
Template Method
  • As plentiful as sawgrass...
  • Often associated with scavengers
  • e.g. printOn aString

26
Factory Method
  • Plentiful in the image...
  • View defaultControllerClass
  • UILookPolicy
  • XxxClass methods

27
Abstract Factory
28
Builder
  • ClassBuilder
  • UI Builders

29
Prototype
  • This isnt Self, after all...
  • VisualWorks TextAttributes
  • Look for copy
  • Thinglab, Morphic...

30
Singleton
  • All the Metaclasses...
  • ProcessScheduler
  • SourceFileManager
  • true, false, nil

31
Strategy
  • Sundry Policies...

32
Observer Pattern
  • Intent Define a one-to-many dependency between
    objects so that when one object changes state,
    all its dependents are notified and updated
    automatically.

observer/dependent
Observer Update
Subject AddDependent RemoveDependent Changed
LineFigure Update
endPoint
RectangleFigure
33
Iterator
  • Provide a way to access the elements of an
    aggregate object sequentially without exposing
    its underlying implementation.

Iterator
Aggregate
First() Next() IsDone() CurrentItem()
CreateIterator()
ConcreteAggregate
ConcreteIterator
CreateIterator()
34
Iterator in Smalltalk
  • 1) Internal iterator - iterate inside the
    Iterator
  • easy to use, not as powerful as external iterator
  • works well because of blocks
  • employees do each each name printOn
    aStream
  • 2) Combine Next() and CurrentItem() (Smalltalk
    Stream)
  • employeeStream GeneralMotors
    employeeStream.
  • employeeStream atEnd
  • whileFalse
  • employeeStream next name
    printOn aStream

35
Proxy
  • Provide a surrogate or placeholder for another
    object to control access to it
  • represent an object in a remote address space
  • create expensive objects on demand
  • check access rights
  • Proxy has same interface as real subject, and
    forwards operations to it

36
Proxy
Subject
Client
request
...
realSubject
Proxy
RealSubject
request
request
realSubject request
37
Proxy
  • Remote proxy - first package arguments, then make
    remote procedure call.
  • Virtual proxy - compute objects, then forward
    request.
  • Protection proxy - check access rights, then
    forward request.

38
Creating an Orphan
  • nil subclass Future
  • instanceVariableNames semaphore '
  • classVariableNames '
  • poolDictionaries ' '
  • category Reflection-Examples
  • In VisualWorks, ClassBuilder does the rest.
    Default implementations of doesNotUnderstand and
    class are provided.

39
Locating Orphans
  • allBehaviorsDo aBlock
  • "Evaluate the argument, aBlock, for each kind of
    Behavior in the system (that is, Object and its
    subclasses,
  • plus other classes that have no superclass)."
  • Class rootsOfTheWorld do
  • cls
  • aBlock value cls.
  • cls allSubclassesDo aBlock

40
Terminology and Taxonomy
  • Is this a Wildebeest?
  • A Gnu?
  • Class MammaliaOrder ArtiodactylaFamily
    BovidaeGenus species Connochaetes (flowing
    beard) taurinus (like a bull) albojubatus (white
    mane)

41
Decorator
  • Object ()
  • VisualComponent ()
  • VisualPart ()
  • Wrapper ()
  • GeometricWrapper ()
  • FillingWrapper ()
  • StrokingWrapper ()
  • GraphicsAttributesWrapper ()
  • PassivityWrapper ('controlActive')
  • ReversingWrapper ()
  • StrikeOutWrapper ()
  • ScalingWrapper ()
  • TranslatingWrapper ()
  • LayoutWrapper ()
  • BoundedWrapper ()
  • BorderedWrapper ()
  • MenuBarWrapper ()
  • BoundingWrapper ()

42
Adaptor
  • Aspect Adaptor
  • Pluggable Adaptor

43
Flyweight
  • Character

44
Chain of Responsibility
  • VisualPart

45
Command
  • MenuItem
  • Blocks are often used instead in Smalltalk, so
    this pattern is not as common in its pure form in
    this environment...

46
Interpreter
  • The WindowSpec Walker
  • Though its not clear how to classify this
  • The simulator?

47
Observer
48
Parse Tree
49
Visitor
  • ProgramNodeEnumerator
  • This class provides a framework for recursively
    processing a program node tree. Program nodes of
    type ltNodeTypegt should implement
  • nodeDo anEnumerator
  • anEnumerator doltNodeTypegt self
    ...arguments...
  • by analogy with the ProgramNodeBuilder messages
  • newltNodeTypegtarguments
  • The old node is the first argument, so that
    enumerators can preserve the comment and source
    information if they wish.
  • To rebuild each non-leaf node, the enumerator
    sends the message
  • self doNode ltargumentgt
  • which is implemented by default as
  • doNode aNode
  • aNode nodeDo self

50
Visitor
  • ProgramNodeEnumerator
  • Subclasses must implement the following messages
  • enumerating-non-leaves
  • doAssignmentvariablevalue
  • doBlockargumentsbody
  • doCascadereceivermessages
  • doMessagereceiverselectorarguments
  • doMethodselectorprimitiveblock
  • doParametervariabletype
  • doReturnvalue
  • doSequencetemporariesstatements
  • enumerating-leaves
  • doLiteralvalue
  • doVariablename

51
ProgramNodeEnumerator
  • ProgramNodeEnumerator is a visitor for the
    Smalltalk-80 compiler.
  • Smalltalk compiler parse tree hierachy rarely
    changes.
  • There are lots of potential programs that need to
    traverse trees
  • consistency checkers
  • program transformation
  • metrics
  • It makes sense to keep these applications out of
    the parse tree.
  • Easy to make minor variations on tree walking
    applications.

52
Facade
  • Rarely seen in the image...
  • Perhaps the Smalltalk Compiler itself qualifies

53
Bridge
  • Elusive Quarry
  • Yellands paper from OOPSLA 96 discusses how
    Bridges might improve the image...

54
State
  • Have you seen one?

55
Memento
  • Nocturnal?
  • Seen in applications, like the Refactoring
    Browser
  • Difficult to find in the image...

56
Mediator
  • Case can be made for models...

57
GoF Design Patterns
  • Creational patterns
  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton
  • Structural patterns
  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Proxy
  • Behavioral Patterns
  • Chain of Responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor

58
Bird on Patterns
  • Learn the patterns and then forget em
  • -- Charlie Parker
  • http//www.hillside.net

59
Conserving Infodiversity
  • The Image A Cyberworld Heritage Site

60
A Victory over Entropy
  • A stunning collective achievement
  • A temple to design
  • Incubator for architecture
  • A pattern hunters paradise

61
Contact Information
  • Brian Foote
  • The Refactory, Inc.
  • 209 W. Iowa
  • Urbana, IL 61801
  • (217) 328-3523
  • http//www.laputan.org (H)
  • http//www.refactory.com (O)
  • foote_at_refactory.com
Write a Comment
User Comments (0)
About PowerShow.com