Algoritmiek
description
Transcript of Algoritmiek
Algoritmiek
Class Hierarchies, Inheritance.
Hoorcollege 12 - Ma. 20 nov. 2006L.M. Bosveld-de Smet
Kerneigenschappen van O-O design
Abstraction: abstractie Encapsulation: inkapseling Inheritance: overerving Polymorphism: veelvormigheid Interface
Hergebruik van code
Packages: bibliotheken van klassen Geleverd bij programmeertaal Geleverd door programmeurs
Hergebruik van bestaande klassen in nieuwe klassen
Hierarchische structuur vervoer
wegvervoer
personenvervoer
goederenvervoer
vierwielers tweewielers
auto bus ambulance
fietsscootermotor
vrachtwagen tractorcontainerwagen
Hierarchie van personen
Hierarchie van klassen in Java
superclass
subclasses
Class data fields & methods
“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
Java’s implementatie
public class Car extends MotorVehicle {
Wheels[] w = new Wheels[4];
…
}
Inheritance: overerving
vader moeder
jij
Class hierarchie en Inheritance
shape
ellipse
circlerectangle
polygon
square
triangle
Inheritance Tree
superclass/ancestor
Subclasses/descendants
parent
children
Terminologie
Inheritance, derivation, extension Single inheritance Multiple inheritance
Superclass: base class Subclass: derived class Parent/Child class Ancestor/Descendant class
Inheritance: impliciete overdracht van data fields en methods van
superclass naar subclass
Nut van class hierarchie (1)
Nut van class hierarchie (2)
Hierarchie van Employee classes
NewEmployee
Object
HourlyEmployeeSalaryEmployee
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)
Sample run class TestEmployeeClasses
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
Assignments in een class hierarchie: Object en
NewEmployee objecten
Object obj;
NewEmployee anEmp =
new NewEmployee(“Sam”, “1111”)Sam
1111
…
…
…
null
anEmp
obj
Assignment in een class hierarchie: HourlyEmployee
object
HourlyEmployee hourEmp =
new HourlyEmployee(“Sally”, “2222”)Sally
2222
…
…
…
hourEmp
hours
rate
Assignment in een class hierarchie: SalaryEmployee
object
SalaryEmployee salEmp =
new SalaryEmployee(“Tony”, “2345”)Tony
2345
…
…
…
salEmp
annualSalary
Assignments in een class hierarchie:
superclass type en subclass type
Sam
1111
…
…
…
null
anEmp
objObject type
NewEmployee type
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
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
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
“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
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.");
instanceof operator
public boolean equals (Object emp) {
if (emp instanceof NewEmployee) {
NewEmployee temEmp = (NewEmployee) emp;
return this.socSecNum.equals
(temEmp.socSecNum);
} else {
return false;
}
}