cs313d: advanced programming language · protected members dr. amal khalifa,spr17 to enable a...

28
CS313D: ADVANCED PROGRAMMING LANGUAGE Lecture 5: Inheritance & Polymorphism Computer Science department

Upload: vunhu

Post on 19-Jul-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

CS313D: ADVANCED

PROGRAMMING LANGUAGE

Lecture 5: Inheritance & Polymorphism Computer Science

department

Page 2: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Lecture Contents

Dr. Amal Khalifa,Spr17

What is Inheritance?

Super-class & sub class

Protected members

Creating subclasses

Polymorphism

2

Page 3: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

OOP

Dr. Amal Khalifa,Spr17 3

Page 4: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

OOP - Inheritance

A class can extend another class, inheriting all its data

members and methods while redefining some of them

and/or adding its own.

Dr. Amal Khalifa,Spr17

4

Page 5: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

OOP - Inheritance

Inheritance represents the is a relationship between

data types (e.g. student/person)

Existing class is the superclass (more general)

New class is the subclass (more specific)

C# supports only single inheritance

each class is derived from exactly one direct

superclass.

Possible to Create hierarchy of classes

Dr. Amal Khalifa,Spr17

5

Page 6: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Superclasses and Subclasses

Dr. Amal Khalifa,Spr17

Superclasses

“more

general”

subclasses

“more

specific.”

every subclass

object is an

object of its

superclass

6

Page 7: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Protected Members

Dr. Amal Khalifa,Spr17

To enable a subclass to directly access superclass instance

variables, we can declare those members as protected in

the superclass.

an intermediate level of access between public and private.

can be accessed by members of that superclass, by members of its

subclasses.

All public and protected superclass members retain their

original access modifier when they become members of the

subclass.

Not recommended to enforce information hiding

7

Page 8: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Example: CommissionEmployee Class

Inheritance hierarchy containing types of

employees in a company’s payroll application

Commission employees are paid a percentage of their

sales

Dr. Amal Khalifa,Spr17

8

Page 9: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

The code

A colon (:)

indicates

inheritance

Every C#

class directly

or indirectly

inherits

object’s

methods.

Dr. Amal Khalifa,Spr17

9

Page 10: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Dr. Amal Khalifa,Spr17 10

Page 11: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Dr. Amal Khalifa,Spr17 11

Page 12: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

virtual !!

A virtual

method is

ready to be

overridden in

the subclasses

Dr. Amal Khalifa,Spr17

12

Page 13: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Override!!

Dr. Amal Khalifa,Spr17

To override a

base-class

method, a

derived class

must declare a

method with

keyword

override.

the same

signature

13

Page 14: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Creating a new class!!

Base-salaried commission employees receive a base

salary plus a percentage of their sales.

Class BasePlusCommissionEmployee:

Data: first name, last name, social security number, gross

sales amount, commission rate and base salary.

(( All but the base salary are in common with class

CommissionEmployee)).

services: a constructor, and methods earnings,

toString and get and set for each instance variable

((Most are in common with class CommissionEmployee ))

Dr. Amal Khalifa,Spr17

14

Page 15: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Creating a new class

copy CommissionEmployee code, pasted it into BasePlusCommissionEmployee

modify the new class to include a base salary and methods that manipulate the base salary.

error prone

time consuming.

Too many copies of the same code bad maintenance

Extend an existing class and

add only the needed

data/functionality

Reusability Don’t reinvent

the wheel!!

Copy & paste Inheritance

Dr. Amal Khalifa,Spr17

15

Page 16: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

The new class

Constructors

are not

inherited : The

derived-class

constructor,

before

performing its

own tasks,

invokes its

direct base

class’s

constructor

Dr. Amal Khalifa,Spr17

16

Page 17: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Dr. Amal Khalifa,Spr17 17

Page 18: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Dr. Amal Khalifa,Spr17 18

Page 19: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Tip !!

Dr. Amal Khalifa,Spr17

19

Page 20: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Test

Dr. Amal Khalifa,Spr17

20

Page 21: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Dr. Amal Khalifa,Spr17 21

Page 22: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Polymorphism

Dr. Amal Khalifa,Spr17

a superclass reference at a subclass object. (crossover)

Allowed because each subclass object is an object of its superclass.

The type of the referenced object, not the type of the variable, determines which method is called.

Invoking a method on a subclass object via a superclass reference invokes the subclass functionality

22

Page 23: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Example

Same base

references ,

different

objects

Dr. Amal Khalifa,Spr17

23

Page 24: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Example

When the

compiler

encounters a

virtual method

call made

through a

variable, the

compiler checks

the variable’s

class type to

determines if the

method can be

called.

Dr. Amal Khalifa,Spr17

24

Page 25: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Dr. Amal Khalifa,Spr17 25

Page 26: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Chapter 11

Chapter 12 : 12.3

Dr. Amal Khalifa,Spr17

26

Page 27: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

Case Study 27

Dr. Amal Khalifa,Spr17

Page 28: CS313D: ADVANCED PROGRAMMING LANGUAGE · Protected Members Dr. Amal Khalifa,Spr17 To enable a subclass to directly access superclass instance variables, we can declare those members

28 Dr. Amal Khalifa,Spr17