How do classes relate to each other? Associated Classes ... or ... define: Associated classes, parent classes, superclasses, subclasses, base classes, abstract classes, interfaces and mixins.
Associated classes are the odd ones out here. They're classes that are used within other classes.
Let me give you an example, from the
Object Oriented PHP course I gave on Friday. We defined a class called
visit, in which each instance contained an array of
access objects (as well as some other data). One or more
accesses make up a
visit, and so every visit object must contain access objects, but that's not in the same way that properties and methods are
inherited - a term which applies to all the other terms that I used above.
Let's look at all the other terms, and let's do so by example.
I define a class called
pubtrans which contains information about a public transport offering. However, whilst public transport by one more or another is more or less the same, there are differences in the code logic needed. So I call my pubtrans class a
parent class and I then provide extra (
extended) logic to define a
subclass for a train, and I also provide extra logic to define another subclass for a bus.
The parent class is sometimes referred to as the
superclass, and you'll also find the term
base class used to refer to the class on which another is based.
A class is referred to as an
abstract class if you won't be creating (constructing) members directly. Taking our pubtrans as an example, that's likely to be an abstract class - every piece of public transport is some
subtype of public transport be it a train, a bus, a ferry or a pogo stick. In an abstart class definition, you can usually include a requirement that each subclass must implement a particular method, thus ensuring that all the objects in this object tree are polymorphic.
An
interface is a definition of a number of methods that must be defined in a class which
implements it. It's rather like an abstract class which is so abstract that it contains no code at all. The advantage of an interface is that classes can implement multiple interfaces, then giving you something which approaches multiple inheritance in a language which only supports single inheritance such as Java.
Finally, a
mixin is code / methods which are shared between a number of classes by being "mixed in" or added to them. They're currently used in Ruby and Python (of the languages that we train on) and will be present in PHP 5.4 onwards where they will be part of
traits and offer a wider selection of operations such as aliasing and exclusion and will as mixing
in.
(written 2012-02-12, updated 2012-02-18)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Q909 - Object Orientation and General technical topics - Object Orientation: Composite Objects [477] Class, static and unbound variables - (2005-10-25)
[592] NOT Gone phishing - (2006-02-05)
[1345] Perl and Shell coding standards / costs of an IT project - (2007-09-11)
[1348] Screw it or Glue it? Access to Object variables - a warning - (2007-09-12)
[2170] Designing a heirarcy of classes - getting inheritance right - (2009-05-11)
[2641] Object Oriented Programming in PHP - (2010-02-19)
[2865] Relationships between Java classes - inheritance, packaging and others - (2010-07-10)
[2922] Getting the OO design write - with PHP a example - (2010-08-14)
[3142] Private and Public - and things between - (2011-01-22)
[3152] Jargon busting - (2011-01-30)
[3251] C++ - objects that are based on other objects, saving coding and adding robustness - (2011-04-17)
[3979] Extended and Associated objects - what is the difference - C++ example - (2013-01-18)
[4377] Designing a base class and subclasses, and their extension, in C++ - (2015-01-01)
[4394] Philosophy behind object design - and how I applied in to a Java example - (2015-01-14)
[4450] Deciding whether to use parameters, conditional statements or subclasses - (2015-03-05)
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)
[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)
[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)
[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)
[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)
Some other Articles
Keeping Business Local. But is that realistic?Help to get online in MelkshamA customer thanks Well House ManorTraining to do a job, or training to pass an exam?How do classes relate to each other? Associated ClassesGypsy and Billy enjoy the snowSnow comes to Melksham, Wiltshire - picturesMelksham Campus - a blog you can read, and a place you can comment