Föreläsning 9: Arv och UML

Relevanta dokument
Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Föreläsning 2, vecka 7: Arv, subtyper och Javas API

Föreläsning 8: Exempel och problemlösning

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

OOP Objekt-orienterad programmering

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

TENTAMEN OOP

Objektorienterad Programmering (TDDC77)

Programmering för språkteknologer II, HT2014. Rum

OOP Objekt-orienterad programmering

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Objektorienterad Programmering (TDDC77)

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Arv. Objektorienterad och komponentbaserad programmering

Tentamen OOP

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Objektorienterad Programmering (TDDC77)

Tentamen i Objektorienterad programmering

Programmering för språkteknologer II, HT2011. Rum

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Objektorienterad programmering i Java

Objektorienterad programmering D2

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Grundläggande programmering med C# 7,5 högskolepoäng

Konstruktion av klasser med klasser

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

TENTAMEN OOP

Klasshierarkier - repetition

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

TDDD78 Viktiga begrepp, del 2

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 13 Innehåll

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

DAT043 - Föreläsning 7

Classes och Interfaces, Objects och References, Initialization

Lösningsförslag till exempeltenta 2

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Laboration 1: Figurer i hierarki

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

DELPROV 1 I DATAVETENSKAP

Laboration 1 - Grunderna för OOP i Java

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Föreläsning 7. Träd och binära sökträd

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

DAT043 - föreläsning 8

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

OOP Tenta

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 12: Exempel och problemlösning

Dugga Datastrukturer (DAT036)

Föreläsning 5-6 Innehåll

Repetition av viktiga begrepp inom objektorienterad programmering

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Tentamen. Lösningsförslag

TENTAMEN OOP

Introduktion till arv

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

TUTORIAL: KLASSER & OBJEKT

Modeller, Objekt och Klasser

Transkript:

TDA 545: Objektorienterad programmering Föreläsning 9: Arv och UML Magnus Myréen Chalmers, läsperiod 1, 2015-2016

