Objektorienterad programmering i Java I



Relevanta dokument
Objektorienterad programmering i Java I

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

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

LÖSNINGSFÖRSLAG TENTAMEN

Objektorienterad programmering D2

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

TENTAMEN OOP

Programmering för språkteknologer II, HT2014. Rum

LÖSNINGSFÖRSLAG TENTAMEN

Objektorienterad programmering i Java

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

Malmö högskola 2008/2009 CTS

Laboration A Objektsamlingar

Laboration 1: Figurer i hierarki

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

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.

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

OOP Objekt-orienterad programmering

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

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

Tentamen, EDAA20/EDA501 Programmering

TENTAMEN OOP

Objektsamlingar i Java

JAVA Mer om klasser och objektorientering

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

TENTAMEN OOP

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

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen OOP

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Java, klasser, objekt (Skansholm: Kapitel 2)

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

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

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

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

TUTORIAL: KLASSER & OBJEKT

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.

ID1004 Laboration 4, November 2012

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

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

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

Konstruktion av klasser med klasser

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

OOP Objekt-orienterad programmering

Del A (obligatorisk för alla)

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Laboration 1 - Grunderna för OOP i Java

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

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

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

Programmering för språkteknologer II, HT2011. Rum

Föreläsning 13 Innehåll

Föreläsning REPETITION & EXTENTA

Programmering för språkteknologer II, HT2011. Rum

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

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Klasshierarkier - repetition

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

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

Agenda. Objektorienterad programmering Föreläsning 13

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

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

Övningsuppgift. En array baklänges. Steg 1. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

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

Föreläsning 8: Exempel och problemlösning

Föreläsning 3-4 Innehåll

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

Arrayer (fält)

Sammansatta datatyper Generics: Parametrisk polymorfism

TDIU01 - Programmering i C++, grundkurs

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Föreläsning 6: Introduktion av listor

Tentamen, EDAA10 Programmering i Java

Objekt, Klasser, Paket m. m.

DAT043 Objektorienterad Programmering

Modeller, Objekt och Klasser

Repetition av OOP- och Javabegrepp

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

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

Att använda Java SE JDK 6

Introduktion till arv

Tentamen TEN1 HI

Repetition av OOP- och Javabegrepp

[] Arrayer = Indexerad variabel

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen TEN1 HI

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

729G04 Programmering och diskret matematik. Python 3: Loopar

Tentamen , Introduktion till Java, dtaa98, dtea53

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Objektorienterad Programmering (TDDC77)

Transkript:

Laboration 4 Objektorienterad programmering i Java I Uppgifter: 1 Beräknad tid: 6 9 timmar Att läsa: Kapitel 7, 8 (stränghantering, arrayer och Vector) Utdelat material (paket) Syfte: Att kunna använda arrayer och klassen Vector Att kunna skapa och använda egna paket Redovisning: Laborationen ska redovisas under ordinarie laborationstid för någon av handledarna. Lycka till!

Uppgift 1 Översikt Denna laboration går ut på att skapa en så kallad containerklass, d.v.s. en klass som kan lagra och hantera flera olika typer av objekt. Syftet är att lära känna begreppet containerklass samt datastrukturer för att hantera ett i förväg inte känt antal objekt. Uppgift Du ska alltså skapa en s.k. containerklass som kan hantera ett antal objekt av typen Media och dess subklasser (från Laboration 3). Containerklassen kan ses som en katalog över en persons innehav av videoband, CD-skivor och böcker. Principen som containerklassen bygger på är att den har ett fält som är en samling referenser till andra objekt. Containerklassen ska alltså fungera som en "behållare" som innehåller ett antal andra objekt, i vårt fall av typen Media. Detta kan göras på ett antal olika sätt, men vi kommer att använda oss antingen av arrayer eller av klassen Vector. Du kommer själv att få välja vilken du vill använda. I och med att vi i förväg inte vet hur många objekt som ska lagras i vår behållare så kan det i det här fallet vara att föredra att använda klassen Vector. Detta eftersom en vektor dynamiskt kan ändra sin storlek (tillskillnad mot en array som har en fast storlek). Skulle du ändå välja att arbeta med arrayer måste du själv hålla reda på hur många element arrayen innehåller och utöka storleken på arrayen med fler element allt eftersom behov uppstår. Containerklassen döper du lämpligen till MediaContainer och denna ska du använda tillsammans med Media, CD, Book och Video från laboration 3 (OBS, kopiera dessa filer eftersom vi ska göra förändringar i dem). Klassdiagrammet från laboration 3 kommer alltså att utökas enligt nedan: MediaContainer Media Publisher Book CD Video Klassen MediaContainer kommer att innehålla ett antal referenser till olika Mediaobjekt (eller referenser till subklasser av Media). I MediaContainer kommer det även att finnas ett antal metoder för att lägga till, ta bort, visa och söka efter olika media. För att underlätta hanteringen av klasserna ska du gruppera ihop dessa klasser i egna paket. Media, CD, Book och Video ska du lägga i paketet media och MediaContainer ska du lägga i paketet media.util. Paket bör alltid anges med gemener (d.v.s. små bokstäver). - 1 -

