
When it comes to producing new examples for a course, where better to look than close to home? Yesterday, I was looking for an example to use when I was covering
object design in Python and I hit upon working with taps and the water suppy to them.

Looking around, we have quite a few taps here; several of them are in the training centre part of the building (the first two that I've pictured) and others are elsewhere.

The taps differ a little - some are mixer taps, others (such as the outside tap) are cold only,and the tap in the kitchen is a spectacular tap that I've christened to be a "supertap". Together, these make a great example of a base class and the ability to define inheritance.

Our sample application went further. We defined connection objects which describe which mains supply each tap is connected to in the building, and we then define a maximum flow through that connection. This allows our python application to know when there isn't enough capacity available when someone tries to turn a tap on.

If you're writing code in an object oriented language such as
Python, it's important that you think carefully about the objects that you're dealing with and specify the classes and methods that you'll be using as carefully as possible at the start. On many of our courses, we include modules on
object oriented design in order to help you save time in the long term by getting tings right from the start.

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