Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2021 - online Python 3 training - see ((here)).

Our plans were to retire in summer 2020 and see the world, but Coronavirus has lead us into a lot of lockdown programming in Python 3 and PHP 7.
We can now offer tailored online training - small groups, real tutors - works really well for groups of 4 to 14 delegates. Anywhere in the world; course language English.

Please ask about private 'maintenance' training for Python 2, Tcl, Perl, PHP, Lua, etc.
Design Patterns - what are they? Why use them?

Object orientation provides a wonderful bag of components, but they need to be linked together to provide a full set of facilities for data handling. And very often that linking together is in a way which can be standardised - along the lines of "you normally do it this way". Such standardised methodologies are known as Design Patterns

When teaching Object Orientation, we go through the mechanisms of the language, and application design (see "Designing your applications using UML techniques"). And I cover a little - a very little - about design patterns. Delegates need to be aware of them, but a course that included a deep study of design methodology and patterns would be extended from what we currently offer by at least a day, with delegates who are converting from another OO language finding that the extra time was mostly revision.

However, last week's PHP Course ran quickly - bright delegates, all starting with more experience that our stated prerequisites, and in the training room 30 from 30 minutes before class officially started each morning. So we got on to the mechanisms of OO programming in PHP on the final afternoon of the main course, rather than starting it in the official way on the Friday morning. Which gave me time to talk about UML techniques in more detail, and to add in some more coverage of Design Patterns than is usual.

In a new source code example ([here]), you'll find a number of design patterns in use - some being commonly accepted / named ones, others which are our / my own patterns.

There's a factory pattern which takes raw data and creates an object from it. A factory differs from a constructor in that it often has to do preliminary work on the data, and indeed it can return objects of different types depending on the data actually passed in, and indeed it can return an array / list / hash / dictionary of objects. A factory method is a static method, provided within a class to place the logic of interpreting the incoming data source into objects, even prior to the creation of any objects.

There's a comparator pattern, which compares two objects. Static (class) methods can work on the data for all objects in a class, dynamic (object) methods work on a single object. Yet so often you want to compare two objects. Which is the larger? Which is the older? And that's where you'll use a comparator design pattern.

As an extension of the comparator, we often use a standard (static) pattern to find the largeest or oldest - no formal name for this one, but you'll find an example called "longest" in the source example.

We've also got an example of a very simple getter pattern to retrieve a property, but this particular example didn't use some of the other common design patterns such as setter and singleton. That's fairly typical - you'll use design patterns for the standard stuff, and then your own (or modified) code beyond that to add the functionality that's unique to your data and the application thereof.

