Home Accessibility Courses Diary The Mouth Facebook Resources Site Map About Us Contact
Inheritance, Composition and Associated objects - when to use which - Python example

• Inheritance is where one object is based on another.

• Composition is where one object contains another.

Question: Which should I use?

Answer: Probably BOTH!

On yesterday's Python course, the question came up, and I wrote an illustrative answer - source code [here]. The scenario we took was a restaurant.

We have tables of various shapes - rectangular ones, square ones, and circular ones. They're all based on a base class called table as all tables, no matter what shape, have some properties in common. And then we inherit from that base class to give somewhat updated table subclasses for each shape adding in the extra logic to work out how many people can be seated without being on the corners.

We also have persons - staff and customers - which have some features in common (such as names) but some differences in their other properties. Again, that's a case of inheritance.

The next step is to say that we have a member of staff responsible for each table, and multiple customers (perhaps) seated at each table. And that's where our composite / associated objects come into play. We don't want to add all the attributes of a staff member to a table - we just want to have a contained or associated object of type staff in our object of type table, and a list of objects of type customer in our object of type table.

The diagram, drawn using "class" and "object" tables in a UML-like way, shows these various relationships.

Update ... the course carried on the following day, and I added various static methods including a factory, comparators, and overrode the print method for some objects. The final source code is [here].


(written 2012-10-10, updated 2012-10-13)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Q907 - Object Orientation and General technical topics - Object Orientation: Design Techniques
  [4098] Using object orientation for non-physical objects - (2013-05-22)
  [3978] Teaching OO - how to avoid lots of window switching early on - (2013-01-17)
  [3928] Storing your intermediate data - what format should you you choose? - (2012-11-20)
  [3878] From Structured to Object Oriented Programming. - (2012-10-02)
  [3844] Rooms ready for guests - each time, every time, thanks to good system design - (2012-08-20)
  [3798] When you should use Object Orientation even in a short program - Python example - (2012-07-06)
  [3763] Spike solutions and refactoring - a Python example - (2012-06-13)
  [3760] Why you should use objects even for short data manipulation programs in Ruby - (2012-06-10)
  [3607] Designing your application - using UML techniques - (2012-02-11)
  [3454] Your PHP website - how to factor and refactor to reduce growing pains - (2011-09-24)
  [3260] Ruby - a training example that puts many language elements together to demonstrate the whole - (2011-04-23)
  [3085] Object Oriented Programming for Structured Programmers - conversion training - (2010-12-14)
  [3063] Comments in and on Perl - a case for extreme OO programming - (2010-11-21)
  [2977] What is a factory method and why use one? - Example in Ruby - (2010-09-30)
  [2953] Turning an exercise into the real thing with extreme programming - (2010-09-11)
  [2889] Should Python classes each be in their own file? - (2010-07-27)
  [2878] Program for reliability and efficiency - do not duplicate, but rather share and re-use - (2010-07-19)
  [2865] Relationships between Java classes - inheritance, packaging and others - (2010-07-10)
  [2785] The Light bulb moment when people see how Object Orientation works in real use - (2010-05-28)
  [2747] Containment, Associative Objects, Inheritance, packages and modules - (2010-04-30)
  [2741] What is a factory? - (2010-04-26)
  [2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
  [2523] Plan your application before you start - (2009-12-02)
  [2501] Simples - (2009-11-12)
  [2380] Object Oriented programming - a practical design example - (2009-08-27)
  [2327] Planning! - (2009-08-08)
  [2170] Designing a heirarcy of classes - getting inheritance right - (2009-05-11)
  [2169] When should I use OO techniques? - (2009-05-11)
  [1538] Teaching Object Oriented Java with Students and Ice Cream - (2008-02-12)
  [1528] Object Oriented Tcl - (2008-02-02)
  [1435] Object Oriented Programming in Perl - Course - (2007-11-18)
  [1224] Object Relation Mapping (ORM) - (2007-06-09)
  [1217] What are factory and singleton classes? - (2007-06-04)
  [1047] Maintainable code - some positive advice - (2007-01-21)
  [836] Build on what you already have with OO - (2006-08-17)
  [831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
  [747] The Fag Packet Design Methodology - (2006-06-06)
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [534] Design - one name, one action - (2005-12-19)
  [507] Introduction to Object Oriented Programming - (2005-11-27)
  [236] Tapping in on resources - (2005-03-05)
  [80] OO - real benefits - (2004-10-09)

Y112 - Python - Objects - Intermediate
  [4094] Python Properties - how and why - (2013-05-18)
  [4028] Really Simple Class and Inheritance example in Python - (2013-03-04)
  [3796] Backquote, backtic, str and repr in Python - conversion object to string - (2012-07-05)
  [3524] Metaclasses (Python) and Metatables (Lua) - (2011-11-17)
  [3472] Static variables in functions - and better ways using objects - (2011-10-10)
  [3442] A demonstration of how many Python facilities work together - (2011-09-16)
  [3002] A list of special method and attribute names in Python - (2010-10-17)
  [2994] Python - some common questions answered in code examples - (2010-10-10)
  [2905] Defining static methods in Python - (2010-08-05)
  [2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
  [2722] Mixins example in Python - (2010-04-14)
  [2720] Multiple inheritance in Python - complete working example - (2010-04-14)
  [2693] Methods that run on classes (static methods) in Python - (2010-03-25)
  [2485] How do I set up a constant in Python? - (2009-10-31)
  [2409] TypeError: super() argument 1 must be type, not classobj (Python) - (2009-09-18)
  [2368] Python - fresh examples of all the fundamentals - (2009-08-20)
  [1819] Calling base class constructors - (2008-10-03)
  [1661] Equality, sameness and identity - Python - (2008-05-31)
  [1644] Using a utility method to construct objects of different types - Python - (2008-05-17)
  [1517] Python - formatting objects - (2008-01-24)
  [1146] __new__ v __init__ - python constructor alternatives? - (2007-04-14)
  [964] Practical polymorphism in action - (2006-12-04)
  [903] Pieces of Python - (2006-10-23)
  [477] Class, static and unbound variables - (2005-10-25)
  [383] Overloading of operators on standard objects in Python - (2005-07-19)
  [296] Using a Python dictionary as a holder of object attributes - (2005-04-30)

Y116 - Python - Applying OO design techniques and best practise
  [4118] We not only teach PHP and Python - we teach good PHP and Python Practice! - (2013-06-18)
  [2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
  [2407] Testing code in Python - doctest, unittest and others - (2009-09-16)
  [2363] Alpaca Case or Camel Case - (2009-08-16)
  [1181] Good Programming practise - where to initialise variables - (2007-05-09)
  [945] Code quality counts - (2006-11-26)
  [668] Python - block insets help with documentation - (2006-04-04)
  [340] Code and code maintainance efficiency - (2005-06-08)


Back to
Formatting output - why we need to, and first Python example
Previous and next
or
Horse's mouth home
Forward to
What a difference a year made - Melksham Campus
Some other Articles
The components of an Apache httpd / Tomcat / MySQL stack and what each does
Here comes Santa - on the train from Melksham to Swindon on 2nd December 2012
Melksham Chamber of Commerce - whence in 2013 and beyond?
What a difference a year made - Melksham Campus
Inheritance, Composition and Associated objects - when to use which - Python example
Formatting output - why we need to, and first Python example
Default local - a good choice by the author of Python
Pictures - across the park, French Weir and River Tone, Taunton
Apple Pressing Day 2012
Community Transport - Pewsey, Taunton, and the whole picture too
4255 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2014: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/3887_Inh ... ample.html • PAGE BUILT: Sun Mar 30 15:20:58 2014 • BUILD SYSTEM: WomanWithCat