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

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

Laboration 1 - Grunderna för OOP i Java

Klasshierarkier - repetition

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

OOP Objekt-orienterad programmering

Konstruktion av klasser med klasser

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

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

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

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

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

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

OOP Objekt-orienterad programmering

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

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

Föreläsning 13 Innehåll

Objektorienterad Programmering (TDDC77)

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

DAT043 - Föreläsning 7

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

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

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

TENTAMEN OOP

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Imperativ programmering. Föreläsning 4

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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 Alex Gerdes, 2016

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

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Introduktion till Java

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

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

Föreläsning 9: Arv och UML

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

Objektorienterad Programmering (TDDC77)

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

TENTAMEN OOP

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

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

Instuderingsuppgifter läsvecka 2

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Objekt och klasser - Introduktion

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

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

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

Introduktion till arv

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

F4. programmeringsteknik och Matlab

Introduktion till Java

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

OOP Objekt-orienterad programmering

Objektorienterad programmering i Java

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

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

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

TENTAMEN OOP

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

Arv. Objektorienterad och komponentbaserad programmering

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

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

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

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

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

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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

JAVA Mer om klasser och objektorientering

Objektorienterad programmering Föreläsning 5

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

Modeller, Objekt och Klasser

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, 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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

Enkla variabler kontra referensvariabel

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

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

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Föreläsning 5-6 Innehåll

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

Lösningsförslag övning 2.

Transkript:

Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language Finns verktyg för att Analysera bakomliggande designbeslut Kolla om modellen konsistent Automatisk kodgenerering OMG (Object Modeling Group) Jobbar med standardisering av UML 12 olika diagramtyper, bl.a. am Sekvensdiagram Anropsflödet Användningsfall Paketdiagram Tillståndsdiagram Finite state machine Aktivitetsdiagram Programmering tillämpningar och datastrukturer 3 Programmering tillämpningar och datastrukturer 4 am am (UML) Noder beskriver Information om klassen Klassens namn Attribut (variabler) Operatorer (metoder) Kopplingar beskriver mellan klasser Programmering tillämpningar och datastrukturer 5 Programmering tillämpningar och datastrukturer 6 1

