Algoritmiek

advertisement
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

Packages: bibliotheken van klassen



Geleverd bij programmeertaal
Geleverd door programmeurs
Hergebruik van bestaande klassen in nieuwe
klassen
Hierarchische structuur vervoer
wegvervoer
goederenvervoer
personenvervoer
vierwielers
auto
bus
tweewielers
ambulance
motor
scooter
vrachtwagen containerwagen
fiets
tractor
Hierarchie van personen
Hierarchie van klassen in Java
superclass
Class data fields &
methods
subclasses
“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
polygon
triangle
ellipse
rectangle
square
circle
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
Object
NewEmployee
SalaryEmployee
HourlyEmployee
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()
SalaryEmployee(Subclass
of NewEmployee)
name, etc.
hours, rate
setName(), etc.
setHours(), setRate(),
getHours(), getRate(),
calcWeeklyPay(), toString()
HourlyEmployee (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
obj
Object obj;
NewEmployee anEmp =
new NewEmployee(“Sam”, “1111”)
null
anEmp
Sam
1111
…
…
…
Assignment in een class hierarchie:
HourlyEmployee object
HourlyEmployee hourEmp =
hourEmp
new HourlyEmployee(“Sally”, “2222”)
Sally
2222
…
…
…
hours
rate
Assignment in een class hierarchie:
SalaryEmployee object
SalaryEmployee salEmp =
new SalaryEmployee(“Tony”, “2345”)
salEmp
Tony
2345
…
…
…
annualSalary
Assignments in een class hierarchie:
superclass type en subclass type
Object type
NewEmployee
type
obj
null
anEmp
Sam
1111
…
…
…
Assignment in een class hierarchie:
toekenning van NewEmployee type aan
Object type
obj
obj = anEmp;
anEmp
System.out.println
(obj.toString());
Sam
1111
…
name:Sam, social security:1111, job: ,
address: , phone: , age:0, year
started:0, total pay:$0.0
…
…
Assignment in een class hierarchie:
toekenning van HourlyEmployee type aan
type
anEmp
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
hourEmp
Sally
2222
…
…
…
hours
rate
Assignments in een class hierarchie:


Toekenning van type aan hoger type is
toegstaan: assignment “up the tree”:
YES
anEmp
Toekenning van type aan lager type is
niet toegestaan: assignment “down the
tree”: NO
Sam
1111
…
NO
…
hourEmp = anEmp;//incompatible types
…
salEmp = anEmp;//incompatible types
hourEmp
salEmp
NO
“Casting down” in een class hierarchy
anEmp
hourEmp = anEmp; //incompatible
types
hourEmp
Sally
2222
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
…
hours
rate
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;
}
}
Download