Fält & Vector Fält (array) - deklaration & användning Fält som parametrar Flerdimensionella fält klassen Vector Programmeringsmetodik -Java 101
Fält En array är en ordnad lista av värden Varje värde har ett numeriskt index N element indexeras med 0 till N-1 0 1 2 3 4 5 6 7 8 9 79 87 94 82 67 98 87 81 74 91 Programmeringsmetodik -Java 102
Fält Många värden av samma typ kan vara primitiva typer eller objekt Fältet själv är ett objekt Namnet på fältet blir då en referens variabel, och fältet instansieras separat Programmeringsmetodik -Java 103
Deklaration int[] frekvens = new int[10]; Typen anger inte storleken Typen är int[] Instansieras till 10 heltal Indexeras 0..9 Se Basic_Array.java (s.270) Programmeringsmetodik -Java 104
Fält Hakparenteser för att ange index frekvens[4] Kan användas överallt där ett heltal får förekomma Tilldelning, utskrift, uttryck Programmeringsmetodik -Java 105
Exempel float[] priser = new float[500]; boolean[] flaggor; flaggor = new boolean[20]; char[] koder = new char[1750]; Programmeringsmetodik -Java 106
Indexkontroll Väl skapat är fältet fixt Index måste referera till existerande element index i intervallet 0 N-1 frekvens[(tal-1)/10] = frekvens[(tal-1)/10]+1; Index kontrolleras under körning off-by-one vanligt fel Programmeringsmetodik -Java 107
Fältets storlek Varje fält objekt har en konstant length frekvens.length Antalet element, inte högsta index Se Reverse_Numbers.java (s. 272-273) Programmeringsmetodik -Java 108
Initialisering Hela fältet kan initialiseras vid deklarationen int[] enheter = {147, 323, 89, 933, 540, 269, 97, 114, 298, 476}; char[] kursniva = { A, B, C, D }; Programmeringsmetodik -Java 109
Observera : Initialisera med listor new används inte Ingen explicit storlek Längden bestäms av antalet element Endast vid deklarationen Se Primes.java Programmeringsmetodik -Java 110
Objekt som element Elementen i ett fält kan vara objektreferenser String[] grupp = new String[5]; 5 referenser till objekt av typen String Inga objekt har skapats (referensen är null) Varje objekt skapas separat grupp [0] = new String( Emilie ); Eller (för String ) String[] grupp = { Emilie, Johanna, Jakob, Ellen, Frida }; Programmeringsmetodik -Java 111
Member public class Member { private String name; private int member_ship_number; public Member (String member_name, int id_number) { name = member_name; member_ship_number = id_number; }//konstruktorn }//class Member Programmeringsmetodik -Java 112
Membership class Membership { private Member[] member_list ; private int num_members; public Membership() { num_members = 4; member_list = new Member[4]; member_list [3] = new Member( Johnny Storm,70469);... } } Programmeringsmetodik -Java 113
command line arguments //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 Programmeringsmetodik -Java 114
command line arguments Metoden main kan ges argument i kommandot > java ComLinArgs Jättekul Dessa värden kallas command line arguments Argumenten betraktas som en lista av strängar Programmeringsmetodik -Java 115
Flerdimensionella fält En-dimensionella fält = listor av värden Två-dimensionella fält - tabeller med rader & kolumner Två index Fält av fält i Java, medför att raderna kan ha olika längd Programmeringsmetodik -Java 116
Flerdimensionella fält Lista av listor Kan initialiseras med listor Varje lista har en egen längdkonstant int[][] tabell = new int[4][5]; tabell.length har värdet 4 medan alla dellistor tabell[i].length har värdet 5 (alla listor lika långa) Se TwoDArray.java (299) Programmeringsmetodik -Java 117
Klassen Vector Ett objekt av klassen Vector liknar ett fält Men Lagrar bara referenser till objekt av typen Object Inte samma syntax för indexering Klassen tillhör paketet java.util Programmeringsmetodik -Java 118
Servicemetoder addelement (Object element) removeelement (Object element) contains (Object element) elementat (int index) firstelement () lastelement () size () Programmeringsmetodik -Java 119
Klassen Vector Listtypen dynamisk Implementeras med fält Om mer utrymme behövs, skapas ett nytt objekt och elementen kopieras över Se Beatles.java (s. 304) Programmeringsmetodik -Java 120
Vad innebär det att programmera? Konstruera ett program som: Löser eller gör det enklare att lösa ett problem eller en uppgift Det finns många typer av program såsom Interaktiva (med en användare som styr programmet) Batch-program Typen av program påverkar vad det betyder att programmera Programmeringsmetodik -Java 121
Vad innebär det att programmera? Storleken eller komplexiteten påverkar också vad det innebär att programmera Småskalig programmering Ett fåtal personer inblandade Upp till ett tusental rader kod T ex. laborationerna på kursen Storskalig programmering Stora projekt med ibland upp till flera hundra inblandade Kan sträcka sig över flera år Enormt mycket kod att skriva och hantera T ex. Programmeringen av AXE-stationerna Programmeringsmetodik -Java 122
Att jobba som programmerare Handlar mycket om: Problemlösning Design Dokumentation Specifikation Granskning Felsökning Konstruktion Handlar mycket mindre än man tror om: Kodning vid datorn Programmeringsmetodik -Java 123
Vad har vi för hjälpmedel som programmerare? Algoritmer Programmeringsspråk Utvecklingsmiljö Editorer Kompilatorer, mm. Diverse verktyg för att hitta fel och rätta fel Administrationsverktyg Dokumentation Programbibliotek Programmeringsmetodik -Java 124
Programmeringsmetodik Programmering? Mer än bara kodning Metodik? En strategi eller metod för att utföra något Ett arbetssätt En arbetsplan Programmeringsmetodik -Java 125
Det finns olika typer av programmering En och samma metodik för alla typer av programmering? Nej! Vi kommer att koncentrera oss på småskalig programmering Programmeringsmetodik -Java 126
Skillnader i metodik Storskalig programmering kräver mer administration Versionshantering Personal Testning och felhantering blir mycket mer komplext Varför småskalighet på kursen? Lättare att börja med, överblickbara problem Storskaligheten går alltid att bryta ner till småskalighet Programmeringsmetodik -Java 127
Typer av småskalig programmering Maskinnära programmering Realtidsprogrammering Probleminriktad programmering Programmering av batch-system Programmering av interaktiva system Programmeringsmetodik -Java 128
Strukturerad programmering Formulera uppgiften, specificera Lös problemet Verifiera lösningen Kodning Avlusning Validering Dokumentation Underhåll Programmeringsmetodik -Java 129
Formulera uppgiften Samla in information - dialog med beställaren Strukturera indata utdata arbetsmiljön Skriv ner en specifikation Problem Omgivning Indata Utdata Tänk över kritiska situationer För att reda ut För att kunna validera lösningen och programmet Programmeringsmetodik -Java 130
Val av programmeringsspråk Det finns många språk som är olika bra lämpade för olika typer av programmering, problem etc. Man bör välja programmeringsspråk efter: Sina egna kunskaper Problemets natur Lösningens natur Tillgång till stöd, verktyg mm. Programmeringsmetodik -Java 131
Kodning Saker som ingår i kodningsarbetet Definiera programmeringsstilen Strukturera dataflödet Design av datatyper / Klasser Implementera algoritmerna och datatyperna Kommentera koden ordentligt Följ algoritmen (som är verifierad) Återanvändning av kod Har du sett något liknande problem lösas tidigare? Vilka funktioner finns i språket som kan vara nyttiga? Programmeringsmetodik -Java 132
Testning och verifiering av koden Testa delarna för sig allt eftersom de blir klara Ställ upp ett testschema Delarna Logiska block Hela systemet Validering av systemet Stäm av det färdiga systemet mot beställningen som är specificerad i ett dokument, skriv ner skillnader och likheter Programmeringsmetodik -Java 133
Syntaxfel Olika typer av fel Grammatiska fel Felstavningar Tvetydigheter Upptäcks ofta vid kompileringen Semantiska fel (Tankefel) Problemet är löst på fel sätt, eller man har löst fel problem. Programkörningsfel(run-time error) Programmeringsmetodik -Java 134
Relativa Kostnader för Olika Faser 2% 4% 1% 6% 5% 15% Kravinsamling Analys Planering Design Kodning Testning Underhåll 67% Compiled data from 1976-1981. See S.R. Schach: Software Engineering with Java, Irwin 1997 Programmeringsmetodik -Java 135
Typiska orsaker till fel 8% 12% 6% 14% 34% Felaktiga eller misstolkade krav Felaktiga eller misstolkade specifikationer Designfel som involverar flera komponenter Design- eller kodningsfel i en komponent Stavningsfel och dylikt Fel rättning Andra orsaker 22% 4% Study from 1978 See A. Goldberg, K.S. Rubin:Succeeding with Objects, Addison-Wesley, 1995 Programmeringsmetodik -Java 136
Relativa Kostnader för ett Fel Programmeringsmetodik -Java 137
Dokumentation Sammanställ den dokumentation som de övriga punkterna har producerat Inledning Problemspecifikation Systembeskrivning Beskriv systemet i stora drag, modulariseringen, dataflöde, större datastrukturer Algoritmbeskrivning Resultat från olika typer av verifiering och avlusning Användarmanual Möjliga utvecklingar av systemet Programmeringsmetodik -Java 138
Underhåll av systemet Ett system har en livscykel som innebär Rätta till kända felaktigheter Implementera möjliga förbättringar Inrapportera felaktigheter Versionshantering Programmeringsmetodik -Java 139
Algoritm Efter den Persiske matematikern Muhammed al- Khowârizmî 800 talet e. kr Vad är en algoritm? Som ett recept eller en arbetsbeskrivning Programmeringsmetodik -Java 140
Exempel Antag att vi har en lista med alla anställda på ett företag: Namn Pnr och Lön, och vi vill räkna ut lönekostnaden för företaget Skriv ner talet 0 Gå igenom listan, och för varje anställd så adderar du personens lön till det skrivna talet När man nått slutet på lista, så är det nedskrivna talet utdata Programmeringsmetodik -Java 141
Karakteristik för en algoritm Texten som beskriver algoritmen är fixt stor Processen som algoritmen beskriver kan vara av dynamisk storlek Algoritmer löser en klass problem Algoritmer kan ha olika kornighet T ex. Andra steget i föregående algoritm kan förfinas så att man får en mer finkornig algoritm Programmeringsmetodik -Java 142
Algoritmer mer formellt Def: En algoritm är en noggrann plan, en metod för att stegvis utföra något Krav på en algoritm Ändlighet(Algoritmen måste ha en ändlig beskrivning) Bestämdhet (Varje steg måste vara entydigt) Indata (varje algoritm måste ha Noll eller fler indata Utdata (Algoritmen måste ha Ett eller flera utdata) Effektivitet (Varje steg i algoritmen måste vara effektiva, kunna utföras på en ändlig tidsrymd) Programmeringsmetodik -Java 143
Algoritmbeskrivning Kort och koncist Entydigt Högnivåliknande syntax 1 Kontrollera att antalet personer är mindre än tio 1.1 Om antalet personer överstiger tio, avsluta med ett felmeddelande 2 För varje person: 2.1 Skriv ut personens namn med röd text 2.2 Skriv ut personens födelsenummer med blå text 2.3 Skriv ut personens adress med grön text 3 Vänta på att användaren trycker på tangenten N 4 Avsluta funktionen Programmeringsmetodik -Java 144
Siffervärden Sträng - heltal Integer wrapper class: int heltal = Integer.parseInt (str); Läsa och konvertera i samma sats: heltal = Integer.parseInt (stdin.readline()); Programmeringsmetodik -Java 145
Frame Används för att skapa ett fönster i ett program. Kan bland annat användas för att rita i. Konstruktorer: Frame() Frame(title) Programmeringsmetodik -Java 146
ShowFrames import java.awt.*; import java.awt.event.*; public class ShowFrames{ //----------------------------------------- // Creates and displays an empty frame. //----------------------------------------- public static void main (String[] args){ Frame frame=new Frame( ShowFrames ); frame.setsize(300,300); frame.addwindowlistener(new GenericWindowListener()); frame.setvisible(true); } } Programmeringsmetodik -Java 147
GenericWindowListener import java.awt.event.*; public class GenericWindowListener extends WindowAdapter{ //------------------------------------ //Terminates the program when the window is closed. //------------------------------------ public void windowclosing (WindowEvent event) { System.exit(0); } } Programmeringsmetodik -Java 148
Ritytor-- Graphics Context Graphics hanterar själva ytan där man ritar på Graphics klassen innehåller ritmetoder och hanterar färg och typsnitt [s 681-684] Man kan inte direkt rita i/på en GUI komponent Varje GUI komponent har en s k Graphics Context där all ritning sker Programmeringsmetodik -Java 149
Ritytor-- Graphics Context Kontexten fås genom att anropa getgraphics metoden eller (automatiskt) som aktuell parameter i paint metoden Alla GUI komponenter har en paint metod Programmeringsmetodik -Java 150
Koordinatsystem Positionerna i varje rityta (dvs Graphics Context) representeras genom ett koordinatsystem Varje punkt <x,y> i koordinatsystemet representerar en bildpunkt (Pixel) Varje rityta har en bredd (width) och en höjd (height) Programmeringsmetodik -Java 151
Koordinatsystem Koordinatsystemet är upp och ner, dvs <0,0> ligger längst upp till vänster Det som ritas utanför ritytan kan inte ses (0, 0) 112 X 40 (112, 40) Y Programmeringsmetodik -Java 152
Färg Color klassen används för färghantering Färger definieras genom sina Färgvärden, som anger andelen röd, grön och blå i färgen Varje rityta har en förgrunds- och en bakgrunds färg Programmeringsmetodik -Java 153
Färg setcolor metoden i Graphics klassen sätter förgrunds färgen och setbackground metoden i GUI komponenten sätter bakgrunds färgen Color klassen tillhandahåller en del fördefinerade färger som publika konstanter Color(float r, float g, float b) Color(int r, int g, int b) Programmeringsmetodik -Java 154
Att Rita Enkla Figurer Graphics klassen har ritmetoder för: Linjer Ovaler Kvadrater Bågar Polygoner Polylinjer Programmeringsmetodik -Java 155
Att Rita Enkla Figurer De flesta figurer kan ritas ifylld (filled), rektangeln t o m i 3D Linjer är alltid en bildpunkt tjock drawline( fromx, fromy, tox, toy) Programmeringsmetodik -Java 156
Ovaler En oval definieras genom sin omgivande rektangel (Bounding Rectangle) drawoval( x, y, width, height) filloval( x, y, width, height) Programmeringsmetodik -Java 157
Ovaler 175 X 20 80 Y bounding rectangle 50 SDJHGUDZ2YDO Programmeringsmetodik -Java 158
Rektanglar Det finns tre typer av rektangel Vanliga Med rundade hörn Tredimensionella Varje rektangeltyp kan ritas ifylld eller tom Programmeringsmetodik -Java 159
Rektanglar drawrect(x, y, width, height) fillrect(x, y, width, height) draw3drect(x, y, width, height, upordown) fill3drect(x, y, width, height, upordown) clearrect(x, y, width, height) Programmeringsmetodik -Java 160
Boll import java.awt.*; public class Boll { public static void main (String args[]) { Frame myframe = new Frame();// skapa nåt att rita på myframe.setsize(200, 200); // ge den en storlek myframe.setvisible(true); // och se till att den visas Graphics g = myframe.getgraphics();// själva ritytan try { Thread.currentThread().sleep(1000); // sov 1 sekund } catch (InterruptedException ex)// måste fånga ett undantag {} g.setcolor(new Color(60, 60, 60));// grått g.filloval(100, 100, 40, 40);// en boll } } Programmeringsmetodik -Java 161
Output Programmeringsmetodik -Java 162
paint vs update vs repaint paint innehåller koden för själva ritning update suddar först bakgrunden och anropar sen paint repaint är ett slags begäran om omritning och om det inte redan finns ett liknande begäran anropas update Programmeringsmetodik -Java 163
paint vs update vs repaint När AWTn upptäcker att någonting måste ritas om anropas paint (automatiskt) Om man själv vill rita (om) någonting skall man anropa repaint paint skall INTE anropas direkt Programmeringsmetodik -Java 164
Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165