290 likes | 458 Views
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.
E N D
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 tweewielers vrachtwagen containerwagen tractor auto bus ambulance motor scooter fiets
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 ellipse triangle rectangle circle square
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
Hierarchie van Employee classes Object NewEmployee SalaryEmployee HourlyEmployee
Data fields and Methods name, socSecNum, jobTitle, address, phoneNumber, age, startYear, totalPay name, etc. annualSalary setName(), etc. setSalary(), getSalary(), calcWeeklyPay(), toString() setName(), setSocial(), setJob, setAddress(), setPHone(), setAge(), setStartYear(), setTotalPay(), getName(), getSocial(), getJob, getAddress(), getPhone(), getAge(), getStartYear(), getTotalPay(), calcYearsService(), calcYearsToRetire(), equals(), updateTotalPay(), toString() SalaryEmployee(Subclass of NewEmployee) name, etc. hours, rate setName(), etc. setHours(), setRate(), getHours(), getRate(), calcWeeklyPay(), toString() NewEmployee (Subclass of Object) HourlyEmployee (Subclass of NewEmployee)
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 • instanceofoperator
Assignments in een class hierarchie: Object en NewEmployee objecten Object obj; NewEmployee anEmp = new NewEmployee(“Sam”, “1111”) obj null anEmp Sam 1111 … … …
Assignment in een class hierarchie: HourlyEmployee object HourlyEmployee hourEmp = new HourlyEmployee(“Sally”, “2222”) hourEmp 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 obj Object type null anEmp NewEmployee type Sam 1111 … … …
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 obj anEmp Sam 1111 … … …
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 anEmp hourEmp Sally 2222 … … … hours rate
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 anEmp Sam 1111 NO … … … hourEmp salEmp 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 anEmp hourEmp Sally 2222 … … … 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.");
instanceofoperator public boolean equals (Object emp) { if (emp instanceof NewEmployee) { NewEmployee temEmp = (NewEmployee) emp; return this.socSecNum.equals (temEmp.socSecNum); } else { return false; } }