Title: Object Oriented Programming Development - Polymorphism
1Object Oriented ProgrammingDevelopment -
Polymorphism
- By
- Marc Conrad Rob Manton
- University of Luton
- Email
- Marc.Conrad_at_luton.ac.uk
- Rob.Manton_at_luton.ac.uk
- Room
- D104
2Module Outline
- Inheritance
- Aggregation
- Polymorphism
- Multifile Development
- Introduction
- Non object oriented basics
- Classes
3The Meaning of the word.
- From the Greek
- Polus Morphe Polumorphos
- (many ) (shape/form)
- The English word "polymorphe" dates from the 19th
century and was applied to different animal forms
arising in the the same species. -
4The Meaning of the word.
- In object-oriented computing it means different
forms of data being handled by the same type of
process. - Example The operator has a different meaning
in the expression 2 3 (add two integers) than
in 1.7 3.3 (add two floating point numbers)
5Types of Polymorphism
- In Object Oriented Programming there are three
types of polymorphism - method overloading, with the special and
important case of operator overloading - method overriding
- run-time polymorphism
6Types of Polymorphism
- In Object Oriented Programming there are three
types of polymorphism - method overloading, with the special and
important case of operator overloading - method overriding
- run-time polymorphism
- Method overloading can also be applied in
non-object oriented contexts and refers boths to
functions and methods.
7Types of Polymorphism
- In Object Oriented Programming there are three
types of polymorphism - method overloading, with the special and
important case of operator overloading - method overriding
- run-time polymorphism
- Method overriding and run-time polymorphism is
specific to inheritance hierarchies and object
oriented programming
8Types of Polymorphism
- In Object Oriented Programming there are three
types of polymorphism - method overloading, with the special and
important case of operator overloading - method overriding
- run-time polymorphism
- Run-time polymorphism, also called dynamic
binding, or late binding is often considered as
the object oriented feature of C.
9Method Function Overloading
- Overloading a function simply means, that a
function is not only defined its name but by its
name and parameter types. - The following functions are different in C
- int makeBreakfast(int i, int k)
- void makeBreakfast(Creature who)
- float makeBreakfast()
10Example The Creature class
- class Creature
- private
- int yearOfBirth
- public
- void setYearOfBirth(int year)
- yearOfBirth year
-
- void setYearOfBirth(Creature other)
- yearOfBirth other.yearOfBirth
-
- int getYearOfBirth()
- return yearOfBirth
-
born1997
11Example The Creature class
- class Creature
- private
- int yearOfBirth
- public
- void setYearOfBirth(int year)
- yearOfBirth year
-
- void setYearOfBirth(Creature other)
- yearOfBirth other.yearOfBirth
-
- int getYearOfBirth()
- return yearOfBirth
-
These two methods are different.
born1997
12Example The Creature class
These two methods are different because they have
different argument types.
- class Creature
- private
- int yearOfBirth
- public
- void setYearOfBirth(int year)
- yearOfBirth year
-
- void setYearOfBirth(Creature other)
- yearOfBirth other.yearOfBirth
-
- int getYearOfBirth()
- return yearOfBirth
-
born1997
13Operator Overloading - Motivation
- Question How many function calls are involved in
the following statement? - a 2 3
14Operator Overloading - Motivation
- Question How many function calls are involved in
the following statement? - a 2 3
- There are two functions implicitly involved
and . - Look at this statement as
- assign(a, add(2,3))
15Operator Overloading
- So, operators as , -, , ltlt, , etc. can be seen
as functions as well. That means we can
overload operators. - The C syntax uses function names prefixed
with operator for overloading operators.
16Overloading Operators - Example
- A Sandwich filling.
- may contain bacon (yes/no).
- a fraction of a lettuce-leaf.
- a number of tomato slices.
- class BLT
- public
- bool bacon
- float lettuce
- int tomatoes
- // Constructor
- BLT(bool b, float l, int t)
- // (more code)
17Overloading Operators - Example
- BLT filling1(true,0.5,2)
- BLT filling2(false,0.2,0)
- ...
- BLT filling3 filling1 filling2
- ...
- / Should give a filling with bacon, 0.7 lettuce
and 2 tomatoes/
- class BLT
- public
- bool bacon
- float lettuce
- int tomatoes
- // Constructor
- BLT(bool b, float l, int t)
- // (more code)
18Overloading Operators - Example
- BLT filling1(true,0.5,2)
- BLT filling2(false,0.2,0)
-
- BLT filling3 filling1 filling2
- ...
- / Should give a filling with 3 bacon slices,
0.7 lettuce and 2 tomatoes /
- class BLT
- public
- bool bacon
- float lettuce
- int tomatoes
- // Constructor
- BLT(bool b, float l, int t)
- // (more code)
This is the operator we want to overload
19Overloading Operators - Example
- // The C Syntax
- BLT operator(BLT y, BLT z)
- bool b y.bacon z.bacon
- float l y.lettuce z.lettuce
- int t y.tomatoes z.tomatoes
- BLT result(b,l,t)
- return result
-
- class BLT
- public
- bool bacon
- float lettuce
- int tomatoes
- // Constructor
- BLT(bool b, float l, int t)
- // (more code)
20Operator Overloading
- Operators can also be overloaded as methods, e.g.
the operator - class BLT
- //
- BLT operator(BLT other)
- bacon other.bacon
- tomatoes other.tomatoes
- lettuce other.lettuce
-
- //
21Operator Overloading
BLT filling1(true,0.5,2) BLT filling2(false,0.2,0
) filling1 filling2 ... /
Should give a filling with bacon, 0.7 lettuce
and 2 tomatoes/
- Operators can also be overloaded as methods, e.g.
the operator - class BLT
- //
- BLT operator(BLT other)
- bacon other.bacon
- tomatoes other.tomatoes
- lettuce other.lettuce
-
- //
22Operator Overloading
- Operators can also have other types as parameter
- class BLT
- //
- BLT operator(int factor)
- tomatoes 2
- lettuce 2
-
- //
23Operator Overloading
BLT filling1(false,0.5,2) filling1
2 ... / Should give a filling with no
bacon, 1 lettuce and 4 tomatoes /
- Operators can also have other types as
parameters - class BLT
- //
- BLT operator(int factor)
- tomatoes factor
- lettuce factor
-
- //
24Operator Overloading
- The following operators can be overloaded
- new, delete, , -, , /, , , , , , !, , lt,
gt, , -, , /, , , , , ltlt, gtgt, gtgt,
ltlt, , !, lt, gt, , , , --, , , -gt. -gt,
(), - Note that "" has already a default behaviour.
When "overloaded" it will be in fact overridden.
25Operator Overloading - Interesting Observation
Overloaded ltlt operator
26Operator Overloading - Summary
- Operators may be overloaded to work with user
defined data types (objects). - The syntax for overloading involves the
'operator' keyword and the operator. - Note In a good design it is important, that the
normal meanings of operators are not distorted
(don't subtract with a operator)
27Polymorphic Pointers
- In C a pointer of a parent class is allowed to
point to an object of the child class. E.g. - class Vehicle
- // ...
-
- class Car public Vehicle
- // ...
-
- // ...
- Vehicle vp new Car()
28Overriding Methods
- Methods in the parent class can be redifined in
the child class. - class Vehicle
- void move(int i)
-
- class Car public Vehicle
- void move(int i)
-
- // ...
- Vehicle vp new Car()
- vp-gtmove(100)
29Overriding Methods
- Methods in the parent class can be redifined in
the child class. - class Vehicle
- void move(int i)
-
- class Car public Vehicle
- void move(int i)
-
- // ...
- Vehicle vp new Car()
- vp-gtmove(100)
- BUT
- Which of these two move() methods will be called?
30Overriding Methods
- Methods in the parent class can be redifined in
the child class. - class Vehicle
- void move(int i)
-
- class Car public Vehicle
- void move(int i)
-
- // ...
- Vehicle vp new Car()
- vp-gtmove(100)
31Overriding Methods
- Methods in the parent class can be redifined in
the child class. - class Vehicle
- void move(int i)
-
- class Car public Vehicle
- void move(int i)
-
- // ...
- Vehicle vp new Car()
- vp-gtmove(100)
32Overriding Methods
- Methods in the parent class can be redifined in
the child class. - class Vehicle
- void move(int i)
-
- class Car public Vehicle
- void move(int i)
-
- // ...
- Vehicle vp new Car()
- vp-gtmove(100)
- static typing!
- In C, static typing is the default behaviour.
As vp is of type pointer to a Vehicle, the method
of the Vehicle is called.
33Overriding Methods - The keyword virtual
- Methods in the parent class can be redifined in
the child class. - class Vehicle
- virtual void move(int i)
-
- class Car public Vehicle
- virtual void move(int i)
-
- // ...
- Vehicle vp new Car()
- vp-gtmove(100)
- dynamic binding!
- The keyword virtual allows the use of dynamic
binding.
As vp points to a Car object the method of the
Car is called
34Abstract Methods Classes
- Abstract methods are methods without any
implementation (pure virtual methods). - class Vehicle
- virtual void move(int i) 0
-
- class Car public Vehicle
- virtual void move(int i)
-
- // ...
- Vehicle vp new Car()
- vp-gtmove(100)
- Syntax for declaring abstract methods.
Note that Vehicle objects cannot be instantiated
(but Car objects).
35Static typing Dynamic binding
- Static typing means that the legality of a member
function invocation is checked at the earliest
possible moment by the compiler at compile time.
The compiler uses the static type of the pointer
to determine whether the member function
invocation is legal.
- Dynamic binding means that the address of the
code in a member function invocation is
determined at the last possible moment based on
the dynamic type of the object at run time. It is
called "dynamic binding" because the binding to
the code that actually gets called is
accomplished dynamically (at run time).
36Important stuff to remember
- Overriding methods
- Polymorphic pointers
- Static binding
- Dynamic binding - the virtual keyword
- Abstract methods