1 / 20

07 – Kort om OO

07 – Kort om OO. Introduktion. Kort om begreber i objekt orienteret programmering. Klasser og objekter Arv og polymorfi. Objekt. Et objekt har en tilstand og en adfærd: Objektets tilstand er de attributter der kendetegner objektet

kay
Download Presentation

07 – Kort om OO

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. 07 – Kort om OO Introduktion

  2. Kort om begreber i objekt orienteret programmering • Klasser og objekter • Arv og polymorfi

  3. Objekt • Et objekt har en tilstand og en adfærd: • Objektets tilstand er de attributter der kendetegner objektet • Adfærd bevirker at man kan ændre eller aflæse et objekts tilstand

  4. Klasse • Klassen er den fælles beskrivelse for objekterne. • Objekterne er de konkrete forekomster af klassen • Klasser eksisterer hele tiden - objekter kommer og går

  5. Metodeoverloading • Flere metoder med samme navn kan erklæres i samme scope, blot de har forskellige parameterlister. • Fx: public Bankkonto(int kontonr){ kontonummer = kontonr; saldo = 0; } public Bankkonto(int kontonr; double saldo){ kontonummer = kontonr; this.saldo = saldo; }

  6. Access Modifiers • Public • Kan tilgås af alle metoder fra alle objekter • Private • Kan tilgås af den definerende klasses medlemmer og ikke andre • Protected • Kan tilgås af klassen selv og af arvinger – privat for alle andre • Internal • Kan tilgås af den definerende klasse og alle klasser i samme assembly • Protected internal • Kan tilgås af den definerende klasse, klasser i samme assembly og fra arvinger

  7. Tilgå private attributter • Vi ønsker at holde attributter private dels for at kunne skjule implementation (ikke fordi den hemmelig, men det giver frihed til at kunne ændre implementation) • Men også for evt. at kunne styre hvordan de tilgås, således at objektet stadig har en vaild tilstand.Et banalt eksempel at saldo ikke bliver sat til et negativt tal, hvis der ikke må være overtræk på kontoen • Tilgangen styres vha. get og set metoder. • get-metoder kaldes også accesors, fordi de aflæser en værdi • set-metoder kaldes mutators fordi de ændrer en værdi • Aht. JavaBeans bør følgende konvention tilstræbes: • public <datatype> getAttributNavn() //hvis read mulig • public voidsetAttributNavn(<datatype> d) //hvis write mulig

  8. Eksempel på realisering af domænemodel • Del af design-klassediagram i et system til registrering af ansatte og projekter

  9. Realisering af objektforbindelse • Designovervejelser • Hvilken vej skal objekterne kunne tilgås • Forbindelse til 1 objekt • Simpel objektreference • Forbindelse til * objekter • Reference til collection på 1-siden

  10. OO = Programkvalitet Mål: • modificérbarhed • pålidelighed • effektivitet Midler: • indkapsling og dataabstraktion • nedarvning og polymorfi • CLR

  11. OO-Principper-indkapsling • Et objekt er (set udefra) en atomar enhed der tilbyder en række services (metoder/properties). • Det at gøre detaljerne i objekters implementation utilgængelige kaldes information hiding. • Det at gruppere data sammen med operationer på disse data under praktisering af information hiding kaldes indkapsling eller dataabstraktion. • Indkapsling er et af hovedprincipperne i OOP

  12. OO-Principper-nedarvning • Nedarvning gør det muligt at udvide en eksisterende klasse. • Nedarvning er typespecialisering, dvs. vi modellerer et ”er-en” forhold mellem den nedarvede klasse og den der arves fra - fx: en Checkkonto er-en Konto. • Hvis vi står og mangler en klasse som er en specialisering af en klasse vi har, kan vi anvende nedarvning. • Fx Konto -> CheckKonto

  13. OO-Principper-nedarvning • Nedarvning understøtter kodegenbrug • Den der arves fra kaldes basisklasse/superklasse. • Den der arver kaldes subklasse • Husk at der gælder et er-en forhold mellem sub- og basisklassen • En nedarvet klasse er typekompatibel med basisklassen: CheckKontock = new CheckKonto(); If (ck is Konto) returnerer true hvis CheckKonto arver fra Konto • Er-en forholdet er transitivt.

  14. Nedarvning - Constructors • Hvis man ikke definerer en constructor, genereres en default. Ved nedarvning kalder denne implicit en default constructor (parameterløs) på basisklassen. • Basisdelen af en nedarvet klasse initialiseres ved kald til base(param-liste). • Kald til forfaders constructor er det første der sker i den nedarvede klasses constructor. • :base(param-liste) placeres umiddelbart efter constructorensmetodehoved

  15. public class Ansat{ protected string navn; protected float løn; public Ansat(){} public Ansat(string navn, float løn){ this.navn = navn; this.løn = løn; } …………… } public class Chef : Ansat{ private ulong antalOptioner; public Chef(){} public Chef(string navn, float løn, ulong numbOfOpts) : base(navn, løn) { antalOptioner = numbOfOpts; } ……….. } Nedarvning- attributter og constructors

  16. Nedarvning - redefinering • En basisklasse-metode kan redefineres i den nedarvede klasse • Fx Haev-metoden på en Konto/CheckKonto • En basisklasse-metode der skal redefineres i den nedarvede klasse, skal erklæres virtual i basisklassen, og eksplicit overrides i den nedarvede klasse. • Dette tilsidesætter basisklassens metode. • Metoden i den nedarvede klasse skal have samme signatur og returtype som den virtuelle den redefinerer. • En redefineret metode kan kalde den metode den redefinerer i superklassen vhabase.metodenavn();

  17. public class Ansat{ …………….. public voidGivBonus(floatbelob){ løn += belob; } ……………… } public class Chef : Ansat{ ……………. public @OverridevoidGivBonus(floatbelob){ base.GivBonus(belob); antalOptioner += 500; } …………………. } Nedarvning- redefinering

  18. Arv- Vi vil udvide domænemodellen fra før

  19. Polymorfi- redefinering af metoder • Først implementerer vi metoden GivBonus(int belob) som virtual i klassen Ansat • Herefter redefiner vi den i klasserne Chef og Saelger • Endelig oprettes et array af Ansatte i main, hvor alle medarbejdere får 500,- i bonus

  20. Abstrakte klasser • Lad os antage at man i sine designovervejelser har vedtaget at klassen Ansat er for generel. Man ønsker ikke at kunne oprette objekter af den, ligesom en generel GivBonus-metode ikke realiseres. • Vi gør nu Ansat-klassen abstrakt (GivBonus-metoden gøres abstrakt)

More Related