Buck - Cocoa Design Patterns for beginners
-
Upload
marius-kurgonas -
Category
Documents
-
view
25 -
download
3
description
Transcript of Buck - Cocoa Design Patterns for beginners
Cocoa DesignPatterns
Erik M. BuckOctober 17, 2009
Topics What is a design pattern? Why Focus on Design
Patterns? What is the Model View
Controller design pattern? When to use MVC When wouldn’t you use
MVC? Pattern implementation
example Bonus patterns
What is a design pattern? Practical solutions to recurring problems Don't require amazing programming tricks A vocabulary or shorthand to use when
explaining complex software Not specific algorithms or data structures
What is a design pattern? (continued)
At a minimum, design patterns containfour essential elements:The pattern nameA brief description of the motivation for the
pattern or the problem solved by the patternA detailed description of the pattern and
examplesThe consequences of using the pattern
What is a design pattern? (continued)
Design Patterns: Elements of ReusableObject-Oriented Softwareby Erich Gamma, Richard Helm, Ralph
Johnson, and John M. Vlissides (1994) ISBN-10: 0201633612 ISBN-13: 978-0201633610
Cocoa Design Patterns by Erik M. Buckand Donald Yacktman ISBN-10: 0321535022 ISBN-13: 978-0321535023
What is a design pattern? (continued)
Web: http://www.cocoadesignpatterns.com
http://en.wikipedia.org/wiki/Design_pattern_(computer_science)
http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html
http://c2.com/cgi/wiki?DesignPatternsBook http://www.asp.net/mvc/
Why Focus on Design Patterns? Maximize programmer productivity by reducing
lifetime software development and maintenancecosts
Object reuse is the answer Design patterns identify successful strategies for
achieving reuse on a large scale
Guiding Principles of Design Solve a problem in a general reusable way Ensure that the patterns are flexible and
applicable in many contexts The same strategies that apply to design of
individual objects apply to patterns Patterns that involve many objects benefit even
more from good object-oriented design thansimpler systems
Guiding Principles of Design(continued)
Minimize Coupling Coupling refers to dependencies between objects.
Dependencies reduce opportunities for reusing theobjects independently. Coupling also applies tosubsystems within large systems.
For example, the Model-View-Controller (MVC)pattern organizes subsystems of classes and isapplied to the design of entire applications. Theprimary intent of the MVC pattern is to partition acomplex system of objects into three majorsubsystems and minimize coupling between thesubsystems.
Guiding Principles of Design(continued)
Design for Change Designs that are too inflexible ultimately restrict
opportunities for reuse. In the worst case, no reuseoccurs because it’s easier to redesign and re-implement a system than it is to make changes withinan existing rigid design.
It’s possible to anticipate certain types of changes andaccommodate them in a design
Guiding Principles of Design(continued)
Emphasize Interfaces Rather ThanImplementations Interfaces provide a metaphorical contract
between an object and the users of the objectA contract is necessary for programmers to
feel confident reusing framework objects
Guiding Principles of Design(continued)
Find the Optimal GranularityDesign patterns operate at different levels of
granularity. MVC is applied to largesubsystems of cooperating classes, but theSingleton pattern makes sure that only oneinstance of a class is ever created andprovides access to that instance.
Certain problems are best solved by smallpatterns that involve only a few classes whileother problems are solved by reusing grandoverarching patterns.
Guiding Principles of Design(continued)
Use Composition in Preference toInheritance It can’t be said enough times that coupling is
the enemy. It is ironic that inheritance is simultaneously
one of the most powerful tools in object-oriented programming and one of the leadingcauses of coupling.
What is MVC? MVC is a pattern for designing applications that
store information, retrieve information, presentinformation to a user, and/or enable a user toedit or otherwise manipulate the information.
MVC is one of the oldest and most successfullyreused software design patterns
It’s a high level pattern for organizing largegroups of cooperating objects into distinctsubsystems: the Model, the View, and theController.
What is MVC? (continued)
Modelprovides the unique capabilities and information storage
for an application. View
Enables user interaction with information gathered fromthe Model
Controllerdecouples the Model from the Views
What is MVC? (continued)
The primary purpose of MVC is todecouple the Model subsystem from theViews so that each can changeindependently.
The Controller subsystem provides thatdecoupling.
The Controller subsystem is often tricky todesign and may seem like it addsneedless complexity
What is MVC? (continued)
The flow of information is between theModel and the Views, so why introduceanother layer?The Controller subsystem provides insulation
between the Model and the Views Views tend to change much more often than
Models There potentially many Views Change the Model without affecting all of the
Views
What is MVC? (continued)
It’s usually easier to test a Model directlyrather than through a user interface.
When testing through a user interface, extra effort isrequired to determine whether a test failure is theresult of a bug in the Model or a bug in the View orboth.
The Model is often developed by one teamand the user interfaces are developed byanother
The skills needed to develop the Model may be verydifferent than those needed to produce anexcellent user experience.
When to use MVC Editor or viewer applications
Applications that are editors or viewers forunderlying information are naturally organized withthe MVC pattern.
When there are multiple ways to view thesame information
When there is a consistent way of viewingdifferent types of information
To simplify simultaneous development ofModels and Views by teams.
When wouldn’t you use MVC? Operating system device drivers
The application used to configure device driversmight adopt the MVC design, but the driversthemselves must conform to operating systeminterfaces and don’t usually present informationdirectly to users.
Long running computation intensiveprograms.
Long running calculations are often batch processedand again don’t directly provide a user interface.
Pattern implementation exampleMVC GameGames present
information andenable userinteraction
Transparis Transparis 3D
Controller
View View
One Model multiple Views
Model
Model Controller
ViewController
ViewController
Identicalimplementationin both games
Loose coupling
Classes
Transparis Transparis 3D
Controller
View
Multiple Models one ViewCore Data
Model
ModelController
View Controller
ModelController
Model
Classes
Transparis 3DTransparis 3D
Core Data
Core Data Model
Bonus Patterns Category Notification
Category: Add methods to existing classes
Category: Implementation locality
Transparis Transparis 3D
Notification: Communicate without coupling
Controller
View View
Model
Model Controller
ViewController
ViewController