Quiz Vad betyder static? Varför skriver man get-metoder? public int getpos() { return pos; Varför deklarerar man oftast variabler som private? Vad är en specifikation?

Idag Läsanvisning: kap 10 och lite 15; för nästa gång: kap 10 och 11 arv (extends) Object instanceof lite UML

Idén med arv (inheritance) I Java kan klasser ärva egenskaper från en annan klass.

Idén med arv (inheritance) I Java kan klasser ärva egenskaper från en annan klass. metoder och variabler I Java kan klasser ärva kod från en annan klass. Man slipper att skriva samma kod flera gånger. och dessutom vet Java att klasserna är relaterade. (dvs typ kompatibla)

Arv (inheritance) Object Student Person Lärare Mycket av det vi vet om kalle har med studenter och personer att göra. En Student är en specialiserad Person. Klasser organiseras i trädliknande strukturer. kalle Graduate Masters PhD public class Student extends Person {... Utgående från en förälderklass ("superklass ) skapar man en ny klass, en barnklass ("subklass ) som ärver alla egenskaper (tillstånd och beteende) från superklassen som i sin tur ärver från sin superklass.

Multipelt arv finns i verkligheten Men inte i Java! Java tillåter inte multipelt implementationsarv. Object Person Yrke Student Lärare Forskare magnus Hur hitta lämpliga abstraktioner, klasser? Tänk: Vad är väsentligt för mitt program? Hur kan jag använda klasserna? (Borde yrke vara tillstånd hos personer?)

Multipelt arv finns i verkligheten Men inte i Java! Java tillåter inte multipelt implementationsarv. Object Person Yrke Student Lärare Forskare magnus Hur hitta lämpliga abstraktioner, klasser? Tänk: Vad är väsentligt för mitt program? Hur kan jag använda klasserna? (Borde yrke vara tillstånd hos personer?)

Överskuggning, metodbindning Överskuggning (Override) (jämför: överlagring = overloading) Metodbindning: När man skall söka efter en metod så börjar man där man är (meddelandemottagarens klass). Finns där ingen metod med rätt namn och parameterprofil så söker man i föräldern osv. Man kan ändra beteendet och lägga till nya egenskaper och beteende till en klass vid arv. Dock inte ta bort saker. Undantag eller ändrat beteende hanteras genom att en subklass överskuggar sitt arv från superklassen genom att ha en metod med samma namn och samma parameterprofil (signatur).

Person Exempel Student public class Person { private String name; private int age; public Person(String n, int ag) { name = n; age = ag; public String tostring( ) { return getname(); public String getname() { return name; public int getage() { return age; public final void setname (String n) { name = n; public class Student extends Person { private String uniname; public Student(String n, int age, String uni) { super(n, age); uniname = uni; public String tostring() { return super.tostring() + " student at " + uniname; public String getuniname () { return uniname;

Person Exempel Student public class Person { private String name; private int age; public Person(String n, int ag) { name = n; age = ag; public String tostring( ) { return getname(); public String getname() { return name; public int getage() { return age; public final void setname (String n) { name = n; public class Student extends Person { private String uniname; public Student(String n, int age, String uni) { super(n, age); uniname = uni; public String tostring() { return super.tostring() + " student at " + uniname; public String getuniname () { return uniname;

Person Exempel Student kallar på superklassens konstruktör, dvs Persons kons. säger att vi ärver från Person public class Person { private String name; private int age; public Person(String n, int ag) { name = n; age = ag; public String tostring( ) { return getname(); public String getname() { return name; public int getage() { return age; public final void setname (String n) { name = n; betyder att subklasser (some t.ex. Person) inte får överskugga denna metod. public class Student extends Person { private String uniname; public Student(String n, int age, String uni) { super(n, age); uniname = uni; public String tostring() { return super.tostring() + " student at " + uniname; public String getuniname () { return uniname; kallar på superklassens version av metoden tostring

Arv (inheritance) Med arv, dvs extends : får man en kopia av alla variabler och metoder från superklassen man kan lägga till nya variabler och metoder man kan justera existerande metoder genom överskuggning - man kan inte ta bort saker, t.ex. (public kan inte bli private) - konstruktören ärvs inte (använd super( )) - privata variabler och metoder ärvs inte ja privata variabler ärvs nog, men man kommer inte åt dem direkt: man måste använda get och set metoder som är public

public class Queue { private Object[] q; private int l; /** Constructs an empty queue. */ public Queue () { this.q = new Object[10]; this.l = 0; /** Returns true if the queue is empty. */ public boolean isempty () { return (this.l == 0); /** Returns the first element in the queue, if the queue is * non- empty. */ public Object getfirst () { return this.q[0]; /** Adds an element to the back of the queue. */ public void put (Object o) { if (l < q.length) { q[l] = o; l = l+1; else { Object[] tmp = new Object[q.length+1]; for (int i=0; i<q.length; i++) { tmp[i] = q[i]; tmp[q.length] = o; q = tmp; l = l+1; Exempel public class QueueWithLog extends Queue { private int numberofputs = 0; private static int allputs = 0; public void put (Object o) { super.put(o); numberofputs = numberofputs + 1; allputs = allputs + 1; public String tostring() { return super.tostring() + " puts=" + numberofputs; public static int getallputs() { return allputs; /** Removes the first element from the queue, if the queue is * non- empty. */ public void pop () { if (!(isempty())) { for (int i=1; i<l; i++) { q[i- 1] = q[i]; l = l- 1; q[l] = null; public String tostring() { String str = ""; for (int i=0; i<this.l; i++) { str = str + " " + this.q[i]; return str; public class Main { public static void main(string[] args) { QueueWithLog t1 = new QueueWithLog(); QueueWithLog t2 = new QueueWithLog(); t1.put("a"); t1.put("b"); t1.put("c"); t1.put("d"); t1.put("e"); t2.put("x"); t2.put("y"); t2.put("z"); System.out1.println("t1 = " + t1.tostring()); System.out1.println("t2 = " + t2.tostring()); System.out1.println(QueueWithLog.getAllPuts());

Typ kompabilitet 1 (type compatible) I vilken klass som helst kan man skriva: public static boolean isolder (Person p1, Person p2) { return p1.getage() > p2.getage(); Vi kan anropa med objekt av typ Person eller med något objekt som är en Person dvs objekt av alla subklasser till Person som Student, PhD, Lärare osv. Student Person Lärare kalle Graduate Masters PhD

instanceof (instans av) instanceof runtime-testar om ett objekt är instans av en viss klass. Om uttrycket exp instanceof ClassName Object är sant så är exp en instans av ClassName eller en instans av någon av ClassName's subklasser. Person Obs. att det är en rätt svag test eftersom arv ju är transitivt, i vårt studentexempel så är en phd en instans av Phd, Graduate, Student, Person och Object. kalle Student Graduate Lärare Masters PhD

instanceof (instans av) PhD phd = new PhD(...); Student stud = new Student(...); Person p = new Student(); if( phd instanceof PhD ).. // ger true if( phd instanceof Student ).. // ger true if( stud instanceof PhD ).. // ger false if( p instanceof Student ).. // ger true Object Person instanceof används ofta före en typkonvertering för att vara säker på att den går bra. Man kan alltid konvertera "uppåt" men inte nedåt utan problem och då använder man instanceof för att avgöra om det går också nedåt. kalle Student Masters Graduate PhD Lärare

statisk eller dynamisk typ (static or dynamic type) Person p; String svar = < läs från användaren > if (svar.equals( p ) { p = new Person(...); else if (svar.equals( l ) { p = new Lärare(...); else if (svar.equals( s ) { p = new Student(...); Object Person Vad har p för typ här? (dvs vad kan vi göra med p?) Student Lärare p har statiska typen Person Det är allt kompilatorn kan se. p's dynamiska typen är inte känd innan vi kör programmet, men det kommer att vara Person, Lärare eller Student. kalle Graduate Masters PhD

statisk eller dynamisk typ (static or dynamic type) Person p; String svar = < läs från användaren > if (svar.equals( p ) { p = new Person(...); else if (svar.equals( l ) { p = new Lärare(...); else if (svar.equals( s ) { p = new Student(...); Object Person vi kan kolla vad den dynamiska typen är när programmet kör Student Lärare if (p instanceof Student) { x = (Student p).getuniname(); kalle Graduate här konverterar vi (den statiska) typen neråt, från Person till Student Masters PhD

statisk eller dynamisk typ (static or dynamic type) statisk typ = typen som kompilern ser dynamisk typ = typen som objektet egentligen har när programmet körs (beror på situationen) statisk typen är alltid samma eller mera abstrakt (högre upp) än den dynamiskta typen

Typ kompabilitet 2 (Generisk metod) class PersonDemo { public static void printall (Object[] arr) { for(int i=0; i<arr.length; i++) { if ( arr[i]!= null ) { System.out.println("arr[" + i + "] is " + arr[i].tostring()); public static void main(string[]args){ Person[] p = new Person[4]; p[0] = new Person("joe",23); p[1] = new Student("becky",19,"Chalmers"); p[3] = new Teacher("bob",32,"Uppsala",1); printall(p); if ( p[3] instanceof Teacher ) { ((Teacher) p[3]).raise(400); vi glömde att sätta nånting i p[2], men det fungerar för att vi kollar em om objektet är null. svar: Person är subklass av Object (alla klasser är det) Varför fungerar den här koden?

Typ kompabilitet Om vi har en Teacher med ett variabel salary hur funkar då: public static boolean earnsmore (Person p1, Person p2) { return p1.getsalary() > p2.getsalary(); Fel statisk typ. Kompilern säger att det inte går. Men det här fungerar: if (p1 instanceof Teacher && p2 instanceof Teacher) { return ((Teacher)p1).getSalary() > ((Teacher)p2).getSalary(); else { vad här? Ännu bättre: public static boolean earnsmore (Teacher p1, Teacher p2) { return p1.getsalary() > p2.getsalary();

Sammanfattning av arv base class = super class = parent class Student Person public class Person { public class Student extends Person { derived class = sub class = child class a sub class extends its super class konstruktorer ärvs inte privata variabler ärvs men kan inte kommas åt annat än via publika getters. privata metoder ärvs inte en sub klass kan ha nya metoder och variabler en sub klass kan även överskugga metoder i super klassen metoden x i superklassen kan kommas åt med super.x() konstruktorer i super klassen kan man komma åt med super(...) superkonstruktorn måste anropas först

Kortare sammanfattning Student Person public class Person { public class Student extends Person { är ett enkelt sätt att importera all kod från en annan klass, i detta fall Person Obs. man kommer inte åt saker som är private i Person. Fundera: vad kan man inte implementera med arv?

Frågor Fundera: vad kan man inte implementera med arv? Vad är en superklass? Vad är en subklass? Vad är skillnaden mellan statisk och dynamisk typ? På vilket sätt konverterar man mellan dem? Kan arv söndra superklasser?

UML Ni behöver inte kunna mycket UML men ni ska vet vad det är och ni ska kunna skissa enkla saker i UML.

UML UML n en notation notation för för att beskriva att beskriva relationer relationer otation: Notation: [optional], [optional], Foo = Foo nonterminal, = nonterminal, ulti (Multi = kort = kort för för Multiplicity) Multiplicity) Name Name Fields Fields Methods Methods an Man kan kan beskriva beskriva fält fält och och metoder metoder med med Javaller UML syntax. Javaeller UML syntax. ält: Fält: : [Visibility] [Type] Name [Multi] [=initialvalue] J: [Visibility] [Type] Name [Multi] [=initialvalue] ublic int duration = 100 public int duration = 100 : [Visibility] Name [Multi] [ :Type] [=initialvalue] U: [Visibility] Name [Multi] [ :Type] [=initialvalue] duration : int = 100 + duration : int = 100 etoder: Metoder: ava: [Visibility] [Type] Name ([Parameter,...]) nt Java: add(int [Visibility] dx, int [Type] dy) Name ([Parameter,...]) int add(int dx, int dy) ML: [Visibility] Name ([Parameter,...]) [ :Type] add(dx UML: [Visibility] : int, dy Name : int) ([Parameter, : int...]) [ :Type] ~add(dx : int, dy : int) : int F8 13 F8 13 Visibility Visibility Java Java UML UML tolkning tolkning public public + + tillgänglig tillgänglig för alla för alla protected protected # # i alla i klasser alla klasser i samma i samma paket paket och alla och subklasser alla subklasser ~ ~ alla i alla samma i samma paket paket (package) (packag private private - - enbart enbart inom klassen inom klassen Multiplicity Multiplicity Betecknar antalet förekomster av fältet och är Betecknar antalet förekomster av fältet och en komma separerad sekvens av en komma separerad sekvens av heltalsintervall. heltalsintervall. l..u från l till u inklusive, u kan vara * l..u från l till u inklusive, u kan vara * i ett heltal i ett heltal * 0, 1, 2, 3,... * 0, 1, 2, 3,... Parametrar Parametrar Java: Type Name Java: Type Name UML: Name : Type UML: Name : Type F8 14 F8 14

Exempel Exempel Korta former Korta former Att Att modellera modellera Relationer Relationer och och Struktur Struktur Inheritance (arv) (en är relation) Inheritance (arv) (en är relation) inklusive extension och implementation inklusive extension och implementation Association (association) (känner till / har) Association (association) (känner till / har) inkl. aggregation och composition inkl. aggregation och composition Dependency (beroende) Dependency (beroende) Arv Arv modellerar modellerar en är -relation en är -relation (Is-a) (Is-a) Paket och objekt Paket och objekt i behöver inte kunna så mycket UML men ni Ni behöver inte kunna så mycket UML men ni åste känna till relationerna, se nedan. måste känna till relationerna, se nedan. F8 15 F8 15 aggregate = förenande, sammanlagd, summa, förena aggregate = förenande, sammanlagd, summa, förena aggregation = sammanhopning, samling aggregation = sammanhopning, samling association = förbindelse, umgänge, samband,anknytning association = förbindelse, umgänge, samband,anknytning composition = (musik)komposition, sammansättning, composition = (musik)komposition, sammansättning, bildande bildande F8 16 F8 16

Arv Arv modellerar modellerar en "är" en "är" - relation - relation eskriver Beskriver allmänna allmänna gemensamma gemensamma egenskaper egenskaper Association Association modellerar modellerar känner känner till till En binär En binär känner känner till relation till relation mellan mellan klasser. klasser. 2 objekt 2 objekt känner känner till varandra: till varandra: ubklassen Subklassen kan vara: kan vara: en! utökning en utökning av superklassen av superklassen dvs man dvs lägger man lägger till till egenskaper egenskaper (instansvariabler) (instansvariabler) och och beteende beteende (instansmetoder) (instansmetoder) en! specialisering en specialisering av superklassen av superklassen dvs vissa dvs vissa metoder metoder ersätts ersätts plementeras Implementeras med med Java Java konstruktionen konstruktionen arv arv F8 17 F8 17 Implementeras Implementeras med med referenser referenser dvs ett dvs objekt ett objekt har en har pekare en pekare till andra till andra objekt objek F8 18 F8 18

många-> många många och många och många -> en-> en Aggregation Aggregation och Composition och - - en "har" en "har" (has-a) (has-a) relation relation Aggregation Aggregation är en speciell är en speciell form av form association av association som representerar som representerar en har en relation. har relation. Betecknas Betecknas med en med! i en aggregatändan! i aggregatändan av relationen. av relationen. Composition Composition är en starkare är en starkare form av form aggregation av aggregation där komponenterna där komponenterna är helt är beroende helt beroende (ägda) (ägda) av av aggregatet. aggregatet. Betecknas Betecknas med en med i en aggregatändan i aggregatändan av relationen. av relationen. Ett objekt Ett objekt är här är del här i ett del annat i ett annat objekt objekt. Ägaren. Ägaren har exklusiv har exklusiv tillgång tillgång de till inneslutna de inneslutna objekten. objekten. n student! En student deltar deltar (enrolls) (enrolls) i kurs i en kurs n student! student kan ta kan många ta många kurser kurser n kurs! en kan kurs ha kan många ha många studenter studenter n lärare! en lärare kan ha kan många ha många kurser kurser n kurs! en har kurs bara har en bara lärare en lärare (nåja) (nåja)! Implementeras Implementeras med referenser med referenser dvs motorn dvs motorn innehåller innehåller en instansvariabel en instansvariabel som är som en pekare är en pekare till til en cylinder. en cylinder. F8 F8 19 19 F8 F8 20 20

Dependency (beror av) Om man tex vill kunna hämta information från ladok så måste man känna till strukturen hos kurser och studenter, man är beroende Man kan också modellera dynamiskt beteende i UML med sekvensdiagram och tillståndsdiagram. Det finns grafiska verktyg för att rita UML diagram tex argouml http://argouml.tigris.org/ Mycket nya glosor idag - igen! arv, inheritance, trädliknande arvstrukturer förälderklass ("superklass ), barnklass ("subklass ) base class = super class = parent class derived class = sub class = child class multipelt arv, multipelt implementationsarv extends överskuggning (override),, överlagring (overloading) parameterprofil metodbindning final, super, this typkompabilitet, typkonvertering instanceof statisk / dynamisk typ Uniform Modeling Language UML visibility, multiplicity protected, relationer: arv, association, aggregation, composition referenser, implementeras F8 21 F8 22