Arv och polymorfism i Java

Relevanta dokument
Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Föreläsning 13 Innehåll

Klasshierarkier - repetition

Laboration 1: Figurer i hierarki

Kopiering av objekt i Java

Introduktion till arv

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

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

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

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

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Objektsamlingar i Java

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

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

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

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

Föreläsning 5-6 Innehåll

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

1 Repetition av viktiga begrepp inom objektorienterad programmering

OOP Objekt-orienterad programmering

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

Repetition av viktiga begrepp inom objektorienterad programmering

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

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

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

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

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

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

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

TDDC76 - Programmering och Datastrukturer

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

Objektorienterad Programmering (TDDC77)

Konstruktion av klasser med klasser

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

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

Övningsuppgift. Repeterbara citat. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

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

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

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

TENTAMEN: Objektorienterad programmering. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

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

Kursplanering Objektorienterad programmering

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Arv. Objektorienterad och komponentbaserad programmering

Laboration 1 - Grunderna för OOP i Java

Föreläsning 15: Repetition DVGA02

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

Imperativ programmering. Föreläsning 4

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

Exempel på användning av arv: Geometriska figurer

Classes och Interfaces, Objects och References, Initialization

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

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

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

Labyrinter Algoritmer och datastrukturer Obligatorisk Laboration nr 6

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Lab5 för prgmedcl04 Grafik

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

Agenda. Objektorienterad programmering Föreläsning 13

Dynamisk bindning och polymorfism

PROGRAMMERINGSTEKNIK TIN212

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

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

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

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen i Objektorienterad modellering och design

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

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

Objektorienterad programmering Föreläsning 5

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

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

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

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

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

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

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

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

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

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Länkade listor och automatisk testning

Tentamen. Grundläggande programmering i Java A 5p, DTAA

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.

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Transkript:

1 (5) Arv och polymorfism i Java Objektorienterad programmering 5 Syfte Att ge en introduktion till arvsmekanismen i Java. Mål Efter övningen skall du kunna definiera klasser med arv i Java. förstå hur dynamisk bindning och polymorfism fungerar. Utvecklingsmiljö BlueJ på valfri plattform. Litteratur Kursboken kap 8-10. Begrepp: Refaktorering, kodduplicering, arv, basklass, subklass, abstrakt klass, abstrakt metod, statisk typ, dynamisk typ, dynamisk bindning, polymorfism, djup kopiering. Dokumentet Kopiering av objekt i Java. (kloning.pdf) Färdig programkod Given programkod finns på kursens hemsida i er->programkod för labbarna ->arv.zip. Labbgrupper Arbetet genomförs i grupper om två personer. Redovisning Uppgifterna är obligatoriska. Senaste redovisningsdag, se kurs-pm samt Fire. Varje grupp skall självständigt utarbeta sin egen lösning. Samarbete mellan grupperna om övergripande principer är tillåtet, men inte plagiering. Länk till Fire-systemet finns på kurshemsidan. Ladda upp källtextfilerna för klasserna Point, Shape, Square, Circle, Triangle, Group samt HouseTest med dina lösningar i, samt README.txt med allmänna kommentarer om lösningen, i Fire. Redovisa slutversionerna av Shape, Square, Circle och Triangle så som de ser ut efter att du löst uppgift 2. Glöm inte att trycka på SUBMIT i Fire!

2 (5) Problembeskrivning Projektet arv innehåller ett exempel med en bild på ett hus som kan ritas upp grafiskt i ett ritfönster. Exemplet liknar ett som finns i kapitel 1 i kursboken, men med några små skillnader. Vi skall inte använda koden i kapitel 1 i den här övningen. Problemet med koden i arv är att den är dåligt strukturerad och behöver förbättras. Det finns t.ex. många identiska kodavsnitt som upprepas i flera av klasserna. Uppgifter Börja med att öppna arv och studera klasserna. Uppgifterna går ut på att bygga om (refaktorera) koden genom att använda arvsmekanismen i Java. Uppgift 1 Inför en basklass till Square, Circle och Triangle Som du ser har klasserna Square, Circle och Triangle mycket kod som är helt identisk. Gemensamma instansvariabler och metoder kan flyttas till en ny klass Shape som får vara basklass till de tre klasserna. Börja gärna med att skriva ut all kod på papper så får du bättre överblick. Gå igenom koden noggrant och bestäm vad som skall flyttas till basklassen. Basklassen skall ha en lämplig konstruktor. Kom ihåg att anropa denna i subklasserna (super). Vilka parametrar måste subklassernas konstruktorer ha? Tänk efter vilka metoder som kan placeras i basklassen. Om en instansvariabel eller en metod kan ligga där så skall den göra det. Alla instansvariabler skall vara privata. Tips: Två av metoderna måste definieras i alla subklasserna och de skall dessutom definieras som abstrakta i basklassen som också deklareras som abstrakt. Gå inte vidare förrän du är helt säker på vilka de två metoderna är! BlueJ: Skapa basklassen med högerklick i fönstret och välj New Class, skriv in namnet och välj sedan Abstract Class. Dra arvspilar från subklasserna till den nya klassen. Om du gjort allt rätt skall Square, Circle och Triangle nu fungera lika bra som innan omarbetningen.

