1 / 29

Algoritmiek

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.

kurt
Télécharger la présentation

Algoritmiek

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Kerneigenschappen van O-O design • Abstraction: abstractie • Encapsulation: inkapseling • Inheritance: overerving • Polymorphism: veelvormigheid • Interface

  3. Hergebruik van code • Packages: bibliotheken van klassen • Geleverd bij programmeertaal • Geleverd door programmeurs • Hergebruik van bestaande klassen in nieuwe klassen

  4. Hierarchische structuur vervoer wegvervoer goederenvervoer personenvervoer vierwielers tweewielers vrachtwagen containerwagen tractor auto bus ambulance motor scooter fiets

  5. Hierarchie van personen

  6. Hierarchie van klassen in Java superclass Class data fields & methods subclasses

  7. “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

  8. Java’s implementatie public class Car extends MotorVehicle { Wheels[] w = new Wheels[4]; … }

  9. Inheritance: overerving vader moeder jij

  10. Class hierarchie en Inheritance shape polygon ellipse triangle rectangle circle square

  11. Inheritance Tree superclass/ancestor Subclasses/descendants parent children

  12. Terminologie • Inheritance, derivation, extension • Single inheritance • Multiple inheritance • Superclass: base class • Subclass: derived class • Parent/Child class • Ancestor/Descendant class

  13. Inheritance: impliciete overdracht van data fields en methods van superclass naar subclass

  14. Nut van class hierarchie (1)

  15. Nut van class hierarchie (2)

  16. Hierarchie van Employee classes Object NewEmployee SalaryEmployee HourlyEmployee

  17. 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)

  18. Sample run class TestEmployeeClasses

  19. 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

  20. Assignments in een class hierarchie: Object en NewEmployee objecten Object obj; NewEmployee anEmp = new NewEmployee(“Sam”, “1111”) obj null anEmp Sam 1111 … … …

  21. Assignment in een class hierarchie: HourlyEmployee object HourlyEmployee hourEmp = new HourlyEmployee(“Sally”, “2222”) hourEmp Sally 2222 … … … hours rate

  22. Assignment in een class hierarchie: SalaryEmployee object SalaryEmployee salEmp = new SalaryEmployee(“Tony”, “2345”) salEmp Tony 2345 … … … annualSalary

  23. Assignments in een class hierarchie:superclass type en subclass type obj Object type null anEmp NewEmployee type Sam 1111 … … …

  24. 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 … … …

  25. 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

  26. 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

  27. “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

  28. 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.");

  29. instanceofoperator public boolean equals (Object emp) { if (emp instanceof NewEmployee) { NewEmployee temEmp = (NewEmployee) emp; return this.socSecNum.equals (temEmp.socSecNum); } else { return false; } }

More Related