Object Oriented Programming Development
Download
Report
Transcript Object Oriented Programming Development
Object Oriented Programming
Development - Polymorphism
By:
Marc Conrad & Rob Manton
University of Luton
Email:
[email protected]
[email protected]
Room:
D104
1
Module Outline
Introduction
Non object oriented
basics
Classes
Inheritance
Aggregation
Polymorphism
Multifile Development
2
The Meaning of the word.
From the Greek:
Polus
(many )
+
Morphe = Polumorphos
(shape/form)
The English word "polymorphe" dates from
the 19th century and was applied to different
animal forms arising in the the same species.
3
The 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)
4
Types of Polymorphism
In Object Oriented Programming there
are three types of polymorphism:
a) method overloading, with the special
and important case of operator
overloading
b) method overriding
c) run-time polymorphism
5
Types of Polymorphism
In Object Oriented Programming there
are three types of polymorphism:
a) method overloading, with the special
and important case of operator
overloading
Method overloading can
b) method overriding also be applied in nonobject oriented contexts
c) run-time polymorphism
and refers boths to
functions and methods.
6
Types of Polymorphism
In Object Oriented
Programming
there
Method
overriding and
are three types ofrun-time
polymorphism:
polymorphism is
specific
to inheritance
a) method overloading,
with
the special
hierarchies
and object
and important case
of operator
oriented programming
overloading
b) method overriding
c) run-time polymorphism
7
Types of Polymorphism
In Object Oriented Programming there
Run-time
polymorphism,
are three types of
polymorphism:
also called dynamic
a) method overloading, with the special
binding, or late binding is
and important case
of operator
often
considered as the
overloading
object oriented feature of
b) method overridingC++.
c) run-time polymorphism
8
Method & 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();
9
Example: 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
Example: The Creature class
class Creature {
private:
These two methods
int yearOfBirth;
are different.
public:
void setYearOfBirth(int year) {
yearOfBirth = year;
}
void setYearOfBirth(Creature other) {
yearOfBirth = other.yearOfBirth;
}
int getYearOfBirth() {
return yearOfBirth;
born1997
}
};
Example: The Creature
class
These two methods
class Creature {
are different
private:
because they have
int yearOfBirth;
different argument
public:
void setYearOfBirth(int year) {
types.
yearOfBirth = year;
}
void setYearOfBirth(Creature other) {
yearOfBirth = other.yearOfBirth;
}
int getYearOfBirth() {
return yearOfBirth;
born1997
}
};
Operator Overloading Motivation
Question: How many function calls are
involved in the following statement?
a=2+3
13
Operator 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));”
14
Operator Overloading
So, operators as +, -, *, <<, =, 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.
15
Overloading Operators Example
A Sandwich filling.
class BLT {
public:
may contain bacon (yes/no).
bool bacon;
a fraction of a lettuce-leaf.
float lettuce;
a number of tomato slices.
int tomatoes;
// Constructor:
BLT(bool b, float l, int t);
// … (more code)
};
16
Overloading Operators Example
BLT filling1(true,0.5,2);
BLT filling2(false,0.2,0);
class BLT {
...
public:
BLT filling3 = filling1 + filling2;
bool bacon;
...
float lettuce;
/* Should give a filling with
int tomatoes;
bacon, 0.7 lettuce and 2
// Constructor:
tomatoes*/
BLT(bool b, float l, int t);
// … (more code)
};
17
Overloading Operators Example
BLT filling1(true,0.5,2);
BLT filling2(false,0.2,0);
class BLT {
…
public:
BLT filling3 = filling1 + filling2;
bool bacon;
...
float lettuce;
/* Should give a filling with 3
int tomatoes;
bacon slices, 0.7 lettuce and
// Constructor:
2 tomatoes */
BLT(bool b, float l, int t);
This is the operator
// … (more code)
we want to overload
};
18
Overloading Operators Example // The C++ Syntax
BLT operator+(BLT y, BLT z) {
class BLT {
bool b = y.bacon || z.bacon;
public:
float l = y.lettuce + z.lettuce;
bool bacon;
int t = y.tomatoes = z.tomatoes;
float lettuce;
BLT result(b,l,t);
int tomatoes;
return result;
// Constructor:
}
BLT(bool b, float l, int t);
// … (more code)
};
19
Operator 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;
}
//…
20
BLT filling1(true,0.5,2);
BLT filling2(false,0.2,0);
Operator Overloading
…
filling1 += filling2;
Operators can also be
... overloaded as
methods, e.g. the operator +=:
/* Should give a filling with
class BLT {
bacon, 0.7 lettuce and 2
// …
tomatoes*/
BLT operator+=(BLT other)
{
//…
bacon ||= other.bacon;
tomatoes += other.tomatoes;
lettuce += other.lettuce;
}
21
Operator Overloading
Operators can also have other types as
parameter:
class BLT {
// …
BLT operator*=(int factor) {
tomatoes *= 2;
lettuce *= 2;
}
//…
22
BLT filling1(false,0.5,2);
…
Operator Overloading
filling1 *= 2;
...
Operators can also
have other
as no
/* Should
give a types
filling with
parameters:
bacon, 1 lettuce and 4
class BLT {
tomatoes
// …
*/
BLT operator*=(int factor) {
tomatoes *= factor;
lettuce *= factor;
}
//…
23
Operator Overloading
The following operators can be
overloaded:
new, delete, +, -, *, /, %, ^, &, |, ~, !, =, <,
>, +=, -=, *=, /=, %=, ^=, &=, |=, <<,
>>, >>=, <<=, ==, !=, <=, >=, &&, ||,
++, --, , , ->*. ->, (), []
Note that "=" has already a default behaviour.
When "overloaded" it will be in fact overridden.
24
Operator Overloading Interesting Observation
cout << “Hello World\n”;
Overloaded << operator
25
Operator 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)
26
Polymorphic 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();
27
Overriding 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->move(100);
28
Overriding Methods
Methods in the parent class can be redifined in
the child class.
BUT:
class Vehicle {
void move(int i);
Which of these
};
two move()
class Car : public Vehicle {
void move(int i);
methods will be
};
called?
// ...
Vehicle vp = new Car();
vp->move(100);
29
Overriding 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->move(100);
static typing
30
Overriding 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->move(100);
dynamic binding?
31
Overriding Methods
Methods in the parent class can be redifined in
the child class.
static typing!
class Vehicle {
void move(int i);
};
class Car : public Vehicle {
void move(int i);
};
// ...
Vehicle vp = new Car();
vp->move(100);
In C++, static
typing is the
default behaviour.
As vp is of type pointer to a Vehicle, the
method of the Vehicle is called. 32
Overriding Methods The keyword virtual
Methods in the parent class can be redifined in
the child class.
dynamic binding!
class Vehicle {
virtual void move(int i);
};
class Car : public Vehicle {
virtual void move(int i);
};
// ...
Vehicle vp = new Car();
vp->move(100);
The keyword
virtual allows the
use of dynamic
binding.
As vp points to a Car object the
method of the Car is called
33
Abstract 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->move(100);
Syntax for declaring
abstract methods.
Note that Vehicle objects cannot be
instantiated (but Car objects).
34
Static 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).
35
Important stuff to remember
Overriding methods
Polymorphic pointers
Static binding
Dynamic binding - the virtual keyword
Abstract methods
36