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

Relevanta dokument
Modeller, Objekt och Klasser

Länkade strukturer. (del 2)

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

DAT043 - föreläsning 8

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

Objektsamlingar i Java

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objektorienterad Programkonstruktion

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

DAT043 Objektorienterad Programmering

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

TDDC77 Objektorienterad Programmering

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

Samlingar Collection classes

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 12. Länkade listor

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

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

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

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

Sammansatta datatyper Generics: Parametrisk polymorfism

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

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Objektorienterad programmering i Java

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Arrayer. results

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

Kopiering av objekt i Java

Tommy Färnqvist, IDA, Linköpings universitet

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

Java, klasser, objekt (Skansholm: Kapitel 2)

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Agenda. Objektorienterad programmering Föreläsning 13

Föreläsning 4 Innehåll

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad programmering med Java, Generics

Länkade strukturer, parametriserade typer och undantag

Föreläsning 2. Länkad lista och iterator

Lösningar för tenta 3 DAT043,

Stackar, köer, iteratorer och paket

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540)

Lektion 7. Datateknik A, Java I, 5 poäng

Repetition av OOP- och Javabegrepp

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

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

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

Föreläsning 8: Exempel och problemlösning

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

Föreläsning 6: Metoder och fält (arrays)

Tentamen TEN1 HI

Repetition av OOP- och Javabegrepp

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

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?

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

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

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

Föreläsning 2. Länkad lista och iterator

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 3. Stack

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Föreläsning 2, vecka 8: Repetition

Föreläsning 3. Stack

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Statistik över heltal

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

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.

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Typkonvertering. Java versus C

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Den som bara har en hammare tror att alla problem är spikar

Tentamen i Grundläggande Programvaruutveckling, TDA548

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

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

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

OBJEKTORIENTERAD PROGRAMMERING för Z1 (TDA540) Ansvarig: Jan Skansholm, tel eller

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

DAT043 - Föreläsning 7

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

Transkript:

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

Samlingar Vi kommer att behöva hantera samlingar av objekt - Har oftast använd Array (fält) - Bra om fix storlek och fixa index, exempel: Holder (Scrabble) - Inte så bra om vi vill att samlingen skall kunna minska eller växa under körning, - Exempel TileBag (Scrabble) skall ha en samling av Tiles. Samlingen skall krympa då man tar brickor. När samling tom så är påsen tom = spelet slut Holder TileBag

The Collections Framework Java har en stor mängd färdiga klasser för samlingar*) - Benämns The Collections Framework (JCF) - Samlingarna växer och krymper efter behov - Samlingarna kan lagra objekt av vilken referenstyp som helst, de är generiska. Vilken typ som skall lagras anges vid deklaration - Några exempel på samlingar är... - Mängd (HashSet, TreeSet), samma idé som en matematisk mängd, inga dubbletter, ingen ordning - Lista (ArrayList, LinkedList), en ordnad sekvens, första, n:te, sista, före, efter, liknar array - Tabell (HashMap), givet en nyckel kan man slå upp ett värde (namn/telefonnummer, svenskt ord/engelsk översättning) - För att använda samlingar måste vi ange import java.util.* i våra klassfiler (= importera alla klasser ur paketet java.util) *) Alla (moderna) språk har liknande

Listklasser Vill ha en krympande samling i TileBag - HashSet, TreeSet tveksamt, vi har dubbletter, eller? Har vi (mer senare)? - HashMap behövs inte, vi har inget att slå upp - ArrayList eller LinkedList tänkbara men vilken? - ArrayList långsam att lägga till/ta bort, snabb att läsa av! - LinkedList snabb att lägga till/ta bort, långsam att läsa av! Anta att vi inte vet just nu, vad göra?

Implementation ArrayList och LinkedList är två olika sätt att bygga en lista - Två olika implementationer - Men metoderna är samma för båda? - Om vi bara är intresserade av att metoderna finns, inte hur de är implementerade kan vi ange detta på något sätt?? - JA! (next slide)!

Gränssnittet List Om vi inte vet (eller spelar ingen roll) vilken typ av lista vi vill ha kan vi ange enbart List - List är en specifikation (abstraktion) av en lista (vilken typ som helst) - Specifikationen ges av ett gränssnitt - List är ett gränssnitt - Ett gränssnitt i Java påminner om en klass men deklareras med interface i stället för class - Gränsnittsdeklarationen innehåller bara metodhuvuden - Både ArrayList och LinkedList implementerar gränssnittet List, d.v.s de har metoderna som anges i List - Att en klass implementerar ett gränssnitt anges i koden med implements (vid klasshuvudet efter namnet)

Gränsnitt och Typ Ett gränssnitt introducerar en ny typ! - List och ArrayList/LinkedList är typkompatibla med List, de har samma metoder. Vi kan tilldela ett ArrayList objekt till en List variabel! - Genom att deklarera alla parametrar och returtyper som interface-typer kan vi bortse från vilken lista vi använder, kan byta vid behov! - Någonstans skapas ett ArrayList eller LinkedList objekt men det skickas alltid runt som typen List - Exampel: TileBag, CommandLineScrabble.getTiles()

Instansiering och initiering Nya listobjekt skapas med new (som vanligt) - Inget enkelt sätt att initiera (sätta värden) // li is of type list (compatible with ArrayList) List<Integer> li = new ArrayList<>(); // or LinkedList // Note: li emtpty from start, no elements and *no* // indexes (there are no positions) // Normally have to add element by element to initialize li.add(2);

