Objektorienteret programmering

  • View
    50

  • Download
    0

Embed Size (px)

DESCRIPTION

Objektorienteret programmering. Indkapsling Arv og polymorfi (OOPs 3 hovedprincipper). OO-Principper -indkapsling. Et objekt er (set udefra) en atomar enhed der tilbyder en rkke services (metoder/properties). - PowerPoint PPT Presentation

Transcript

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Objektorienteret programmeringIndkapslingArv og polymorfi(OOPs 3 hovedprincipper)

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*OO-Principper-indkapslingEt objekt er (set udefra) en atomar enhed der tilbyder en rkke services (metoder/properties).Det at gre detaljerne i objekters implementation utilgngelige 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

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Definition af objekt og klasseObjektEn reprsentation af et koncept fra virkeligheden, realiseret vha. data knyttet til dette koncept samt en rkke funktioner gennem hvilke objektet kan ndre eller aflse egne data.KlasseEn type, som definerer de data og funktioner der er ndvendige for at beskrive en gruppe af objekter som alle reprsenterer samme koncept fra virkeligheden. Klassen definerer objekternes udseende og objekter er fysiske forekomster af klassenKlassen er statisk eksisterer p compiletime. Objekter er dynamiske eksisterer p runtime.

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Attributter (data)Attributterne definerer de data vi nsker at registrere. Attributterne defineres p klassen, og bliver tildelt en konkret vrdi i objekterne.Kontos attributter: kontonummer, saldo, bevilget overtrk, rente mm.Ansatnavn, afdelingsnummer, ln, titel mm.Et objekts tilstand kan beskrives som attributternes vrdi p et givet tidspunkt

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Metoder (funktioner)Objektets funktioner er givet ved de metoder der er tilknyttet objektet. Disse metoder defineres (kodes) i klassen.Det er kald til metoderne der fr objektet til at ndre tilstandKontoHaev(), Indsaet(), GetSaldo() osv.AnsatGivLoenforhoejelse(), SetTitel() osv.

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*PropertiesBruges til at stte og aflse vrdien af objektets attributterSvarer til set- og get-metoderEn set-metode ndrer vrdien af en attributEn get-metode aflser vrdien af en attributGiver en syntaks som om man tilgr en attributEn Anders Hejsberg(?)

    NOEA - Nordjyllands Erhvervsakademi

  • Propertiespublic class Kunde{private int kundenummer;private string navn;public string Navn{get{ return navn;}set{ navn = value;}}public int Kundenummer{get{return kundenummer;}}}}

  • Brug af propertiesKunde k = new Kunde(Jens Jrgensen);k.Navn = Jens Petersen;string navn = k.Navn;k.navn = Jens Petersen; //fejl private attributk.Kundenummer = 21; //fejl read-onlyint x = k.Kundenummer;

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*ConstructorEr en bestemt metode, som skal have samme navn som klassen. Dens opgave er at initialisere objektet under oprettelse.Eksempel p oprettelse af objektKonto k = new Konto();Konto() er et kald til Konto-klassens constructorDet er new, deropretter plads til objektet i hukommelsensrger for at variabelnavnet (referencen) refererer til dette stykke hukommelse new er i virkeligheden en funktion der returnerer en heap-adresseConstructors kan overloades

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Opbygning af klasserKlasser bygges op efter skabelonen:

    class Klassenavn {dataerklringerconstructorspropertiesmetoder}

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Opbygning af metoderEn metode bygges op efter skabelonen accessmodifier returtype Metodenavn (parameterliste) { stninger}

    public int SumAfToHeltal (int tal1, int tal2) {int sum;sum = tal1 + tal2;return sum;}Acessmodifier: public/private Lokal variabel return Parametre

    NOEA - Nordjyllands Erhvervsakademi

  • Access ModifiersPublicKan tilgs af alle metoder fra alle objekterPrivateKan tilgs af den definerende klasses medlemmer og ikke andreProtectedKan tilgs af klassen selv og af arvinger privat for alle andreInternalKan tilgs af den definerende klasse og alle klasser i samme assemblyProtected internalKan tilgs af den definerende klasse, klasser i samme assembly og fra arvinger

  • Eksempel p realisering af domnemodelDel af design-klassediagram i et system til registrering af ansatte og projekter

  • Realisering af objektforbindelseDesignovervejelserHvilken vej skal objekterne kunne tilgsForbindelse til 1 objektSimpel objektreferenceForbindelse til * objekterReference til collection p 1-siden

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Nedarvning-genereltAlle metoder bortset fra constructors arves.private medlemmer af basisklassen nedarves, men kan ikke tilgs direkte.Alle protected medlemmer af basisklassen er synlige nedad i arvehierakiet, men private for alle klasser udenfor.Der kan tilfjes attributter og metoder i den nedarvede klasseIngen multipel arvI C# arver alle klasser fra Object

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*OO-Principper-nedarvningNedarvning understtter kodegenbrugNedarvning gr 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 str og mangler en klasse som er en specialisering af en klasse vi har, kan vi anvende nedarvning. Fx Konto -> CheckKonto

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*OO-Principper-nedarvningDen der arves fra kaldes basisklasse/superklasse. Den der arver kaldes subklasseHusk at der glder et er-en forhold mellem sub- og basisklassenEn nedarvet klasse er typekompatibel med basisklassen:CheckKonto ck = new CheckKonto();If (ck is Konto) returnerer true hvis CheckKonto arver fra KontoEr-en forholdet er transitivt.

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Nedarvning - ConstructorsBasisdelen af en nedarvet klasse initialiseres ved kald til base(param-liste). Kald til forfaders constructor er det frste der sker i den nedarvede klasses constructor.:base(param-liste) placeres umiddelbart efter constructorens metodehoved notation taget fra C++Hvis man ikke definerer en constructor, genereres en default. Ved nedarvning kalder denne implicit en default constructor (parameterls) p basisklassen.

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Nedarvning - redefineringEn basisklasse-metode kan redefineres i den nedarvede klasseFx Haev-metoden p en Konto/CheckKontoEn basisklasse-metode der skal redefineres i den nedarvede klasse, skal erklres virtual i basisklassen, og eksplicit overrides i den nedarvede klasse. En override-metode tilsidestter 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 superklassens vha. base.metodenavn();

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Nedarvning - polymorfiAlle referencevariabler i C# kan referere objekter af nedarvede typer (polymorf = mange former).Ved virtuelle metoder trffes der beslutning p run-time om hvilken metode der skal kaldes. Metoden der kaldes er den der er defineret p det objekt referencen i jeblikket refererer.Dette kaldes dynamisk binding.

    NOEA - Nordjyllands Erhvervsakademi

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Polymorfi/Dynamisk bindingSom vi plejer at se det: Ansat programmr = new Ansat("KodeKarl","Programmr",22222);Statisk type = Dynamisk typeStatisk metodekald Statisk typeDynamisk typeMed polymorft typesystem: Ansat chef = new Chef(Bosse",Direktr",52525, 500);Dynamisk type er samme som eller arving til statisk typeCompiler checker p statisk type om metode eksisterer, kald til metode vha. dynamisk bindingDynamisk binding forudstter at metoder er erklret virtualDynamisk typeStatisk type

    NOEA - Nordjyllands Erhvervsakademi

  • Nedarvning- override af ikke-virtual metoderHvad nu hvis vi glemmer at gre vores metoder virtual, og en anden senere vil arve en af vores klasser og override en metode? Svaret er new foran override-metoden

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*SubstitutionsprincippetDen dynamiske type skal altid kunne bruges i stedet for den statiskeDvs., at objekter af en nedarvet type skal kunne anvendes i stedet for objekter af den oprindelige

    De skal kunne substitueres

    Dette sikres ved at vi ved redefinering af methoder kun afsvkker pre-betingelser og strammer post-betingelser.

    NOEA - Nordjyllands Erhvervsakademi

  • Arv- Vi vil udvide domnemodellen fra fr

  • Polymorfi- redefinering af metoderFrst implementerer vi metoden GivBonus(int belob) som virtual i klassen AnsatHerefter redefiner vi den i klasserne Chef og SaelgerEndelig oprettes et array af Ansatte i main, hvor alle medarbejdere fr 500,- i bonus

  • FEN 2008-08-28NOEA - Nordjyllands Erhvervsakademi*Nedarvning- designovervejelserLad os antage at vi skal bruge en klasse der kan indeholde en liste af ansatte, hvor det er muligt at tilfje sidst i listen, men ikke midt i Skal vi arve fra Array, ArrayList eller?Nej vi skal ikke arve, men bruge delegation

    Arv br ikke bruges blindt for at opn kodegenbrug - arv er typespecialisering!Arv skal kunne forsvares logisk som en A er-en BKodegenbrug kan i stedet opns ved at bygge oven p eksisteren