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



Relevanta dokument
Felsökning, UML. Översikt. Java starkt typat. Typomvandling (casting) Exempelhierarki. Stark typning

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

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

Objektorienterad Programmering (TDDC77)

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

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

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

Laboration 1 - Grunderna för OOP i Java

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

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

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

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

OOP Objekt-orienterad programmering

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

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

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

Classes och Interfaces, Objects och References, Initialization

Kopiering av objekt i Java

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

Konstruktion av klasser med klasser

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

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

Föreläsning 13 Innehåll

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

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

Länkade strukturer. (del 2)

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

DAT043 - Föreläsning 7

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

Introduktion till Java

Klasshierarkier - repetition

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

Introduktion till arv

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Arv. Objektorienterad och komponentbaserad programmering

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

Objektorienterad programmering i Java

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

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

Objektorienterad Programmering (TDDC77)

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

Generisk klass med typparameter Inre klass - ListIterator

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

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

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Föreläsning 15: Repetition DVGA02

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

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Föreläsning 5-6 Innehåll

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

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

OOP Objekt-orienterad programmering

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

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

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

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

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

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

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML

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

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Imperativ programmering. Föreläsning 4

TDDD78 Viktiga begrepp, del 2

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

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

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Föreläsning 9: Arv och UML

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

TENTAMEN OOP

Arrayer. results

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

TENTAMEN OOP

Repetition av OOP- och Javabegrepp

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

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.

Föreläsning 2. Länkad lista och iterator

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

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

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

Repetition av OOP- och Javabegrepp

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

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

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

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

Transkript:

