Object Oriented Programming Development - Multi File Development - PowerPoint PPT Presentation

About This Presentation
Title:

Object Oriented Programming Development - Multi File Development

Description:

reptile. human. sheep. crocodile. 18. Why is dynamic binding useful? ... reptile. human. sheep. crocodile. virtual MakeNoise() MakeNoise() MakeNoise() MakeNoise ... – PowerPoint PPT presentation

Number of Views:55
Avg rating:3.0/5.0
Slides: 45
Provided by: std73
Category:

less

Transcript and Presenter's Notes

Title: Object Oriented Programming Development - Multi File Development


1
Object Oriented ProgrammingDevelopment - Multi
File Development
  • By
  • Marc Conrad Rob Manton
  • University of Luton
  • Email
  • Marc.Conrad_at_luton.ac.uk
  • Rob.Manton_at_luton.ac.uk
  • Room
  • D104

2
Module Outline
  • Inheritance
  • Aggregation
  • Polymorphism
  • Multifile Development
  • Introduction
  • Non object oriented basics
  • Classes

3
Todays lecture
  • Polymorphism II recap
  • Polymorphic Pointers
  • Overriding Methods
  • Static typing Dynamic binding
  • Multi File Development
  • Referring to classes not yet defined
  • .H and .CPP files
  • Libraries

4
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()
  • Valid C syntax!

5
Overriding Methods
  • Three ways for a derived class to implement a
    polymorphic method
  • Inherit it unchanged
  • Replace with a different implementation
  • Add to the existing implementation

6
Overriding Methods
  • Methods in the parent class can be redefined 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)
  • Valid C syntax!

7
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-gtmove(100)
  • BUT
  • Which of these two move() methods will be called?

8
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-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.
9
(No Transcript)
10
As vp is of type pointer to a Vehicle, the method
of the Vehicle is called.
11
Overriding Methods - The keyword virtual
  • Methods in the parent class can be redefined 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
12
(No Transcript)
13
Dynamic Binding As vp points to a Car object
the method of the Car is called
14
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-gtmove(100)
  • Syntax for declaring abstract methods.

Note that Vehicle objects cannot be instantiated
(but Car objects can).
15
Syntax for declaring abstract methods.
We are not allowed to declare an object of an
abstract type...
16
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).

17
Why is dynamic binding useful?
  • If we have a variety of classes based on the same
    base class then each type can be pointed to by a
    pointer to the base class
  • animal pAnimal
  • pAnimalnew sheep()
  • pAnimalnew crocodile()

Animal
mammal
reptile
human
sheep
crocodile
18
Why is dynamic binding useful?
  • Any method declared in the base class..

Animal
MakeNoise()
mammal
reptile
human
sheep
crocodile
19
Why is dynamic binding useful?
  • Any method declared in the base class... ..can be
    overridden by any derived class

Animal
MakeNoise()
mammal
reptile
MakeNoise()
MakeNoise()
human
sheep
crocodile
MakeNoise()
MakeNoise()
MakeNoise()
20
Why is dynamic binding useful?
  • With static binding, the version of the method
    that gets called is the one defined in the base
    class (not so useful!)
  • animal pAnimal
  • pAnimalnew sheep()
  • pAnimal-gtMakeNoise()

Animal
MakeNoise()
mammal
reptile
MakeNoise()
MakeNoise()
human
sheep
crocodile
MakeNoise()
MakeNoise()
MakeNoise()
21
Why is dynamic binding useful?
  • With dynamic binding, the version of the method
    that gets called is the one defined in the class
    of the object that the pointer points to
  • animal pAnimal
  • pAnimalnew sheep()
  • pAnimal-gtMakeNoise()

Animal
virtual MakeNoise()
mammal
reptile
MakeNoise()
MakeNoise()
human
sheep
crocodile
MakeNoise()
MakeNoise()
MakeNoise()
22
Why is dynamic binding useful?
  • At compile time we can create a pointer to the
    base class and call a method defined in the base
    class. This should compile properly.
  • At run time we can make that pointer point to an
    object of any class in the same inheritance
    hierarchy and the correct version of the method
    gets called.
  • Very useful for handling situations where the
    number or composition or lifespan of objects
    cannot be predicted at compile time

23
Practical example
  • In a computer game we might have an inheritance
    hierarchy containing many different characters
    (old man, woman, alien, spider, goblin, martial
    arts expert etc etc) all derived from a base
    character class.

Character
Update() Draw()
24
Practical example
Character
Human
Animal
Old man
Martial arts expert
Alien
spider
Each derived class can override the base class
methods and provide its own update() and draw()
methods
25
Practical example
  • We dont need to know at compile time how many of
    each type of character will exist at any time
    during the game
  • We can have an array of pointers or a linked list
    or other container object to store a variable
    number of character objects
  • Character characters50

26
Practical example
  • At run time we can allocate dynamically created
    objects of any of the classes in the hierarchy to
    the pointers
  • eg characters1new Alien()
  • characters2new Spider()
  • characters3new OldMan()

27
Practical example
  • Because they are all derived from a standard base
    class we can call the same methods of each
    derived character
  • for (i0ilt50i)
  • if (Charactersi!NULL)
  • Characteri-gtUpdate()
  • Characteri-gtDraw()

28
Practical example
  • Polymorphism in action
  • a single method name being called from different
    types of object (old man, spider, martial arts
    expert, alien etc)
  • Caters well with situations where number or
    composition or life time of objects cant be
    predicted at compile time..

29
Important stuff to remember
  • Overriding methods
  • Polymorphic pointers
  • Static binding
  • Dynamic binding - the virtual keyword
  • Abstract methods

30
Referring to classes not yet defined
  1. If a class contains or references another class
    (aggregation or association) then the compiler
    needs the enclosed class to be defined first -
    what happens if we have a circular relationship?

31
Referring to classes not yet defined
  • what happens if we have a circular relationship -
    which class goes first?
  • class Car
  • private
  • Person myDriver
  • class Person
  • private
  • Car myCar

Car has a pointer to person and person has a
pointer to car
32
Referring to classes not yet defined
Person object not defined yet so we get an error
message
33
Referring to classes not yet defined
  • Solution is to provide a forward declaration of
    the class which is being used but hasnt been
    declared yet
  • class Person
  • class Car
  • private
  • Person myDriver
  • class Person
  • private
  • Car myCar

Forward declaration of Person class means that
compiler lets you refer to Person class even
though Person class hasnt been declared yet
34
Referring to classes not yet defined
Car has a pointer to person and person has a
pointer to car forward declaration makes
this legal!
35
.H and .CPP files
  • On larger projects class definitions and
    implementations are usually split up
  • definitions go into a .H file
  • implementations into a .CPP file
  • can do this automatically in the compiler with
    Insert/New Class

36
.H and .CPP files
Name of class
Insert/New Class
Optional base class
37
.H and .CPP files
.h and .cpp files now appear in project
Skeleton for class implementation
Skeleton for class definition
38
.H and .CPP files
If we refer to a class defined in separate file
we get an error
39
.H and .CPP files
Need to include the .h header file then all is
OK!
40
Using libraries
  • Rapid application development - using existing
    modules or libraries rather than writing your own
  • Ready made libraries like DirectX, OpenGL,
    Renderware etc comprise of a set of Header files
    (.H) and a set of library files (.LIB)
  • A static library (.LIB) is a file containing
    objects that is linked into your program when the
    executable file is built.

41
Using libraries
  • Dont need to recompile the library files each
    time - saves time
  • Preserves security of source code (commercial
    reasons)
  • User only needs to know about the interface to
    the classes which is defined in the header file
  • follows C notion of separation of interface
    from implementation

42
Using libraries
  • How do you make a library file?

Static library is an option in the usual File/New
Dialog
43
Using libraries
  • How do you use an existing library file?
  • Insert both the .lib file and the.h header file
    into your project using Project/Add to
    project/Files
  • Add the folder that contains the library/header
    files to the list of paths in Tools/Options/Direct
    ories

One list of folders relates to include files
(.h) another to library (.lib) files
44
Thats all for today
  • First session after Christmas will be revision
    for the exam
  • See you then and have a good one..
Write a Comment
User Comments (0)
About PowerShow.com