Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Python and Tcl - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Lua, etc
 
Introduction to Object Oriented Programming

"Object Oriented Programming" is a whole new philosophy for programmers who have been writing short scripts for years, and it can be quite frightening to learn with all these new buzzwords like "overriding", "encapsulation" and "polymorphism" creeping in. It's a beautiful concept and a lovely approach, though .. but one that's at its most effective on projects and tasks that are more than just a few code lines - in other words, it's at its most effective on those larger jobs which are the very ones that we don't do as practicals on a course because of all the time such an extended exercise would take.

However ... I have found good ways to "teach OO" - and indeed I have given two separate courses in the last week that have covered the subject. On Thursday, I was teaching OO in Perl and on Friday, OO in PHP. And - the week after next - I'll be teaching Perl for Larger Projects - a public course that covers the subject for a further group.

The Background to OO

Newcomers to OO start here

When you're programming, you're dealing with data - and probably a number of different types of data. And there are a certain number of things that you can do with each type of data.

Rover the dogFor example, you could be writing a program that deals with animals. You can load in (somehow) the data relating to an animal. You can set its weight. You can read its weight. You can set and read its age. And if you know its breed and age, with appropriate background knowledge you can work out the proportion of the way it is through its expected life. But you can't (for example) work out its data transmission rate, nor know it' Mastercard number, as such things don't apply to animals.

Lupins everywhereIn Object Oriented Programming, you'll write a series of named pieces of code that deal with each particular type of data - for an animal, following on with our example, you would write a piece of code that actually creates the necessary structures within your program to hold the data for an animal, named pieces of code to set values (if you chose not to set them only as you created the structures), and named pieces of code to get information back out. You might also write a piece of code to deal with closing down the structures when you were finished with them - if (for example) data changes stored only in memory had to be saved to your disc.

One of the great beauties of OO programming is that you can clearly define your specification for a data type ("class") and write all the code for that class in a separate file which can be tested, maintained and extended as a unit on its own away from the main application code. That means that your "animal code" can then be shared between a whole lot of different applications that relate to animals, and yet only the person who wrote the class needs to understand its internals. And all the people who use the code only need to understand how to call it, and what it returns.

Here's a sample Perl program - from Thursday - that USES a couple of classes, but without any knowledge of how they work internally.


use animal;
 
$rover = new animal("Rover",9,7);
$boots = new animal("Blue",14,6);
$george = new human("Joe the Plumber",42);
 
$boots->setage(12);
$boots->setfurcolour("grey");
 
@group = ($rover, $boots, $george) ;
 
foreach $life(@group) {
  $ea1 = $life -> geteage();
  $ag = $life -> getage();
  $a1 = $life -> getname();
  print "We have $a1 aged $ea1 in essence and $ag in truth\n";
}


And here are the results that produced:

Dorothy:ppcsrd08 grahamellis$ perl annie
We have Rover aged 63 in essence and 9 in truth
We have Blue aged 72 in essence and 12 in truth
We have Joe the Plumber aged 42 in essence and 42 in truth
Dorothy:ppcsrd08 grahamellis$


You'll notice that - as well as animals - my example has used a human. So I have two different types of objects in my list (@group). And yet when I call code such as geteage and getname there's only a single line involved, and not a big switch and case structure. Fixing a sink This is because you're starting to see a further advantage of a well designed OO program - the ability for it to run a different piece of code depending on the class of object that's passed in. Or (describing that another way), if you have two geteage methods - one for a human and another for an animal - the program itself will be able to work out which one to use on each particular object it's called on. Neat, isn't it? This ability is known as Polymorphism.

Looking a little further behind the scenes, a human isn't all THAT different to an animal, and it would be a great shame to have to duplicate code. So in this example, our class of animal is used as the basis for our class of human, and in fact the only extra code I had to write for a human was that code which changes when I start looking at a human as a specific type of animal. In a larger example, this means that I've not got to duplicate thousands of lines of code, but rather I can write just a handful of new blocks of code to override those from the base class. In the OO lingo, this is known as inheritance.


