Algoritmiek

29
Algoritmiek Class Hierarchies, Inheritance. Hoorcollege 12 - Ma. 20 nov. 2006 L.M. Bosveld-de Smet

description

Algoritmiek. Class Hierarchies, Inheritance. Hoorcollege 12 - Ma. 20 nov. 2006 L.M. Bosveld-de Smet. Kerneigenschappen van O-O design. Abstraction: abstractie Encapsulation: inkapseling Inheritance: overerving Polymorphism: veelvormigheid Interface. Hergebruik van code. - PowerPoint PPT Presentation

Transcript of Algoritmiek

Page 1: Algoritmiek

Algoritmiek

Class Hierarchies, Inheritance.

Hoorcollege 12 - Ma. 20 nov. 2006L.M. Bosveld-de Smet

Page 2: Algoritmiek

Kerneigenschappen van O-O design

Abstraction: abstractie Encapsulation: inkapseling Inheritance: overerving Polymorphism: veelvormigheid Interface

Page 3: Algoritmiek

Hergebruik van code

Packages: bibliotheken van klassen Geleverd bij programmeertaal Geleverd door programmeurs

Hergebruik van bestaande klassen in nieuwe klassen

Page 4: Algoritmiek

Hierarchische structuur vervoer

wegvervoer

personenvervoer

goederenvervoer

vierwielers tweewielers

auto bus ambulance

fietsscootermotor

vrachtwagen tractorcontainerwagen

Page 5: Algoritmiek

Hierarchie van personen

Page 6: Algoritmiek

Hierarchie van klassen in Java

superclass

subclasses

Class data fields & methods

Page 7: Algoritmiek

“is een” versus “heeft (een)” verband

Auto Is een vierwieler Is een vervoersmiddel voor personen Is een vervoersmiddel voor de weg

Heeft een motor Heeft een ruitenwisser Heeft wielen

Page 8: Algoritmiek

Java’s implementatie

public class Car extends MotorVehicle {

Wheels[] w = new Wheels[4];

}

Page 9: Algoritmiek

Inheritance: overerving

vader moeder

jij

Page 10: Algoritmiek

Class hierarchie en Inheritance

shape

ellipse

circlerectangle

polygon

square

triangle

Page 11: Algoritmiek

Inheritance Tree

superclass/ancestor

Subclasses/descendants

parent

children

Page 12: Algoritmiek

Terminologie

Inheritance, derivation, extension Single inheritance Multiple inheritance

Superclass: base class Subclass: derived class Parent/Child class Ancestor/Descendant class

Page 13: Algoritmiek

Inheritance: impliciete overdracht van data fields en methods van

superclass naar subclass

Page 14: Algoritmiek

Nut van class hierarchie (1)

Page 15: Algoritmiek

Nut van class hierarchie (2)

Page 16: Algoritmiek

Hierarchie van Employee classes

NewEmployee

Object

HourlyEmployeeSalaryEmployee

Page 17: Algoritmiek

Data fields and Methods

name, socSecNum, jobTitle, address, phoneNumber, age,

startYear, totalPay

setName(), setSocial(), setJob, setAddress(), setPHone(), setAge(), setStartYear(), setTotalPay(), getName(),

getSocial(), getJob, getAddress(), getPhone(), getAge(), getStartYear(),

getTotalPay(), calcYearsService(),

calcYearsToRetire(), equals(), updateTotalPay(), toString()

NewEmployee (Subclass of Object)

name, etc.

annualSalary

setName(), etc.

setSalary(), getSalary(), calcWeeklyPay(), toString()

name, etc.

hours, rate

setName(), etc.

setHours(), setRate(), getHours(), getRate(),

calcWeeklyPay(), toString()

HourlyEmployee (Subclass of NewEmployee)

SalaryEmployee(Subclass of NewEmployee)

Page 18: Algoritmiek

Sample run class TestEmployeeClasses

Page 19: Algoritmiek

Operaties in een class hierarchie

“Method Overloading” “Method Overriding” Zichtbaarheid van afgeschermde data fields

Protected data fields Prefix this Prefix super Assignments in een class hierarchie “Casting” in een class hierarchie Objecten als argumenten doorgeven instanceof operator

Page 20: Algoritmiek

Assignments in een class hierarchie: Object en

NewEmployee objecten

Object obj;

NewEmployee anEmp =

new NewEmployee(“Sam”, “1111”)Sam

1111

null

anEmp

obj

Page 21: Algoritmiek

Assignment in een class hierarchie: HourlyEmployee

object

HourlyEmployee hourEmp =

new HourlyEmployee(“Sally”, “2222”)Sally

2222

hourEmp

hours

rate

Page 22: Algoritmiek

Assignment in een class hierarchie: SalaryEmployee

object

SalaryEmployee salEmp =

new SalaryEmployee(“Tony”, “2345”)Tony

2345

salEmp

annualSalary

Page 23: Algoritmiek

Assignments in een class hierarchie:

superclass type en subclass type

Sam

1111

null

anEmp

objObject type

NewEmployee type

Page 24: Algoritmiek

Assignment in een class hierarchie: toekenning van NewEmployee type

aan Object type

obj = anEmp;

System.out.println

(obj.toString());

name:Sam, social security:1111, job: ,

address: , phone: , age:0, year started:0, total pay:$0.0

Sam

1111

anEmp

obj

Page 25: Algoritmiek

Assignment in een class hierarchie: toekenning van HourlyEmployee

type aan type

anEmp = hourEmp;

System.out.println

(anEmp.toString());

name:Sam, social security:1111, job: ,

address: , phone: , age:0, year started:0,

total pay:$0.0, weekly hours:0.0, hourly rate: $0.0

Sally

2222

hourEmp

hours

rate

anEmp

Page 26: Algoritmiek

Assignments in een class hierarchie:

Toekenning van type aan hoger type is toegstaan: assignment “up the tree”: YES

Toekenning van type aan lager type is niet toegestaan: assignment “down the tree”: NO

hourEmp = anEmp;//incompatible types

salEmp = anEmp;//incompatible types

Sam

1111

anEmp

hourEmp salEmp

NO

NO

Page 27: Algoritmiek

“Casting down” in een class hierarchy

hourEmp = anEmp; //incompatible

types

hourEmp = (HourlyEmployee) anEmp;

“Assignment down the tree” is toegestaan, als het toe te kennen object gecast wordt naar het goede type en naar het overeenkomstige type verwijst

Sally

2222

hourEmp

hours

rate

anEmp

Page 28: Algoritmiek

Objecten aan argumenten doorgeven

// postcondition: returns true if this object// has the same security number as the argument.public boolean equals (NewEmployee emp) { return this.socSecNum.equals(emp.socSecNum);}

if (clerk.equals (supervisor)) System.out.println (clerk.getName() + " and " + supervisor.getName() + " are same eployee."); else System.out.println (clerk.getName() + " and " + supervisor.getName() + " are different

employees.");

Page 29: Algoritmiek

instanceof operator

public boolean equals (Object emp) {

if (emp instanceof NewEmployee) {

NewEmployee temEmp = (NewEmployee) emp;

return this.socSecNum.equals

(temEmp.socSecNum);

} else {

return false;

}

}