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.
Test driven development, and class design, from first principles (using C++)

I'm teaching OO / class design from first principles today ... in stages. The chosen source language is C++, but the principles are well applied across other OO languages too.

Stage 1 - write your test program to make sure it works for your customers want to do. Remember that the "customer is king" and that's why you're doing the job! Try to ensure that you have calls available to do everything your customer will want, and create multiple objects with different values in them to ensure you are really storing object and not class (static) variables correctly. [source]

Stage 2 - define the API (Application Progammer interface) to ensure the test compiles and your interface is clearly defined. [source]

Stage 3 - write the code of the class to implement the public members. This is the stage at which you'll be writing the detailed code that will be used by your customers later on - you'll be encapsulating the algorithms in object methods so the customer won't have to be concerned later with the internal detail. Also at stage 3, you'll probably find yourself adding extra (private and / or protected) members to your API. [source]

Stage 4 - get the code to report on whether the test program worked. The code at stage 1 probably (should have!) output results, but manual checking of those to make sure they're still right at a later date will be tedious, so you'll code tests into your test harness to give a clear "worked / failed" flag. [source]

Stage 5 - use functions to avoid stage 4 being very repetitive indeed! [source] and at this stage I also added a further accessor to demonstrate passing stings in and out - which meant an extra test routine too. [source]
Stage 6 - the test evaluation code will itself become a standard object. Stages 5 and 6 can be combined once you're familiar with OO principles, but an object that checks other objects (and a singleton pattern to boot) may be one step too many all at once if you're moving from a structured programming background. [source]

Stage 7 - separate the various pieces into different files so you can use the class without the tests in a real, live application! If you've done a good job of your test suite object, you'll want to package that up separately too so that you can reuse it for other classes and make steps 4 5 and 6 much easier in the future. In this final example of the series, I have also added command line options to allow the test program to be run to print results, to print test output, or to do both.

Source for the final example
[here] for the test program
[here] for the class being tested
[here] for its header file
[here] for the test pattern class
[here] for its header file

Here are the build instructions I used

  g++ -c Hotel007.cpp
  g++ -c HotelRoomBooking.cpp
  g++ -c TestPattern.cpp
  g++ -o Hotel Hotel007.o HotelRoomBooking.o TestPattern.o


And here are some sample outputs:

  munchkin:cpp_dec14 grahamellis$ ./Hotel
  Hotel Rooms Demo
  John Smith 360 60
  Tinka Belle 883.5 147.25
  ------------------------------
  Testing ++++++
  Tests passed 6; tests failed 0


  munchkin:cpp_dec14 grahamellis$ ./Hotel -v
  Hotel Rooms Demo
  John Smith 360 60
  Tinka Belle 883.5 147.25


  munchkin:cpp_dec14 grahamellis$ ./Hotel -t
  ------------------------------
  Testing ++++++
  Tests passed 6; tests failed 0


The fundamentals shown above will work for just about any language, and be a starting point for just about any classes - indeed you are welcome (with the proviso that it's at your risk) to make use of my test harness and to extend it. In practise, what I'm showing you is all the complex setup stuff and I'm not making particularly full use of it by supporting and testing a lot of methods - but such is a training example that my code has made the points needed already.
(written 2014-12-30)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Q456 - Object Orientation and General technical topics - Test Driven Development and Behaviour Driven Development
  [4326] Learning to program - comments, documentation and test code - (2014-11-22)
  [4336] Test Driven Development - a first example of principle in C - (2014-12-01)
  [4346] A behaviour driven example of writing a Java program - (2014-12-09)
  [4380] Behaviour Driven Development / Ruby and Cucumber - (2015-01-02)
  [4387] Regression Testing my website - Cucumber and Watir - (2015-01-07)
  [4457] Test framework for TCL - Tcltest - some examples - (2015-03-11)
  [4542] The principle of mocking - and the Python Mock package - (2015-10-17)
  [4634] Regression testing - via a very short C testing framework - (2016-01-29)
  [4652] Testing new algorithms in PHP - (2016-02-20)

C239 - C and C based languages - Putting it all together
  [836] Build on what you already have with OO - (2006-08-17)
  [925] C++ - just beyond the basics. More you can do - (2006-11-14)
  [945] Code quality counts - (2006-11-26)
  [1181] Good Programming practise - where to initialise variables - (2007-05-09)
  [2646] Compile but do not run PHP - syntax check only - (2010-02-22)
  [2673] Multiple Inheritance in C++ - a complete example - (2010-03-12)
  [2674] Make and makefiles - a commented example to help you learn - (2010-03-12)
  [2851] Further C++ material - view new or old - (2010-07-04)
  [3067] Using C and C++ functions in the same program - how to do it - (2010-11-24)
  [3069] Strings, Garbage Collection and Variable Scope in C++ - (2010-11-25)
  [3252] C++ - unknown array size, unknown object type. Help! - (2011-04-17)
  [3810] Reading files, and using factories to create vectors of objects from the data in C++ - (2012-07-21)
  [4559] When do I use the this keyword in C++? - (2015-10-29)

Q907 - Object Orientation and General technical topics - Object Orientation: Design Techniques
  [80] OO - real benefits - (2004-10-09)
  [236] Tapping in on resources - (2005-03-05)
  [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)
  [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)
  [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)


Back to
A long and disappointing evening
Previous and next
or
Horse's mouth home
Forward to
Final examples for 2014 - and a look at our 2015 training course options
Some other Articles
What FGW passengers want to talk about / and PHP programming to find out
Designing a base class and subclasses, and their extension, in C++
Well House Consultants, Well House Manor, First Great Western Coffee shop, TransWilts / 2014 web site reports
Final examples for 2014 - and a look at our 2015 training course options
Test driven development, and class design, from first principles (using C++)
A long and disappointing evening
Template / design pattern for C++ constructor and accessors
Why are people using the TransWilts?
Conditionals, loops and methods in Ruby - a primer with simple examples
Ruby - the second rung of learning the language
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/4374_Tes ... ng-C-.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb