Objektorienterad programmering i Java I

Relevanta dokument
Övning 3. Datateknik A, Java I, 5 poäng

Objektorienterad programmering i Java I

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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

Tentamen i TDP004 Objektorienterad Programmering Teoretisk del

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

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

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

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

LÖSNINGSFÖRSLAG TENTAMEN

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

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

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

JAVA Mer om klasser och objektorientering

TUTORIAL: KLASSER & OBJEKT

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

Laboration 1: Figurer i hierarki

OOP Objekt-orienterad programmering

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Agenda. Objektorienterad programmering Föreläsning 13

TENTAMEN OOP

Objektorienterad programmering i Java

Klasshierarkier - repetition

Laboration 1 - Grunderna för OOP i Java

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

Föreläsning 13 Innehåll

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

Statistik över heltal

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

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

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

Objektorienterad Programmering (OOP) Murach s: kap 12-16

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

TENTAMEN OOP

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

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

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

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

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

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

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

Introduktion till arv

Objektorienterad programmering D2

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

Konstruktion av klasser med klasser

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

ID1004 Laboration 4, November 2012

Classes och Interfaces, Objects och References, Initialization

TENTAMEN OOP

Laborationsanvisning. Digital väckarklocka. Steg 2, laborationsuppgift 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Tentamen, EDAA10 Programmering i Java

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

Objektorienterad Programmering (TDDC77)

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

OOP Objekt-orienterad programmering

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

Objektorienterad programmering Föreläsning 5

Laboration 2: Designmönster

729G06 Föreläsning 1 Objektorienterad programmering

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

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

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

Objektorienterad programmering. Grundläggande begrepp

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

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

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

Laborationsanvisning. Geometriska figurer. Steg 2, laborationsuppgift 3. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Laboration 2: Designmönster

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?

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

kl Tentaupplägg

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

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

Malmö högskola 2008/2009 CTS

Objektorienterad programmering

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

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

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

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

Laboration 3, uppgift En klass för en räknare

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015

Ärvning av implementation. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva?

Tentamen i Introduktion till programmering

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

Arv. Objektorienterad och komponentbaserad programmering

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

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

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

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

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

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

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

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

LÖSNINGSFÖRSLAG TENTAMEN

DAT043 - Föreläsning 7

Transkript:

Laboration 3 Objektorienterad programmering i Java I Uppgifter: 1 Beräknad tid: ca 3-6 timmar Att läsa: sidan 150,151, 170-174, 200, 201 (arv) sidan 178-179, 360 (abstrakta klasser, metoder) + utdelat material Syfte: Att förstå och kunna använda begreppet arv Att kunna använda abstrakta klasser och metoder Redovisning: Laborationen ska redovisas under ordinarie laborationstid för någon av handledarna Lycka till!

Uppgift 1 Översikt Uppgiften i denna laboration går ut på att skapa en arvshierarki bestående av en abstrakt superklass samt tre subklasser. Syftet med laborationen är att förstå och kunna använda begreppen arv och abstract. Uppgift I laboration 1, del 2 och del 3, har du skapat klasser för att hanterar CD-skivor och de förlag dessa är utgivna på. I denna laboration ska du bygga vidare på den laborationen. Du ska utöka klasserna så att det även går att hantera böcker och videoband. Detta ska göras med hjälp av arv. En abstrakt basklass, Media, ska skapas för att kunna återanvända gemensam data och funktionalitet mellan klasserna CD, Book och Video. Dessa tre klasser ska alltså ärva sina egenskaper från klassen Media. Du ska skapa en arvshierarki som ser ut enligt nedan: Media Publisher Book CD Video Klassen Media ska vara deklarerad som abstract vilket innebär att det inte är möjlig att skapa instanser av klassen. Klassens finns enbart i syftet att ärvas. Anledningen till att klassen måste deklareras som abstrakt är att Media innehåller en abstrakt metod, nämligen getlengthasstring(). En abstrakt metod är en metod som inte innehåller någon kod utan enbart en metoddeklaration. Detta innebär att klassen inte kan ses som komplett (och av den anledningen kan man inte heller skapa objekt av klassen). Alla subklasser till en abstrakt klass måste därför implementera superklassens alla abstrakta metoder eller själv deklareras som abstract. Så en abstrakt metod är ett sätt att tvinga alla subklasser att ha en viss metod, men att det är upp till subklasserna att bestämma metodens innehåll. Alla typer av media, oavsett om det är en bok, cd, film eller tidning, har en längd. Sättet att representera denna längd skiljer sig dock åt beroende på om det t.ex. är en bok eller en cd. En boks längd anges i antal sidor, medan en cd har en längd som återges i timmar, minuter och sekunder. I klassen Media finns fältet length, av typen int, som innehåller längden på mediet (antal sekunder eller antal sidor). För att returnera denna längd (heltalet) innehåller klassen metoden getlength(). Det kan dock ibland vara användbart att returnera längden som en strängrepresentation. Denna representation skiljer sig lite åt beroende på vilken typ av media det är frågan om och därför kan vi i Media inte tillhandahålla någon defaultimplementation av metoden getlengthasstring(). - 1 -

Klassen Media är en superklass för olika typer av media. Här ska du samla fält och metoder som är gemensamma för alla typer av media. Som du ser så kan du återanvända en hel del från klassen CD som du skrev i laboration 1 del 3. Det enda som tillkommer är den abstrakta metoden getlengthasstring() (markerad med kursiv stil). Alla fält i klassen är deklarerad som protected (markeras med # i UML), vilket innebär att klasser som ärver från Media har en direkt tillgång till dessa fält. Klassen behöver endast två konstruktorer. Den ena tar fyra argument som sätter värden på klassens alla fält, och den andra tar inga argument utan sätter vissa defaultvärden på fälten. I och med att inga objekt kan skapas av Media behövs inga fler varianter, utan det är upp till subklasserna att tillhandahålla lämpliga sätt att skapa objekt på. # title : String # length : int # releaseyear : int # publisher : Publisher Media + Media() + Media(title : String, length : int, releaseyear : int, publisher : Publisher) + settitle(title : String) + setlength(length : int) + setreleaseyear(releaseyear : int) + setpublisher(publisher : Publisher) + setpublisher(name : String, address : String, phone : String) + gettitle() : String + getlength() : int + getreleaseyear() : int + getpublisher() : Publisher I metoderna setlength() och setreleaseyear() ska du utföra en kontroll så att det medskickade värdet inte är mindre än noll. Det finns ingen mening att sätta längden på ett Media till -1 eller att sätta utgivningsåret till -2003. Om värdet som skickas till metoderna är mindre än noll så ska värdet på respektive fält sättas till 0 (noll). Om värdet som skickas till metoderna är större än noll kan vi tilldela fälten detta värde. Första subklassen du ska skapa är Video. Denna klass innehåller endast ett eget fält, agelimit, som används för att sätta åldersgränsen på en video. Det ska även finnas set och get metoder för detta fält. I övrigt ärvs alla egenskaper från klassen Media. I metoden setagelimit() ska du göra en kontroll så att det inskickade värdet inte är mindre än noll, dvs samma kontroll som utförs för metoderna setreleaseyear() och setlength() och i klassen Media. - agelimit : int Video + Video() + Video(title : String, length : int, agelimit : int releaseyear : int, publisher : Publisher) + setagelimit(agelimit : int) + getagelimit() : int Vissa metoder behöver du omdefiniera i Video för att få det beteende vi önskar. Till att börja med ska metoden tostring() returnera en strängrepresentation av aktuellt video-objekt. Metoden print() ska skriva ut objektets alla värden samt anropa metoden print() i superklassen för att skriva ut dess värden. Du måste även tillhandahålla en implementation av metoden getlengthasstring(). Metod ska returnera längden på videon som en sträng enligt formatet: HHh MMm SSs. - 2 -

Strängen med timmar (HH), minuter (MM) och sekunder (SS) sker alltid med minst två siffror. Dvs i de fall timmarna, minuterarna eller sekunderna är mindre än 10 ska det sätts ut en nolla framför. Exempel på strängar som kan returneras är följande: 00h 54m 09s // (När length = 3249) 01h 09m 45s // (När length = 4185) 100h 00m 00s // (När length = 360000) Det ska finnas minst två olika sätt att skapa objekt av Video. En konstruktor som tar fem argument och en som inte tar några argument alls. Sen är det upp till dig om du önskar fler sätt att skapa objekt på. Den andra subklassen du ska skapa är Book vilken innehåller två fält, author som är författarens namn och isbn som är bokens isbn-nummer. Precis som för Video kommer denna klass att ärva sina egenskaper från Media, men att set och get metoder för klassens två fält ska finnas. - author : String - isbn : String Book + Book() + Book(author : String, title : String, length : int isbn : String, releaseyear : int, publisher) + setauthor(author : String) + setisbn(isbn : String) + getauthor() : String + getisbn() : String Metoderna tostring() och print() ska omdefinieras på samma sätt som i Video och getlengthasstring() ska returnera bokens längd som en sträng enligt följande format: xxx page(s) Det vill säga, om antalet sidor endast är 1 så skrivs page ut efter sidantalet (alternativt att sida skrivs ut om du har svenska utskrifter i övrigt). Är antalet sidor fler än 1 så skrivs pages ut efteråt (alternativt sidor). Exempel på strängar som kan returneras är: 0 pages // (length = 0) 1 page // (length = 1) 321 pages // (length = 321) Konstruktorer för att skapa objekt av Book ska finnas där ena tar sex argument och den andra inte tar några argument. Önskar du fler sätt att skapa böcker på är det fritt att lägga till konstruktorer för detta. Den tredje och sista subklassen är CD som du inte behöver göra några större förändringar i. Tackvare superklassen Media kan du ta bort vissa fält och metoder från klassen. En del metoder behöver du omdefiniera så de passar in i arvsstrukturen. Dessa är, precis som för Video och Book, metoderna print()och tostring(). - artist : String - tracks : int CD + CD() + CD(artist : String, title : String, tracks : int length : int, releaseyear : int, publisher) + setartist(artist : String) + settracks(tracks : int) + getartist() : String + GetTracks() : int - 3 -

I metoden settracks() ska du utföra en kontroll så att det inskickade värdet inte är mindre än noll. Om så är fallet sätts värdet på fältet tracks till 0 (noll), annars sätts fältet lika med det inskickade värdet. Implementation av getlengthasstring() ska returnera längden på CD:n som en sträng enligt formatet: HH:MM:SS. Strängen med timmar (HH), minuter (MM) och sekunder (SS) sker alltid med minst två siffror. Dvs i de fall timmarna, minuterarna eller sekunderna är mindre än 10 ska det sätts ut en nolla framför. Exempel på strängar som kan returneras är följande: 00:54:09 (När length = 3249) 01:09:45 (När length = 4185) 100:00:00 (När length = 360000) Som vanligt ska det finnas minst två olika sätt att skapa objekt av CD. En konstruktor som tar sex argument och en som inte tar några argument alls. Sen är det upp till dig om du önskar fler sätt att skapa objekt på. För att kontrollera att allting fungerar som tänkt ska du skriva en testklass som skapar minst två objekt av Book, Video och CD (dvs totalt minst sex objekt). Kalla testklassen för MediaTest, och spara den i filen MediaTest.java. Denna testklass ska fungera på samma sätt som i laboration 1 (CDTest). Med detta avses att den ska innehålla metoden main, vilken ska testa alla metoder som finns i klasserna du skrivit till denna laboration. Inget krav finns att använda inmatning för att ge objekten värden. Krav För att uppgiften skall betraktas som godkänd krävs ovan nämnda detaljer samt detta: protected ska användas för fält i klassen Media Inga publika fält får finnas i någon klass, endast metoder får vara publika. (Klasser och metoder skall kommenteras med dokumentationskommentarer) I subklassernas print() metod ska längden på aktuellt media skrivas ut med metoden getlengthasstring(). För CD och Video ska utskriften ske med två siffror för timmar, minuter och sekunder (exempel 00, 02, 10, 23 etc). I subklassernas print() metod ska ett anrop till superklassens print() ske. I subklassens konstruktor ska en lämplig konstruktor i superklassen anropas. Alla skärmutskrifter skall vara välstrukturerade och lätta att förstå (se exempel på nästa sida). För metoderna setlength(), setreleaseyear(), setagelimit() och settracks() ska det inte vara möjligt att sätta ett negativt tal. - 4 -

Tips Använd modulus (%) tillsammans med division för att dela upp längden (antal sekunder) till timmar, minuter och sekunder. Villkorsoperatorn är som sagt smidig att använda ibland (minns ni exemplet?). Prova gärna vad följande programsatser gör: import java.text.*; // DecimalFormat DecimalFormat formaterare = new DecimalFormat("000"); for (int i = 0; i < 101; i++) System.out.println(formaterare.format(i)); Uppmana gärna användaren att trycka på t.ex. enter vid jämna mellanrum för att fortsätta utskriften i MediaTest (så inte utskrifterna blir för långa). När du anser dig vara färdig med uppgiften så visar du din laboration för handledaren. Har du inte hunnit med att göra klar laboration 2 kan du göra det nu. [Exempel på utskrift när MediaTest körs] - 5 -