SlideShare une entreprise Scribd logo
1  sur  13
10 TOP TIPS
for good object-oriented design
WHO AM I?
• Founder of Cambridge Software Craftsmanship Community
• Developer and Technical Lead at Red Gate Software
• Twitter: @alastairs
• http://www.codebork.com/
• alastair@alastairsmith.me.uk
1. OBJECT-ORIENTATION
MESSAGE-ORIENTATION
• Values are passed between objects as messages
• Tell objects, ask values
• “Don’t call us, we’ll call you”
• State is only there to support behaviour
2. FAVOUR COMPOSITION OVER
INHERITANCE
• Loose coupling
• Strategies, Adapters, Composites and more are your friends
3. THERE IS A CONTINUUM OF
ABSTRACTION
Instance
Class
Abstract
Class
Interface
4. USE ABSTRACT CLASSES
• Not every abstract concept should be an interface
• Model all your abstractions at the right level
5. DON’T EXPOSE STATE ON
INTERFACES
• Interfaces are contracts of behaviour
• State is data
6. PROGRAM TO THE INTERFACE,
NOT THE IMPLEMENTATION
• Loose coupling
• Assume nothing about the implementation of the interface
7. INHERITANCE IS FOR
SPECIALISATION
• Use composition for extension
• Specialisation is like evolution
8. KNOW YOUR PATTERNS
• Design Patterns are our bricks and mortar
• Use GoF as a reference only
9. AT THE BOUNDARIES OF AN
APPLICATION, OO BREAKS DOWN
• Use value objects to convey state out of the core of the application
• Do not reuse abstractions in different modules
• Use hexagonal architecture to separate concerns
10. MAKE YOUR OBJECTS AND
VALUES IMMUTABLE
• Easier comparisons when testing
• Both have a concept of equality
• Thread safety in multi-threaded systems
• Less complex implementation
ANY QUESTIONS?
Thank you for listening!

Contenu connexe

En vedette

Teaching and Learning Software Development
Teaching and Learning Software DevelopmentTeaching and Learning Software Development
Teaching and Learning Software Development
Alastair Smith
 
CSX and Winter Weather in 2015
CSX and Winter Weather in 2015CSX and Winter Weather in 2015
CSX and Winter Weather in 2015
Clarence Gooden
 

En vedette (9)

Refactoring Away from Test Hell
Refactoring Away from Test HellRefactoring Away from Test Hell
Refactoring Away from Test Hell
 
Teaching and Learning Software Development
Teaching and Learning Software DevelopmentTeaching and Learning Software Development
Teaching and Learning Software Development
 
Semaforos
SemaforosSemaforos
Semaforos
 
Complete code craft
Complete code craftComplete code craft
Complete code craft
 
Sa by shekhar
Sa by shekharSa by shekhar
Sa by shekhar
 
Planificacion
PlanificacionPlanificacion
Planificacion
 
FCFS scheduling OS
FCFS scheduling OSFCFS scheduling OS
FCFS scheduling OS
 
CSX and Winter Weather in 2015
CSX and Winter Weather in 2015CSX and Winter Weather in 2015
CSX and Winter Weather in 2015
 
Csx supports nonprofits serving in its communities
Csx supports nonprofits serving in its communitiesCsx supports nonprofits serving in its communities
Csx supports nonprofits serving in its communities
 

Similaire à 10 Top Tips for Good Object-Oriented Design

Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
Hannes Lowette
 
Design Pattern Zoology
Design Pattern ZoologyDesign Pattern Zoology
Design Pattern Zoology
Josh Adell
 

Similaire à 10 Top Tips for Good Object-Oriented Design (20)

Eurosport's Kodakademi #2
Eurosport's Kodakademi #2Eurosport's Kodakademi #2
Eurosport's Kodakademi #2
 
Do's and Don'ts of APIs
Do's and Don'ts of APIsDo's and Don'ts of APIs
Do's and Don'ts of APIs
 
