Klasser och objekt
Meddelandesändning mellan objekt a:ClassOne b:ClassTwo svar := beräknaSumma(a,b) : int [svar] Vad är summan av 2 plus 3? 5! class ClassTwo { int beräknaSumma(int a, int b) return a + b; }
Meddelandesändning mellan objekt a:Person b:Person svar := FrågaNamn() : string [svar] Vad heter Du? Nisse! class Person { string namn; string FrågaNamn() return namn; }
Klasser och objekt Ett objekt är en instans av en klass. Hur ett objekt tillhandahåller en specifik tjänst (operation) definieras av vilken klass objektet är en instans av. Samtliga instanser av en specifik klass har samma metod (kod) för en specifik tjänst (operation), men för sina egna data.
Klasser Det finns ofta många objekt av samma typ En klass är en beskrivning av objekt av samma typ
Klass i UML Person klassnamn födelsedag : DateTime namn : string telefon : string attribut Person(födelsedag : DateTime, namn : string, telefon : string) Telefon() : string Telefon(value : string) Namn () : string Födelsedag () : DateTime DagarTillNästaFödelsedag () : int operationer
Objekt i UML eva : Person objektidentifierare:klassnamn födelsedag = ”1980-12-24” namn = ”Eva” telefon = ”021-101300” attribut med ev värden
Tre instanser ur samma klass hjärterDam:Kort färg = hjärter valör = dam Kort ruterKung:Kort färg valör färg = ruter valör = kung spaderEss:Kort färg = spader valör = ess
Klasser är inte samlingar av objekt En kortlek är ett objekt i vilken ingår ett antal kort-objekt :Kortlek korten : Kort[52] hjärterDam:Kort färg: hjärter valör: dam ruterKung:Kort färg: ruter valör: kung spaderEss:Kort färg = spader valör = ess En samling av objekt är inte en klass utan det är ett objekt i sig
Samlingar av objekt är inte klasser ..de är objekt i sig! class Kortlek { Kort[] korten = new Kort[52]; } Ett arrayobjekt class Kort { string färg; string valör; } Klasser är inte heller samlingar av objekt. Klasser är ”mallar” för objekten.
Ett objekt per förekomst
Vad är objekt? Data Metoder (algoritmer) Bil class Bil { string regnr; float liter; float km; } static float förbrukning (Bil b2) { return b2.liter/b2.km*10; } Bil regnr liter km förbrukning()
Objektorientering En klass class Bil { string regnr; float liter; float km; } En klass är en “ritning” eller en “mall” som beskriver objekten. Klassen reserverar inget minnesutrymme för data utan varje objekt har sitt eget datautrymme. float förbrukning () { return liter/km*10; } Ett objekt innehåller variabler och metoder. Värdet av variablerna definierar objektets tillstånd och metoderna definierar objektets beteende. ... Bil b2 = new Bil(); En klass beskrivs i programkoden medan objekten skapas och existerar under exekveringen av programmet.
Objektet Bil regnr:string liter:float km:float forbrukning():float minBil:Bil Privat minne (för att lagra data) regnr = ”NHG 084” liter = 2977 km = 61267 Instruktioner (för att bearbeta data) float forbrukning () { return liter/km*10); } class BilTest { public static void Main (string[] args) { Bil minBil = new Bil(); minBil.regnr = ”NHG084”; minBil.liter = 2977; minBil.km = 61267; System.Console.WriteLine(minBil.forbrukning()); }
Varje objekt har en livscykel Bil minBil = new Bil(“NHG084”); Vi instantierar ett objekt… Bil (string r) { regnr = r; } Konstruktorn körs… …och objektet är skapat. Därefter kan objektet förändras… …och tas bort… Bil minBil = null; …fast i Java eller C# tas objektet verkligen bort först när sopgubben (GC) varit framme (I C++ måste du själv agera sophanterare)…
Sekvensdiagram i UML X using System; class PersonTest { public static void Main( ) { } Sekvensdiagram i UML Person evaA = new Person(new DateTime(1980, 12, 24), "Eva", "021-101300"); Person evaB = evaA; evaB.Telefon = "016-153600"; string tfn = evaA.Telefon; Console.WriteLine("Telefon: " + tfn); PersonTest Console System Main ( ) new(födelsedag : DateTime, namn : string, telefon : string) evaA:Person Telefon(value : string) tfn = Telefon() : string WriteLine( tfn ) X
Klasser: Protokoll Den samling operationer ett objekt har Endast meddelanden i protokollet får sändas till ett objekt :Dokument skrivUt() författare() status() protokoll (interface)
Meddelanden i ett objektorienterat system avsändare Nisse:Person mottagare meddelande argument minBil.kör (”fort”); ”Metoden” är den kod som exekveras när just ”minBil” får meddelandet ”kör” minBil:Bil operation kör(hastighet)
Meddelandesändning primärminnet NisseTest Person Bil Nisse:Person class Person { Bil minBil = new Bil(); } primärminnet main( :string[] ) NisseTest void åkTillJobbet () { minBil.kör(”fort”); } class Bil { } Person Bil void kör (string hastighet) { // wrooom... } åkTillJobbet() kör( :string ) class NisseTest { static void Main (string[] args) { Person Nisse = new Person(); } Nisse:Person minBil:Bil Nisse.åkTillJobbet();
Jag har dessa variabler Objektet sett inifrån Varje metod är en sekvens av instruktioner som exekveras som svar på ett meddelande Det finns en metod för varje operation i protokollet Med ”objektets protokoll” avses den samling operationer ett objekt har Endast meddelanden i protokollet får sändas till ett objekt :Dokument Jag har dessa variabler attribut (privat minne) skrivUt() författare() status() Kod för skrivUt() operationer Kod för författare() Kod för status() metoder
Attribut Beskriver objektens egenskaper och tillstånd Ett attribut i en konceptuell modell skall vara enkla attribut eller datavärden Attributens typer kan exempelvis vara av typen: bool, DateTime, Number, string Andra attributtyper kan vara exempelvis: Adress, Personnummer, Telefonnummer