210 likes | 385 Views
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.
E N D
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 klassnamn Person 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 objektidentifierare:klassnamn eva : Person 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 hjärterDam:Kort färg: hjärter valör: dam ruterKung:Kort färg: ruter valör: kung spaderEss:Kort :Kortlek färg = spader valör = ess korten : Kort[52] En samling av objekt är inte en klassutan det är ett objekt i sig
Samlingar av objekt är inte klasser Ett arrayobjekt ..de är objekt i sig! class Kortlek { Kort[] korten = new Kort[52]; } class Kort { string färg; string valör; } Klasser är inte heller samlingar av objekt. Klasser är ”mallar” för objekten.
Vad är objekt? Data Metoder (algoritmer) 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 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 minBil:Bil regnr:string liter:float km:float regnr = ”NHG 084” liter = 2977 km = 61267 Privat minne (för att lagra data) forbrukning():float float forbrukning () { return liter/km*10); } Instruktioner (för att bearbeta data) 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 Vi instantierar ett objekt… Bil minBil = new Bil(“NHG084”); Konstruktorn körs… Bil (string r) { regnr = r;} …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 using System; class PersonTest { public static void Main( ) { } } 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 NisseTest main( :string[] ) Person Bil Nisse:Person minBil:Bil class Person { Bil minBil = new Bil(); } primärminnet void åkTillJobbet () { minBil.kör(”fort”); } class Bil { } void kör (string hastighet) {// wrooom... } åkTillJobbet() kör( :string ) class NisseTest {static void Main (string[] args) { Person Nisse = new Person(); } } Nisse.åkTillJobbet();
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 Objektet sett inifrån :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