F8 Uppsamling/Repetition Vad gör vi idag? Sammanfattar läget Vad har vi gått igenom OOPM Java Laborationerna Lab 1 fokus på Java som språk Lab och Lab 3OOP i praktiken Kollar lite bakåt (lite kursvärdering) Utser granskare av kursvärderingen Frågestund Kollar lite framåt Tentan vad är det som gäller? Hur såg den sista tentan ut? 51 5 3:a Maj Tentamen Täcker de teoretiska delarna av kapitel 1-1, 17, 19 +CRChäftet (4:th Ed). Kommer inte innehålla några programmerings-uppgifter... men däremot kan tex designuppgifter förekomma Handlar till stor del om att kunna förklara begrepp och programkonstruktioner Läsa och förstå vakod Läsa och förstå UML-klassdiagram Skriva/rita UML-klassdiagram 53 Detta har vi gått igenom Grundläggande OO-design Programutveckling Kodkvalitet CRC -metoden Skapa en klass Attribut Metoder Synlighet Arv Utöka en klass Skapa en abstrakt klass och implementera protected Skapa ett interface och implementera Endast konstanter abstrakta metoder 54 Detta har vi gått igenom Lagra i arryer och arraylist Kontrollstrukturer i va for(thing thing:things) I/O Skriva och läsa från System.in och System.out Skriva och läsa från fil Scanner Parameter överföringen i Java är call-by-value Undantag Collections introduktion Generics introduktion Detta kommer vi att gå igenom Enumeration JUnit och test Dokumentation Collections Generics Typ-parameter Klona objekt Ytlig och djup kloning Nästade och innerklasser Lokala, Anonyma, och medlemsklasser 55 Sätt att organisera koden... 56
Detta kommer vi att gå igenom Mer i detalj Mer om Generics och Collections Mer om kodkvalitet testning, dokumentation, versionshantering mm Java utan en IDE (Eclipse, IntelliJ, ) Programmera mot interface Call-backs Förenklar mycket av jobbet... Grafiska användarytor i Java Trådat Händelsestyrt 57 58 Objektorienterad programmering Ett objekt är en individuellt identifierbar entitet som kan vara konkret eller abstrakt. Ett objekt har tillstånd, beteende och identitet. En klass är en byggplan för objekt av samma sort. Arv är en mekanism för att återanvända kod Figure Square Triangle Circle 59 Garbage collection, mekanism för att återlämna icke utnyttt minne Objekt Ett objekt är en individuellt identifierbar entitet som kan vara konkret eller abstrakt. Ett objekt har tillstånd, beteende och identitet. Reellt, gripbart, synligt ting (t ex en specifik person) Abstrakt ting (t ex en tid eller en anställd) Varje objekt har ett tillstånd, ett beteende och en identitet. Tillståndet beskriver objektets egenskaper (t ex adress och ålder hos en person) Beteendet beskriver vad objektet kan göra (t ex flytta). OBS! Detta kan innebära att tillståndet ändras Identiteten skiljer ett objekt från alla andra objekt 6 Klass En klass är en byggplan för objekt av samma sort. Alla objekt av en klass (instanser) har samma sorts egenskaper och beteenden En klass beskriver en mängd liknande objekt Datatyp namn ålder adress flytta... Person Namn på klassen egenskaper (attribut) beteende (metoder) 61 Objekt Objekt och klasser Modeller av saker i problemdomänen ( den röda bilen i parkeringshuset Nanna ) Klasser Representerar alla objekt av ett visst slag ( bil ) 6
Lite annat Många instanser kan skapas av en klass Ett objekt har attribut: värden som lagras i fields. Klassen definierar vilka fields ett objekt har, men varje objekt har sin egen uppsättning värden (objektets tillstånd/ state) programmering <fil>.va Java programkod Programmering i Java översättning kompilator exekvering <fil>.class Java bytekod exekvering exekvering 63 64 Arv Definiera gemensamma attribut och metoder en enda gång i en superklass Ärver dessa attribut och metoder till nya subklasser Lägg till specifika attribut och metoder i subklasserna Subklassen är en mer specifik version av superklassen Varje superklass kan ha många subklasser Figure Härleda subklasser i Java Det reserverade ordet extends används för att åstadkomma arvet I Java finns bara enkelt arv för klasser Varje subklass kan ha högst en superklass Alla klasser ärver direkt eller indirekt från klassen Object Begrepp: Superklass Förälder Basklass Square Triangle Circle 65 Subklass Barn Härledd klass 66 Arv och modifierare Allt som ärvs kan refereras direkt i subklassen, som om det vore deklarerat där men, även en metod eller ett attribut som inte ärvs, är definierat för subklassen och kan refereras indirekt genom superklassens metoder get/set metoder (accessors) setprivateattribut(value); getprivateattribute(); 67 Arv och konstruktorer Konstruktorer ärvs inte, trots att de (oftast) är deklarerade public Vi behöver dock tillgång till den överordnade klassens konstruktor för att initialisera de ärvda delarna Reserverade ordet super gör det möjligt att referera till superklassen Måste vara första sats i konstruktorn super() anropas automatiskt om programmeraren inte gör det Om man vill skicka med parameter måste anropet finnas 68
Omdefinition/Överlagring Omdefinition Vi skriver en ny version av en metod i någon klass lägre ner i arvshierarkin än orginalmetoden Signaturen ska vara densamma Synlighetsmodifieraren minst lika synlig som orginalet Version väljs beroende på objektets typ Överlagring Samma namn, men olika signatur. Variabel eller metod private default protected public Synlighet/Räckvidd Nås i samma klass Vilken metod som väljs beror på typ och 69 7 ordning på parametrarna Nås i samma paket Nås i subklass Nås överallt Variabel eller metod private default protected public Nåbarhet via arv Ärvs av subklass i samma paket Ärvs av subklass överallt Referenser Primitiva datatyper Variablernas storlek är fastlagd Alla variabler av samma datatyp tar lika stort utrymme i minnet Värdet kan sparas direkt Klasstyper Storlek av variabler varierar Variabler av samma datatyp kan ta olika stort utrymme i minnet Värdet kan inte sparas direkt Referenser ( pekare ) Olika effekt (semantik) för tilldelning (=), parameteröverföring och jämförelser (t ex ==) 71 7 Fel och felhantering Ett program kan fungera korrekt i normalfallet men vara känsligt för störningar Felaktiga indata (från användaren/andra program) Yttre omständigheter Bra program är förberedda på att fel kan uppstå Hur bör man hantera fel? Det finns många alternativ Det finns ingen åtgärd som är bäst i alla lägen Beror på anroparens mål Låt anroparen bestämma Throw/ raise exception Kasta / flagga ett undantag Den anropade metoden överlåter åt anroparen att genomföra lämplig åtgärd 73 74
Två kategorier av undantag Checked exceptions Fel som vanligtvis inte beror på fel i logiken av programmet Fel som kan uppträda under normala förhållanden Måste fångas (dvs kod som kan kasta en checked exception måste skrivas i en try-sats) eller kastas vidare med metoden, t ex IOException Unchecked exceptions Fel som brukar beror på fel i logiken av programmet Fel som kan uppträda under normala förhållanden Får ignoreras (men det är god programmeringsstil att fånga eller deklarera det), t ex ArrayIndexOutOfBoundsException 75 Undantag En exception är ett objekt som signalerar ett undantag throw-satsen kastar ett undantag som kan fångas m h a en try-sats try { } catch ( ) { } finally { } Satser där ett undantag kan kastas Undantaget som fångas Koden där ett undantag hanteras Koden för slutåtgärder (valfri) Flera undantag kan fångas och hanteras i en try-sats (valfri) 76 Mer om undantag - deklaration Exempel: public static void arraycopy ( Object source, int srcindex, Object dest, int destindex, int size) throws ArrayIndexOutOfBoundsException, ArrayStoreException Försökt spara fel sorts objekt 77 Att organisera Javakod Det finns flera koncept i Java som underlättar strukturering av kod Abstrakta klasser (abstract) När lämpliga superklasser blir för allmänna Kan innehålla allt vanliga klasser kan + abstrakta metoder Interfaces (interface) Definierar ett gränssnitt När arv och abstrakta klasser inte räcker till Kan innehålla abstrakta metoder och konstanter Paket (package) När det blir så pass många klasser att de måste struktureras på ett lämplig sätt Nästade klasser 78 Innerklasser Arv och polymorfi Polymorfi: Kan förekomma i många former. Referenser får referera till objekt av en subklass Exempel: Figure f = new Square(); Square s = new Figure(); Square s = new Circle(); Typfel OK. Square är-en Figure Square Figure... 79 Circle Dynamisk bindning Objektets typ (inte referensens) bestämmer vilken metod som exekveras Samma kod kan ge olika anrop vid olika tillfällen Kopplingen görs under körningen (dvs dynamisk) Exempel: Figure f = new Square(); f.changesize (1); f = new Circle(); f.changesize (1); changesize i Square exekveras! changesize i Circle exekveras! OK. Square och Circle ärver från ( är-en ) Figure Square Figure... 8 Circle
Arrayer Alla värden har samma datatyp Får vara primitiva datatyper eller klasstyper I Java behandlas arrayer som objekt Instansieras med new Namnet på fältet är en referens Index är av datatyp int OBS! Vid instansiering av ett fält med objekt instansieras ej objekten. Det skapas bara utrymmet för rätt antal referenser. Referenserna sätts till null vid skapandet. 81 Primitiva datatyper int[] array; array array = new int[3]; array array[1] = ; array Instansiera arrayer 1 3 1 3 Klasstyper Triangle[] tarray; tarray tarray = new Triangle[3]; tarray tarray null 1 null null 3 tarray[1] = new Triangle(); null 1 null 3 8 Arrayer som parametrar Arrayreferensen överförs ( kopieras ) och den formella och aktuella parametern blir alias Ändringar påverkar båda Eftersom storleken inte är del av datatypen får den aktuella parametern ha godtycklig längd int[] array = {1,, 3, 4, 5};.aMethod (array); public void amethod (int[] numbers) { numbers[] = 99; } array[] = ; array numbers 83 1 3 99 4 5 1 3 4 Kopiera arrayer Arrayvariabler är referenser Tilldelning gör ingen kopia på elementen i fältet int[] array1 = {1,, 3, 4, 5}; int[] array = new int[5]; array = array1; array1 1 3 4 5 1 3 4 array 1 3 4 84 Kopiera arrayer System.arraycopy gör kopia element för element Vid flerdimensionella arrayer måste den anropas flera gånger Gör lämpligtvis i en (nästad) loop public static void arraycopy ( Object source, int srcindex, Object dest, int destindex, int size) throws ArrayIndexOutOfBoundsException, ArrayStoreException Vi kan självklart göra det manuellt också 85 Iteratorer Kan användas för att gå igenom samlingar av värden tex i Vector, ArrayList m.fl. Vector<Integer> v=new Vector<Integer>(); for(int i =;i<1;i++) v.add(new Integer(i)); Iterator<Integer> it = v.iterator(); while(it.hasnext()) it.next() 86
For-each Ny variant på for-loopen. Tillkom i Java 1.5 (5) ArrayList<Integer> v=new ArrayList<Integer>(); for(int i =;i<1;i++) v.add(new Integer(i)); for(integer value:v) value Funkar för arrayer och alla klasser som implementerar interfacet Iterable Input/ output Utströmmar från programmet Inströmmar till programmet 87 88 Input Streams Output Streams Data Streams I/O Streams Processing Streams Collection List Queue ArrayList LinkedList PriorityQueue Character Streams Byte Streams Byte Streams handle I/O of raw binary data. Character Streams handle I/O of character data, automatically handling translation to and from the local character set. Buffered Streams optimize input and output by reducing the number of calls to the native API. Scanning and Formatting allows a program to read and write formatted text. I/O from the Command Line describes the Standard Streams and the Console object. Data Streams handle binary I/O of primitive data type and String values. Object Streams handle binary I/O of objects. 89 Map Set HashMap TreeMap LinkedHashMap SortedMap HashSet TreeSet LinkedHashSet SortedSet Johan Eliasson Klassen ArrayList (va.util) Ett objekt av klassen ArrayList liknar en array Men Har dynamisk längd, dvs längden utökas efter behov Kan bara lagra referenser till objekt dvs inte lagra primitiva typer Inte samma syntax för indexering Implementeras med arrayer Hur då? Arrayer är ju statiska https://docs.oracle.com/vase/7/docs/api/va/util/ Generella klasser I tidigare versioner av Java kan man göra generella klasser (tex ArrayList) med hjälp av Object. Fördel man behöver skriva koden till listan en enda gång och sen använda den oavsett vad som ska lagras. Nackdel man kan i en och samma lista kan lagra olika objekt huller om buller. man behöver göra många explicita typkonverteringar i koden List.html 91 9
Generics Mha generics så kan man istället specificera (vid konstruktion av objektet) vad som ska lagras Man använder en Typ-parameter för att tala om vilken typ som man vill att en instans ska jobba med ArrayList<String> ArrayList<Figure> ArrayList<Object> ArrayList<T> ArrayList<T> ( ) + add(t obj) + add (int index, T obj) + set (int index, T obj) + remove (int index) + T get (int index) + boolean contains (T obj) + boolean isempty ( ) + int indexof (T obj) + int size ( ) + clear ( )... 93 Autoboxing Automatisk konvertering mellan primitiva typer och wrapperklasserna Integer, Float, Boolean etc Ex: Integer i = new Integer(9); Integer j = new Integer(13); Integer k = i + j; //Typfel i va 1.4 I va sedan version 5 Kod kommer att infogas för att göra konverteringen så det kommer inte gå snabbare än om man gör det manuellt, men koden blir mindre plottrig Johan Eliasson Vad kännetecknar en god klass Har tillstånd och beteende Representerar en mängd möjliga run-time objekt Problemet ska delas upp i lämpliga klasser Cohesion och Coupling (sammanhörighet och koppling) Metoderna i varje klass ska ha stark sammanhörighet Klasserna ska vara löst kopplade (oberoende av varann) 95 Metoddesign Konsistens när det gäller parametrar och namn Följ en kodkonversion Undvik sidoeffekter i metoder om det går, beräknar och returnera ett värde Undvik att förändra objekten som parametrarna refererar till, returnera ett nytt objekt om det är görbart Ibland använder man returvärdet för att säga något om beräkningen hur den gick, trots att metoden inte returnerar något riktigt värda Exceptions så långt det går vi undantag att jobba med för att tala om att det har skett något som anroparen behöver veta för att hantera ev. konstigheter 96 Metoddesign Java jobbar med Call-By-Value på attributen, dvs värdet från anropssidan kopieras till attributen i metoden Undvik att förändra värdet på de anropade attributen, speciellt när de är av referenstyp. Vad händer på anropssidan om du ändrar på parametern/ attributet inne i en metod använd final i attribut-listan för att göra det omöjligt att ändra attributen inne i metoden Java kan inte förändra innehållet i variabeln som används för anropet Java förändrar objektet som variabeln refererar till inne i en metod Ju starkare relation desto starkare koppling ( sämre) svag koppling Dependency Association Komposition/Aggregering Arv UML: Klassrelationer <<beror på>> Klass1 Klass relation Klass1 Klass Klass1 Klass Klass1 Klass stark koppling 97 98
Johan Eliasson Klassdiagram Klassdiagram Länk till mer om UML och dess pilar http://www.ibm.com/developerworks/rational/library/content/rationaledge/sep4/bell/ Johan Eliasson Programutveckling Här: starkt förenklat version Passar bara mindre projekt Fem delmoment: Fastställa och analysera förutsättningarna/kraven Skapa en design Implementera koden Testning Dokumentation OBS! Testning och dokumentation ska ske parallellt med de övriga momenten. 31 ANALYS SYSTEM DESIGN PROGRAM DESIGN V modellen Validera kraven Verifiera designen KODNING SYSTEMTEST ENHETS- & INTE- GRATIONSTEST DRIFT & UNDERHÅLL ACCEPTANS- TEST 3 CRC Metoden Frågor till er/oss Grupparbete(4-6 personer) Hitta kandidatobjekt Filtrera kandidatobjekten Skapa CRC-kort för kvarvarande kandidatobjekt Definiera scener för testning av modellen (testfall) Spela in scener m.h.a rollspelsdiagram (testa) Uppdatera CRC-korten och scenerna 33 På vilka sätt har kursen uppfyllt era förväntningar I positiv mening I negativ mening Tre tips till oss inför nästa gång kursen ges Nyttig? Rolig? Lärorik? 34
3:a Maj Tentamen Täcker de teoretiska delarna av kapitel 1-1, 17, 19 +CRChäftet Kommer inte innehålla några programmerings-uppgifter... men däremot kan tex designuppgifter förekomma Handlar till stor del om att kunna förklara begrepp och programkonstruktioner Läsa och förstå vakod Läsa och förstå UML-klassdiagram Skriva/rita UML-klassdiagram 35 Hitta de fel som finns i nedanstående klass. Beskriv för varje fel vad som är fel samt ge ett förslag på vad man skulle kunna göra för att åtgärda det. Obs! Radnummren är bara till för att ni skall ha något att hänvisa till och räknas ej som ett fel. Observera också att antal poäng inte har något (direkt iallafall) med antal fel att göra. Kod på nästa bild Tenta U9 36 Tenta U9 Tenta U9 1. public class mångafel extends Object.{ 3. final int enidentifierare=; 4. int hej=1; 5. void enmetod() 6. { 7. hej=; 8. } 9. 1. int enmetod() 11. { 1. private int enlokalvariabel=1; 13. enidentifierare++; 14. return enlokalvariabel/; 15. } 16. 16. 17. public Object enannanmetod(int värden[]) throw IOException 18. { 19. float hej=1.;. if (hej/==.5) 1. throws(new IOException("Ooops"));. return värden; 3. } 4. 5. public void entredjemetod(int värden[]) 6. { 7. int enlokalvariabel =; 8. for (int i=;i<värden.length;i++) 9. enlokalvariabel +=värden[i]; 3. return enlokalvariabel; 31. } 3. } 37 Facit 5,1 Två metoder med samma signatur 3,13 Ändrar värdet på en konstant 1 Modifierare (private) på lokal variabel 17,1 throw och throws borde bytt plats 19 tilldelning float<-double 5,3 Returtypen stämmer ej överens med vad som returneras (void/int) 38