If you screw two pieces of material together, you have the opportunity, later on, to unscrew them ... resuse them differently, install a waterproof membrane between them, and so on. But if you glue them together, later modification will be much harder or perhaps impossible. And in a similar way, if you're connecting two pieced of software together it's better to screw them than to glue them. What am I getting at?
If you access a member variable within an object directly from your main calling code, then you don't leave yourself the opportunity to intersperse some extra check or twist later on, whereas if you access all member variables via methods - even if they are really just empty wrappers, you leave yourself the flexibility for later. Let's see an example.
Here is a (Python) class:
class pidgeon:
def __init__(self, name, value):
self.name=name
self.value=value
def getvalue(self):
return self.value
which I can use like this:
george = pidgeon("John Smith",200)
gina = pidgeon("Jenny Smith",50)
print "Value of George is",george.getvalue();
print "Value of Gina is",gina.getvalue();
and it will print out 200 and 50. Here is an alternative class:
class woodpecker:
def __init__(self, name, value):
self.name=name
self.value=value
and I can access the data, more simply, as follows:
print "Value of Gerry is",gerry.value;
print "Value of Graeme is",graeme.value;
I now want to set a mimimum value of 75 pounds on all birds - pidgeons and woodpeckers. With pidgeons, it's easy - I just modify the getvalue method as follows:
def getvalue(self):
if self.value < 75: return 75
return self.value
but with my woodpecker class I'm stuck.
Pidgeons are like screws, and woodpeckers stick like glue!
Full Source code of example.
(written 2007-09-12)
Associated topics are indexed under
Q909 - Object Orientation and General technical topics - Object Orientation: Composite Objects [3609] How do classes relate to each other? Associated Classes - (2012-02-12)
[3251] C++ - objects that are based on other objects, saving coding and adding robustness - (2011-04-17)
[3152] Jargon busting - (2011-01-30)
[3142] Private and Public - and things between - (2011-01-22)
[2922] Getting the OO design write - with PHP a example - (2010-08-14)
[2865] Relationships between Java classes - inheritance, packaging and others - (2010-07-10)
[2641] Object Oriented Programming in PHP - (2010-02-19)
[2170] Designing a heirarcy of classes - getting inheritance right - (2009-05-11)
[1345] Perl and Shell coding standards / costs of an IT project - (2007-09-11)
[592] NOT Gone phishing - (2006-02-05)
[477] Class, static and unbound variables - (2005-10-25)
Y106 - Object Oriented Python [3436] Moving from scripting to Object Orientation in Python - (2011-09-13)
[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)
[2169] When should I use OO techniques? - (2009-05-11)
[2017] Python - a truly dynamic language - (2009-01-30)
[1925] Introduction to Object Oriented Programming - (2008-12-06)
[1306] Python class rattling around - (2007-08-16)
[900] Python - function v method - (2006-10-20)
[834] Python makes University Challenge - (2006-08-15)
Some other Articles
Actionscript / Flash / Flex (IAQ/FAQ)Compressing web pages sent out from server. Is it worth it?FSB (Federation of Small Businesses) Western RegionCash is not an acceptable way of payingScrew it or Glue it? Access to Object variables - a warningWireless Internet Access at hotels - an update and some pitfallsEvening, Devizes and Sells GreenCatching up on indexing our resourcesMelksham Laundrette