Grundläggande List Metoder Lägga till/ta bort element m.m. List<Integer> li = ArrayList<>(); li.add(4); // Put last li.set(0, 5) // Overwrite index 0 li.remove(2) // Remove index (or object) li.get(0); // Get index 0 li.size(); // Number of elements li.isempty(); li.clear(); li.indexof( ) // Index for object (-1) if not found

Hur fungerar i List? List objekt är icke-triviala. Vad händer om vi... - anger index utanför listan? - tar bort ett element i mitten (blir det ett hål)? - lägger till en dubblett? Skrivs gamla värdet över? - har dubbletter, vilket värde returneras? - lägger till null? - anropar contains(...), vad jämför för att hitta elementet? (kan inte komma ihåg allt, får gå till dokumentationen, tyvärr inte säkert att svaret finns där, om ej testa...)

Paus 15 min

Hur skapa ett Program? Hittills har vi tittat på en hel del tekniska aspekter på programmering, men hur skapar vi ett program? - Finns inget recept! En fri, kreativ, skapande verksamhet! - I det följande visas en tänkbar väg - Vi vill så snabbt som möjligt ha något körbart (fördjupa vår förståelse) Fakta - Vi behöver en objektmodell - Vi behöver något sätt att kommunicera med modellen, användaren skicka indata, skriva utdata från modell och/eller rita upp (delar av) modellen (rendera) - Vi måste ha en main-metod (krav i Java)

Omgivning till Modellen Modellens omgivning sköter kommunikation, instansiering och rendering (utritning) - Vi samlar hela omgivningen i en enda klass (namn: CommandLineNNN) - I klassen finns en kommandoradsmeny i metoden run() - I klassen finns main-metoden, i denna skapas kommandoradsobjektet och på detta anropas run() (d.v.s. kommandoraden startar) - Rendering av modellen sköta av en metod render(), ev. i kombination med tostring() i resp. klasser (framför allt under utveckling) - I samma klass lägger vi en metod för att instansiera modellen (namn: buildnnn). Metoden returnerar hela objektmodellen, alla kopplingar via konstruktor görs i metoden (hjälpmetoder kan behövas) - Exempel: CommandLineScrabble, Pig

Top down och Bottom up Det finns (minst) två olika angreppssätt för att bryta ner ett problem och kombinera ihop dellösningar - Top-down, börja övergripande, från helhet till delar - Bottom-up, börja med de minsta delarna (atomerna), kombinera dessa till större delar, o.s.v. - Vi behöver båda - Modellen tas fram bottom-up (objekten är våra atomer) - Metoder tas fram top-down (om de inte helt uppenbart hör ihop med något objekt)

Objektmodell Bottom-up Hitta objekt borde vara lätt *) - Det är därför vi använder OO-programmering! - Datan i objekten borde också hittas ganska lätt Hur hitta metoder, i vilka klasser skall de ligga? - Vissa bör vara givna utifrån problemställning och funna objekt, övriga avvaktar vi med (se metoder top-down senare) *) Vanligast är att man missar objekt, ofta mer abstrakta, objekt, t.ex. spelrunda

Koppling av Modell Hur koppla ihop objekten? - Vissa kopplingar borde ges av modellen (tyvärr finns ofta flera möjligheter) - Vilka objekt behöver andra? Försök koppla så! - Vi har alltid ett objekt som representerar hela problemet, ett top-objekt. Top-objektet kopplar ihop modellen så att den blir sammanhängande - Top-objektet har kopplingar till många andra modellobjekt, övriga objekt har ingen koppling till top-objektet. - Skapa konstruktorer som kopplar ihop - Exempel: Scrabble, Pig

Metoder Top-Down, Steg 1 Här gäller abstraktion. - Utgå från kommandoraden och top-objektet (t.ex. Scrabble) - Alla kommandon användaren skriver in skall resultera i direkta anrop på top-objektet - Vilka metoder skulle vi vilja ha? Tänk på vad du vill ha, inte hur det skall kodas! - Vad händer i verkligheten? Ibland hjälper att tänka indata-> utdata, vad har jag? Vad vill jag ha?! - Skriv tomma metoder med parametrar och returtyper i klassen för topobjektet (sätt return 0 eller return null så länge, så att det går att kompilera) - Exempel: Scrabble

Metoder Top-Down, Steg 2 Vi har nu flera tomma metoder i klassen för top-objektet 1. Börja med en metod och gör den helt klar (innan andra påbörjas) 2. Inspektera de objekt som är kopplade till klassen, finns några metoder att använda från dessa (saknas objekt eller verkar det vara fel objekt, se över kopplingarna)? 3. Om ej, skapar vi metoder som naturlig hör hemma i de olika objekten (har den data som behövs för att utföra det vi vill). Går inte detta skapa en ny tom metod i någon klass och gå till 2 eller skapa en privat hjälpmetod i top-level klassen 4. Fortsätt tills du kan kombinera ihop metoder till att utföra det som den ursprungliga metoden i top-level objektet skulle göra 5. Om metoden för stor (många rader) dela upp i flera metoder 6. Kontrollera att varje metod gör en sak, bättre att varje gör en sak och sedan kombinera ihop vid behov

Gris Då är vi klara att skapa ett helt program! - Vi har det tekniska - Vi har ett sätt att arbeta - Det blir inte rätt på en gång, så detta blir v. 0.1 Vi skall skapa ett program för spelet Gris!