Föreläsning 13 Innehåll

Relevanta dokument
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 5-6 Innehåll

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

Föreläsning Innehåll. Checklista. Några metoder i klassen ArrayList<E> Exempel på vad du ska kunna

Repetition av viktiga begrepp inom objektorienterad programmering

1 Repetition av viktiga begrepp inom objektorienterad programmering

Föreläsning Innehåll. Generisk klass. Några metoder i klassen ArrayList<E>

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Exempel på användning av arv: Geometriska figurer

Mål Förklaring av termer

Mål Förklaring av termer

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

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

Föreläsning 9-10 Innehåll

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

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

Konstruktion av klasser med klasser

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

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

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

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

OOP Objekt-orienterad programmering

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

EDAA30 Programmering i Java - fortsättningskurs

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

OOP Objekt-orienterad programmering

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

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

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

Laboration 1: Figurer i hierarki

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

DAT043 - Föreläsning 7

Klasshierarkier - repetition

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

Arv och polymorfism i Java

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

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

TDDD78 Viktiga begrepp, del 2

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

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Designmönster. Kapitel Kommandomönstret

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

Objektorienterad Programmering (TDDC77)

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Föreläsning 1 Innehåll

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

TENTAMEN OOP

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

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

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

Classes och Interfaces, Objects och References, Initialization

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

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

Introduktion till arv

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Föreläsnings 10 - Överlagring, Konstruerare, Arv, Mer Exceptions, Reguljära Uttryck

Föreläsning 7-8 Innehåll

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

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

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

PROGRAMMERINGSTEKNIK TIN212

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Polymorfi. Objektorienterad och komponentbaserad programmering

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

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Föreläsning 3-4 Innehåll

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

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Tentamen i Objektorienterad modellering och diskreta strukturer

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

Malmö högskola 2007/2008 Teknik och samhälle

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

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

Föreläsning REPETITION & EXTENTA

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

Lösningar till tentamen i EDAF25

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

Tentamen i Objektorienterad modellering och design

Föreläsning 1 Innehåll. EDAA01 Programmeringsteknik - fördjupningskurs. Detta ska du lära dig... Kursens mål. Detta kan du...

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

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

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

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

TENTAMEN OOP

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

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

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

Laboration 1 - Grunderna för OOP i Java

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

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

