Topic 2: Typing and Inheritance
Synopsis
Typing¤
-
Recall that abstraction¤
classifies objects (creates a class¤)
-
Classification¤
according to structure and/or behaviour¤
-
"Typing¤"
is the enforcement of class¤
distinctions
-
For example: assignment compatibility, correct parameter types, etc.
Strong vs Weak Typing¤¤
-
"Strong typing¤¤"
is the strict enforcement of type rules
-
"Weak typing¤¤"
is the strict enforcement of type rules but with well-defined exceptions¤
or an explicit type-violation mechanism
-
Languages may even have "no typing¤"
(for example, assemblers)
Static vs Dynamic Typing¤¤
-
Another kind of duality (independent of the "strong/weak" issue)
-
Static typing¤¤
(or static binding, or early binding) is where the type of
an object or expression is fully determined at compile time
-
Hence C is a statically-typed language
-
Dynamic typing¤¤
(or late binding) is where the type of an object or expression is
not known (or unable to be known) until run-time.
Inheritance
- Consider the kinds of class¤
hierarchies we experience
- Division hierarchy (e.g. biological taxonomy) and Control hierarchy (e.g.
Military Rank)
- Example: Zoological classification¤
- Example: Martial
arts moves
- Example: Vic Roads database
(first homework exercise)
- More specific classes¤
"share" features of their more abstract parent classes¤¤
Type Relationships
-
Suppose I have a ADT which represents a list
-
What functions (behaviours¤)
does it have?
-
Now suppose a define an ADT which represents an automatically ordered list
-
What functions (behaviours¤)
does it have in common with the list ADT?
-
What additional functions does it have?
Type Inheritance
-
We can define the ordered list ADT in terms of the list ADT
- OrderedList is a List plus
ordering behaviour
- We can represent that relationship as a UML diagram:
Inheritance Hierarchies
(Trees)
-
The "List<-OrderedList" hierarchy¤
is the smallest possible example of inheritance.
-
Inheritance hierarchies between classes¤
can be much more elaborate trees:
Multiple Inheritance¤
-
Things can be classified (abstracted) in many different ways, simultaneously
-
Hence it is possible for a particular class¤
to inherit from two or more parent classes¤¤
simultaneously:
Inheritance Graphs
-
In the larger scheme of things, multiple inheritance¤
produces inheritance graphs (rather than trees):
-
Such graphs must be acyclic. Why?
Inheritance is Transitive
-
The additional properties conferred by inheritance as passed on to classes¤
which subsequently inherit
-
Hence we could simplify the previous inheritance graph:
Reading
- Fowler
- Chapters 1 to 3
- Lippman & Lajoie
- Sections 3.1 to 3.9, 7.1 to 7.4.
- Mostly revision, but some parts will be new.
- Stroustrup
- Chapters 4, 5 and Sections 7.1 to 7.3.
- Mostly revision, but some parts will be new.
- Summerville
- Chapter 13.
This material is part of the CSE2305 - Object-Oriented
Software Engineering course.
Copyright © Jon McCormack & Damian Conway, 1998-2005. All rights reserved.