Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
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.

For 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.

In 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. 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
Y106 - Object Oriented Python
  [477] Class, static and unbound variables - (2005-10-25)
  [834] Python makes University Challenge - (2006-08-15)
  [900] Python - function v method - (2006-10-20)
  [1306] Python class rattling around - (2007-08-16)
  [1348] Screw it or Glue it? Access to Object variables - a warning - (2007-09-12)
  [2017] Python - a truly dynamic language - (2009-01-30)
  [2169] When should I use OO techniques? - (2009-05-11)
  [2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
  [3085] Object Oriented Programming for Structured Programmers - conversion training - (2010-12-14)
  [3399] From fish, loaves and apples to money, plastic cards and BACS (Perl references explained) - (2011-08-20)
  [3436] Moving from scripting to Object Orientation in Python - (2011-09-13)
  [3673] Object oriented or structured - a comparison in Python. Also writing clean regular expressions - (2012-03-26)
  [3878] From Structured to Object Oriented Programming. - (2012-10-02)
  [3947] this or self - what are they, and what is the difference? (Python) - (2012-12-08)
  [4021] Spike solution, refactored and reusable, Python - Example - (2013-02-28)
  [4028] Really Simple Class and Inheritance example in Python - (2013-03-04)
  [4129] Simple OO demonstration in C++, comparison to Python - (2013-07-01)
  [4448] What is the difference between a function and a method? - (2015-03-04)
  [4591] From single block to structure and object oriented programming - (2015-12-02)
  [4650] Why populate object with values as you construct them? - (2016-02-18)
  [4721] When to check an object type - Python isinstance example - (2016-11-03)

T245 - Tcl/Tk - [incr-Tcl]
  [290] Object Orientation in Tcl - [incr-Tcl] - (2005-04-24)
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [1528] Object Oriented Tcl - (2008-02-02)
  [1819] Calling base class constructors - (2008-10-03)
  [3142] Private and Public - and things between - (2011-01-22)
  [4456] Objects in Tcl - iTcl - updated first steps example - (2015-03-11)
  [4460] Using Object Oriented Tcl and the Tk toolkit together - real life example - (2015-03-12)

R105 - Ruby - Classes and Objects
  [983] Blessing in Perl / Member variable in Ruby - (2006-12-14)
  [2292] Object Orientation in Ruby - intermediate examples - (2009-07-16)
  [2603] Ruby objects - a primer - (2010-01-29)
  [2609] Scope of variables - important to Ruby on Rails - (2010-01-31)
  [2616] Defining a static method - Java, Python and Ruby - (2010-02-01)
  [2651] Calculation within objects - early, last minute, or cached? - (2010-02-26)
  [3421] Ruby off the Rails? - (2011-09-06)
  [4009] Clear, concise examples - Ruby classes and objects. - (2013-02-17)
  [4502] Reading and parsing a JSON object in Ruby - (2015-06-01)

Q906 - Object Orientation and General technical topics - Object Orientation: Individual Objects
  [227] Bellringing and Programming and Objects and Perl - (2005-02-25)
  [507] Introduction to Object Oriented Programming - (2005-11-27)
  [1543] Learning Object Oriented Principles (and perhaps Java) - (2008-02-17)
  [1864] Object Oriented Perl - First Steps - (2008-11-01)
  [2171] Cleaning up redundant objects - (2009-05-11)
  [2173] Basic OO principles - (2009-05-11)
  [2393] A first demonstration of OO, including polymorphism - (2009-09-04)
  [3721] Naming blocks of code, structures and Object Orientation - efficient coding in manageable chunks - (2012-05-06)

P213 - Perl - Creating your own Classes
  [246] When to bless a Perl variable - (2005-03-15)
  [975] Answering ALL the delegate's Perl questions - (2006-12-09)
  [1320] Perl for Larger Projects - Object Oriented Perl - (2007-08-25)
  [1435] Object Oriented Programming in Perl - Course - (2007-11-18)
  [1664] Example of OO in Perl - (2008-06-03)
  [2834] Teaching examples in Perl - third and final part - (2010-06-27)
  [2877] Further more advanced Perl examples - (2010-07-19)
  [2969] What does blessing a variable in Perl mean? - (2010-09-24)
  [3059] Object Orientation in an hour and other Perl Lectures - (2010-11-18)
  [3098] Learning Object Orientation in Perl through bananas and perhaps Moose - (2010-12-21)
  [3833] Learning to use existing classes in Perl - (2012-08-10)
  [4607] Classes and object - first steps in Perl 6 - (2016-01-02)

J706 - Java - Objects and Classes
  [96] Variable Scope - (2004-10-22)
  [1163] A better alternative to cutting and pasting code - (2007-04-26)
  [1296] An example of Java Inheritance from scratch - (2007-08-08)
  [1500] First Class Java. First step and moving forward. - (2008-01-10)
  [1906] Long, Longer, Longest in Java - (2008-11-25)
  [2422] Looking inside Java classes - javap and javadoc - (2009-09-25)
  [4413] Binomial Coefficient (Pascal Triangle) objects in Java - (2015-02-03)
  [4422] Objects - from physical to virtual or abstract - Java - (2015-02-10)

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)
  [485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
  [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)
  [1820] Sorting objects in PHP - (2008-10-04)
  [2160] PHP - getclass v instanceof - (2009-05-07)
  [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)
  [2741] What is a factory? - (2010-04-26)
  [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)
  [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)
  [3608] Design Patterns - what are they? Why use them? - (2012-02-12)
  [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)
  [3843] Caching Design Patterns - (2012-08-20)
  [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)
  [4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
  [4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
  [4626] Singleton design pattern - examples and uses - (2016-01-20)
  [4627] Caching results in an object for efficiency - avoiding re-calculation - (2016-01-20)
  [4628] Associative objects - one object within another. - (2016-01-20)

C232 - C and C based languages - Defining and using classes in C++
  [2577] Complete teaching example - C++, inheritance, polymorphism - (2010-01-15)
  [2578] Where are your objects stored in C++? - (2010-01-16)
  [2579] Creating, setting up and using objects in C++ - (2010-01-16)
  [3250] C++ - how we teach the language and the concepts behind the language - (2011-04-17)
  [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)
  [3978] Teaching OO - how to avoid lots of window switching early on - (2013-01-17)
  [4372] Template / design pattern for C++ constructor and accessors - (2014-12-29)
  [4565] Allocation of memory for objects in C++ - Stack v Heap - (2015-10-31)


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., 2024: 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.info/mouth/1925_Int ... mming.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb