Dokumentera program. Dokumentation. Dokumentation. Javadoc. Javadoc 2

Relevanta dokument
Mer om kodkvalitet. Mer om kodkvalitet. Hur kan man jobba med kodkvalité? Hur kan man jobba med kodkvalité? Hur kan man jobba med kodkvalité?

Projekt. Roller i ett industriellt projekt. Projekt. Roller. Roller

Stackar, köer, iteratorer och paket

Samlingar Collection classes

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Att använda Java SE JDK 6

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

TENTAMEN OOP

Länkade strukturer. (del 2)

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Tentamen OOP

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

Föreläsning 3-4 Innehåll

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

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

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.

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Innehåll. 5. More sophisticated behavior. Javas klassbibliotek. Arbete med klassbibliotek. A Technical Support System. Huvudloopens struktur

Konstruktion av klasser med klasser

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Föreläsning 10. ADT:er och datastrukturer

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

DAT043 - föreläsning 8

Generisk klass med typparameter Inre klass - ListIterator

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

Interfacen Set och Map, hashtabeller

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

Att använda Java SE JDK 6

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

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

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Objektorienterad programmering i Java

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

TENTAMEN OOP

Föreläsning REPETITION & EXTENTA

F4. programmeringsteknik och Matlab

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Parallellism, återblick

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

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

I18N språkoberoende. ResourceBundle. Ikoner. Färg. Javadoc. Meny

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

OOP Objekt-orienterad programmering

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Objektorienterad Programmering (TDDC77)

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: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

JAVA Mer om klasser och objektorientering

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Föreläsning 10 Innehåll

SMD 134 Objektorienterad programmering

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Samlingar Collection classes

OOP Objekt-orienterad programmering

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

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

Collection classes. Interface, första exempel. Interface (forts) Men först

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Collection Classes. bjectorienterad programmering Sida 1

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Diskutera. Hashfunktion

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

(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

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Objektorienterad Programmering (TDDC77)

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

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

Del A (obligatorisk för alla)

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

Inlämningsuppgift och handledning

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

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

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

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

Tentamen i Algoritmer & Datastrukturer i Java

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

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

Lösningsförslag till tentamen

Lösningar för tenta 3 DAT043,

Transkript:

Dokumentera program Dokumentation 88 Viktigt att dokumentera program! Ett program används sällan endast av den som utvecklat den Användaren behöver få veta hur programmet fungerar Ett program underhålls inte alltid av den som skrivit det Den som ska underhålla programmet behöver info Ett program utvecklas ofta av många personer De andra i utvecklingstemet behöver info 89 Dokumentation Dokumentation i form av kommentarer behövs i koden Kommentarer räcker dock inte (rätt jobbigt att alltid behöva läsa källkod) Läsning på en del av problematiken att man vill ha två olika typer av dokumentation som till stor del innehåller samma info: Javadoc Javadoc Speciella kommentarer som kan användas för att generera dokumentation av koden man har skrivit Eclipse har möjlighet att generera denna dokumentation /** startar en javadoc kommentar Måste skrivas innan en klass, attribut, konstruktor eller metod deklaration Första raden skall vara en kort förklaring av vad metoden gör Efter den första raden som börjar med @ så slutar den allmänna beskrivningen av metoden 90 91 Javadoc 2 @author (endast klasser och interface) @version (endast klasser och interface) @param (endast metoder och konstruktorer) @return (endast metoder) @exception (även @throws sedan Javadoc 1.2) @see @since @serial (eller @serialfield eller @serialdata) @deprecated API beskrivningen på nätet är uppbyggd med hjälp av javadoc För mer info se: http://java.sun.com/j2se/ javadoc/ 92 Vad kan behöva dokumenteras Exempel på delar som bör ingå: Användarhandledning Systembeskrivning Algoritmbeskrivning Lösningens begränsning Testkörningar Källkod Bör också se prydlig ut då det är den mest detaljerade formen av dokumentation. Olika delar vänder sig till olika läsare. 93

Användarhandledning Hur används programmet. Viktigt för användare av programmet Hur ska man gå till väga för att kompilera din källkod. Viktigt för andra utvecklare. Större program är ofta inte helt triviala att bygga och ska ngn annan kunna göra det så behöver det dokumenteras. 94 Systembeskrivning Ska beskriva systemets interna uppbyggnad och struktur. Beskriv varje klass och syftet med denna och dess del av helheten.! För att beskriva klassen behöver man också beskriva tex de metoder som finns i den. Här kan det gå bra att använda sig av javadoc för att automatgenerera delar av beskrivningen (klistra inte in dessa i rapporten utan hänvisa istället till vart man kan hitta dessa). Beskriv relationer mellan klasser, med figurer och kommentarer till dessa (här passar ett eller flera UML-diagram). 95 Algoritmbeskrivning Om du har använt några icke självklara algoritmer, t.ex. en sorteringsalgoritm, en sökalgoritm eller något annat, ska du beskriva den/dem. Tex i form av pseudokod. Försök undvika att använda element som är direkt kopplade till koden, t ex variabelnamn och dylikt. Syftet med detta avsnitt är att en läsare ska kunna få förståelse för hur en komplicerad del löses utan att behöva lusläsa kod och utifrån denna inse vad som händer. Lösningens begränsningar Beskriver alla begränsningar som du kan komma att tänka på, eller har stött på under testningen. Du bör tala om alla de begränsningar som strider mot specifikationen. Nästan alla lösningar innehåller någon begränsning, tänk till lite bara. Hur kan/kunde begränsningarna undvikas? 96 97 Testkörningar Du måste testa din lösning. Tänk ut vettiga testfall. Vad kan tänkas vara svårt för programmet? Kommentera testfallen. Varför valde du detta testfall? Blev resultatet som det var meningen att det skulle bli? Tänk på att tester kan göras på olika delar separat och på det färdiga prgrammet. 98 Källkod/Indentering Hur man formaterar sin kod Flytta alltid in all kod som står ett block 3-4 tecken Detsamma för enkel sats som hör till t.ex. if- whileoch for- satser Tänk på att inte skriva för långa rader Om du måste bryta upp ett uttryck/sats p.g.a. att raden skulle ha blivit för lång så flytta in resten av uttrycket minst till positionen för starten av uttrycket/satsen Mer info se: http://java.sun.com/docs/codeconv/ 99

Jan Erik Moström Enumeration Uppräkningsbar typ Enumeration Man räknar upp alla värden som typen ska ha Tidigare innan detta dök upp i java användes heltalskonstanter (fortfarande finns en mängd klasser där detta används) ofta för uppgifter där man nu använder enums. Lite mer avancerade än motsvarigheten i C Innan enum Med enum public class Navigate final public static int NORTH = 1; final public static int SOUTH = 2; final public static int EAST = 3; final public static int WEST = 4; void go( int dir ) switch( dir ) case NORTH: case SOUTH: case WEST: case EAST: default: public class Navigate public enum Direction NORTH, SOUTH, EAST, WEST ; void go( Direction dir ) switch( dir ) case NORTH: case SOUTH: case WEST: case EAST: Kortleksexempel import java.util.scanner; import cards.deck; import cards.card; public class CardDemo public static void main( String[] args ) Scanner in=new Scanner(System.in); int numhands = in.nextint(); int handsize = in.nextint(); Deck d = new Deck(); for( int i = 0; i < numhands; i++ ) System.out.println( d.gethand( handsize) ); package cards; public class Card public enum Rank DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE public enum Suit CLUBS, DIAMONS, HEARTS, SPADES private final Rank rankvalue; private final Suit suitvalue; Card( Rank rankvalue, Suit suitvalue ) this.rankvalue = rankvalue; this.suitvalue = suitvalue; public Rank rank( ) return rankvalue; public Suit suit( ) return suitvalue; 4 5 [QUEEN of CLUBS, SIX of DIAMONS, JACK of HEARTS, FOUR of SPADES, FIVE of HEARTS] [EIGHT of DIAMONS, JACK of DIAMONS, FIVE of CLUBS, NINE of SPADES, THREE of CLUBS] [ACE of HEARTS, SEVEN of HEARTS, TEN of HEARTS, THREE of HEARTS, TEN of DIAMONS] [KING of SPADES, NINE of DIAMONS, FOUR of CLUBS, SEVEN of DIAMONS, DEUCE of DIAMONS] public String tostring( ) return rankvalue + " of " + suitvalue;

package cards; import java.util.list; import java.util.arraylist; public class Hand private List<Card> hand; public Hand( List<Card> content ) hand = content; public String tostring( ) return hand.tostring(); package cards; import java.util.arraylist; import java.util.collections; import java.util.list; public class Deck private List<Card> mydeck; public Deck( ) mydeck = new ArrayList<Card>( ); for( Card.Suit suit : Card.Suit.values( ) ) for( Card.Rank rank : Card.Rank.values( ) ) mydeck.add( new Card( rank, suit ) ); Collections.shuffle( mydeck ); public Hand gethand( int nrofcards ) List<Card> handcards = mydeck.sublist( 0, nrofcards ); Hand hand = new Hand( new ArrayList<Card>(handCards) ); handcards.clear(); return hand; public enum Planet MERCURY (3.303e+23, 2.4397e6), VENUS (4.869e+24, 6.0518e6), EARTH (5.976e+24, 6.37814e6), MARS (6.421e+23, 3.3972e6), JUPITER (1.9e+27, 7.1492e7), SATURN (5.688e+26, 6.0268e7), URANUS (8.686e+25, 2.5559e7), NEPTUNE (1.024e+26, 2.4746e7), PLUTO (1.27e+22, 1.137e6); private final double mass; // in kilograms private final double radius; // in meters Planet(double mass, double radius) this.mass = mass; this.radius = radius; public double mass() return mass; public double radius() return radius; // universal gravitational constant (m3 kg-1 s-2) public static final double G = 6.67300E-11; Inte en klass utan en enum!!! public class WeightDemo public static void main(string[] args) Scanner in=new Scanner(System.in); System.out.println( Enter your earth weight ); double earthweight = in.nextdouble(); double mass = earthweight/planet.earth.surfacegravity(); for( Planet p : Planet.values() ) System.out.println("Your weight on + p + is " + p.surfaceweight(mass)); public double surfacegravity() return G * mass / (radius * radius); public double surfaceweight(double othermass) return othermass * surfacegravity(); Collections Mer om Collection classes Ett antal nyttiga fördefinerade klasser som hanterar mängder av information Klasserna (och endel interface finns i java.util) Vi har redan tittat på ArrayList 110

ArrayList List LinkedList List Collection Queue PriorityQueue Collection AbstractSequent... LinkedList AbstractList ArrayList Set HashSet TreeSet Vector Stack LinkedHashSet AbstractCollection AbstractQueue PriorityQueue HashMap SortedSet Queue AbstractSet HashSet TreeSet LinkedHashSet TreeMap Set Map SortedSet LinkedHashMap SortedMap LinkedList I stort sett samma metoder som ArrayList och Vector Till skillnad från dessa ej implementerat mha array. Behöver inte utföra kopieringar vid utökning som dessa Tar ev en gnutta mer utrymme än en maxutnyttjad ArrayList För att komma åt ett värde annat än det första eller sista (via index) gör att vi måste stega igenom värdena 114 Set-klasserna Mängd Innehåller maximalt en förekomst av ett objekt Innehåller metoder för att lägga till värden kolla om ett visst värde finns och plocka bort värden Inget index för att komma åt värdena Kan gås igenom med en Iterator (eller nya for-loopen om man vill göra något med alla värden i den) 115 Map klasserna Tabell Uppslagning av element kopplade till en nyckel Typen på värde och nyckel kan variera HashMap Implementation av en Hashtabell Ger väldigt snabb åtkomst till ett värde givet en nyckel (ungefär som arrayens index). Tar trots detta inte onödigt mkt utrymme 116 117

hashcode Metod i Object För att de olika hash-datatyperna bland collection classes ska funka så måste man omdefiniera metoden int hashcode() för nyckeltypen (denna metod bör i stort sett alltid omdefinieras om equal omdefinieras) hashcode() ska ge tillbaka ett heltal som ska vara lika om objekten är lika, men måste inte nödvändigtvis vara olika om objekten inte är det (även om det är bra för prestandan) 118 import java.util.hashmap; public class Demo7a public static void main( String[] argv ) HashMap<String, Integer> hi = new HashMap<String, Integer>(); hi.put( "apa", 12 ); hi.put( "banan", 23 ); hi.put( "dask", 239 ); int i = hi.get( "banan" ); System.out.println( i ); Java utan Eclipse Suns javaverktyg javac Kompilator Kommandot javac MinKlass.java producerar klassfilen MinKlass.class java Virtual Machine Används för att köra javaprogrammen Ex: java MinKlass 120 121 Kommandoradsparametrar Jar-filer Metoden main kan ges argument i kommandot > java ComLinArgs Jättekul Dessa värden kallas kommandoradsparametrar Argumenten betraktas som en lista av strängar //Visar ett exempel på parametrar till programmet public class ComLinArgs public static void main (String[] args) System.out.print("Första argumentet är : "); System.out.println(args[0]); //main //class ComLinArgs 122 Används för att paketera ihop javafiler så att det blir lättare att distribuera Eclipse kan exportera ett projekt till en jarfil Kan göras exekverbara genom att man i jarfilen beskriver i vilken klass metoden main finns startas via java -jar jarfilnamn.jar 123