Information om klassen Klasshierarki (arv) Statiska variabler och metoder Understryket Typ av variabel processor : String minne : int Signatur plus retur-typ hos metod hämtaminne() : int Programmering tillämpningar och datastrukturer 7 Programmering tillämpningar och datastrukturer 8 Klasshierarki (forts) Laptop public class Dator { private int minne; public Dator() { // konstruktor public double hämtaminne() { return minne; public String tostring() { return Minne: + minne + \nprocessor: + processor + ; Programmering tillämpningar och datastrukturer 9 public class Laptop extends Dator { private static double skärm = 14.1; private double vikt = 3; public void Laptop() { // konstruktor super(); vikt(); public String tostring() { return super.tostring() + Skärm: + skärm + ; // klassvariabel // instansvariabel Programmering tillämpningar och datastrukturer 10 Automatiska anrop till super Automatiska anrop till super public void Laptop() { super(); vikt(); public void Laptop() { super(); vikt(); public void Laptop() { vikt(); public void Laptop() { super(); vikt(); måste ha parameterlös konstruktor i Dator Programmering tillämpningar och datastrukturer 11 Programmering tillämpningar och datastrukturer 12 2

Protected Metoders synlighet Betecknas med # i UML Ex. variabler som man vill komma åt från subklasser (dock inte från andra ställen) class Dator protected String tillverkare; class Laptop extends Dator tillverkare = IBM ; Metoder oftast public Synliga för alla Därmed problem om flera metoder har samma signatur Lägg gärna klasshierarkier (delsystem) i olika paket Programmering tillämpningar och datastrukturer 13 Programmering tillämpningar och datastrukturer 14 -private Syns endast i klassen (instanserna) # protected Syns även i subklasser (även ifall dessa ligger i annat paket) Paketsynlighet (default) Syns i alla klasser i det egna paketet + public Syns överallt (även i andra paket) Programmering tillämpningar och datastrukturer 15 Programmering tillämpningar och datastrukturer 16 : private : protected paket paket Programmering tillämpningar och datastrukturer 17 Programmering tillämpningar och datastrukturer 18 3

: paket : public paket paket Programmering tillämpningar och datastrukturer 19 Programmering tillämpningar och datastrukturer 20 - abstraktion Procedurell abstraktion Skilja på vad som ska utföras och hur detta utförs Ex. använd metod istf inkopiering av kod Dataabstraktion Skilja på data (innehåll) och hur dessa organiseras, lagras och hanteras Information hiding Dölja information om hur klasser och objekt är implementerade Inkapsling (exempel på information hiding) Privata variabler Publika metoder Programmering tillämpningar och datastrukturer 21 Programmering tillämpningar och datastrukturer 22 Vill ha minsta möjliga beroenden mellan klasser Lättare att ändra i en klass utan att andra klasser behöver anpassas Den interna implementationen kan vara ändrad Exponera så lite som möjligt för andra klasser Direktaccess av variabler farligt class Djur { public int ålder; Alla meddelanden fungerar som förut Djur d = new Djur(); System.out.println( Djurets ålder är + d.ålder); Programmering tillämpningar och datastrukturer 23 Programmering tillämpningar och datastrukturer 24 4

Exponera så lite som möjligt för andra klasser Direktaccess av variabler farligt class Djur { private public int innevarandeår = 2006; private public födelseår = innevarandeår; Djur d = new Djur(); System.out.println( Djurets ålder är + d.ålder); d.hämtaålder()); Information hiding Dölja information om hur klasser och objekt är implementerade Inkapsling (exempel på information hiding) Privata variabler Publika metoder Programmering tillämpningar och datastrukturer 25 Programmering tillämpningar och datastrukturer 26 Association Association Objekt av typ A skickar meddelande till objekt av typ B Innebär: Det finns en metod i klass B som matchar meddelandet A innehåller referens till ett objekt av typ B Programmering tillämpningar och datastrukturer 27 Programmering tillämpningar och datastrukturer 28 Association (via variabel) Association (via parameter) public class BankKonto { private static double räntesats; private double saldo; private Kund kontoinnehavare; public double skickasaldobesked() { skrivtill(kontoinnehavare, saldo); Objekt av den här typen harkollpåobjektavden här typen public class BankKonto { private static double räntesats; private double saldo; Objekt av den här typen har kontakt med objekt av den här typen public double skickasaldobesked(kund kontoinnehavare) { skrivtill(kontoinnehavare, saldo); Programmering tillämpningar och datastrukturer 29 Programmering tillämpningar och datastrukturer 30 5

Association Association A innehåller referens till ett objekt av typ B a. Kan vara variabel deklarerad i A b. Kan vara parameter i en metod hos A I UML: Om fall a. kan rollen ex.vis. sättas till variabelnamnet Programmering tillämpningar och datastrukturer 31 Programmering tillämpningar och datastrukturer 32 ning (overriding) M:M (1..* 1..*/0..*/*) Många till många Ex. Ipod - låtar 1:M (1 1..*/0..*/*) Ett till många Ex. ränta - konton 1:1 (1 1) Ett till ett Ex. student personnummer public class Djur { public void presenteradig() { System.out.println( Morr, jag är ett djur ); public class Katt extends Djur { public void presenteradig() { System.out.println( Mjau, jag är en katt ); Programmering tillämpningar och datastrukturer 33 Programmering tillämpningar och datastrukturer 34 ning av tostring ing (overloading) class Dator { public String tostring() { return Minne: + minne + \nprocessor: + processor + ; Metoder med samma namn, olika signaturer inom samma klass Ex. konstruktorer för klassen Dator public void Dator() { class Laptop { public String tostring() { return super.tostring + \nskärm: + skärm + ; public void Dator(String tillverkare) { public void Dator(String tillverkare, int minne) { Vilken metod som exekveras bestäms enligt hur anropet ser ut Programmering tillämpningar och datastrukturer 35 Programmering tillämpningar och datastrukturer 36 6

Java: Stark typning Java: Stark typning Kompilatorn kollar alltid om ett uttryck (eller anrop) är kompatibel med variabelns typ En variabel kan dock under körning komma att referera till subklass Kompilatorn kollar alltid om ett uttryck (eller anrop) är kompatibel med variabelns typ En variabel kan dock under körning komma att referera till subklass Dator dator = new Laptop(); Laptop laptop = dator; // fungerar bra: automatisk upcast // får kompilatorfel Dator dator = new Laptop(); Laptop laptop = (Laptop) dator; // fungerar bra: automatisk upcast // OK! Kompilerar inte trots att dator faktiskt refererar till ett objekt av typen Laptop Måste typomvandla manuellt Programmering tillämpningar och datastrukturer 37 Programmering tillämpningar och datastrukturer 38 Ett annat exempel hämtaskärm() ej def. i Dator! Dator dator1; // kan referera till Dator eller till subklass Dator dator2; // kan referera till Dator eller till subklass dator1 = new Laptop(); dator2 = new Desktop(); // subklass // subklass köp(dator dator, double pris) { if (dator.hämtaskärm() > 15) { // vill ha stor skärm Kompilatorfel: hämtaskärm() inte definierad i Dator Programmering tillämpningar och datastrukturer 39 Programmering tillämpningar och datastrukturer 40 Kompilatorfel Fixa genom typomvandling Viktigt att objekt är av rätt typ när dess metod anropas Annars kompilatorfel köp(dator dator, double pris) { if (dator.hämtaskärm() > 15) { // vill ha 15 skärm Ger kompilatorfel! köp(dator dator, double pris) { Laptop laptop = (Laptop) dator; if (laptop.hämtaskärm() > 15) { // vill ha 15 skärm Programmering tillämpningar och datastrukturer 41 Programmering tillämpningar och datastrukturer 42 7

Problem Array av datorer Gör vi rätt i att omvandla till just Laptop Hur handskas med data av varierande typ? Tänk om det variabeln Dator innehöll en desktop? [0] [1] [2] [3] [4] Vanligt med blandat innehåll i samma datastruktur Desktop Laptop Laptop Desktop Desktop Programmering tillämpningar och datastrukturer 43 Programmering tillämpningar och datastrukturer 44 Array av datorer Lösning? Dator[] datorer = new Dator[5]; Laptop laptop; Dator[] datorer = new Dator[5]; Laptop laptop; datorer[0] = new Laptop(); datorer[1] = new Desktop(); for(int i = 0; i<datorer.length; i++) { if (datorer[i].hämtaskärm() > 15) { // vill ha minst 15 tum skärm datorer[0] = new Laptop(); datorer[1] = new Desktop(); for(int i = 0; i<datorer.length; i++) { laptop = (Laptop) datorer[i]; if (laptop.hämtaskärm() > 15) { // vill ha minst 15 tum skärm Ger körfel! Programmering tillämpningar och datastrukturer 45 Programmering tillämpningar och datastrukturer 46 Felaktig typomvanling Felaktig downcast (forts) initiering laptop = (Laptop) dator; // risk för att det inte är nedåt-cast (Laptop) OK Ger runtime error: ClassCastException om dator refererade till Desktop senare referens (Laptop) error Varför? Programmering tillämpningar och datastrukturer 47 Programmering tillämpningar och datastrukturer 48 8

Körning - kompilering Kolla typ innan downcast! Kompilatorn Stark typning Referens måste stämma överens med innehåll/anrop Måste nedåt-omvandla manuellt Under körning if (dator instanceof Laptop) { laptop = (Laptop) dator; Polymorfism Samma variabel kan innehålla olika saker Måste hålla koll på vad som gömmer sig bakom en variabel Test för att undvika runtime error Casting för att undvika kompileringsfel Programmering tillämpningar och datastrukturer 49 Programmering tillämpningar och datastrukturer 50 Lösning! Dator[] datorer = new Dator[5]; Laptop laptop; datorer[0] = new Laptop(); datorer[1] = new Desktop(); for(int i = 0; i<datorer.length; i++) { if (datorer[i] instanceof Laptop) { laptop = (Laptop) datorer[i]; if (laptop.hämtaskärm() > 15) { // vill ha minst 15 tum skärm Programmering tillämpningar och datastrukturer 51 9