[Tutor] Follow up to 'class data'
alan.gauld@bt.com
alan.gauld@bt.com
Tue, 4 Dec 2001 17:33:28 -0000
> 1. Encapsulation - makes it easier to make a mental picture of your
> program, you can create objects and associate both actions
> and data
Absolutely correct, the foundation of OOP.
> 2. Polymorphism - I totally have no idea what does it mean in
> practice.
You probably use it without realising.
Its where a group of different classes have the same
interface - ie set of methods - but implement them differently.
The HTML/XML/SGML parsers in te standard library are good
examples. You create a parser and use it. Which parser depends
on the file type. The parsers are polymorphic instances of
the general parser interface.
Another example is the AddressBook example earlier today.
AddressBook can contain entries. The Entries can either
be buildings or people but provide they have the same set
of methods the AddressBook doesn't know or care, it just
uses the basic interface. In fact we could go on to define
a Network entry too and the AddressBook need be none the wiser
it just calls the same set of methods.
See my OOP topic on my web tutor for much more with examples:
http://www.freenetpages.co.uk/hp/alan.gauld
> 3. Data hiding - I guess it's useful in very large projects where many
> people are working on the code and you want to protect your data from
> the silly intern in the next cubicle?
Sort of, its also useful when you are prototyping and the
internal data starts off as a hard coded list, then gets
moved to a flat file and finally to an RDBMS. The method
calls don't change but the internals of how they work change
drastically. The other area that it helps in is where
there are data rules such as valid ranges or that you
an only set one value if you also delete another etc.
By forcing access via a method you can enforce those
rules(inside the method) and thus avoid bugs.
> 4. Inheritance - I used it a little bit but I could do without it just
> as well. It pretty much saves typing and maintainance time, right?
This is usually the means of providing polymorphism(see above)
but as I show on my web tutor the two are not necessarily linked
(except in strictly typed languages). Inheritance does provide some
code saving convenience features in its own right and in
particular allows programming by specialisation - where you
add new methods and attributes to existing ones or override
existing methods to do new things (this is subtly different
to pure polymorphism which requires identical interfaces!
Something called the Liskov(sp?) Substitution Principle)
Interestingly there are some objective data to suggest that
inheritance can actually be detrimental to maintenance since
it is much harder to ensure that a code fix in one place won't
cause damage some place else that inherits the changed code.
Also the lack of local visibility of the functions can make
code comprehension more difficult. This is one area where
python and its explicit use of self and the imported module
names actually helps a lot.
Alan g