Inheritance and Polymorphism in C#, Essays (high school) of Computer science

More on Inheritance and Polymorphism in C#

Typology: Essays (high school)

2019/2020

Uploaded on 03/03/2022

unknown user
unknown user šŸ‡¬šŸ‡§

8 documents

1 / 23

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Object Oriented Programming
Inheritance and
Polymorphism in C#
Week 6
Contents
Base classes and derived classes
Example –a BankAccount class
Polymorphism and Object Oriented Programming
Abstract classes
Generic Programming
Polymorphism and OOP
Summary
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17

Partial preview of the text

Download Inheritance and Polymorphism in C# and more Essays (high school) Computer science in PDF only on Docsity!

Object Oriented Programming

Inheritance and

Polymorphism in C#

Week 6

Contents

 Base classes and derived classes

 Example – a BankAccount class

 Polymorphism and Object Oriented Programming

 Abstract classes

 Generic Programming

 Polymorphism and OOP

 Summary

Base classes and derived classes

 Inheritance is a fundamental requirement of

oriented programming

 It allows us to create new classes by refining

existing classes

 Essentially a derived class can inherit data

members of a base class

 The behaviour of the derived class can be

refined by redefining base class member

functions or adding new member function

 A key aspect of this is polymorphism where a

classes behaviour can be adapted at run-time

Base classes and derived classes

 We can think of many examples in real life of how

a (base) class can be refined to a set of (derived)

classes

 For example a Polygon class can be refined to be a

Quadrilateral which can be further refined to be a

Rectangle

 We can think of these classes as following an IS-A

relationship

 A Quadrilateral IS-A Polygon

 A Rectangle IS-A Quadrilateral

public class BankAccount

private int accountNumber;

private string accountHolder;

private int balance;

public BankAccount(int n,string name ,int b)

accountNumber = n;

accountHolder = name;

balance = b;

public int AccountNumber { // accountNumber property}

public string AccountHolder { // accounHolder property}

public int Balance { // balance property}

public void withdraw(int amount)

if (balance>amount)

balance-=amount;

public void deposit(int amount) { balance+=amount;}

Example – a BankAccount class

 We can consider refinements to our Account

class

 CurrentAccount

 Can have an overdraft facility

 No interest paid

 DepositAccount

 Pays interest on any balance

 No overdraft facility

Example – a BankAccount class

 We will create our refined classes using inheritance from

the BankAccount base class

 Classes CurrentAccount and DepositAccount inherit the

basic attributes (private members) of account

 accountNumber

 accountHolder

 balance

 Also, new attributes are added

 overdraftFacility

 interestRate

Example – a BankAccount class

 In order to implement the derived classes, we need to

consider private/public access between base and derived

classes

 public member functions of the base class become

public member functions of the derived class

 private members of the base class cannot be accessed

from the derived class

 Obvious otherwise encapsulation could be easily

broken by inheriting from the base class

 Begs the question, how do we initialise derived class

objects?

Example – a BankAccount class

accountNumber accountHolder balance deposit() withdraw()

overdraftFacility

withdraw()

interestRate

calcInterest()

accountNumber accountHolder balance deposit() withdraw()

CurrentAccount DepositAccount

Example – a BankAccount class

 We can see that in both derived classes we need to access

the balance instance field

 We can do this directly (without using a public method or

property) by making balance a protected member of the

base class

 A protected class member is one that can be accessed by

public member functions of the class as well as public

member functions of any derived class

 Its half way between private and public

 Encapsulation is then broken for classes in the

inheritance hierarchy and thus must be used where

performance issues are critical

Example – a BankAccount class

Class member Can be accessed from

private public member

functions of same class

protected public member

functions of same class

and derived classes

public Anywhere

public class BankAccount

private int accountNumber;

private string accountHolder;

protected int balance;

public BankAccount(int n,string name ,int b)

accountNumber = n;

accountHolder = name;

balance = b;

public int AccountNumber { // accountNumber property}

public string AccountHolder { // accounHolder property}

public int Balance { // balance property}

public void withdraw(int amount)

if (balance>amount)

balance-=amount;

public void deposit(int amount) { balance+=amount;}

Polymorphism and Object

Oriented Programming

 For example in a computer game that simulates

the movement of animals we can send ā€˜move’

commands to different types of animal

 We send the commands via an animal reference

which is the base class for the different animal

types

 But each type behaves differently once it

receives the command

 Such an approach leads to a readily extendable

application

Polymorphism and Object

Oriented Programming

animal Move

Application

Polymorphism and Object

Oriented Programming

 Polymorphism is implemented through

references to objects

 We can assign base class object references

to any derived class object

BankAccount acc1 = new CurrentAccount(12345, "John Smith", 1000, 500);

BankAccount acc2 = new DepositAccount(54321, "Bill Jones", 2000, 5.0);

Polymorphism and Object

Oriented Programming

acc

CurrentAccount

withdraw()

12345 John Smith 1000 deposit() withdraw()

Polymorphism and Object

Oriented Programming

accountNumber accountHolder balance deposit() withdraw()

overdraftFacility

withdraw()

acc

CurrentAccount

Which one

is called?

Polymorphism and Object

Oriented Programming

 Clearly the behaviour of the object to the

ā€˜ withdraw’ message is important

 The derived class behaviour takes into account

the overdraft facility

 We must look at the definitions of the withdraw()

method in the base and derived classes

 The base class withdraw() method is overridden

by the derived class method if the base class

method is declared as virtual and the derived

class method is declared as override

Polymorphism and Object

Oriented Programming

public class CurrentAccount : BankAccount { private int overdraftFacility; public CurrentAccount(n, name, b) {…} public override void withdraw(int amount) { if (balance - amount > - overdraftFacility) balance - = amount; } } public class BankAccount { //…… public virtual void withdraw(int amount) { if (balance - amount > - overdraftFacility) balance - = amount; } }

Polymorphism and Object

Oriented Programming

 Because withdraw() in the derived class is

declared as an override function of the virtual

function in the base class, the correct behaviour is

obtained

public class BankAccountTest { static void Main(string[] args) { BankAccount acc1 = new CurrentAccount(12345, "John Smithā€œ,1000, 500); acc1.withdraw(250); // Calls the CurrentAccount withdraw() method } }

Abstract classes

public class BankAccountTest { static void Main(string[] args) { BankAccount acc1 = new CurrentAccount(12345, "John Smithā€œ,1000, 500); acc1.withdraw(250); // Calls the CurrentAccount withdraw() method BankAccount acc2 = new DepositAccount(54321, ā€œBill Jonesā€œ,2000, 5.0); acc2.withdraw(100); // Calls the BankAccount withdraw() method } }

 If the method called can’t be resolved in the

derived class, it is delegated back to the

default base class method

Abstract classes

 Abstract classes arise when there is no sensible

implementation of the virtual functions in the base

class

 Base class virtual functions are always

overridden by derived class implementations

 In this case, we simply declare the virtual function

as abstract but provide no implementation

 A class containing at least one abstract function

must be declared an abstract class

Abstract classes

 As an example, suppose we wanted to design a

hierarchy of shape classes for a computer graphics

application

 Shape is an abstract concept

 There is no sensible way we can implement

functions to draw a shape or compute the area

of a shape

 It is natural to make such functions abstract

 We can derive concrete classes from shape and

provide implementations in the override

functions

Abstract classes

public abstract class Shape

private int xpos;

private int ypos;

public abstract void draw();

public abstract double area();

public virtual void move(int x, int y)

xpos+=x;

ypos+=y;

Generic programming

 Generic programming refers to performing

operations on different types using a single piece

of code

 Examples include the application of searching

and sorting algorithms to different data types

 In Java, this is done using polymorphism and the

fact that all types are ultimately derived from a

superclass object

 In C++ it is normally done using templates

 C# provides both mechanisms for generic

programming

 We will look at an example of generic

searching using polymorphism

Generic programming

 Suppose we want a generic search algorithm to

search for any kind of object in an array

 Class object provides an Equals() method to test

whether one object is equal to another

 Simply checks if the 2 object references point

to the same area of memory

 Not very useful in practice

 We need to provide an Equals() method in the

class of the object we are searching for

 Polymorphism does the rest!

Generic Programming

 In the following example we are searching

for a BankAccount object in an array

 The search is based on the account

number

 Class SearchAlg provides a linearSearch

method which carries out the search

 We have provided an implementation of

Equals() in class BankAccount which

overrides the Equals() method in object

public class BankAccount { private int accountNumber; private string accountHolder; private int balance; public BankAccount(int n,string name ,int b) {

accountNumber = n;

accountHolder = name;

balance = b; } public int AccountNumber { // accountNumber property} public string AccountHolder { // accounHolder property} public int Balance { // balance property} public void withdraw(int amount) { if (balance>amount) balance-=amount; } public void deposit(int amount) { balance+=amount;} public override bool Equals(object obj) { BankAccount b = (BankAccount) obj; return (accountNumber==b.accountNumber); } }