Transkript:

Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32

Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow? Vad händer på raden super(804, 804, Memory ); Ledning: Vilka parametrar har konstruktorn i SimpleWindow? public class MemoryWindow extends SimpleWindow { private int imgsize; private MemoryBoard board; /** Skapar ett fönster som kan visa memorybrädet board. */ public MemoryWindow(MemoryBoard board) { super(804, 804, "Memory"); this.board = board; imgsize = 800 / board.getsize();... Datavetenskap (LTH) Föreläsning 13 HT 2017 2 / 32

Arv En klass kan ärva från en annan klass. Det innebär att klassen ärver attribut och metoder. Det är i princip som om attributen och metoderna vore skrivna i klassen själv. Den klass som ärver kallas subklass, den klass den ärver ifrån kallas superklass. I exemplet från förra bilden ärver MemoryWindow från SimpleWindow. Ett MemoryWindow kan samma saker som ett SimpleWindow och lite till. Man kan säga att MemoryWindow utökar (eng. extends) SimpleWindow. Datavetenskap (LTH) Föreläsning 13 HT 2017 3 / 32

Klassdiagram I ett klassdiagram kan man visa vilka klasser som används och hur de hänger ihop. UML (Unified Modelling Language) kan användas för detta. Klassdiagram med superklassen SimpleWindow och subklassen MemoryWindow: SimpleWindow MemoryWindow Datavetenskap (LTH) Föreläsning 13 HT 2017 4 / 32

Arv extends Genom att skriva public class MemoryWindow extends SimpleWindow { blir MemoryWindow en subklass till SimpleWindow. Man skapar ett objekt av subklassen på vanligt sätt:... MemoryBoard b =... MemoryWindow mw = new MemoryWindow(b); Datavetenskap (LTH) Föreläsning 13 HT 2017 5 / 32

Arv super Superklassen SimpleWindow har en konstruktor med satser för att tilldela värden till attribut för höjd, bredd och titel. Den måste också exekveras när man skapar ett MemoryWindow-objektet. Det gör man genom att anropa superklassens konstruktor först inuti subklassens konstruktor: super(804, 804, "Memory"); Datavetenskap (LTH) Föreläsning 13 HT 2017 6 / 32

Diskutera I ett program ska geometriska former (kvadrater och cirklar) hanteras. Formerna ska kunna flyttas och ritas upp på skärmen. Formerna ska kunna ritas i ett SimpleWindow-fönster. Formerna ska kunna flyttas. Det ska vara lätt att lägga till nya former, t.ex. trianglar. Vilka klasser behövs? Datavetenskap (LTH) Föreläsning 13 HT 2017 7 / 32

Exempel: Geometriska former Klasser Square och Circle med metoder för att rita. Shape beskriver en geometrisk form med metoder för att ta reda på formens läge, flytta formen... Shape Square Circle Datavetenskap (LTH) Föreläsning 13 HT 2017 8 / 32

Subklasserna Square och Circle public class Square extends Shape { private int side; public Square(int x, int y, int side) { super(x, y); this.side = side;... public class Circle extends Shape { private int radius; public Circle(int x, int y, int radius) { super(x, y); this.radius = radius;... Datavetenskap (LTH) Föreläsning 13 HT 2017 9 / 32

Superklassen Shape public abstract class Shape { protected int x; protected int y; /** Skapar en geometrisk form med läget x,y. */ protected Shape(int x, int y) { this.x = x; this.y = y; /** Flyttar formen avståndet dx i x-led, dy i y-led. */ public void move(int dx, int dy) { x = x + dx; y = y + dy;... Datavetenskap (LTH) Föreläsning 13 HT 2017 10 / 32

Abstrakta klasser I program som använder våra klasser för geometriska former kommer vi inte att skapa objekt av klassen Shape, utan bara av klasserna Square och Circle. Vi kan rita kvadrater och cirklar, men ingenting som bara är en geometrisk form. Superklasser man inte ska skapa objekt av kallas abstrakta klasser. public abstract class Shape {... Datavetenskap (LTH) Föreläsning 13 HT 2017 11 / 32

Objekt innehåller både ärvda och egna attribut Exempel: Circle-objekt Deklareras i superklassen Shape Deklareras i subklassen Circle x y radius 98 56 50 Datavetenskap (LTH) Föreläsning 13 HT 2017 12 / 32

public, private eller protected I klassen måste man ange var ett attribut eller en metod ska vara åtkomlig: public åtkomlig utanför klassen private endast åtkomlig inuti i klassen protected åtkomlig i klassen och i alla dess subklassser om man inte skriver någon av dessa modifierare får attributet/metoden paketskydd och kan användas av andra klasser i samma paket. Ofta är attribut och konstruktorer i superklasser deklarerade protected. Datavetenskap (LTH) Föreläsning 13 HT 2017 13 / 32

När ska arv användas? Arv passar bra när man har en är en -relation mellan klasser. En kvadrat är en slags geometrisk form. En cirkel är en slags geometrisk form. Datavetenskap (LTH) Föreläsning 13 HT 2017 14 / 32

Här ska arv inte användas public class Point { private int x, y; public Point(int x, int y) { this.x = x; this.y = y; public void move(int dx, int dy) { x = x + dx; y = y + dy; Ska klassen Point vara superklass till klassen Shape så att klassen Shape kan ärva attributen x, y och metoden move? Nej! En geometrisk form är inte en slags punkt. Datavetenskap (LTH) Föreläsning 13 HT 2017 15 / 32

Sammansättning En geometrisk form kan däremot ha en punkt som anger formens läge: public class Shape { private Point location // formens läge public Shapes(Point location) { this.location = location; public void move(int dx, int dy) { location.move(dx, dy); Datavetenskap (LTH) Föreläsning 13 HT 2017 16 / 32

Fördelar med arv Modellen beskriver det verkliga systemet bättre. I problemet används både begreppet geometrisk form och kvadrater/cirklar. Gemensamma attribut och metoder behöver bara skrivas en gång i superklassen. Vi kan deklarera referensvariabler som får referera till objekt av alla de olika subklasserna. Exempel: ArrayList<Shape> list = new ArrayList<Shape>(); list.add(new Circle(98, 56, 50)); list.add(new Square(205, 7, 100)); Datavetenskap (LTH) Föreläsning 13 HT 2017 17 / 32

Referensvariabler och arv En referensvariabel som deklarerats med typen C får referera till objekt av klassen C och dessutom till objekt av alla subklasser till C. Exempel: En variabel med typen Shape får referera till objekt av alla subklasser till Shape. Shape ashape; ashape = new Circle(98, 56, 50);... ashape = new Square(205, 7, 100); Shape Square Circle Datavetenskap (LTH) Föreläsning 13 HT 2017 18 / 32

Typregler för arv Uppgift En referensvariabel som deklarerats med typen C får referera till objekt av klassen C och dessutom till objekt av alla subklasser till C. Shape s; Circle c; Vilka tilldelningssatser är korrekta? 1 c = new Circle(100, 100, 50); 2 s = new Circle(100, 100, 50); 3 c = new Square(100, 100, 50); 4 s = new Square(100, 100, 50); Datavetenskap (LTH) Föreläsning 13 HT 2017 19 / 32

Typregler för arv Svar Shape s; Circle c; Vilka tilldelningssatser är korrekta? 1 c = new Circle(100, 100, 50); Ok 2 s = new Circle(100, 100, 50); Ok 3 c = new Square(100, 100, 50); Fel 4 s = new Square(100, 100, 50); Ok s får referera till Square- och Circle-objekt. c får bara referera till Circle-objekt. Datavetenskap (LTH) Föreläsning 13 HT 2017 20 / 32

Diskutera Problem med metoden draw Ok: Circle c = new Circle(100, 100, 50); c.draw(w); Ok: Shape s = new Circle(100, 100, 50); s.move(10, 20); Borde fungera, men fungerar inte ännu: Shape s = new Circle(100, 100, 50); s.draw(w); Varför fungerar inte s.draw(w)? Datavetenskap (LTH) Föreläsning 13 HT 2017 21 / 32

Abstrakt metod Eftersom s är deklarerad med typen Shape så söker kompilatorn i klassen Shape och uppåt i arvshierarkin efter draw. Men det finns ingen metod draw i klassen Shape. Istället är draw implementerad i subklasserna Square och Circle. För att vi ska kunna skriva s.draw(w) måste det finnas en metod draw i klassen Shape. Lösningen är att deklarera draw som en abstrakt metod: public abstract class Shape {... public abstract void draw(simplewindow w);... Datavetenskap (LTH) Föreläsning 13 HT 2017 22 / 32

Abstrakt metod Nu finns det en metod draw i klassen Shape och satsen s.draw(w) går att kompilera. Eftersom Shape innehåller en abstrakt metod måste även Shape deklareras abstract. De riktiga draw-metoderna finns implementerade i subklasserna Square och Circle. Alla subklasser till Shape måste implementera en draw-metod. Datavetenskap (LTH) Föreläsning 13 HT 2017 23 / 32

Deklarerad typ vs runtime-typ Shape s = new Circle(100, 100, 50); s.draw(w); Hur väljs rätt draw-metod vid exekveringen? Ritas en kvadrat eller cirkel? Det beror på vad för slags objekt s refererar till. Dvs. vad som stod efter new när objektet skapades. new Square... eller new Circle... Variabeln s har den deklarerade typen Shape men runtime-typen Circle. Datavetenskap (LTH) Föreläsning 13 HT 2017 24 / 32

Dynamisk bindning Java använder dynamisk bindning vid metodanrop. Det innebär att det är objektets typ som under exekveringen avgör vilken metod som ska anropas. När satsen s.draw(w) ska exekveras undersöker Java-systemet objektet s refererar till. Om det är ett Square-objekt så anropas draw i Square, om det är ett Circle-objekt så anropas draw i Circle. Datavetenskap (LTH) Föreläsning 13 HT 2017 25 / 32

Exempel: geometriska former Klassdiagram x Shape {abstract y move(int, int) draw(simplewindow) Square side draw(simplewindow) Circle radius draw(simplewindow) Datavetenskap (LTH) Föreläsning 13 HT 2017 26 / 32

Exempel: geometriska former Programidé Skriv ett program som ritar några cirklar och kvadrater. Låt användaren klicka på en av formerna och flytta den formen till ett nytt läge. För att lösa problemet är det praktiskt att lägga till några metoder i klassen Shape som undersöker om en punkt ligger nära formen. flyttar formen till ett nytt läge. raderar bilden av formen i fönstret w. Programmet skulle t.ex. kunna användas till att göra en enkel skiss över en trädgård där cirklarna är träd och kvadraterna hus. Nya geografiska former kan lätt läggas till (blir nya subklasser). Data om de geografiska formerna kan läsas/skrivas på fil. Datavetenskap (LTH) Föreläsning 13 HT 2017 27 / 32

Klassen Object I Java finns en klass Object som är superklass till alla andra klasser. En referensvariabel av typen Object kan alltså referera till objekt av alla typer. Exempel: Object obj = new Square(100, 100, 50); Object Shape Square Circle Datavetenskap (LTH) Föreläsning 13 HT 2017 28 / 32

Klassen Object metoder I klassen Object finns det några metoder (t.ex. tostring och equals) som alla andra klasser ärver. equals tostring Object Man kan definiera om (skugga) metoderna i sina egna klasser så att man får exakt det beteende man vill ha.... Datavetenskap (LTH) Föreläsning 13 HT 2017 29 / 32

Metoden tostring I klassen Object finns metoden tostring: /** Skapar en "läsbar representation" av objektet. */ String tostring(); När man skriver ut ett objekt, t.ex: Square sq = new Square(100, 100, 50); System.out.println(sq); så är det metoden tostring som används inuti println. Man kan definiera om (skugga) metoden tostring så att man får exakt den utskrift man vill ha. Man kan t.ex. lägga till följande metod i klassen Square: public String tostring() { return "Sidlängd " + side + ", läge " + x + " " + y; Datavetenskap (LTH) Föreläsning 13 HT 2017 30 / 32

Metoden equals I klassen Object finns metoden equals: /** Undersöker om detta objekt är lika med obj. */ boolean equals(object obj); Metoden equals i Object fungerar likadant som ==, dvs. jämför referenser. Square sq1 = new Square(100, 100, 50); Square sq2 = new Square(100, 100, 50);... sq1.equals(sq2) // false om equals ej skuggad i Square Man kan själv definiera om (skugga) metoden equals så att den jämför innehållet i objekten istället. Detta är gjort i Javas standardklasser. Datavetenskap (LTH) Föreläsning 13 HT 2017 31 / 32

Checklista Exempel på vad du ska kunna Förstå och rita mycket enkla klassdiagram i UML. Förklara begreppen: arv, superklass, subklass. Förklara begreppen: abstrakta klasser och metoder. Implementera superklasser och subklasser. Datavetenskap (LTH) Föreläsning 13 HT 2017 32 / 32