Det enda fält som egentligen behövs i MediaContainer är en array av typen Media eller ett objekt av klassen Vector. Detta fält ska du kalla container och det är detta fält som kommer att vara själva behållaren som innehåller alla Media-objekt som läggs till i en MediaContainer. Känner du att fler fält behövs är det ok att ha det. Klassens konstruktor har till uppgift att skapa en lämplig stor array eller vektor där olika Mediaobjekt kan lagras. Det ska finnas minst två konstruktorer i klassen. Den konstruktor som inte tar några argument ska sätta en default storlek på den array eller vektor som används. Den konstruktor som tar ett heltal som argument använder heltalet för att bestämma storleken på arrayen eller kapaciteten på vektorn. MediaContainer - container : Vector (container : Media[]) + MediaContainer() + MediaContainer(capacity : int) + addmedia(media : Media) + countmedia() : int + getmedia(index : int) : Media + removemedia(index : int) : boolean + removeall() + searchtitle(title : String) : MediaContainer + print() + printtitle() + tostring() : String addmedia() ska som parameter ta ett Media-objekt och lägga till detta objekt sist i behållaren container (som antingen är en array eller en vektor). Eftersom metoden tar ett Media-objekt som parameter innebär detta att vi kan skicka både CD-, Videooch Book-objekt till metoden. countmedia() ska returnera ett heltal som innehåller antalet inlagda Media-objekt. getmedia() ska returnera det Media-objekt som ligger på det index som skickas till metoden. En kontroll ska utföras i metoden så att ett giltigt index har skickats, dvs att index är större än noll och mindre än antalet inlagda Media-objekt. Är det ett ogiltigt index ska en null-referens returneras (return null;). removemedia() ska ta bort det Media-objekt som ligger på det index som skickas till metoden. En kontroll ska utföras så att ett giltigt index har skickats (se ovan). Har ett Media-objekt tagits bort ska metoden returnera true, om inte returneras false. Viktigt att inga glapp uppstår i behållaren när ett objekt tas bort! removeall() ska ta bort alla objekt som finns inlagda. print() ska skriva ut en lista på skärmen över alla inlagda objekt, samt skriva ut eventuella ledtexter som gör utskriften lätt att tyda. Metoden ska loopa igenom alla inlagda objekt och i sin tur anropa metoden print() hos var och ett av dessa objekt. printtitle() ska fungera som print() men endast titel, artist/författare och mediatyp ska skrivas ut. Utskriften ska ske enligt formatet: title, artist/author (media_type) Ex: Das Boot (video) Club Zebra, Ulf Lundell (cd) Kärlek & ammunition, Kent (cd) Mannen utan öde, Imre Kertesz (bok) tostring() ska returnera en lämplig strängrepresentation av objektet. - 2 -

searchtitle() ska leta igenom alla Media-objekt, som har lagts till i behållaren, efter en angiven titel. Metoden tar en sträng som parameter, som är den titel som eftersöks, och returnera ett objekt av MediaContainer (returtypen ska med andra ord vara MediaContainer). Detta objekt ska innehålla alla de Media-objekt i container som har en titel som motsvarar det sökord som skickas till metoden. Ingen utskrift ska ske i metoden! Det som ska göras i denna metod är alltså att loopa igenom alla de Media-objekt som finns i containern, plocka ut titeln som varje Media-objektet har, och jämföra det med strängen som fås som parameter. Om det visar sig att titeln och strängen är lika (stora och små bokstäver ska inte spela någon roll) ska det aktuella Media-objektet läggas till i den temporära mediacontainern, som måste skapas i metoden. När alla Mediaobjekt kontrollerats ska den temporära mediacontainern returneras. Det är fullt möjligt att fler än ett Media-objekt hittas (även möjligt att inget hittas och att en tom mediacontainer då kommer att returneras). Testklass Som vanligt ska en testklass skapas, som återigen kan ha namnet MediaTest. Denna klass ska innehålla metoden main() där du ska skapa en instans (ett objekt) av klassen MediaContainer. I denna ska du lägga till (mha metoden addmedia()) minst fem objekt av klassen Media (kan vara CD-, Book- och Video-objekt). Därefter ska du på lämpligt sätt demonstrera metoder i MediaContainer. Det kan t.ex. vara att först skriva ut en förkortad lista av innehållet i containern. Sen kan en sökning efter en titel genomföras och resultatet av denna sökning skrivs ut (fullständig lista). Prova att ta bort ett Media-objekt och skriva ut listan igen etc. Tips Som sagt är det betydligt smidigare att använda sig av klassen Vector. Skriver du tostring() metoderna i Media, CD, Book och Video på ett smart sätt kan du utnyttja dem tillsammans med polymorfism för att skriva ut den förkortade listan i printtitle(). Annars går det alltid att använda instanceof för att testa vilken klass ett objekt är av (för att anropa getauthor() eller getartist()). I och med att både superklassen och subklasserna har en print() metod kan du utnyttja polymorfism vid utskrift av all information om inlagda media. Vänta med att skapa paketen media och media.util tills att allt fungerar som det är tänkt. Det ger mindre risk för knepiga felutskrifter av kompilatorn. När du väl skapar paketen är du tvungen (det underlättar i alla fall vid kompelering) att sätta miljövariabeln classpath. Denna anger för Java i vilka mappar class-filer ska letas. Ligger dina paket i h:\java\labb4 så sätter du classpath till.;h:\java\labb4 Punkten i början anger att Java även ska leta i aktuell katalog efter class-filer. Använd någon form av pause-funktion där man måste trycka enter så att inte utskrifterna på skärmen blir för långa (gör denna i testklassen). - 3 -

Krav För att uppgiften ska betraktas som godkänd krävs förutom ovan nämnda detaljer även följande: Åtminstone två av Media-objekten i containern ska ha samma titel. I testklassen är det sen denna titel som ska eftersökas. Inga publika attribut får finnas i någon klass, endast metoder får vara publika. Alla skärmutskrifter skall vara välstrukturerade och lätta att förstå. (Klasser och metoder skall kommenteras med dokumentationskommentarer) När du är klar redovisar du uppgiften eller så börjar du med bonusuppgiften. - 4 -