Even if you don't feel that your project is big enough to get involved with formal design methods, many of the lessons of UML and some informal design diagrams can help you get a clear view of what you're going to be doing be for you start, and can help you come up a good, thought out and reliable plan before you waste a lot of time writing experimental code up a blind alley. No need to use posh symbols on your diagrams - just a few boxes will do! Try:
1. A use case diagram, showing the major data elements, and which of your user communities supplies, updates and reads which elements
2. Object diagrams, showing the various components of each of your data types and what it does
3. Class diagrams, showing how your various classes inherit from each other and at what level each of the methods should be written
4. A Deployment diagram, showing where the various component are kept - not only the live components, but the backups, source code and the whole system including the older versions and version control
5. Sequence diagram showing how transactions go through the system with each element picking up and passing data to and from the others
6. State diagram, showing the state of object types (including, in web use the state of each uses' session object). I can't believe I left this one so late to mention!
7. Procedural diagrams - a.k.a. flow charts - showing how the logic goes together.
Even if you don't draw these out on paper for each project, it's no bad thing to think through each of the 7 aspects as you work out what you're going to do - a few minutes of consideration of the big picture reaps huge efficiency rewards as you put together your application or suite.
You can download a .pdf file from
our open training notes site that shows you examples of each of these diagrams - just follow the "links under _Object Orientation - design techniques.
(written 2006-03-24, updated 2006-06-05)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
H108 - Objects in PHP [4073] Learning about Object Orientation in PHP - a new set of examples - (2013-04-28)
[4057] stdClass in PHP - using an object rather than an associative array - (2013-04-02)
[3953] Objects in PHP - Revision - (2012-12-16)
[3843] Caching Design Patterns - (2012-08-20)
[3841] Copying, duplicating, cloning an object in PHP - (2012-08-18)
[3840] Autoload in PHP - (2012-08-17)
[3609] How do classes relate to each other? Associated Classes - (2012-02-12)
[3608] Design Patterns - what are they? Why use them? - (2012-02-12)
[3607] Designing your application - using UML techniques - (2012-02-11)
[3211] Computer Graphics in PHP - World (incoming data) to Pixel (screen) conversion - (2011-03-24)
[3210] Catchable fatal error in PHP ... How to catch, and alternative solutions such as JSON - (2011-03-22)
[3142] Private and Public - and things between - (2011-01-22)
[2922] Getting the OO design write - with PHP a example - (2010-08-14)
[2921] Does copying a variable duplicate the contents? - (2010-08-14)
[2774] PHP - Object Oriented Design in use - (2010-05-21)
[2741] What is a factory? - (2010-04-26)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[2680] Static class members in PHP - a documented example - (2010-03-16)
[2641] Object Oriented Programming in PHP - (2010-02-19)
[2632] Shipping a test harness with your class in PHP - (2010-02-12)
[2435] Serialization - storing and reloading objects - (2009-10-04)
[2434] Abstract classes, Interfaces, PHP and Java - (2009-10-03)
[2380] Object Oriented programming - a practical design example - (2009-08-27)
[2172] PHP4 v PHP5 - Object Model Difference - (2009-05-11)
[2171] Cleaning up redundant objects - (2009-05-11)
[2169] When should I use OO techniques? - (2009-05-11)
[2160] PHP - getclass v instanceof - (2009-05-07)
[1925] Introduction to Object Oriented Programming - (2008-12-06)
[1820] Sorting objects in PHP - (2008-10-04)
[1819] Calling base class constructors - (2008-10-03)
[1682] Accounts in PHP - an OO demo - (2008-06-19)
[1535] OO PHP demonstration - comparing objects and more - (2008-02-08)
[1217] What are factory and singleton classes? - (2007-06-04)
[1153] Object Oriented Model - a summary of changes from PHP4 to PHP5 - (2007-04-18)
[1027] Cue the music, I'm happy. - (2007-01-09)
[836] Build on what you already have with OO - (2006-08-17)
[720] Planning a hotel refurb - an example of a Gant chart in PHP - (2006-05-14)
[485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
[421] Don't repeat code - use loops or functions - (2005-08-21)
[343] Should I use structured or object oriented? - (2005-06-10)
[205] PHP5 lets you say no - (2005-02-07)
[124] PHP v Java - (2004-11-20)
[67] Object Oriented Programming in PHP - (2004-09-29)
J710 - Java - Extending Classes and More [3047] What is a universal superclass? Java / Perl / Python / Other OO languages - (2010-11-13)
[2860] What methods are available on this Java object? - (2010-07-08)
[2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
[2185] Abstract Classes - Java - (2009-05-16)
[1556] Java - a demonstration of inheritance on just one page - (2008-02-26)
[1538] Teaching Object Oriented Java with Students and Ice Cream - (2008-02-12)
[1501] Java - using super to call a method in the parent class - (2008-01-10)
[1294] An example of Java Inheritance from scratch - (2007-08-00)
[1066] Final, Finally and Finalize - three special words in Java - (2007-02-05)
[831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
P218 - Perl - More Objects [4098] Using object orientation for non-physical objects - (2013-05-22)
[4096] Perl design patterns example - (2013-05-20)
[3941] Building an object based on another object in Perl - (2012-12-03)
[3581] Perl - calls to methods that use => - what do they mean? - (2012-01-16)
[3377] What do I mean when I add things in Perl? - (2011-08-02)
[3098] Learning Object Orientation in Perl through bananas and perhaps Moose - (2010-12-21)
[3097] Making Perl class definitions more conventional and shorter - (2010-12-20)
[2972] Some more advanced Perl examples from a recent course - (2010-09-27)
[2876] Different perl examples - some corners I rarely explore - (2010-07-18)
[2811] Igloos melt in the summer, but houses do not - (2010-06-15)
[2651] Calculation within objects - early, last minute, or cached? - (2010-02-26)
[2427] Operator overloading - redefining addition and other Perl tricks - (2009-09-27)
[1949] Nuclear Physics comes to our web site - (2008-12-17)
[1665] Factory method example - Perl - (2008-06-04)
[1664] Example of OO in Perl - (2008-06-03)
[1435] Object Oriented Programming in Perl - Course - (2007-11-18)
[1320] Perl for Larger Projects - Object Oriented Perl - (2007-08-25)
[930] -> , >= and => in Perl - (2006-11-18)
[592] NOT Gone phishing - (2006-02-05)
[588] Changing @INC - where Perl loads its modules - (2006-02-02)
[531] Packages in packages in Perl - (2005-12-16)
[246] When to bless a Perl variable - (2005-03-15)
[227] Bellringing and Programming and Objects and Perl - (2005-02-25)
Q907 - Object Orientation and General technical topics - Object Orientation: Design Techniques [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)
[3887] Inheritance, Composition and Associated objects - when to use which - Python example - (2012-10-10)
[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)
[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)
[2523] Plan your application before you start - (2009-12-02)
[2501] Simples - (2009-11-12)
[2327] Planning! - (2009-08-08)
[2170] Designing a heirarcy of classes - getting inheritance right - (2009-05-11)
[1528] Object Oriented Tcl - (2008-02-02)
[1224] Object Relation Mapping (ORM) - (2007-06-09)
[1047] Maintainable code - some positive advice - (2007-01-21)
[747] The Fag Packet Design Methodology - (2006-06-06)
[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)
R108 - Ruby - More Classes and Objects [3782] Standard methods available on all objects in Ruby - (2012-06-23)
[3781] Private, Protected, Public in Ruby. What about interfaces and abstract classes in Ruby? - (2012-06-23)
[3158] Ruby training - some fresh examples for string handling applications - (2011-02-05)
[3154] Changing a class later on - Ruby - (2011-02-02)
[2980] Ruby - examples of regular expressions, inheritance and polymorphism - (2010-10-02)
[2623] Object Oriented Ruby - new examples - (2010-02-03)
[2620] Direct access to object variable (attributes) in Ruby - (2010-02-02)
[2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
[2603] Ruby objects - a primer - (2010-01-29)
[2601] Ruby - is_a? v instance_of? - what is the difference? - (2010-01-27)
[2292] Object Orientation in Ruby - intermediate examples - (2009-07-16)
[1587] Some Ruby programming examples from our course - (2008-03-21)
[184] MTBF of coffee machines - (2005-01-20)
T245 - Tcl/Tk - [incr-Tcl] [290] Object Orientation in Tcl - [incr-Tcl] - (2005-04-24)
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)
[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 [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)
5289
Some other Articles
Stopping and restarting Apache httpd cleanlyWeb Application ComponentsKeeping the visitors happy and browsingThe ternary operator in PythonThink about your design even if you don't use full UMLCan some food be TOO different?Making use of disabled facilitiesEasy feed!Morning PostPlease Register with Opentalk - but just once!