I spoke earlier about the decision we've had to take at Well House Consultants as to how far we go along teaching design methodologies and design patterns in our programming language courses. I believe we have the mix about right for most delegates who come on public courses. But if you're looking to learn about object orientation in Perl, PHP, Python, Ruby or C++, and would like an extra day or two covering the topics I describe in this article, please ask. We can usually (diary permitting) add an extra day onto the end of our courses to cover the subjects. Typically, it will be a private course - and we'll only charge you as if it was another day on the public course. A bargain way to learn about designing your application, and learn about it in the language that you'll be using!
(written 2012-02-12, updated 2012-02-25)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Q908 - Object Orientation and General technical topics - Object Orientation: Design Patterns
  [485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
  [1224] Object Relation Mapping (ORM) - (2007-06-09)
  [2322] Looking for a practical standards course - (2009-08-05)
  [2741] What is a factory? - (2010-04-26)
  [2977] What is a factory method and why use one? - Example in Ruby - (2010-09-30)
  [3716] Learning C++ - a design pattern for your first class - (2012-05-02)
  [3810] Reading files, and using factories to create vectors of objects from the data in C++ - (2012-07-21)
  [3843] Caching Design Patterns - (2012-08-20)
  [4021] Spike solution, refactored and reusable, Python - Example - (2013-02-28)
  [4096] Perl design patterns example - (2013-05-20)
  [4098] Using object orientation for non-physical objects - (2013-05-22)
  [4325] Learning to program - what are algorithms and design patterns? - (2014-11-22)
  [4330] Java - factory method, encapsulation, hashmap example - (2014-11-27)
  [4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
  [4359] How to avoid too many recalculations within an object - (2014-12-21)
  [4377] Designing a base class and subclasses, and their extension, in C++ - (2015-01-01)
  [4396] Java Utility class - flexible replacement for array. Also cacheing in objects and multiple catch clauses example. - (2015-01-16)
  [4421] How healthy are the stars of stage and screen? - (2015-02-09)
  [4581] Thin application, thick objects - keep you main code simple. Example in Ruby - (2015-11-21)
  [4626] Singleton design pattern - examples and uses - (2016-01-20)
  [4663] Easy data to object mapping (csv and Python) - (2016-03-24)
  [4673] Separating detailed data code from the main application - Ruby example - (2016-05-16)

H108 - Objects in PHP
  [67] Object Oriented Programming in PHP - (2004-09-29)
  [124] PHP v Java - (2004-11-20)
  [205] PHP5 lets you say no - (2005-02-07)
  [343] Should I use structured or object oriented? - (2005-06-10)
  [421] Don't repeat code - use loops or functions - (2005-08-21)
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [720] Planning a hotel refurb - an example of a Gant chart in PHP - (2006-05-14)
  [836] Build on what you already have with OO - (2006-08-17)
  [1027] Cue the music, I'm happy. - (2007-01-09)
  [1153] Object Oriented Model - a summary of changes from PHP4 to PHP5 - (2007-04-18)
  [1217] What are factory and singleton classes? - (2007-06-04)
  [1535] OO PHP demonstration - comparing objects and more - (2008-02-08)
  [1682] Accounts in PHP - an OO demo - (2008-06-19)
  [1819] Calling base class constructors - (2008-10-03)
  [1820] Sorting objects in PHP - (2008-10-04)
  [1925] Introduction to Object Oriented Programming - (2008-12-06)
  [2160] PHP - getclass v instanceof - (2009-05-07)
  [2169] When should I use OO techniques? - (2009-05-11)
  [2171] Cleaning up redundant objects - (2009-05-11)
  [2172] PHP4 v PHP5 - Object Model Difference - (2009-05-11)
  [2380] Object Oriented programming - a practical design example - (2009-08-27)
  [2434] Abstract classes, Interfaces, PHP and Java - (2009-10-03)
  [2435] Serialization - storing and reloading objects - (2009-10-04)
  [2632] Shipping a test harness with your class in PHP - (2010-02-12)
  [2641] Object Oriented Programming in PHP - (2010-02-19)
  [2680] Static class members in PHP - a documented example - (2010-03-16)
  [2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
  [2774] PHP - Object Oriented Design in use - (2010-05-21)
  [2921] Does copying a variable duplicate the contents? - (2010-08-14)
  [2922] Getting the OO design write - with PHP a example - (2010-08-14)
  [3142] Private and Public - and things between - (2011-01-22)
  [3210] Catchable fatal error in PHP ... How to catch, and alternative solutions such as JSON - (2011-03-22)
  [3211] Computer Graphics in PHP - World (incoming data) to Pixel (screen) conversion - (2011-03-24)
  [3607] Designing your application - using UML techniques - (2012-02-11)
  [3609] How do classes relate to each other? Associated Classes - (2012-02-12)
  [3840] Autoload in PHP - (2012-08-17)
  [3841] Copying, duplicating, cloning an object in PHP - (2012-08-18)
  [3953] Objects in PHP - Revision - (2012-12-16)
  [4057] stdClass in PHP - using an object rather than an associative array - (2013-04-02)
  [4073] Learning about Object Orientation in PHP - a new set of examples - (2013-04-28)
  [4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
  [4627] Caching results in an object for efficiency - avoiding re-calculation - (2016-01-20)
  [4628] Associative objects - one object within another. - (2016-01-20)


Back to
Designing your application - using UML techniques
Previous and next
or
Horse's mouth home
Forward to
How do classes relate to each other? Associated Classes
Some other Articles
Help to get online in Melksham
A customer thanks Well House Manor
Training to do a job, or training to pass an exam?
Design Patterns - what are they? Why use them?
Gypsy and Billy enjoy the snow
Snow comes to Melksham, Wiltshire - pictures
Melksham Campus - a blog you can read, and a place you can comment
Another cold night
4759 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, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 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., 2021: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/3608_Des ... them-.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb