0% found this document useful (0 votes)
17 views26 pages

05 - Inheritance

The document discusses inheritance in object-oriented programming, specifically focusing on the relationship between classes such as Employee and Programmer. It covers the definition of subclasses in C++ and Java, access control for class members, and the concept of polymorphism. Additionally, it introduces abstract classes and their role in establishing a common interface for derived classes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views26 pages

05 - Inheritance

The document discusses inheritance in object-oriented programming, specifically focusing on the relationship between classes such as Employee and Programmer. It covers the definition of subclasses in C++ and Java, access control for class members, and the concept of polymorphism. Additionally, it introduces abstract classes and their role in establishing a common interface for derived classes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 26

05 – Inheritance

OBJECT-ORIENTED PROGRAMMING

1
Specialization

 relationship that may also exist between classes


 association, aggregation, and composition
 specialization

2
The initial Programmer Class

3
Employee Class
 All of the software house employees, not just
programmers, are given a payroll number, a name
and a salary
 The only attribute special to a Programmer is
theLanguage
 A Programmer as a special kind of Employee
 Employee:
 Parent, super, base class
 Programmer:
 Child, sub, derived class

4
The Employee, Programmer Class

5
Defining A Subclass In C++
class Employee {
int thePayrollNumber;
int theMonthlySalary;
string theName;
public:
Employee(int aPayrollNumber, int aMonthlySalary, string aName) {
//... }
int getMonthlySalary() { //... }
void display() { //... }
}

class Programmer: public Employee{


string theLanguage;
public:
Programmer(int aPayrollNumber, int aMonthlySalary, string aName,
string aLanguage) : Employee(aPayrollNumber, aMonthlySalary,
aName) { //... }
int setLanguage(string aLanguage) { //... }
}
6
Defining a Subclass In Java
class Employee {
private int thePayrollNumber;
private int theMonthlySalary;
private String theName;
public Employee(int aPayrollNumber, int aMonthlySalary, String
aName) { //... }
public int getMonthlySalary() { //... }
public void display() { //... }
}

class Programmer extends Employee{


private String theLanguage;
public Programmer(int aPayrollNumber, int aMonthlySalary, String
aName, String aLanguage) {
super(aPayrollNumber, aMonthlySalary, aName);
//... }
public int setLanguage(String aLanguage) { //... }
}
7
Access Control For Class Members

 To prevent direct alteration of a data member or


direct invocation of a member function
 Every member of a class has associated with it an
access control property
 In C++, a member can be private, protected,
or public
 In addition, Java also allows for the access
control property of a member to be package

8
Access Control In C++
 All members of a C++ class are private unless
declared explicitly to be otherwise
 The public members of a class:
 accessible to all other classes and functions
 inherited by its subclasses
 The private members of a class:
 accessible only to the definitions that are meant
specifically for that class – friend functions
 cannot be accessed within the subclasses
 The protected members of a class:
 accessible to only the subclasses

9
Access Control In Java

 The modifiers public and private carry the


same meaning as in C++.
 The modifier protected also carries the same
meaning, except that such members are like
public members in the same package
 When no access modifier is specified in Java, that
means the member has access control of type
package

10
Inherited Methods
 Methods and attributes declared in a superclass are
inherited by a subclass
 Need only declare those methods and attributes special to
the subclass
 Programmer: the attribute theLanguage and the
method setLanguage()
 Example:
programmer.getMonthlySalary();
programmer.setLanguage(“Java”);
employee.setLanguage(“Java”); // illegal

11
Redefined Methods

 Any private attributes in a superclass cannot


be accessed in a subclass method
 themethod body for display in the Employee class
cannot be modified by the Programmer class
 A method inherited by a subclass can be
redefined to have a different behavior
 make use of the display method in the Employee
class

12
Redefined Methods in C++
// class Employee
void display() {
cout << "Payroll Number:\t" << thePayrollNumber << "\n";
cout << "Monthly Salary:\t" << theMonthlySalary << "\n";
cout << "First Name:\t" << theName << "\n";
}

// class Programmer
void display() {
Employee::display();
cout << "The Language:\t" << theLanguage << "\n";
}

13
Redefined Methods in Java
// class Employee
void display() {
System.out.println("Payroll Number:\t" +thePayrollNumber);
System.out.println("Monthly Salary:\t" +theMonthlySalary);
System.out.println("First Name:\t" + theName);
}

// class Programmer
void display() {
super.display();
System.out.println("The Language:\t" + theLanguage);
}

14
Polymorphism
 A message sent to an object of some class is received as
normal.
 However the same message may also be received by an
object of a descendant class.

15
The displayStaff Method
// pseudo code of class SoftwareHouse
void displayStaff() {
for each programmer in theProgrammers
{
programmer.display();
}
for each projectLeader in theProjectLeaders
{
projectLeader.display();
}
}

16
The Polymorphic Effect
 Code duplication is almost certainly unnecessary
 A child class must have at least the same set of
methods as its parent
 An object of a child class can be used in place of an
object of a parent class
 a ProjectLeader object can substitute for a
Programmer object
 Late bingding: the binding of a message to a
corresponding method when the software is actually
running

17
An Improved Class Diagram Using Polymorphism
 A message sent from a SoftwareHouse object through a
reference/pointer to a Programmer object, can now be received by a
Programmer object or a ProjectLeader object

18
The Simplified displayStaff Method
 There is no longer any need to have an explicit relationship
between the SoftwareHouse and its ProjectLeaders
 The message display sent through a Programmer
reference/pointer may be received by a Programmer or a
ProjectLeader object
// pseudo code of class SoftwareHouse
void displayStaff() {
for each programmer in theStaff
{
programmer.display();
}
}

19
Example – 1 (pseudo code)
// main() method
Create a new organisation.
SoftwareHouse sh(“Objects-R-Us”);

// Create some new programmers.


Programmer p1(123, 2000, “John”, “Ada”) ;
Programmer p2(234, 2500, “Ken”, “C++”);
Programmer p3(456, 3000, “Peter”, “Java”) ;

// Create some new project leaders.


ProjectLeader pl1(567, 4000, “Jon”, “C”) ;
ProjectLeader pl2(789, 4000, “Jessie”, “Java”);

20
Example – 2
// main() method (cont.)
// Assign each programmer to a project leader
pl1.addProgrammer(p3);
pl1.addProgrammer(p2);
pl2.addProgrammer(p1);

// Hire each programmer and project leader


sh.addProgrammer(p1);
sh.addProgrammer(p2);
sh.addProgrammer(p3);
sh.addProgrammer(pl1);
sh.addProgrammer(pl2);

// Display some details of the staff.


sh.displayStaff();
21
The Collaboration Diagram For The Operation Displaystaff

22
The Abstract Class
 A class that acts as a basis for establishing others
 No intention to make an instance of it
 All descendants share a common set of operations
on their public interface
 Example:
 there will never be an instance of an Employee as we
have Programmers or ProjectLeaders
 Abstract class Employee: share common operations
such as getPayrollNumber, getMonthlySalary, and
display

23
A Modified Class Diagram Using An Abstract Class

24
Changes In Code
// class SoftwareHouse
void addEmployee(Employee anEmployee) {
add anEmployee to theStaff
}

void displayStaff() {
for each employee in theStaff
{
employee.display();
}
}

25
A Modified Class Diagram
 introduce other kinds of Employees to the
software house

26

You might also like