725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack



Relevanta dokument
Att använda Java SE JDK 6

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Datorsystem Laboration 2: Minnesmappade bussar

Laborationer i kursmomentet Datoranvändning E1. Laboration nr 5: Mer om FrameMaker

Verktyg och Utvecklingsmiljö. Jochim von Hacht

Övningar Dag 2 En första klass

Att använda Java SE JDK 6

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Åtkomst och användarhandledning

Laboration 10 - NetBeans

Föreläsning 3.1: Datastrukturer, en översikt

Survey&Report steg för steg: Skapa rapport

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

TUTORIAL: SAMLING & KONSOLL

För att skriva CSS-kod använder man sig av olika kommandon. Ett exempel på hur man kan skriva kod för att ändra textfärg kan vara:

Skapa Gemensam Utbildningsplan (GUP) Skapa periodisk rapport, Närvarorapportering Avvikelserapport

Projektuppgift - Biblioteket

Föreläsning 1 & 2 INTRODUKTION

GUIDE FÖR RECENSIONSVERKTYGET

Laboration 2: Ett kommunikationssystem

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Tentamen TEN1 HI

Tentamen OOP

19. Skriva ut statistik

Objektorienterad programmering D2

Chapter 3: Using Classes and Objects

Selma Manual Kurstillfälle, kurspaket, programtillfälle. Studentcentrum/Ladokgruppen

SurveyXact version 6.10

NXT LEGO-robot laboration Programmering och felsökning av en LEGOrobot

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Webbteknik för ingenjörer

Introduktion till arv

Handbok Företagsinteckning

Programmeringsteknik med C och Matlab

Manual för version V2

Editering, Kompilering och Exekvering av Javaprogram

Manual Jourläkarschema Närhälsan V7 - Version 1.0

CSN-rapportering, gymnasiet

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

ALLMÄNT OM FUNKTIONSPAKET OMDÖME

Datorövning 1 Statistik med Excel (Office 2010, svenska)

Föreläsning 4: Poster

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Värvningsguide. - så får ni fler medlemmar till er elevkår

Framsteg med resultatrapportering

Redovisning av inlämningsuppgifter

LEGO NXT Robotprogrammering

Grupphantering i Blackboard

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse

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

Objektorienterad programmering

Datorövning 1 Statistik med Excel (Office 2007, svenska)

Att komma igång med FirstClass (FC)!

Instruktioner för beställningar och kontoadministration för abonnenter av inlästa läromedel

Övning 2: I cellerna B19 och F26 ska du beräkna den totala ytan för respektive hus. I cell C28 den totala ytan, för båda husen.

Lathund för värderingsverktyg för en tillgänglig utbildning

TDP005, Projekt: Objekt-orienterade System. Laboration: Eclipse

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

En liten introduktion till SLI Community

Datorövning 1 Statistik med Excel (Office 2007, svenska)

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet.

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Vad roligt att ni har valt att bjuda varandra på den här timmen.

Projektarbete 2: Interaktiv prototyp

Frågebanker, frågeuppsättningar och slumpvisa block

Objektsamlingar i Java

Instruktion

GIT L0002B INTRODUKTION TILL PROGRAMMERING OCH C# Information inför kursstart

En handledning för studerande på Högskolan Kristianstad

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Öppen data och vad vi kan vinna på att offentliggöra uppgifter! Formatdag i västerås Björn Hagström bjorn.

Användarhandbok för e-curia

GAFE Google Apps For Education. Vt 16 Guldkroksskolan Annika Andréasson

Att logga in i edwise som vårdnadshavare

Sätt att skriva ut binärträd

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

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

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

INSTRUKTION Specifikation E modul.doc

UTBILDNINGSVETENSKAPLIGA FAKULTETEN. Institutionen för kost- och idrottsvetenskap. Studiehandledning

Grundläggande programmering med C# 7,5 högskolepoäng

Projektuppgift - Banken

Läs detta innan du fortsätter, eller skriv ut det, klicka runt lite och läs samtidigt.

Introduktion till Fronter för studenter