Översikt UML Sekvensdiagram (dynamic structure) Informationsflöde genom programmet Användningsfall (use cases) Aktörers interaktion med systemet Paketdiagram Beroenden mellan paket abstrakta klasser Multipel ärvning Programmering tillämpningar och datastrukturer 2 UML mellan klasser 12 olika diagramtyper, bl.a. Klassdiagram Är en (arv, inheritance) Känner till (association) Sekvensdiagram Anropsflödet Användningsfall Paketdiagram Tillståndsdiagram Finite state machine Aktivitetsdiagram Är ett aggregat av (aggregation) Noder i en lista Namn i en e-telefonkatalog Är en sammansättning av (composition) Obligatoriska delar Flygplan måste ha vingar Har inre (nästlad) klass (enclosure) Programmering tillämpningar och datastrukturer 3 Programmering tillämpningar och datastrukturer 4 A är ett aggregerat av B:n Kontor aggregat av Enheter Finns en referens till klass B genom en variabel deklarerad i klass A Ofta genom listor, arrays, etc. Delarna kan tillhöra flera helheter Ex. noder Ex. färger (color) Delarna kan existera självständigt utan aggregatet public class Kontor { // Olika avdelningar på kontoret Enhet[] avdelningar = { new Enhet( fakturor"), new Enhet( order"), ; public Kontor() { // konstuktor Ofta många till många relation Programmering tillämpningar och datastrukturer 5 Programmering tillämpningar och datastrukturer 6 1

Kontor aggregat av Enheter Nod aggregat av Noder public class Nod { private Nod förra; private Nod nästa; public Nod(Nod förra, Nod nästa) { this.förra = förra; this.nästa = nästa; public void sättnästa() { // konstuktor Programmering tillämpningar och datastrukturer 7 Programmering tillämpningar och datastrukturer 8 Nod aggregat av Noder Består av (sammansättning av) förra nästa Delarna lever och dör med helheten, dvs. meningslöst att ha delarna när helheten är borta Ex. flygplansvingar Kan endast tillhöra en helhet Ex. punkt tillhör en geometrisk form Programmering tillämpningar och datastrukturer 9 Programmering tillämpningar och datastrukturer 10 består av tangentbord, består av tangentbord public class { Tangentbord inputdevice; Skärm display; public () { // konstuktor Programmering tillämpningar och datastrukturer 11 Programmering tillämpningar och datastrukturer 12 2

Nästlade klasser (klass i klass) Nästlade klasser public class MyList { private MyNode first; private MyNode last; private int size; private class MyNode { private MyNode previous; private MyNode next; private Object contents; Programmering tillämpningar och datastrukturer 13 Programmering tillämpningar och datastrukturer 14 Sekvensdiagram Sekvensdiagram Visar informationsflöde i pgm:et Vertikal tidsaxel Fokus på följd av händelser Inte exakt timing (men det går också) Visar hur objekt skapas Korta vertikala aktiveringslinjer för olika objekt (fet linje längs tidslinjen) Visar hur länge objektet är aktivt Bearbetar ett meddelande just då Meddelande skickas Svar returneras Programmering tillämpningar och datastrukturer 15 Programmering tillämpningar och datastrukturer 16 Exempel: Djur Sekvensdiagram Djur public static void main([] args) { Djur[] alladjur = new Djur[2]; int i; alladjur[0] = new Katt("Kurre"); alladjur[1] = new Hund("Vilma"); i = 0; while(i < alladjur.length) { alladjur[i].presenteradig(); i = i + 1; tid Programmering tillämpningar och datastrukturer 17 Programmering tillämpningar och datastrukturer 18 3

Sekvensdiagram Djur Användningsfall (use cases) Visar hur användare och yttre entiteter (ex.vis. andra system) interagerar med programmet Används vid analys av användarkrav Utgångspunkt för senare systemtest Test att systemkomponenterna fungerar tillsammans Test att systemet fungerar tillsammans med andra system som kunden kör Programmering tillämpningar och datastrukturer 19 Programmering tillämpningar och datastrukturer 20 Användningsfall (use cases) Paket Visar hur ett paket är beroende av andra paket Programmering tillämpningar och datastrukturer 21 Programmering tillämpningar och datastrukturer 22 Abstrakta klasser Abstrakta klasser Innehåller en del odefinierade (dvs. abstrakta metoder) Kan inte instansieras P.g.a. att kod fattas Kan dock ärvas av andra klasser Basklass där gemensamma metoder kan anges Abstrakta metoder (definieras ej): Krav på att dessa definieras i varje subklass! Vanliga metoder (som definieras) Kan inte instansieras Kan dock ha konstruktor som initierarar dess variabler (kan anropas när ett subklassobjekt ska skapas) Kan ärva och ärvas Programmering tillämpningar och datastrukturer 23 Programmering tillämpningar och datastrukturer 24 4

Abstrakta klasser presenteradig() Kursiv = abstrakt klass Kursiv = abstrakt metod public static void main([] args) { Djur[] alladjur = new Djur[3]; int i; Programmering tillämpningar och datastrukturer 25 alladjur[0] = new Hund( Laban"); alladjur[1] = new Katt( Kurre"); alladjur[2] = new Katt( Morris"); i = 0; while(i < alladjur.length) { alladjur[i].presenteradig(); i = i + 1; Anropas aldrig för Djur, men måste finnas i Djur (annars kompilatorfel) Programmering tillämpningar och datastrukturer 26 Abstrakta klasser Djur som vanlig klass Vill inte definiera när jag vet att koden aldrig kommer att utföras Det är de specifika djurarterna (subklasserna) som vet bäst hur de ska presentera sig, så låt definitionen ligga endast i subklasserna men, måste finnas för att möjliggöra generellt anrop public class Djur { private namn; private int födelseår; private static int ålder; private static int nuvarandeår = 2005; public Djur( namn, int ålder) { this.namn = namn; Djur.ålder = ålder; //födelseår = nuvarandeår - ålder; public void presenteradig() { System.out.println("Morr. Jag är ett djur"); Programmering tillämpningar och datastrukturer 27 Programmering tillämpningar och datastrukturer 28 Djur som abstrakt klass Interface public abstract class Djur { private namn; private int födelseår; private static int ålder; private static int nuvarandeår = 2005; public Djur( namn, int ålder) { this.namn = namn; Djur.ålder = ålder; //födelseår = nuvarandeår - ålder; public abstract void presenteradig(); // deklareras, men defineras inte Programmering tillämpningar och datastrukturer 29 Alla metoder är abstrakta Finns inga definitioner i klassen Kan inte instansieras Kan inte heller ärvas Finns ingen kod att ärva Kan implementeras av andra klasser Dvs. klassen bestämmer hur metoderna ska implementeras public MyList implements List { Programmering tillämpningar och datastrukturer 30 5

Interface Vad är protokoll? Kontrakt om implementeringen av ett visst protokoll Ex.vis. mellan Java designers och tillämpnings-programmerare (application programmers) Mellan programmeringsteam som är ansvariga för olika delar av ett system Lista av klassens publika signaturer (utökat med returvärden) En klass som har följande metoder public boolean set(int index, Object o) { public Object get(int index) { Har protokoll boolean set(int, Object) Object get(int) Programmering tillämpningar och datastrukturer 31 Programmering tillämpningar och datastrukturer 32 Interface Abstrakta klasser Specificerar signatur hos ett antal metoder Signatur = namn + parametrar Explicit krav på att den klass som implementerar interfacet inkluderar alla specifierade metoder Annars kompilatorfel Ibland används abstrakta klasser som mellansteg public AbstractSequentialList implements List { public MyList extends AbstractSequentialList { Syftet är att hjälpa programmeraren halva vägen Programmering tillämpningar och datastrukturer 33 Programmering tillämpningar och datastrukturer 34 Abstrakta klasser som mellansteg Interface Implementerar en del grundläggande metoder i interfacet Ex. sådant som kan antas vara likadant i olika implementationer av listor Programmeraren behöver bara lägga till några enstaka metod-def för en komplett implementation av interfacet Resten kan ärvas från abstrakta klassen implementerar Programmering tillämpningar och datastrukturer 35 Programmering tillämpningar och datastrukturer 36 6

Ej multipelt arv i Java Java Om en klass hade ärvt från flera superklasser Problem Antag att samma variabel eller instansmetod i både klasserna Ex. klasserna Pingvin och Falk har var sitt namn, varsitt sätt att ta sig fram Vilken av dessa ska ärvas av gemensam subklass? Tillåter inte multipel ärvning Men, finns sätt att implementera detta m.h.a. interfaces Klasser kan implementera multipla interfaces Löser samtidigt problemet med vilka variabler och metoder som ska ärvas Du anger själv vilka Programmering tillämpningar och datastrukturer 37 Programmering tillämpningar och datastrukturer 38 Hade velat ha Multipel ärvning via interface Programmering tillämpningar och datastrukturer 39 Programmering tillämpningar och datastrukturer 40 Måste kod skrivas två gånger? Delegering public class Kursass { Student student; Lärare lärare; public Kursass( namn, int arbetstimmar) { student = new Student(namn, ); lärare = new Lärare(arbetstimmar,...); public int hämtaarbetstimmar() { return lärare.hämtaarbetstimmar(); Programmering tillämpningar och datastrukturer 41 Programmering tillämpningar och datastrukturer 42 7

Delegering Lite djupare om klasser och objekt Programmering tillämpningar och datastrukturer 43 Kopia Kopia Klona objekt istf att återskapa dess innehåll från scratch T.ex. säkerhetskopiering objekt Obs! Referenser måste hanteras på ett särskilt sätt! dator1 = new (); // dator med defaultvärden dator1.sätttillverkare(ibm); dator2 = dator1; // vill ha kopia dator2.sättminne(526); // fast med mer minne Är dator2 verkligen en kopia av dator1? Programmering tillämpningar och datastrukturer 45 Programmering tillämpningar och datastrukturer 46 Kopia: resultat Istället: kloning dator1 = dator2 = minne = 526 value = IBM Processor typ = hastighet = 1.2 value = Pentium 4 Låter objektet självt skapa ett nytt likadant objekt med samma värden på alla instansvariabler Dvs. en kopia av sig självt i ett nytt objekt Kan använda sin egen konstruktor Programmering tillämpningar och datastrukturer 47 Programmering tillämpningar och datastrukturer 48 8

Ytlig kloning Ytlig kloning (forts) class public clone() { // initiera nytt objekt med mina nuvarande värden cloned = new (tillverkare, processor, minne); return cloned; Är referenser? Kod utanför : dator1 = new ( IBM, new Processor( Pentium 3, 1.0), 256); dator2 = dator1.clone(); // vill ha liknande dator dator2.sättminne(512); // fast med mer minne Programmering tillämpningar och datastrukturer 49 Programmering tillämpningar och datastrukturer 50 Ytlig kloning: resultat dator1 = dator2 = minne = 256 minne = 526 value = IBM Processor typ = hastighet = 1.0 value = Pentium 3 Ytlig kloning Kopia på alla variabler Returnera dessa i ett nytt objekt Problem Funkar för vanliga variabler Men, de nya referensvariablerna kommer att peka på samma sak som de gamla referenserna Programmering tillämpningar och datastrukturer 51 Programmering tillämpningar och datastrukturer 52 Ytlig kloning av strängar OK Exempel Strängar mycket speciella objekt Strängar kan inte förändras (immutable) Kopian pekar på gamla strängen Men, eftersom strängar inte kan förändras när nya strängen ska skrivas över skapar Java automatiskt ny sträng Ny sträng skapas, gamla släpps (referensen pekar på nya strängen) dator2.sätttillverkare ( Dell ); Programmering tillämpningar och datastrukturer 53 Programmering tillämpningar och datastrukturer 54 9

Exempel (forts) Funkar inte för andra referenser dator1 = minne = 256 value = IBM Processor typ = hastighet = 1.0 value = Pentium 3 Vill ha annan processor i nya kopian dator2.sättprocessor( Pentium 4, 1.2); dator2 = minne = 526 value = Dell Programmering tillämpningar och datastrukturer 55 Programmering tillämpningar och datastrukturer 56 Ytlig kloning: resultat Behöver djup kloning dator1 = dator2 = minne = 256 minne = 526 value = IBM Processor typ = hastighet = 1.2 value = Dell value = Pentium 4 Innebär rekursiv kloning Klona även alla objekt som refereras public clone () { // initiera nytt objekt med mina nuvarande värden cloned = new (); cloned. tillverkare; // min tillverkare cloned. CPU.clone(); // klona CPU cloned.minne = minne; // min skärm return cloned; // returnera klon Programmering tillämpningar och datastrukturer 57 Programmering tillämpningar och datastrukturer 58 10