Patterns Senior Member of Technical Staff and Pattern Languages Knowledge Systems Corp

Patterns Senior Member of Technical Staff and Pattern Languages Knowledge Systems Corp

<p><a href="/goto?url=http://hometown.aol.com/kgb1001001/index.html" target="_blank"><strong>Kyle Brown </strong></a></p><p><strong>Senior Member of Technical Staff </strong><br><strong>Knowledge Systems Corp. </strong><br><strong>4001 Weston Parkway </strong></p><p><strong>An Introduction to Patterns and Pattern Languages </strong></p><p><strong>CSC591O April 7-9, 1997 Raleigh, NC </strong></p><p><strong>Cary, North Carolina 27513-2303 </strong><br><strong>919-481-4000 </strong><a href="mailto:[email protected]" target="_blank"><strong>[email protected] </strong></a></p><p><a href="/goto?url=http://www.ksccary.com/" target="_blank"><strong>http://www.ksccary.com </strong></a></p><p>Copyright (C) 1996, Kyle Brown, Bobby Woolf, and <br>Knowledge Systems Corp. All rights reserved. </p><p>135<br>246</p><p>Overview </p><p><a href="/goto?url=http://c2.com/ppr/about/author/bobby.html" target="_blank"><strong>Bobby Woolf </strong></a></p><p><strong>Senior Member of Technical Staff </strong><br><strong>Knowledge Systems Corp. </strong><br><strong>4001 Weston Parkway </strong></p><p>Patterns Software Patterns Design Patterns Architectural Patterns Pattern Catalogs Pattern Languages </p><p><strong>Cary, North Carolina 27513-2303 </strong><br><strong>919-481-4000 </strong><a href="mailto:[email protected]" target="_blank"><strong>[email protected] </strong></a><a href="/goto?url=http://www.ksccary.com" target="_blank"><strong>http://www.ksccary.com </strong></a></p><p>Patterns -- Why? </p><p><a href="/goto?url=http://hillside.net/patterns/" target="_blank">Patterns </a><a href="/goto?url=http://hillside.net/patterns/" target="_blank">-- </a>Why? </p><p>Learning software development is hard </p><p>» Lots&nbsp;of new concepts </p><p>!@#$ <br>Must be some way to communicate better </p><p>» Allow&nbsp;us to concentrate on the problem <br>» Hard&nbsp;to distinguish good ideas from bad ones </p><p>Languages and frameworks are very complex <br>Patterns can provide the answer </p><p>» Too&nbsp;much to explain » Much&nbsp;of their structure is incidental to our problem </p><p></p><ul style="display: flex;"><li style="flex:1"><a href="/goto?url=http://www.enteract.com:80/~bradapp/docs/patterns-intro.html" target="_blank">Patterns </a><a href="/goto?url=http://www.enteract.com:80/~bradapp/docs/patterns-intro.html" target="_blank">-- </a>What? </li><li style="flex:1"><a href="/goto?url=http://www.enteract.com/~bradapp/docs/patterns-nutshell.html" target="_blank">Patterns </a><a href="/goto?url=http://www.enteract.com/~bradapp/docs/patterns-nutshell.html" target="_blank">-- </a>Parts </li></ul><p></p><p>Patterns are made up of four main parts </p><p>» Title -- the name of the pattern </p><p>What is a pattern? </p><p>» A solution to a problem in a context <br>» Problem -- a statement of what the pattern solves <br>» A structured way of representing design </p><p>information in prose and diagrams <br>» Context -- a discussion of the constraints and forces on the problem <br>» A way of communicating design information from </p><p>an expert to a novice <br>» Solution -- a description of how to solve the problem <br>» Generative: show when and how to apply solutions </p><p>» One of the hottest topics in OO Design </p><p>– This may include a list of the participants in the pattern </p><p>May have other sections </p><p></p><ul style="display: flex;"><li style="flex:1">7</li><li style="flex:1">8</li></ul><p></p><p></p><ul style="display: flex;"><li style="flex:1">Patterns <a href="/goto?url=http://www.bell-labs.com/user/cope/Patterns/ICSE96/node3.html" target="_blank">-- </a><a href="/goto?url=http://www.bell-labs.com/user/cope/Patterns/ICSE96/node3.html" target="_blank">Origin </a><a href="/goto?url=http://www.bell-labs.com/user/cope/Patterns/ICSE96/node3.html" target="_blank">(1) </a></li><li style="flex:1">Patterns -- Origin (2) </li></ul><p></p><p>Pattern concept came from architecture </p><p>» A Pattern Language <br>[Alexander77] </p><p><a href="/goto?url=http://c2.com/cgi/wiki?PatternLanguage" target="_blank">A Pattern Language </a></p><p>describes </p><p>» Common&nbsp;architectural motifs <br>» A Timeless Way of Building [Alexander79] </p><p><a href="/goto?url=http://www.math.utsa.edu/sphere/salingar/Chris.text.html" target="_blank">Alexander </a><a href="/goto?url=http://www.math.utsa.edu/sphere/salingar/Chris.text.html" target="_blank">us</a>ed patterns to </p><p>» Express&nbsp;the interaction of forces in a problem <br>» How&nbsp;they can come together to form a cohesive, liveable environment </p><p>» Arrive&nbsp;at an elegant solution </p><p>9</p><p></p><ul style="display: flex;"><li style="flex:1">Patterns -- Doors Example (1) </li><li style="flex:1">Patterns -- Doors Example (2) </li></ul><p></p><p>Corner Doors </p><p>Solution: “...in most rooms, especially small ones, put the doors as near the corners of the room as possible.” </p><p></p><ul style="display: flex;"><li style="flex:1">»</li><li style="flex:1">[196 in Alexander77] </li></ul><p></p><p>Problem: How do you place the doors in a room? <br>“untouched by </p><p>movement” <br>“If the doors create a pattern of movement which destroys the places in a room, the room will never allow people to be comfortable.” <br>“If a room has two doors, and people move through it, keep both doors at one end of the room.” </p><p><a href="/goto?url=http://www.serc.nl/people/florijn/interests/patts.html" target="_blank">Software Patterns </a><a href="/goto?url=http://www.serc.nl/people/florijn/interests/patts.html" target="_blank">-- </a>What? </p><p>Software Patterns -- Why? </p><p><a href="/goto?url=http://c2.com/cgi/wiki?WardCunningham" target="_blank">Ward Cunningham </a><a href="/goto?url=http://c2.com/cgi/wiki?WardCunningham" target="_blank">an</a><a href="/goto?url=http://c2.com/ppr/about/author/kent.html" target="_blank">d </a><a href="/goto?url=http://c2.com/ppr/about/author/kent.html" target="_blank">Kent Beck </a><a href="/goto?url=http://c2.com/ppr/about/author/kent.html" target="_blank">f</a>rom </p><p>Tektronix </p><p>Abstractors and Elaborators [Beck94] </p><p>» Abstractors&nbsp;create reusable pieces (frameworks) </p><p>In 1987, they applied Alexander’s ideas to designing user interfaces </p><p>» “Nouns in Lists, Verbs in Menus” » “Window per Task” </p><p>» Elaborators&nbsp;use pieces to build applications <br>» Abstractors&nbsp;must explain pieces to elaborators </p><p>The idea was independently discovered </p><p>» <a href="/goto?url=http://www1.bell-labs.com/user/cope/" target="_blank">Jim Coplien </a><a href="/goto?url=http://www1.bell-labs.com/user/cope/" target="_blank">of </a>AT&amp;T [Coplien92] » Others </p><p>» Patterns&nbsp;are an efficient explanation of intent </p><p>13 15 17 <br>14 16 18 </p><p><a href="/goto?url=http://www.enteract.com/~bradapp/links/sw-pats.html" target="_blank">Software Patterns </a>-- Why? </p><p>Software Pattern -- GUIs </p><p>Patterns support reusable software </p><p>» Many&nbsp;more elaborators than abstractors (100:1?) </p><p>Nouns in Lists, Verbs in Menus Problem: </p><p>» Designing a GUI: What goes in lists vs. menus? </p><p>» More&nbsp;efficient explanation, more efficient reuse </p><p>blah blah blah blah blah </p><p>blah </p><p>» More&nbsp;powerful than a faster compiler or better tools </p><p>?</p><p>blah </p><p></p><ul style="display: flex;"><li style="flex:1">Nouns in lists... </li><li style="flex:1">Nouns in lists… (2) </li></ul><p></p><p></p><ul style="display: flex;"><li style="flex:1">Context: </li><li style="flex:1">Solution: </li></ul><p></p><p></p><ul style="display: flex;"><li style="flex:1">» Put nouns in lists, verbs in menus </li><li style="flex:1">» Principle of least astonishment </li></ul><p>» People expect to perform actions on subjects » List of actions without subjects looks incomplete » Select a subject first, then an action edit copy tree house </p><p>?</p><p>cut </p><p></p><ul style="display: flex;"><li style="flex:1">Patterns have exploded! </li><li style="flex:1">Architectural Patterns </li></ul><p></p><p><a href="/goto?url=http://www.cetus-links.org/oo_patterns.html" target="_blank">Architectural </a>Patterns <br><a href="/goto?url=http://www.industriallogic.com/patterns/ili_nyc_ap.html" target="_blank">Analysis Patterns </a></p><p>Deal with the highest levels of software development Often discovered in very large projects A few published examples </p><p>» Coad, Object Models: Strategies Patterns and Applications </p><p><a href="/goto?url=http://c2.com/cgi/wiki?ChristopherAlexander" target="_blank">Alexander’s </a>Patterns <br>Organizational <a href="/goto?url=http://st-www.cs.uiuc.edu/users/hanmer/PLoP-97/Proceedings.ps/kane.html" target="_blank">Patterns </a><br>Design <a href="/goto?url=http://www.industriallogic.com/papers/learning.html" target="_blank">Patterns </a></p><p>» Buschmann, Pattern Oriented Software Architectures: A System of Patterns </p><p><a href="/goto?url=http://www.doc.ic.ac.uk/~np2/patterns/scripting/index.html" target="_blank">Language-Specific Patterns </a></p><p></p><ul style="display: flex;"><li style="flex:1">19 </li><li style="flex:1">20 </li></ul><p></p><p>Architectural Pattern - Pipes and </p><ul style="display: flex;"><li style="flex:1">Filters </li><li style="flex:1">Pipes and Filters (2) </li></ul><p></p><p>Fr<a href="/goto?url=http://www.cpsc.ucalgary.ca/~kremer/patterns/Buschmann.html" target="_blank">om </a><a href="/goto?url=http://www.cpsc.ucalgary.ca/~kremer/patterns/Buschmann.html" target="_blank">[Buschmann96] </a></p><p>Solution: Divide the task <br>Lexical Analysis <br>Problem: Building </p><p>Systems to Transform and Process Streams of Data </p><p>» Different&nbsp;steps of the process may be </p><p>into sequential processing steps <br>Syntax Analysis/Parsing </p><p>Semantic Analysis Code Generation <br>(filters). Steps are connected by data flow components (pipes) </p><p>represented differently <br>» Many&nbsp;intermediate data forms </p><p>Example: Compiler </p><p></p><ul style="display: flex;"><li style="flex:1">21 </li><li style="flex:1">22 </li></ul><p></p><p>Architectural Pattern -- Four </p><ul style="display: flex;"><li style="flex:1">Layer Architecture (1) </li><li style="flex:1">Four Layer Architecture (2) </li></ul><p></p><p>Problem: </p><p>» How&nbsp;do you structure an application with significant presentation and model components? </p><p>Solution: </p><p>» Divide&nbsp;classes into layers » The&nbsp;MVC architecture of Smalltalk-80 separated the “model” and “view” components </p><p>Forces: </p><p>» Existing&nbsp;structures » Code&nbsp;reuse <br>» More&nbsp;layers are needed to model all necessary abstractions <br>» Distribution&nbsp;of work among team members <br>» Portability&nbsp;to new environments and language vendors </p><p></p><ul style="display: flex;"><li style="flex:1">Smalltalk Application Layers </li><li style="flex:1">Layer purposes </li></ul><p></p><p>View layer - provides the graphical view of an application. Handles&nbsp;user interaction Application layer - Mediates between different views of an application.&nbsp;Adapts the protocol of the View layer to the protocol of the domain model. </p><p>View layer <br>Application layer Domain layer </p><p>Domain layer - Represents the business or “real-world” model of the application </p><p>Infrastructure layer </p><p>Infrastructure layer - supports the domain layer with connections to external interfaces </p><p></p><ul style="display: flex;"><li style="flex:1"><a href="/goto?url=http://jeffsutherland.org/oopsla96/fowler.html" target="_blank">Analysis Patterns </a></li><li style="flex:1"><a href="/goto?url=http://www.aw.com/product/0,2627,0201895420,00.html#toc" target="_blank">Analysis Patterns </a></li></ul><p></p><p>Written by <a href="/goto?url=http://www/martinfowler.com/" target="_blank">Martin Fowler </a></p><p>Deals with common business domains </p><p>» Accounting </p><p>Patterns about Analysis Are they patterns about the Analysis process, or patterns found in systems analysis? </p><p>» Finance » Inventory </p><p>Both have been published... </p><p>Includes general purpose analysis patterns </p><p></p><ul style="display: flex;"><li style="flex:1">27 </li><li style="flex:1">28 </li></ul><p></p><p></p><ul style="display: flex;"><li style="flex:1">An Analysis Pattern </li><li style="flex:1">Account - Solution </li></ul><p></p><p></p><ul style="display: flex;"><li style="flex:1">Account </li><li style="flex:1">Entry </li></ul><p></p><p>amount : Quantity </p><p>Transaction </p><p>entries balance : Quantity </p><p>Account </p><p>whenCharged : TimeStamp whenBooked : TimeStamp <br>2</p><p>Problem: In&nbsp;many fields you must keep records of not just the current value of a thing, but the changes that have </p><p>Constraint: sum(entries.amount) = 0 <br>Constraint: balance = sum (entries.amount) </p><p>affected that value. <br>Basic Double-Entry Accounting! </p><p></p><ul style="display: flex;"><li style="flex:1">29 </li><li style="flex:1">30 </li></ul><p></p><p><a href="/goto?url=http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/patterns/" target="_blank">Design Patterns </a></p><p>Design Patterns -- Gang of Four </p><p><a href="/goto?url=http://hillside.net/patterns/DPBook/GOF.html" target="_blank">Gang of Four </a><a href="/goto?url=http://hillside.net/patterns/DPBook/GOF.html" target="_blank">is </a>Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides <br>Design Patterns are patterns about OO design <br>Collaborated on finding patterns in software over a series of years <br>Discuss tradeoffs inherent in the process Evaluate alternative designs <br>Finally decided to write a book </p><p>31 33 35 <br>32 34 36 </p><p>A Design Patte<a href="/goto?url=http://rampages.onramp.net/~huston/dp/strategy.html" target="_blank">rn -- </a><a href="/goto?url=http://rampages.onramp.net/~huston/dp/strategy.html" target="_blank">Strategy </a>(315) </p><p><a href="/goto?url=http://cseng.aw.com/book/0,3828,0201633612,00.html" target="_blank">Design Patterns </a></p><p>Their book is Design Patterns: Elements of <a href="/goto?url=http://hillside.net/patterns/DPBook/DPBook.html" target="_blank">Reusable Object- </a></p><p>Oriented Software [GHJV95] </p><p>Often you have the “Choose 1 of N algorithms” problem. Example: Converting different file formats </p><p>» GIF, JPEG, EPS, etc. <br>23 basic design patterns found in many large OO systems </p><p>You could write one “FileReader” with a LOT of case statements. </p><p>A pattern catalog </p><p>» Patterns&nbsp;are not dependent on each other </p><p>Strategy Solution </p><p><a href="/goto?url=http://www.helsinki.fi/~jplindfo/pattern/Strategy.html" target="_blank">Strategy Structure </a></p><p>Define a family of algorithms </p><p>» Various&nbsp;approaches to solving a problem </p><p>strategy </p><ul style="display: flex;"><li style="flex:1">Client </li><li style="flex:1">AbstractStrategy </li></ul><p>StrategyB </p><p>» Encapsulate&nbsp;them as objects <br>» Make&nbsp;them polymorphic </p><p>Client requests problem be solved <br>StrategyA <br>Strategy directs how problem is solved </p><p></p><ul style="display: flex;"><li style="flex:1">Example Strategy </li><li style="flex:1">Strategy Benefits </li></ul><p></p><p>strategy </p><ul style="display: flex;"><li style="flex:1">FileConverter </li><li style="flex:1">AbstractReader </li></ul><p>Avoids case statements Easily extensible </p><p></p><ul style="display: flex;"><li style="flex:1">convertFrom:to: </li><li style="flex:1">readFileNamed: </li></ul><p></p><p>» just&nbsp;add new Strategy subclasses </p><p>Strategy classes may be reusable elsewhere </p><ul style="display: flex;"><li style="flex:1">GIFReader </li><li style="flex:1">JPGReader </li></ul><p></p><p></p><ul style="display: flex;"><li style="flex:1">readFileNamed: </li><li style="flex:1">readFileNamed: </li></ul><p></p><p>37 39 41 <br>38 40 42 </p><p>A Design Pattern <a href="/goto?url=http://rampages.onramp.net/~huston/dp/state.html" target="_blank">-- </a><a href="/goto?url=http://rampages.onramp.net/~huston/dp/state.html" target="_blank">State </a><a href="/goto?url=http://rampages.onramp.net/~huston/dp/state.html" target="_blank">(305) </a></p><p><a href="/goto?url=http://exciton.cs.oberlin.edu/research/StatePat/seminar1/sld011.htm" target="_blank">State Solution </a></p><p>Sometimes you have an object that acts differently over time. </p><p>Define a set of State objects. </p><p>Example: A TCPConnection </p><p>» You can’t open an opened one or close a closed one. <br>Defer the implementation of the different methods to the state object. </p><p>You could use methods like become:or </p><p>changeClassToThatOf: </p><p>» leads to messy, difficult code <br>The client changes its state from time to time. </p><p></p><ul style="display: flex;"><li style="flex:1">TCP Example STD </li><li style="flex:1">TCP Example Hierarchy </li></ul><p></p><p>transmit state </p><ul style="display: flex;"><li style="flex:1">TCPState </li><li style="flex:1">TCPConnection </li></ul><p></p><p>ActiveOpen( ) Close( ) PassiveOpen( ) <br>ActiveOpen( ) Close( ) PassiveOpen( ) activeOpen <br>Closed <br>Established </p><p>state.ActiveOpen() </p><ul style="display: flex;"><li style="flex:1">TCPClosed </li><li style="flex:1">send </li><li style="flex:1">TCPEstablished </li><li style="flex:1">TCPListen </li></ul><p>passiveOpen <br>ActiveOpen( ) Close( ) <br>ActiveOpen( ) Close( ) PassiveOpen( ) <br>ActiveOpen( ) Close( ) close </p><ul style="display: flex;"><li style="flex:1">PassiveOpen( ) </li><li style="flex:1">PassiveOpen( ) </li></ul><p>Listen </p><p></p><ul style="display: flex;"><li style="flex:1">State Benefits </li><li style="flex:1">Why use Design Patterns </li></ul><p></p><p>Proven solutions to common OO problems </p><ul style="display: flex;"><li style="flex:1">Confer expertise to beginners </li><li style="flex:1">Makes state transitions explicit </li></ul><p>Localizes behavior; better allocation of responsibility <br>Common vocabulary for designers Documentation for existing frameworks <br>Eliminates the need for case statements <br>Once internalized, good design techniques </p><p></p><ul style="display: flex;"><li style="flex:1">become second nature </li><li style="flex:1">Since the States are objects, the State </li></ul><p>Machine can be reconfigured on the fly <br>Often combined to create more sophisticated </p><p>designs </p><p>43 45 47 <br>44 46 48 </p><p></p><ul style="display: flex;"><li style="flex:1">How to use Design Patterns </li><li style="flex:1">Languages-Specific Patterns </li></ul><p></p><p>Usually the pattern describes a role for an object -- not a class! </p><p>» Don’t blindly implement all 23 as classes! </p><p>Often called idioms Can be found in any language (not just OO) They are the way experts do things </p><p>» take advantage of language features </p><p>Scout around the intents to find a close match Page through the diagrams </p><p>» exploit knowledge of language and library internals </p><p></p><ul style="display: flex;"><li style="flex:1">Smalltalk Idioms </li><li style="flex:1">C++ Idioms </li></ul><p></p><p>Many found in Advanced C++ Programming Styles and Idioms </p><ul style="display: flex;"><li style="flex:1">Smalltalk </li><li style="flex:1">Many found in </li></ul><p>Best Practice Patterns Written by Kent Beck <br>Written by Jim Coplien <br>Contains Smalltalk </p><p>idioms, programming practice patterns, and many others <br>Contains a lot of C++ idioms (including some very good Memory Mgt. ones) </p><p></p><ul style="display: flex;"><li style="flex:1">An example Smalltalk Idiom </li><li style="flex:1">Organizational Patterns </li></ul><p></p><p>Problem: How do you implement a Stack? </p><p>Patterns about forming, managing and understanding organizations and their behavior </p><p>Solution: Simulate a Stack using OrderedCollection </p><p>OrderedCollection addLast: </p><ul style="display: flex;"><li style="flex:1">Stack Operation </li><li style="flex:1">message </li></ul><p>Often tied to software more closely than you think... push </p><ul style="display: flex;"><li style="flex:1">pop </li><li style="flex:1">removeLast: </li></ul><p></p><ul style="display: flex;"><li style="flex:1">last </li><li style="flex:1">top </li></ul><p></p><ul style="display: flex;"><li style="flex:1">empty </li><li style="flex:1">isEmpty </li></ul><p></p><p>49 51 53 <br>50 52 54 </p><p>Organizational Patterns </p><p><a href="/goto?url=http://world.std.com/~berczuk/pubs/Dec94ieee.html" target="_blank">Pattern Languages </a><a href="/goto?url=http://world.std.com/~berczuk/pubs/Dec94ieee.html" target="_blank">-- What? </a></p><p>What is a pattern language? </p><p>Generative Development-Process [Coplien95] </p><p>» 42 patterns discuss team members, team organization, and project management <br>A collection of related patterns <br>» Pattern 14: Conway’s Law <br>Each pattern leads to </p><p>others </p><p>– organization determines architecture and vice versa </p><p>» Pattern 15: Architect also implements </p><p>– keep the roles synchronized </p><p>Combine to solve an entire domain of problems <br>» Pattern 32: Divide and Conquer </p><p>– cluster roles that collaborate strongly, form separate organizations </p><p>Multiple solutions from multiple paths </p><p></p><ul style="display: flex;"><li style="flex:1">What a pattern language is NOT </li><li style="flex:1">Pattern Languages -- Origin </li></ul><p></p><p><a href="/goto?url=http://g.oswego.edu/dl/ca/ca/ca.html" target="_blank">Christopher Alexander </a><a href="/goto?url=http://g.oswego.edu/dl/ca/ca/ca.html" target="_blank">(</a>again) </p><p></p><ul style="display: flex;"><li style="flex:1">A Pattern Language </li><li style="flex:1">»</li></ul><p>»<br>[Alexander77] <br>NOT a new computer language! </p><ul style="display: flex;"><li style="flex:1">A Timeless Way of Building </li><li style="flex:1">[Alexander79] </li></ul><p></p><p><a href="/goto?url=http://hillside.net/" target="_blank">The Hillside Group </a><a href="/goto?url=http://hillside.net/" target="_blank">[</a>Beck94] </p><p>» Promotes patterns and pattern languages for software <br>NOT a formal language per se NOT an arbitrary collection of patterns -- that’s called a <br>» Started the PLoP (Pattern Languages of Programming) conferences catalog </p><p>» Editted and published the PLoP books [PLoP95 and PLoP96] </p><p>Pattern Language -- SelfEncapsulation <br>Pattern Language -- Crossing Chasms [Brown96] </p><p>Representing Objects as Tables </p><p>Self-Encapsulation [Auer95] </p><p>» Define Classes by Behavior, Not State » Implement Behavior with Abstract State » Identify Message Layers <br>Representing Object Relationships <br>» Defer Identification of State Variables </p><p>» Encapsulate Concrete State <br>Representing Inheritance <br>Foreign Key </p><p>Reference <br>Object Identifer <br>» Use Lazy Initialization » Define Default Values via Explicit Protocol </p><p>Explains how to develop an extensible hierarchy </p><p>Representing Collections </p><p>55 57 59 <br>56 58 60 </p><p></p><ul style="display: flex;"><li style="flex:1">Review (1) </li><li style="flex:1">Review (2) </li></ul><p></p><p>Software Patterns </p><p>» Patterns for software development » Architecture, design, implementation » Reuse of expertise </p><p>Patterns </p><p>» Solutions to common problems » Explain the assumptions behind the solution » Define names and scope for common techniques » Show when and how to apply techniques » Document expertise </p><p>Architectural Patterns </p><p>» Recurring architectural structures </p><p>Analysis Patterns </p><p>» Recurring object models </p><p></p><ul style="display: flex;"><li style="flex:1">Review (3) </li><li style="flex:1">Review (4) </li></ul><p></p><p>Pattern Languages <br>Design Patterns </p><p>» Recurring OO design structures and techniques » Commonly found in successful frameworks <br>» Series of closely related patterns » Each pattern builds on others » Represents a series of decisions </p><p>Idioms </p><p>» Recurring code structures </p><p>Pattern Catalogs </p><p>» A collection of loosely related patterns » Each pattern stands on its own </p><p></p><ul style="display: flex;"><li style="flex:1">Further Reading (1) </li><li style="flex:1">Further Reading (2) </li></ul><p></p><p>[Beck94] Beck, Kent. “Patterns and Software Development,” Dr. Dobb’s Journal, Feb. 1994, 19(2). <br>[Alexander77] Alexander, Christopher, et. al. A Pattern Language: Towns, Buildings, Construction. Oxford University Press, New York, NY, 1977, ISBN <a href="/goto?url=http://www.oup.co.uk/" target="_blank">0-19-501919-9; http://www.oup.co.uk/. </a><br>[Beck96] Beck, Kent. Smalltalk Best Practice Practices. Prentice-Hall, 1996, ISBN 0-13-476904-X; <a href="/goto?url=http://www.prenhall.com/" target="_blank">http://www.prenhall.com/. </a><br>[Alexander79] Alexander, Christopher. The Timeless </p>

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    11 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us