170 likes | 317 Views
Repetition: Introduktion til OOP med C# og .NET. Objektorienteret programmering - Realisering af domænemodel. Objekt ifølge OOA&D. Et objekt har identitet, tilstand og adfærd: Objektets tilstand er værdierne af de attributter, der kendetegner objektet
E N D
Repetition:Introduktion til OOPmed C# og .NET Objektorienteret programmering - Realisering af domænemodel
Objekt ifølge OOA&D • Et objekt har identitet, tilstand og adfærd: • Objektets tilstand er værdierne af de attributter, der kendetegner objektet • Adfærd bevirker at objektets tilstand kan aflæses eller ændres • Adfærd er defineret gennem objektets operationer (metoder og properties)
”Kurt” • ”Programmør” • 30000 p1 p2 p3 • ”Ib” • ”Programmør” • 25000 • ”Kis” • ”DBA” • 35000 Klasse: Kildekode Klasseog objekt • Klassen er den fælles definition af objekterne. • Objekterne er de konkrete forekomster af klassen • Klasser eksisterer hele tiden • Objekter kommer og går • Klassen er den statiske beskrivelse i kildekoden • Objekter eksisterer dynamisk • Objekter: • Eksisterer runtime • Refereres via programvariable
Oprettelse af objekter • Kunde k; • opretter en reference • k = new Kunde(123, ”Michael Jackson”); • kald af constructoren som står for initialisering af objektets attributter • new allokerer plads til objektet • new sender adressen retur til referencen k
Tilstand • Attributterne er defineret på klassen, og bliver tildelt en værdi i objekterne • Properties giver kontrolleret adgang til attributterne • Kontos attributter: • kontonummer, saldo, bevilget overtræk, rente, indehaver mm. • Ansat • navn, afdelingsnummer, løn, titel mm.
Adfærd • Objekternes adfærd er givet ved • metoder - defineres (realiseres) i klassen. • properties - defineres ligeledes i klassen. • Adfærd forårsager i visse tilfælde en tilstandsændring • Konto • Haev(), Indsaet(), Saldo (property) osv.
Constructor • Er en metode, som • initialiserer objektet – giver objektet en starttilstand • Rent praktisk skal en constructor have samme navn som klassen • Kan – ligesom andre metoder - forekomme i flere versioner (metodeoverloading)
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; }
This • Reference til objektet selv • Bruges bl.a. til at undgå navnesammenfald • this.saldo = saldo; • Bruges også til kald af egne constructors • public Kunde(string navn): this(navn, getNewId()) • Her vil den constructor der er brugt under oprettelsen af objektet sende kaldet videre til en anden constructor
Properties public 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 properties Kunde k = new Kunde(”Jens Jørgensen”); k.Navn = ”Jens Petersen”; string navn = k.Navn; k.navn = ”Jens Petersen”; //fejl private attribut k.Kundenummer = 21; //fejl read-only int x = k.Kundenummer;
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
Eksempel på realisering af domænemodel • Del af design-klassediagram i et system til registrering af ansatte og projekter Projekt Ansat navn navn ArbejderPaa afdeling stilling timer 1 1 løn 0..* 0..* 0..* 0..* 1 1 GetTotalTimer() TilknyMedarbejder() GetMedarbejdere()
Realisering af objektforbindelse • Designovervejelser • Hvilken vej skal objekterne kunne tilgås • Forbindelse til 1 objekt • Simpel objektreference • Forbindelse til * objekter • Reference til collection (fx ArrayList)
Collection ArrayList • Dynamisk array (System.Collections) • Elementer kan tilgås som i array med [] • Vigtige metoder: • Add(Object o) – tilføjer o bagerst • RemoveAt(int i) – sletter på index i • Count – property som returnerer antallet af elementer • Resten findes online
Eksempel • Vi vil se på realiseringen af ansat-projekt eksemplet: • Vi vil nu også beregne gennemsnitslønnen for medarbejdere på et projekt.
Opgave • Realisering af domænemodel • Passende metoder: alle reservationer etc. Bog titel : String isbn : String Reservation forlag : String forfattere : String 1 0..* resDato : int AddReservation() 0..* FindLånerMedRes() Låner lNr : int fNavn : String eNavn : String 1 1