3 (5) En klass för sammansatta figurer Hittills har varje figurobjekt motsvarat en enkel figur men man kan också tänka sig att bilda sammansatta figurer, ungefär som man grupperar figurobjekt i ritprogram och ordbehandlare. Om vi representerar sammansatta figurer med klassen Group så skall en sammansatt figur också betraktas som en figur, och därmed blir Group subklass till Shape. Ett objekt av klassen Group kan innehålla flera andra figurobjekt, även gruppobjekt, därav den streckade pilen från Group till Shape i klassdiagrammet nedan. 1 en grupp HAR flera figurer en grupp ÄR en figur Nu bör man fundera på om en grupp verkligen ÄR en Shape. Att en grupp har en position är naturligt, men har den en färg? Färg är snarare en egenskap hos gruppens komponenter. Vi skall därför refaktorera igen, innan vi inför klassen Group, genom att flytta allt som har med figurens position att göra från Shape till Point, som blir basklass till Shape. Flytta också de abstrakta metodsignaturerna i Shape till Point och addera en abstrakt metodsignatur för erase i Point. Även Point skall alltså vara abstrakt. Klassdiagrammet förändras till 1 Relationerna mellan figurklasserna (utom Canvas) är ett exempel på designmönstret Composite som behandlas i en senare kurs.

4 (5) Uppgift 2 Konstruera klassen Point enligt ovan och kontrollera att allt fungerar innan du går vidare. Tips: Definiera move i Point så här: public void move(int deltax,int deltay) { xposition += deltax; yposition += deltay; } och i Shape: public void move(int deltax,int deltay) { erase(); super.move(deltax,deltay); draw(); } Uppgift 3 Konstruera klassen Group. Ett visst figurobjekt kan adderas till flera olika grupper. Man måste bestämma om ett och samma figurobjekt kan tillhöra flera grupper samtidigt eller ej. I den här övningen gäller att detta inte får ske. Alla gruppobjekt skall äga sina delfigurobjekt exklusivt. Ingen delning av objekt mellan flera grupper får förekomma. Därför börjar vi med att lägga till metoden public Figurklass clone() (definiera den i samma stil som på sid. 4 i dokumentet nedan) i klassen Point. Behövs det en clone även i Shape, Circle, Square och Triangle, eller är det tillräckligt att låta dessa klasser ärva den från Point? Tänk efter! innan du fortsätter bör du studera dokumentet Kopiering av objekt i Java (kloning.pdf) Metoder i Group: (skriv dem i denna ordning!) add(point item) Adderar en kopia av item till gruppen (se clone). draw() Ritar upp gruppens delfigurer i ritfönstret. erase() Raderar gruppens delfigurer från ritfönstret. move(dx,dy) Flyttar hela gruppen i angiven riktning och ritar om den resize(scalefactor) skalar om bilden proportionellt. Bilden får inte ramla isär. Delbilderna måste både flyttas och skalas om på lämpligt sätt. Detta testas i uppgift 4. clone() Returnerar en djup kopia av gruppobjektet. Om kompilatorn varnar för osäkra typomvandlingar vid kompileringen av Group kan du prova att lägga till annotationen @SuppressWarnings("unchecked") före clone-metoden.

5 (5) Uppgift 4 Testa figurgruppsklassen Nedanstående satser finns i HouseTest.java: Group house = HousePicture.getPicture(); house.draw(); Group house2 = house.clone(); house2.move(100,-10); house2.resize(0.5); Group house3 = house2.clone(); house3.move(60,180); skall resultera i bilden till vänster. Om du istället exekverar Group house = HousePicture.getPicture(); house.draw(); Group house2 = house.clone(); house2.move(100,-10); house2.resize(0.5); Group house3 = house2.clone(); house3.move(60,180); house3.moveto(150,100); skall du få bilden till höger. Om inte, se första tipset nedan. Tips: Gruppen måste ha en egen position, det räcker inte att delfigurerna har sina. Denna kan från början sättas till (0,0). En ledtråd till varför positionen behövs är att studera hur metoden moveto är definierad i Point. Testa noga att moveto fungerar korrekt för gruppobjekt! Vad händer om man skriver house.add(house)? Prova och förklara! Lycka Till!