If you would like to see a complete source code example in PHP, look here for a demonstration I wrote during yesterday.

Learning OO Programming

Hopefully, the article above has given you a little insight into the world of Object Orientation ... but there's far, far more to it than I can write in an article such as this, and it's something that you'll need to try out for yourself and learn; for some people "book learning" can be very effective, but for others a training course is a far easier way to get them over the initial hurdle. I suspect you can see the advert coming ... ;-)

We cover OO languages and principles behind them on a lot of our public courses:
Perl for Larger Projects
OO Programming in PHP
Lua Programming
Programming in Python
Ruby Programming
C++ Programming
These courses last from 1 to 3 days, and include other related subjects with the languages concerned as appropriate. By that, I mean that a language such as Python is ALL OO, so the subject is covered in our general Python course, but with a language such as PHP, OO is something that's not needed by everyone so we have a single extra day for that course, which you can take in addition to the general PHP course if you wish.

All public courses are run at our Melksham, Wiltshire, UK, hotel and training centre. Our current schedule may be found here We can also run private courses there (or on your site) if you wish.

For private courses, we can also cover Object Orientation in Java, and we can train you on [Incr-Tcl] - Tcl's OO extension.
(written 2008-12-06, updated 2008-12-10)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
C232 - C and C based languages - Defining and using classes in C++
  [4565] Allocation of memory for objects in C++ - Stack v Heap - (2015-10-31)
  [4372] Template / design pattern for C++ constructor and accessors - (2014-12-29)
  [4129] Simple OO demonstration in C++, comparison to Python - (2013-07-01)
  [3978] Teaching OO - how to avoid lots of window switching early on - (2013-01-17)
  [3810] Reading files, and using factories to create vectors of objects from the data in C++ - (2012-07-21)
  [3721] Naming blocks of code, structures and Object Orientation - efficient coding in manageable chunks - (2012-05-06)
  [3716] Learning C++ - a design pattern for your first class - (2012-05-02)
  [3250] C++ - how we teach the language and the concepts behind the language - (2011-04-17)
  [2579] Creating, setting up and using objects in C++ - (2010-01-16)
  [2578] Where are your objects stored in C++? - (2010-01-16)
  [2577] Complete teaching example - C++, inheritance, polymorphism - (2010-01-15)