Architecture Principles CodeStock
Architecture Principles CodeStock Architecture Principles CodeStock
Architecture Principles CodeStock
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
Software development fundamentals
Software development fundamentalsSoftware development fundamentals
Software development fundamentals
 
Clean code
Clean codeClean code
Clean code
 
Writing Clean Code (Recommendations by Robert Martin)
Writing Clean Code (Recommendations by Robert Martin)Writing Clean Code (Recommendations by Robert Martin)
Writing Clean Code (Recommendations by Robert Martin)
 
Design for scale
Design for scaleDesign for scale
Design for scale
 
DIC To The Limit – deSymfonyDay, Barcelona 2014
DIC To The Limit – deSymfonyDay, Barcelona 2014DIC To The Limit – deSymfonyDay, Barcelona 2014
DIC To The Limit – deSymfonyDay, Barcelona 2014
 
The Cowardly Test-o-Phobe's Guide To Testing
The Cowardly Test-o-Phobe's Guide To TestingThe Cowardly Test-o-Phobe's Guide To Testing
The Cowardly Test-o-Phobe's Guide To Testing
 
Software design with Domain-driven design
Software design with Domain-driven design Software design with Domain-driven design
Software design with Domain-driven design
 
Software Engineering - Trends & Industry Practices
Software Engineering - Trends & Industry PracticesSoftware Engineering - Trends & Industry Practices
Software Engineering - Trends & Industry Practices
 
Software is not a Building - Designing Technical Architecture for Change
Software is not a Building - Designing Technical Architecture for ChangeSoftware is not a Building - Designing Technical Architecture for Change
Software is not a Building - Designing Technical Architecture for Change
 
Clean Code Talk (draft)
Clean Code Talk (draft)Clean Code Talk (draft)
Clean Code Talk (draft)
 
Design Pattern Zoology
Design Pattern ZoologyDesign Pattern Zoology
Design Pattern Zoology
 
How To Write a Testable Code
How To Write a Testable CodeHow To Write a Testable Code
How To Write a Testable Code
 
How to do b tech be projects or any academic projects
How to do b tech be projects or any academic projectsHow to do b tech be projects or any academic projects
How to do b tech be projects or any academic projects
 
10 Hinweise für Architekten
10 Hinweise für Architekten10 Hinweise für Architekten
10 Hinweise für Architekten
 
Ten Advices for Architects
Ten Advices for ArchitectsTen Advices for Architects
Ten Advices for Architects
 
Coding Standard And Code Review
Coding Standard And Code ReviewCoding Standard And Code Review
Coding Standard And Code Review
 

Dernier

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 

Dernier (20)

Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 

10 Top Tips for Good Object-Oriented Design

  • 1. 10 TOP TIPS for good object-oriented design
  • 2. WHO AM I? • Founder of Cambridge Software Craftsmanship Community • Developer and Technical Lead at Red Gate Software • Twitter: @alastairs • http://www.codebork.com/ • alastair@alastairsmith.me.uk
  • 3. 1. OBJECT-ORIENTATION MESSAGE-ORIENTATION • Values are passed between objects as messages • Tell objects, ask values • “Don’t call us, we’ll call you” • State is only there to support behaviour
  • 4. 2. FAVOUR COMPOSITION OVER INHERITANCE • Loose coupling • Strategies, Adapters, Composites and more are your friends
  • 5. 3. THERE IS A CONTINUUM OF ABSTRACTION Instance Class Abstract Class Interface
  • 6. 4. USE ABSTRACT CLASSES • Not every abstract concept should be an interface • Model all your abstractions at the right level
  • 7. 5. DON’T EXPOSE STATE ON INTERFACES • Interfaces are contracts of behaviour • State is data
  • 8. 6. PROGRAM TO THE INTERFACE, NOT THE IMPLEMENTATION • Loose coupling • Assume nothing about the implementation of the interface
  • 9. 7. INHERITANCE IS FOR SPECIALISATION • Use composition for extension • Specialisation is like evolution
  • 10. 8. KNOW YOUR PATTERNS • Design Patterns are our bricks and mortar • Use GoF as a reference only
  • 11. 9. AT THE BOUNDARIES OF AN APPLICATION, OO BREAKS DOWN • Use value objects to convey state out of the core of the application • Do not reuse abstractions in different modules • Use hexagonal architecture to separate concerns
  • 12. 10. MAKE YOUR OBJECTS AND VALUES IMMUTABLE • Easier comparisons when testing • Both have a concept of equality • Thread safety in multi-threaded systems • Less complex implementation
  • 13. ANY QUESTIONS? Thank you for listening!

Notes de l'éditeur

  1. Applies to all OO languages, but some refer to C# language features
  2. Alan Kay himself has said that, if he were designing Smalltalk again, he would call it Message-Oriented Programming rather than Object-Oriented Programming, because of the confusion rife over what he and the other designers of Smalltalk meant.The magic in object-orientation lies in the collaboration between objects, their behaviour, the messages they send to one another; not their state. Objects are often designed in terms of their properties rather than their behaviours: e.g. a Car has four wheels which allow it to travel from A to B, rather than the behaviours of adding a new passenger and travelling to a destination. This is why TDD (and, more specifically, Outside-In TDD as described in GOOS) works so well: it places the focus on the behaviour of the system under test, and not its state.
  3. GoFDesign Patterns. Composition provides more flexible designs, because your components are more loosely-coupled: you can re-arrange them into whatever shape you need, much like LEGO. This works because of message-oriented programming: passing messages between objects via method calls leads to much more composable designs
  4. Think about the words used for these different concepts, and their dictionary definitions:Class: “a number of persons or things regarded as forming a group by reason of common attributes, characteristics, qualities, or traits”Abstract: “thought of apart from concrete realities, specific objects, or actual instances; expressing a quality or characteristic apart from any specific object or instance”Interface: “a common boundary or interconnection between systems, equipment, concepts, or human beings.”A class is an abstraction! The only concrete thing you have is an instance of a class.
  5. But, ensure they are well-defined:Common stateCommon behaviours – implementing multiple interfacesCohesiveIf you’re dealing with Animals, you almost certainly won’t need an abstraction for Dog, much less a springer spaniel; a dog is instead an instance of an animal. (RG Note: In SOC, there 8.3x as many interfaces as abstract classes.)
  6. This is a leaky abstraction: by exposing an element of state it makes assumptions about the implementation of the interface. The only way to extend data (i.e., adding new data items) is through inheritance. Putting properties on interfaces encourages inheritance of interfaces, which breaks the Interface Segregation Principle, and makes your abstraction even more leaky.Again, think about the word “interface” in terms of its dictionary definition. A Graphical User Interface or Command-Line Interface has behaviour, not state: push button, enter text, run command, display results. You interact with interfaces, via their behaviours, and through those behaviours observe something about its state.
  7. GoFDesign Patterns.Helps ensure loosely-coupled, composable code that is easy to test, because you’re interacting with the behaviour of collaborators, you’re not relying on their current state too.
  8. “Inheritance is a tremendously powerful tool for sharing implementation details and specializing behaviour. But the fact that you only get "one shot" at inheritance in a single-inheritance world means that you’ve got to take that shot carefully and make sure you're using that power to its best ability.” – Eric LippertDo not add or modify behaviour through inheritance, use composition instead.Evolution: structural adaptation to a particular function for use in a particular environment
  9. Know what problems they solve, where they can be applied appropriately, etc. Knowing the appropriate application of a pattern is more important than knowing the pattern itself. Know how to spot a poorly-implemented pattern.GoF is great as a reference book, but is perhaps too dry to learn the patterns from. Try other texts, such as Head First Design Patterns or Holub on Patterns to learn the patterns in context.
  10. Use mapping techniques (e.g., AutoMapper) to convert between the models at the boundaries and the rich domain objects powering the applicationHexagonal architecture == ports and adapters from GOOS. See also Ian Cooper’s talk “TDD: Where did it all go wrong?”