Detta sätt lämpar sig bra om man bara kort vill kommentera den inlämnade uppgifter som helhet. Gör så här:

Kardinal Synd Umeå - Inspelningsinstruktioner -

Sammanställning av studentutvärderingen för kursen Estetiska lärprocesser 15 hp, ht 2007

DT123G Nätverksanalys. Laboration II. Presentation av data. Lennart Franked Nayeb Maleki. 28 september 2015

Kom igång med LUPP 6.1

Rumshantering i Resebyra -modulen

Marie Andersson, IKT-centrum E-post: (Bb Learn 9.1.8) Wikis i Blackboard

NetBeans 5.5. Avsikt. Projektfönster

Kursutvärdering Ämne: SO Lärare: Esa Seppälä/Cecilia Enoksson Läsåret Klass: SPR2

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

Transkript:

725G61 - Laboration 7 Implementation av ett API Johan Falkenjack December 13, 2013

1 Inledning Hittills i kursen har vi tittat på grundläggande programmering och grundläggande objektorientering. I den här labben kommer ni använda det ni lärt er hittills samtidigt som ni lär er tolka ett API och att dokumentera er kod. 2 Vad är ett API API står för Application Programming Interface och beskriver hur en viss resurs kan användas. Man kan prata om många olika typer av API:er, som t.ex. generella API:er för att kommunicera med skrivare, eller specifika API:er för att kommunicera med en specifik klass. Ett API beskriver hur man utifrån kan kommunicera med en viss resurs. För skrivarexemplet kan det handla om en lista med kommandon som skrivaren kan ta emot, ungefär som metoder. T.ex. kan det finnas en metod för att skriva ut ett dokument representerat som t.ex. PostScript (ett dokumentbeskrivningsspråk som många skrivare förstår). En annan metod kanske returnerar hur mycket bläck som finns kvar, eller kontrollerar huruvida det finns papper att skriva ut på. Ni kan även tänka på Javas standardbibliotek som en samling API:er. Där har ni beskrivningar av hur en mängd klasser kan användas, och ni kan använda dessa baserat på beskrivningen utan att behöva bry er om exakt hur alla klasser och metoder är implementerade under ytan. I den här labben kommer ni få en beskrivning av ett API, som beskriver ett paket med en klass. Er uppgift är att implementera klassen. När det är gjort ska ni också skriva JavaDoc-kommentarer för att kunna generera samma dokumentation, utifrån er kod, som den ni fått given i uppgiften. 3 Att koda utifrån ett API I den här labben ska ni implementera en liten Counter-klass, dvs en klass som kan räknas upp och räknas ner och till exempel användas när man ska räkna hur många gånger en klass instansierats. Mer konkreta tillämpningar kan vara för att mäta antalet liv eller poäng i ett spel eller för att räkna antalet personer i en lokal genom att räkna in- och utpasseringar. Klassen ska också hålla reda på högsta och lägsta värdena som den antagit, t.ex. för att man ska veta maximala antalet personer som varit i en lokal samtidigt under en given dag. För att skapa klassen skall ni utgå från API-dokumentationen som finns på hemsidan. I en API-dokumentation kan man inte se något om hur en klass är implementerad internt. Därför kommer här en liten ledning som förhoppningsvis ska hjälpa er med implementationen: Klassen kommer behöva sex privata variabler. Tre heltalsvariabler, en för att hålla det faktiska värdet, en för att hålla max-värdet, en för min-värdet, och tre sanningsvariabler för att hålla reda på vad man får göra med klassen. Titta 1

speciellt på konstruktorerna för en ledning till hur dessa ska fungera och använd metodnamnen som en ledning till vad variablerna bör heta. Det är viktigt att veta för den här labben att begreppet "räkna upp" i programmeringstermer kallas att inkrementera (kom ihåg postinkrementationsoperatorn, ++) och att räkna ner kallas att dekrementera. 3.1 Hur läser man ett API? Ni har tidigare under kursen fått referenser till Javas dokumentation som i all väsentlig mening beskriver API:erna för alla inbyggda klasser. Det API ni får i den här labben är av samma typ som de som ligger på Oracles officiella JavaDoc-sidor, med den skillnaden att klassen inte är inbyggd i Java utan måste konstrueras av er. Här kommer en liten repetition av hur man läser dokumentationen. 3.1.1 Förstasidan När ni först går in och tittar på API:t så kommer ni se en sammanfattning av paketet edu.liu.ida.svp725g61.lab7 och en lista över vilka paket, klasser, interface osv. som paketet innehåller. I det här fallet innehåller paketet bara en enda klass Counter. Det finns också en meny i toppen och botten av sidan med alternativen Package, Class, Use, Tree, Deprecated, Index och Help. Klicka gärna på dessa för att se vad som visas. Sidan Use visar var paketet, eller klassen, man tittar på används. Detta är inte aktuellt i vårt API då vi bara har en enda klass som inte används i någon annanstans i API:t. Ofta har man dock i ett API med flera klasser där vissa klasser används av andra, t.ex. som Course användes av Student i Labb 6. Deprecated visar delar av paketet som är deprecated, dvs som är på väg att fasas ut och inte bör användas. När man ändrar någonting i implementationen av ett API, t.ex. byter namn på en metod, så behåller man normalt sett även den gamla metoden under en övergångsperiod men markerar den som deprecated. Detta varnar användare av API:t att ändra sin kod så att API:t används på det nya sättet innan den gamla metoden tas bort helt. Detta är inte heller aktuellt i vårt API eftersom det är helt nytt. Sidan Help visar en informationstext över hur dokumentationen är uppbyggd, denna kan ni läsa om ni har tid över och vill veta mer om hur JavaDocsidorna är uppbyggda. 3.2 Klassbeskrivningen När ni klickar på klassen Counter i listan Class Summary på förstasidan så kommer ni till en sida som beskriver klassen. Längst upp står klassens namn och en arvshierarki som visar vilka klasser vår klass ärver av. Ofta står det också ett datum när klassen senast uppdaterades och namnet på den eller de som skrivit implementationen. 2

Efter det kommer ett avsnitt som heter Field Summary. Namnet kommer av att publika variabler ofta kallas för fields, eller fält. För varje publik variabel står namnet och dess typ samt i vissa fall en beskrivning av vad variabeln används till. Efter Field Summary följer Constructor Summary och Method Summary. Här listas alla publika konstruktorer respektive alla publika metoder. Konstruktorer listas inte med returvärde, eftersom konstruktorer per definition returnerar ett objekt av klassen i fråga. För varje metod står dock returvärdet i vänsterkolumnen. I högerkolumnen står konstruktorns/metodens signatur samt en kort beskrivning. Efter Summary-avsnitten följer motsvarande Details-avsnitt. Här kan man läsa mer detaljer om fält, konstruktorer och metoder. T.ex. kan man läsa vilka argument en metod tar, om några. Man kan också läsa om vilka undantag som eventuellt kastas, vad returvärdet representerar osv. Här finns också ofta en mer utförlig beskrivning av metoden. Tittar man noga ser man att beskrivningen som fanns i Summary-avsnittet består av första meningen i den beskrivning som finns i Details-avsnittet. UPPGIFT 7.1 Implementera klassen enligt dokumentationen i API:t på kurshemsidan. Skapa sedan även en test-klass i ett separat paket, som endast innehåller en mainmetod och som använder er Counter-klass. Test-klassen använder ni för att kunna testa att er klass beter sig så som API-dokumentationen säger, d v s försök att se till att er main-metod använder och testar alla publika variabler, konstruktorer, och metoder som Counter erbjuder, med lämpliga värden som ni själva hittar på. (Jämför med hur ni använde klassen Test i Labb 5, där ni fick en färdig test-klass för att testa att er MySet-klass fungerade korrekt - här ska ni alltså skapa en motsvarande test-klass på egen hand, för att testa er Counter-klass.) 4 Att skapa en API-dokumentation Nu när ni skapat klassen Counter ska ni skapa en API-dokumentation med hjälp av JavaDoc. Den dokumentation ni använde i förra uppgiften är genererad med hjälp av en speciell typ av kommentarer som heter JavaDoc-kommentarer. Dessa kommentarer skrivs på ett speciellt sätt i koden och tillsammans med koden kan man med dessa generera JavaDoc-filer genom att använda JavaDoc-programmet. JavaDoc-kommentarer skrivs alltid precis innan det som dokumenteras. T.ex. skriver man en kommentar innan klassdefinitionen, en annan innan varje publik variabel, en innan varje konstruktor/metod. I Eclipse kan man automatiskt generera kommentarer genom att ställa markören i t.ex. den metod man vill dokumentera och trycka Alt-Shift-J. 3

