1
Object-Oriented Software
Development
2
Chapter 14 Topics
Structured Programming vs,Object-Oriented
Programming
Using Inheritance to Create a New C++ class
Type
Using Composition (Containment) to Create a
New C++ class Type
Static vs,Dynamic Binding of Operations to
Objects
Virtual Member Functions
Object-Oriented Design
Implementing the Design
3
Structured Programming vs,
Object-Oriented programming
Structured(procedural)programming:the
construction of programs that are collections
of interacting functions or procedures.
Object-oriented programming(OOP):the use
of abstraction,inheritance,and dynamic
binding to construct programs that are
collections of interacting objects,
4
Two Programming Paradigms
Structural (Procedural) Object-Oriented
PROGRAM PROGRAM(OOP)
FUNCTION
FUNCTION
FUNCTION
OBJECT
Operations
Data
OBJECT
Operations
Data
OBJECT
Operations
Data
5
Object-Oriented Programming
Language Features
1,Data abstraction
2,Inheritance of properties
3,Dynamic binding of operations to objects
6
OOP Terms C++ Equivalents
Object Class object or class instance
Instance variable Private data member
Method Public member function
Message passing Function call ( to a public
member function )
Objects
7
What is an object?
OBJECT
Operations
Data
set of methods
(public member functions)
internal state
(values of private data members)
8
Relationship Between Two
Classes
In C++,we define the properties and
behavior of objects by using the class
mechanism.
The three most common relationships
between two classes are as follows:
1,Two classes are independent of each other
and have nothing in common.
2,Two classes are related by inheritance.
3,Two classes are related by composition.
9
Inheritance Hierarchy Among
Vehicles
vehicle
wheeled vehicle boat
bicyclecar
four-doortwo-door
Every car is a wheeled vehicle.
10
Inheritance
is a mechanism by which one class acquires
(inherits) the properties (both data and operations)
of another class
the class being inherited from is the Base Class
(Superclass)
the class that inherits is the Derived Class
(Subclass)
the derived class is then specialized by adding
properties specific to it
11
class Time Specification
// SPECIFICATION FILE ( time.h )
class Time
{
public,
void Set ( int hours,int minutes,int seconds ) ;
void Increment ( ) ;
void Write ( ) const ;
Time ( int initHrs,int initMins,int initSecs ) ; // constructor
Time ( ) ; // default constructor
private,
int hrs ;
int mins ;
int secs ;
} ;
Deriving One Class from Another
12
Class Interface Diagram
Private data:
hrs
mins
secs
Set
Increment
Write
Time
Time
Time class
13
Using Inheritance to Add
Features
// SPECIFICATION FILE ( exttime.h)
#include,time.h”
enum ZoneType {EST,CST,MST,PST,EDT,CDT,MDT,PDT } ;
class ExtTime,public Time // Time is the base class
{
public,
void Set ( int hours,int minutes,int seconds,
ZoneType timeZone ) ;
void Write ( ) const ;
ExtTime ( int initHrs,int initMins,int initSecs,
ZoneType initZone ) ; // constructor
ExtTime ( ) ; // default constructor
private,
ZoneType zone ; // added data member
} ;
14
class ExtTime,public Time
says class Time is a public base class of the
derived class ExtTime
as a result,all public members of Time (except
constructors) are also public members of ExtTime
in this example,new constructors are provided,
new data member zone is added,and member
functions Set and Write are overridden
15
Class Interface Diagram
Private data:
hrs
mins
secs
ExtTime class
Set
Increment
Write
Time
Time
Set
Increment
Write
ExtTime
ExtTime
Private data:
zone
16
Client Code Using ExtTime
#include,exttime.h”
.
.
.
ExtTime thisTime ( 8,35,0,PST ) ;
ExtTime thatTime ; // default constructor called
thatTime.Write( ) ; // outputs 00:00:00 EST
cout << endl ;
thatTime.Set (16,49,23,CDT) ;
thatTime.Write( ) ; // outputs 16:49:23 CDT
cout << endl ;
thisTime.Increment ( ) ;
thisTime.Increment ( ) ;
thisTime.Write ( ) ; // outputs 08:35:02 PST
cout << endl ;
17
Constructor Rules for Derived Classes
at run time,the base class constructor is
implicitly called first,before the body of the
derived class?s constructor executes
if the base class constructor requires
parameters,they must be passed by the
derived class?s constructor
18
Implementation of ExtTime
Default Constructor
ExtTime,,ExtTime ( )
// Default Constructor
// Postcondition,
// hrs == 0 && mins == 0 && secs == 0
// (via an implicit call to base class default constructor )
// && zone == EST
{
zone = EST ;
}
19
Implementation of Another
ExtTime Class Constructor
ExtTime,,ExtTime ( /* in */ int initHrs,
/* in */ int initMins,
/* in */ int initSecs,
/* in */ ZoneType initZone )
,Time (initHrs,initMins,initSecs) // constructor initializer
// Precondition,0 <= initHrs <= 23 && 0 <= initMins <= 59
// 0 <= initSecs <= 59 && initZone is assigned
// Postcondition:
// zone == initZone && Time set by base class constructor
{
zone = initZone ;
}
20
Implementation of
ExtTime::Set function
void ExtTime,,Set ( /* in */ int hours,
/* in */ int minutes,
/* in */ int seconds,
/* in */ ZoneType time Zone )
// Precondition,0 <= hours <= 23 && 0 <= minutes <= 59
// 0 <= seconds <= 59 && timeZone is assigned
// Postcondition:
// zone == timeZone && Time set by base class function
{
Time,,Set (hours,minutes,seconds);
zone = timeZone ;
}
21
Implementation of
ExtTime::Write Function
void ExtTime,,Write ( ) const
// Postcondition:
// Time has been output in form HH:MM:SS ZZZ
// where ZZZ is the time zone abbreviation
{
static string zoneString[8] =
{
“EST”,CST”,MST”,“PST”,“EDT”,“CDT”,“MDT”,“PDT”
} ;
Time,,Write ( ) ;
cout << << zoneString [zone] ;
}
22
often several program files use the same header file
containing typedef statements,constants,or class
type declarations--but,it is a compile-time error to
define the same identifier twice
this preprocessor directive syntax is used to avoid
the compilation error that would otherwise occur from
multiple uses of #include for the same header file
#ifndef Preprocessor_Identifier
#define Preprocessor_Identifier
.
.
.
#endif
Avoiding Multiple Inclusion of
Header Files
23
Composition (or Containment)
is a mechanism by which the internal
data (the state) of one class includes
an object of another class
24
A TimeCard object has a Time object
#include,time.h”
class TimeCard
{
public:
void Punch ( /* in */ int hours,
/* in */ int minutes,
/* in */ int seconds ) ;
void Print ( ) const ;
TimeCard ( /* in */ long idNum,
/* in */ int initHrs,
/* in */ int initMins,
/* in */ int initSecs ) ;
TimeCard ( ) ;
private:
long id ;
Time timeStamp ;
} ;
25
TimeCard Class
TimeCard has a Time object
Private data:
hrs
mins
secs
Punch
Private data:
id
timeStamp
Increment
SetPrint.
.
.
TimeCard
TimeCard
Write
.
.
.
26
Implementation of TimeCard
Class Constructor
TimeCard,,TimeCard ( /* in */ long idNum,
/* in */ int initHrs,
/* in */ int initMins,
/* in */ int initSecs )
,timeStamp (initHrs,initMins,initSecs) // constructor initializer
// Precondition,0 <= initHrs <= 23 && 0 <= initMins <= 59
// 0 <= initSecs <= 59 && initNum is assigned
// Postcondition:
// id == idNum && timeStamp set by its constructor
{
id = idNum ;
}
27
Order in Which Constructors are Executed
Given a class X,
if X is a derived class its base class constructor
is executed first
next,constructors for member objects (if any)
are executed (using their own default
constructors if none is specified)
finally,the body of X?s constructor is executed
28
In C++,,,
When the type of a formal parameter is a
parent class,the argument used can be:
the same type as the formal parameter,
or,
any descendant class type.
29
Static Binding
is the compile-time determination of which
function to call for a particular object based on
the type of the formal parameter
when pass-by-value is used,static binding
occurs
30
Static Binding Is Based on Formal
Parameter Type
void Print ( /* in */ Time someTime )
{
cout <<,Time is,;
someTime.Write ( ) ;
cout << endl ;
}
CLIENT CODE OUTPUT
Time startTime ( 8,30,0 ) ; Time is 08:30:00
ExtTime endTime (10,45,0,CST) ; Time is 10:45:00
Print ( startTime ) ;
Print ( endTime ) ;
31
Virtual Member Function
// SPECIFICATION FILE ( time.h )
class TimeType
{
public,
.,,
virtual void Write ( ) const ; // for dynamic binding
.,,
private,
int hrs ;
int mins ;
int secs ;
} ;
32
Dynamic Binding
is the run-time determination of which function to
call for a particular object of a descendant class
based on the type of the argument
declaring a member function to be virtual
instructs the compiler to generate code that
guarantees dynamic binding
33
Dynamic binding requires
pass-by-reference
void Print ( /* in */ Time & someTime )
{
cout <<,Time is,;
someTime.Write ( ) ;
cout << endl ;
}
CLIENT CODE OUTPUT
Time startTime ( 8,30,0 ) ; Time is 08:30:00
ExtTime endTime (10,45,0,CST) ; Time is 10:45:00 CST
Print ( startTime ) ;
Print ( endTime ) ;
34
Polymorphic Operation
Polmorphic operation,an operation that
has multiple meaning depending on the
type of the object to which it is bound at
run time.
35
Using virtual functions in C++
dynamic binding requires pass-by-reference
when passing a class object to a function
in the declaration for a virtual function,the
word virtual appears only in the base class
if a base class declares a virtual function,it
must implement that function,even if the body
is empty
a derived class is not required to re-implement
a virtual function,If it does not,the base class
version is used
36
Object-Oriented Design
Step 1,Identify the Objects and
Operations
Step 2,Determine the Relationships
Among Objects
Step 3,Design the Driver
37
Implementing the Design
We have to implement the objects and
operations.For each abstract object,we must
Chose a suitable data representation.
Create algorithms for the abstract
operations,
To select a data representation for an object,
the C++ programmer has three options:
1,Use a built-in data types.
2,Use an existing ADT.
3,Create a new ADT.