H108 - Objects in PHP
  [4628] Associative objects - one object within another. - (2016-01-20)
  [4627] Caching results in an object for efficiency - avoiding re-calculation - (2016-01-20)
  [4626] Singleton design pattern - examples and uses - (2016-01-20)
  [4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
  [4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
  [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)
  [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)
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [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)

J706 - Java - Objects and Classes
  [4422] Objects - from physical to virtual or abstract - Java - (2015-02-10)
  [4413] Binomial Coefficient (Pascal Triangle) objects in Java - (2015-02-03)
  [2651] Calculation within objects - early, last minute, or cached? - (2010-02-26)
  [2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
  [2422] Looking inside Java classes - javap and javadoc - (2009-09-25)
  [1906] Long, Longer, Longest in Java - (2008-11-25)
  [1500] First Class Java. First step and moving forward. - (2008-01-10)
  [1296] An example of Java Inheritance from scratch - (2007-08-08)
  [1163] A better alternative to cutting and pasting code - (2007-04-26)
  [477] Class, static and unbound variables - (2005-10-25)
  [96] Variable Scope - (2004-10-22)

P213 - Perl - Creating your own Classes
  [4607] Classes and object - first steps in Perl 6 - (2016-01-02)
  [3833] Learning to use existing classes in Perl - (2012-08-10)
  [3098] Learning Object Orientation in Perl through bananas and perhaps Moose - (2010-12-21)
  [3059] Object Orientation in an hour and other Perl Lectures - (2010-11-18)
  [2969] What does blessing a variable in Perl mean? - (2010-09-24)
  [2877] Further more advanced Perl examples - (2010-07-19)
  [2834] Teaching examples in Perl - third and final part - (2010-06-27)
  [1864] Object Oriented Perl - First Steps - (2008-11-01)
  [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)
  [983] Blessing in Perl / Member variable in Ruby - (2006-12-14)
  [975] Answering ALL the delegate's Perl questions - (2006-12-09)
  [246] When to bless a Perl variable - (2005-03-15)
  [227] Bellringing and Programming and Objects and Perl - (2005-02-25)

Q906 - Object Orientation and General technical topics - Object Orientation: Individual Objects
  [4650] Why populate object with values as you construct them? - (2016-02-18)
  [4591] From single block to structure and object oriented programming - (2015-12-02)
  [4448] What is the difference between a function and a method? - (2015-03-04)
  [4021] Spike solution, refactored and reusable, Python - Example - (2013-02-28)
  [3436] Moving from scripting to Object Orientation in Python - (2011-09-13)
  [2393] A first demonstration of OO, including polymorphism - (2009-09-04)
  [2173] Basic OO principles - (2009-05-11)
  [1543] Learning Object Oriented Principles (and perhaps Java) - (2008-02-17)
  [507] Introduction to Object Oriented Programming - (2005-11-27)

R105 - Ruby - Classes and Objects
  [4502] Reading and parsing a JSON object in Ruby - (2015-06-01)
  [4009] Clear, concise examples - Ruby classes and objects. - (2013-02-17)
  [3421] Ruby off the Rails? - (2011-09-06)
  [2609] Scope of variables - important to Ruby on Rails - (2010-01-31)
  [2603] Ruby objects - a primer - (2010-01-29)
  [2292] Object Orientation in Ruby - intermediate examples - (2009-07-16)

T245 - Tcl/Tk - [incr-Tcl]
  [4460] Using Object Oriented Tcl and the Tk toolkit together - real life example - (2015-03-12)
  [4456] Objects in Tcl - iTcl - updated first steps example - (2015-03-11)
  [1528] Object Oriented Tcl - (2008-02-02)
  [290] Object Orientation in Tcl - [incr-Tcl] - (2005-04-24)

Y106 - Object Oriented Python
  [4721] When to check an object type - Python isinstance example - (2016-11-03)
  [4028] Really Simple Class and Inheritance example in Python - (2013-03-04)
  [3947] this or self - what are they, and what is the difference? (Python) - (2012-12-08)
  [3878] From Structured to Object Oriented Programming. - (2012-10-02)
  [3673] Object oriented or structured - a comparison in Python. Also writing clean regular expressions - (2012-03-26)
  [3399] From fish, loaves and apples to money, plastic cards and BACS (Perl references explained) - (2011-08-20)
  [3085] Object Oriented Programming for Structured Programmers - conversion training - (2010-12-14)
  [2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
  [2017] Python - a truly dynamic language - (2009-01-30)
  [1348] Screw it or Glue it? Access to Object variables - a warning - (2007-09-12)
  [1306] Python class rattling around - (2007-08-16)
  [900] Python - function v method - (2006-10-20)
  [834] Python makes University Challenge - (2006-08-15)


Back to
Preventing ^C stopping / killing a program - Perl
Previous and next
or
Horse's mouth home
Forward to
Flash (client) to PHP (server) - example
Some other Articles
2009 - Hotel, Meeting, Training Course prices
Melksham Oak Community School, Melksham, Wiltshire
Team changes at Well House - looking forward
Flash (client) to PHP (server) - example
Introduction to Object Oriented Programming
Preventing ^C stopping / killing a program - Perl
Making it all worthwhile
Flurinci knows Raby Lae PHP and Jeve
Romeo and Julie
Progress Bar Techniques - Perl
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., 2019: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
PH: 01225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/1925_Int ... mming.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat