44
1 Object Oriented Programming Development - Multi File Development By: Marc Conrad & Rob Manton University of Luton Email: [email protected] [email protected] Room: D104

1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: [email protected]

Embed Size (px)

Citation preview

Page 1: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

1

Object Oriented ProgrammingDevelopment - Multi File Development

By: Marc Conrad & Rob MantonUniversity of Luton

Email: [email protected] [email protected] Room: D104

Page 2: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

2

Module Outline

IntroductionNon object

oriented basicsClasses

InheritanceAggregationPolymorphismMultifile

Development

Page 3: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

3

Today’s 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

Page 4: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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!

Page 5: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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

Page 6: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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->move(100);

Valid C++ syntax!

Page 7: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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->move(100);

BUT: Which of

these two move() methods will be called?

Page 8: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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->move(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.

Page 9: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

9

Page 10: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

10

As vp is of type pointer to a Vehicle, the method of the Vehicle is called.

Page 11: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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->move(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

Page 12: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

12

Page 13: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

13

Dynamic Binding:As vp points to a Car object the

method of the Car is called

Page 14: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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->move(100);

Syntax for declaring abstract methods.

Note that Vehicle objects cannot be instantiated (but Car objects can).

Page 15: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

15

Syntax for declaring abstract methods.

We are not allowed to declare an object of an abstract type...

Page 16: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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).

Page 17: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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;pAnimal=new sheep();pAnimal=new crocodile(); Animal

mammal reptile

human sheep crocodile

Page 18: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

18

Why is dynamic binding useful?

Any method declared in the base class..

Animal

mammal reptile

human sheep crocodile

MakeNoise()

Page 19: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

19

MakeNoise()

Why is dynamic binding useful?

Any method declared in the base class... ..can be overridden by any derived class Anim

al

mammal reptile

human

sheep crocodile

MakeNoise()

MakeNoise() MakeNoise() MakeNoise()

MakeNoise()

Page 20: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

20

MakeNoise()

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;pAnimal=new sheep();pAnimal->MakeNoise();

Animal

mammal reptile

human

sheep crocodile

MakeNoise()

MakeNoise() MakeNoise() MakeNoise()

MakeNoise()

Page 21: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

21

MakeNoise()

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;pAnimal=new sheep();pAnimal->MakeNoise();

Animal

mammal reptile

human

sheep crocodile

virtual MakeNoise()

MakeNoise() MakeNoise() MakeNoise()

MakeNoise()

Page 22: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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

Page 23: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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.

CharacterUpdate()

Draw()

Page 24: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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

Page 25: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

25

Practical example

We don’t 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 * characters[50];

Page 26: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

26

Practical example

At run time we can allocate dynamically created objects of any of the classes in the hierarchy to the pointers

eg characters[1]=new Alien();characters[2]=new Spider();characters[3]=new OldMan();

Page 27: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

27

Practical example

Because they are all derived from a standard base class we can call the same methods of each derived character

for (i=0;i<50;i++){if (Characters[i]!=NULL)

{Character[i]->Update();Character[i]->Draw();}

}

Page 28: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

28

Practical example

Polymorphism in actiona 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 can’t be predicted at compile time..

Page 29: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

29

Important stuff to remember

Overriding methodsPolymorphic pointersStatic bindingDynamic binding - the virtual

keywordAbstract methods

Page 30: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

30

Referring to classes not yet defined

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?

Page 31: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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

Page 32: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

32

Referring to classes not yet defined

Person object not defined yet so

we get an error message

Page 33: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

33

Referring to classes not yet defined

Solution is to provide a ‘forward declaration’ of the class which is being used but hasn’t 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

hasn’t been declared yet

Page 34: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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!

Page 35: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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

Page 36: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

36

.H and .CPP filesName of class

Optional base class

Insert/New Class

Page 37: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

37

.H and .CPP files

.h and .cpp files

now appear in project

Skeleton for class definition

Skeleton for class implementation

Page 38: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

38

.H and .CPP files

If we refer to a class defined in

separate file we get an error

Page 39: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

39

.H and .CPP files

Need to #include the .h

header file then all is OK!

Page 40: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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.

Page 41: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

41

Using libraries

Don’t 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

Page 42: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

42

Using libraries

How do you make a library file?

Static library is

an option in the usual

File/New Dialog

Page 43: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

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/Directories

One list of folders relates

to include files (.h)

another to library (.lib) files

Page 44: 1 Object Oriented Programming Development - Multi File Development z By: Marc Conrad & Rob Manton University of Luton z Email: Marc.Conrad@luton.ac.uk

44

That’s all for today

First session after Christmas will be revision for the exam

See you then and have a good one..