Här kommer nu ett exempel på en dokumentation för en klass: 1 /** 2 * A small class designed to work as a back-end for a simple stopwatch. 3 * Created with IntelliJ IDEA. 4 * @author Johan Falkenjack 5 * @since 2013-12-03 6 * @version 1.0 7 */ 8 public class Timer { 9 10 //Class body... 11 } Först i dokumentationen står en beskrivning av klassen. Den första meningen här används i olika Summary-listor i de genererade JavaDoc-sidorna. Samtliga meningar syns i Details-listor. (I det här fallet står det "Created with IntelliJ IDEA." Den meningen är en del av beskrivningen men är faktiskt också automatgenererad och kommer av att klassen Timer skrevs i en annan utvecklingsmiljö än Eclipse. IntelliJ IDEA är ett alternativ till Eclipse som dock kostar pengar om man inte kan nöja sig med en nedbantad version. När man genererar JavaDoc-kommentarer i IntelliJ läggs det automatiskt till lite reklam.) Notera att klassnamnet inte står någonstans i kommentaren. En av fördelarna med JavaDoc är att kommentarerna samarbetar med koden och JavaDocgeneratorn analyserar den faktiska Java-koden för att hämta viss information därifrån, t.ex. klassnamn, metodnamn osv. Efter beskrivningen kommer ett antal @-tecken med olika specialuppgifter. Dessa är standardiserade och används för olika saker. Oftast, som i fallet ovan, är de ganska självförklarande. Ni fick en genomgång av hur Javadoc-kommentarer skrivs på föreläsning 9, gå gärna tillbaka och titta på föreläsningsbilderna igen. En ganska bra sammanfattning av hur JavaDoc fungerar finns även på wikipedia (http://en.wikipedia.org/wiki/javadoc). Där finns också illustrativa exempel för hur man dokumenterar exempelvis metoder. 4.1 Att generera JavaDoc För att generera dokumentation från er fil med hjälp av JavaDoc i Eclipse gör man på följande sätt: Under menyn Project finns alternativet Generate Javadoc. Det är okej att använda standardinställningarna och klicka Finish direkt. Ibland är dock fältet Javadoc command tomt. Det innebär att Eclipse inte konfigurerats för JavaDoc. Då får man manuellt lägga till filen för JavaDoc. Den ligger sannolikt på sökvägen C:\Program Files\Java\jdk1.6.0_35\bin\javadoc.exe eller motsvarande på IDAs maskiner. Fråga er labbassistent om ni får problem med detta. 4

När man genererar JavaDoc skapas en ny katalog i projektet. Tidigare har vi haft src och bin, nu kommer vi också få doc. Katalogen doc innehåller de html-filer som utgör projektets dokumentation. UPPGIFT 7.2 Skriv JavaDoc-kommentarer för klassen Counter som exakt motsvarar de i det givna API:t med undantag av att ni kan ändra eventuella datum och författare. Generera sedan JavaDoc utifrån er fil. Jag rekommenderar att göra detta genom stegvis förfining. Skriv först korta kommentarer och se att ni får genereringen att fungera. Fixa sedan till kommentarerna så att rätt saker står i de genererade filerna, dvs att era HTML-filer ser likadana ut som de som ni fått givna inför den här labben (med undantag av att ni lagt in era egna namn och nya datum). När ni redovisar ska ni skicka in både den genererade doc-katalogen (packa ner den i en zip-fil) samt kodfilen Counter.java och er test-klass som ni skapade i första uppgiften. 5