Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

07 – Kort om OO Introduktion.

Lignende præsentationer


Præsentationer af emnet: "07 – Kort om OO Introduktion."— Præsentationens transcript:

1 07 – Kort om OO Introduktion

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

3 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){ this.saldo = saldo;

6 Access Modifiers Public Private Protected Internal Protected internal
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 void setAttributNavn(<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: CheckKonto ck = 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 constructorens metodehoved

15 Nedarvning - attributter og constructors
public class Chef : Ansat{ private ulong antalOptioner; public Chef(){} public Chef(string navn, float løn, ulong numbOfOpts) : base(navn, løn) { antalOptioner = numbOfOpts; } ……….. 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; } ……………

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 vha base.metodenavn();

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

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 Vi gør nu Ansat-klassen abstrakt (GivBonus-metoden gøres abstrakt)
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)


Download ppt "07 – Kort om OO Introduktion."

Lignende præsentationer


Annoncer fra Google