Datateknik A, Syfte: Att prova på att skriva egna klasser och skapa objekt av dessa klasser. Att skriva klasser med överlagrade metoder och konstruktor, samt att i en klass använda statiska medlemmar. Att läsa: Lektion 3 Uppgifter: Inlämning: 3 st Sker via inlämningsuppgifter i WebCT Lycka till!
Uppgift 1 Översikt Du ska lösa övningsuppgift 2.3 (uppgift 3 i kapitel 2) i kursboken. Syftet är att prova på att skapa en klass med en konstruktor och att använda statiska klassmedlemmar. Uppgift För er som ännu inte hunnit skaffa boken lyder uppgiften som följer: Konstruera en klass Kort som beskriver ett spelkort i en vanlig kortlek. Ett korts färg och valör skall ges när man skapar kortet. Det skall finnas metoder för att avläsa både färg och valör. Definiera dessutom en metod tostring() som gör det möjligt att enkelt skriva ut kort i formen Hjärter Dam, Klöver 8, Spader Ess etc. Utöver detta ska klassen även innehålla en statisk instansvariabel för att räkna antalet skapade kort, samt en metod som returnerar antalet skapade kort. Du ska även skriva en testklass som skapar 5 olika kort och på lämpligt sätt demonstrerar användning av metoderna i klassen Kort. Krav För att uppgiften ska anses vara godkänd ska det förutom ovanstående även finnas minst en konstruktor. Robert Jonsson Sida 1
Uppgift 2 Översikt I denna uppgift ska du skapa en enkel klass Publisher (förlag) samt två testklasser som skapar ett antal olika objekt/instanser av Publisher. Syftet med uppgiften är att stifta bekantskap med begreppen objekt, klass, metod, konstruktor och överlagring. Uppgift Du ska skriva en enkel klass som representerar ett förlag (som vi sen kommer att använda oss av i nästa uppgift). Klassen döper du till Publisher och sparas följaktligen i en fil som heter Publisher.java. Klassen ska innehålla data om förlagets namn, adress och telefonnummer. De operationer vi ska kunna utföra på objekt av klassen är att sätta och hämta namn, sätta och hämta adress, samt sätta och hämta telefonnummer. Det ska även vara möjligt att skriva ut all information om ett förlag på skärmen. Du ska också skriva två olika klasser för att prova att skapa objekt av Publisher samt att använda de metoder denna har. I ena klassen (kallas med fördel PublisherTest1) ska du skapa minst tre olika objekt av Publisher och med hjälp av dessa objekt sen demonstrera alla metoder. Detta görs t.ex. genom att kombinera metodanrop och skärmutskrifter. Bestäm namn, adress och telefonnummer direkt i koden, hårdkodat. I den andra testklassen (PublisherTest2) ska minst ett objekt av Publisher skapas. I stället för att hårdkoda data ska du låta användaren mata in uppgifter om förlagets namn, adress och telefonnummer. Därefter räcker det med att skriva ut all information om förlaget. Välj om du vill använda dig av dialogrutor eller om du använder dig av BufferedReader. Nedanstående klassdiagram (UML) ger dig en bild hur det är tänkt att klassen ska se ut (vilka instansvariabler och metoder som ska finnas). PublisherTest1 + main(args : String[ ]) PublisherTest2 + main(args : String[ ]) Använder Använder 3..* 1..* - name : String - address : String - phone : String Publisher + Publisher() + Publisher(name : String, address : String, phone : String) + setname(name : String) + setaddress(address : String) + setphone(phone : String) + getname() : String + getaddress() : String + getphone() : String + print() + tostring() : String Robert Jonsson Sida 2
De set()- och get()-metoder som finns i klassen Publisher behöver ingen närmare förklaring. Utöver dessa metoder ska det finnas (minst) två olika konstruktorer. En default-konstruktor och en konstruktor som sätter värden på objektets alla instansvariabler. Metoden print() ska snyggt och prydligt skriva ut all information om förlaget på skärmen. Metoden tostring() ska returnera en strängrepresentation av förlaget, d.v.s. ungerfär som print() men som en sträng. Bestäm själv vilken information som kan vara lämplig (enbart namnet på förlaget t.ex.). Krav För att uppgiften skall betraktas som godkänd krävs förutom ovan nämnda detaljer följande: Inga publika attribut får finnas i någon klass, endast metoder får vara publika. Alla skärmutskrifter ska vara välstrukturerade och lätta att förstå. Kommentera i källkoden och beskriv vad som händer. Klasser och metoder ska kommenteras med dokumentationskommentarer enligt följande: Klasser /** * Beskrivning och syftet med klassen * @version (version samt datum för skapande av klassen) * @author (Namn på skaparen av klassen) */ Metoder /** * Beskriv vad metoden uträttar, samt (i förekommande fall) * @param (beskriv ev. parameter 1 som skickas in till metoden) * @param (beskriv ev. parameter 2 som skickas in till metoden) * @return (beskriv ev. returvärde) */ Dessa kommentarer skall placeras omedelbart ovanför respektive klass/metod. Kommentera även vid behov inuti metoderna för att beskriva vad som sker. Robert Jonsson Sida 3
Uppgift 3 Översikt Uppgiften i denna del går även den ut på att skapa en enkel klass och ett antal objekt/instanser av denna klass. För att kunna göra detta behöver vi också en testklass. Syftet med laborationen är att, förutom att stifta bekantskap med begreppen objekt, klass, konstruktor och överlagring, lära oss att använda andra klasser i en klass. Ni ska även känna till hur vi använder klassen Integer för att konvertera strängar till heltal. Uppgift Du skall skapa en klass som representerar en CD-skiva. Klassen skall heta CD och sparas i en fil som heter CD.java. Klassen skall innehålla data om CD-skivans längd (antal sekunder), utgivningsår, titel, artist, antal låtar och vilket förlag (klassen Publisher du skrev i uppgift 2) skivan är utgiven på. Metoder ska finnas för att sätta och hämta data för alla fält, samt för att skriva ut all information om skivan. Metoden setpublisher() ska överlagras så att en variant tar ett objekt av typen Publisher som argument. En annan variant ska ta tre strängar som argument vilka är förlagets namn, adress och telefonnummer. Metoden print() ska skriva ut all data om objektet samt även vilket förlag skivan är utgiven på. Det är endast förlagets namn som ska skrivas ut. Metoden tostring() ska returnera en strängrepresentation av CD-objektet (valfritt vilken information som ska returneras, men t.ex. artist och titel kan vara lämpligt). Nedanstående klassdiagram (UML) ger dig en bild hur det är tänkt att klassen ska se ut (vilka fält och metoder som ska finnas). CD CDTest + main(args : String[ ]) Använder 3..* - length : int - releaseyear : int - title : String - artist : String - tracks : int - publisher : Publisher Publisher Har 0..* + CD() + CD(length : int, releaseyear : int, title : String, artist : String, tracks : int, publisher) + setlength(length : int) + setreleaseyear(releaseyear : int) + settitle(title : String) + setartist(artist : String) + settracks(tracks : int) + setpublisher(publisher : Publisher) + setpublisher(name : String, address : String, phone : String) + getlength() : int + getreleaseyear() : int + gettitle() : String + getartist() : String + gettracks() : int + getpublisher() : Publisher + print() + tostring() : String Robert Jonsson Sida 4
Du ska skriva en testklass som skapar minst tre CD-objekt och testar alla metoder som finns i klassen CD. Kalla den för CDTest och spara den i filen CDTest.java. Denna testklass ska skapa minst tre stycken instanser (objekt) av typen CD. Alla metoder i klassen CD skall sedan testas med hjälp av dessa instanser. Minst ett av objekten ska skapas genom att fråga användaren efter data. Välj själv om du vill använda dig av klassen BufferedReader eller om du använder dig av dialogrutor. Övriga objekt kan du hårdkoda. Krav För att uppgiften skall betraktas som godkänd krävs förutom ovan nämnda detaljer även att de krav som ställdes i uppgift 2 uppfylls. Dessutom ska du generera dokumentation för Publisher och CD med hjälp av verktyget javadoc. Robert Jonsson Sida 5