Presentation laddar. Vänta.

Presentation laddar. Vänta.

Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar

Liknande presentationer


En presentation över ämnet: "Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar"— Presentationens avskrift:

1 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar Telefon Andreas Hedrén Telefon Föreläsning 4, Kapitel 4

2 Idag Det handlar om samlingar av likadana objekt. Vi tar upp: Collections eller samlingar Loopar Iteratorer Arrayer

3 Varför skall vi ha massa likadana objekt? Behov av att hantera många likadana finns i många applikationer: Bibliotekskataloger Studentregister Antalet element eller poster som skall lagras varierar: Element läggs till Element tas bort

4 En personlig anteckningsbok Det går att spara anteckningar Det går att läsa enskilda anteckningar Det finns ingen begränsning på antalet anteckningar Den skall tala om hur många anteckningar som är sparade Utforska projektet: notebook1

5 Bibliotek av klasser Samlingar med användbara klasser Vi behöver inte skriva allt från början Java kallar sina bibliotek, packages Att kunna gruppera objekt är ett vanligt och återkommande behov: –Paketet java.util innehåller klasser för detta

6 En första ansats till en anteckningsbok import java.util.ArrayList; /** *... */ public class Notebook { // Storage for an arbitrary number of notes. private ArrayList notes; /** * Perform any initialization required for the * notebook. */ public Notebook() { notes = new ArrayList (); }... }

7 Objektdiagram med två sparade anteckningar

8 Objektdiagram med en tredje anteckning

9 Egenskaper hos en samling Den ökar sin kapacitet efter behov Den har en privat räknare ( size() -metod) Ordningen bland objekten ändras inte Detaljerna för hur allt går till är dolda –Spelar det någon roll? Hindrar det oss att använda samlingen om vi inte vet hur?

10 Att använda en samling public class Notebook { private ArrayList notes;... public void storeNote(String note) { notes.add(note); } public int numberOfNotes() { return notes.size(); }... } Lägga till en ny anteckning. Returnera antalet anteckningar (delegation).

11 Numrering med index

12 Att hämta ett objekt public void showNote(int noteNumber) { if(noteNumber < 0) { // This is not a valid note number. } else if(noteNumber < numberOfNotes()) { System.out.println(notes.get(noteNumber)); } else { // This is not a valid note number. } Kontroll att index är OK Hämta och skriv ut anteckningen

13 Att ta bort objekt kan påverka numreringen

14 Summering samlingar Samlingar (Collections) kan lagra ett valfritt antal objekt Klassbibliotek har ofta väl testade samlings-klasser Java kallar sina klassbibliotek för eller paket (eng: packages ) Vi har använt klassen ArrayList från java.util paketet

15 Summering samlingar, mera Element kan läggas till och tas bort Varje element har ett index Viket index ett element har kan ändras om andra element läggs till eller tas bort De huvudsakliga metoderna för klassen ArrayList är add, get, remove och size.

16 Iteration Vi vill ofta göra saker ett godtyckligt antal gånger. –T ex skriva ut alla anteckningar. Hur många anteckningar finns det? De flesta programmeringsspråk har loop-satser som man har till just detta Java har tre sorters loop-satser –Vi tittar mest på while-loopen

17 Iteration, flödesdiagram while-loop VillkorA Falskt Sant Iteration med while-loop: A utföres (upprepade gånger) så länge som {villkor} är sant ”Så länge som”, ”while” på engelska

18 Iteration, flödesdiagram, exempel Törstig? Drick en klunk vatten Falskt Sant Iteration: ”Drick en klunk vatten” utförs (och upprepas) så länge som {Törstig?} är sant

19 Pseudokod för while-loopen while(loop villkor) { loop kropp } while(det finns minst en anteckning till att skriva ut) { skriv ut nästa anteckning } Boolskt test while nyckelord Satser som skall upprepas Pseudo-kod exampel för att skriva ut varje anteckning Generell while-loop

20 While-loop: kod vs flödesdiagram index < notes.sice() Falskt Sant /** * List all notes in the notebook. */ public void listNotes() { int index = 0; while(index < notes.size()) { System.out.println(notes.get(in dex)); index++; } System.out. println(not es.get(inde x)); index++;

21 Iterera över alla objekt i en samling Iterator it = myCollection.iterator(); while(it.hasNext()) { call it.next() to get the next object do something with that object } java.util.Iterator Returnerar ett Iterator objekt public void listNotes() { Iterator it = notes.iterator(); while(it.hasNext()) { System.out.println(it.next()); }

22 Auktionsprojektet Projektet auction ger exempel på hur man kan använda samlingar och iteration på flera sätt. Två saker till att ta upp: –Värdet null –Casting. Används för att spara resultatet av get i en variabel. String message = (String) notes.get(0);

23 Summering loopar Loop-satser gör det möjligt att repetera ett block med satser En while-sats i Java låter ett boolskt uttryck styra repetitionen Samlingsklasser har speciella Iterator objekt som förenklar iterationen över hela samlingen.

24 Samlingar med fix storlek Ibland vet man hur många objket en samling skall ha. Programmeringsspråk har oftast en speciell samlingstyp för smalingar med fast storlek: array Arrayer i Java kan lagra primitiva datatyper eller objekt Arrayer har en speciell syntax

25 Projektet weblog-analyzer Webservrar lagrar information om varje åtkomst Stöttar webmastern i dennes uppgifter –Populäraste sidorna –Vilka tider är belastningen högst –Hur mycket data skickas –Referenser som inte fungerar Analysera åtkomster per timme

26 Att skapa ett array-objekt public class LogAnalyzer { private int[] hourCounts; private LogfileReader reader; public LogAnalyzer() { hourCounts = new int[24]; reader = new LogfileReader(); }... } Skapa ett arrayobjekt Deklaration av arrayvariabel

27 Arrayen hourCounts

28 Att använda en array Hakparantes-notation används för att komma åt ett element i arrayen: hourCounts[...] Elementen används som vanliga variabler: På vänster sida i en tilldelning: –hourCounts[hour] =...; I uttryck: adjusted = hourCounts[hour] – 3; hourCounts[hour]++;

29 For-loopen Liknar while-loopen Används ofta för att iterera ett fixt antal gånger Används ofta för att iterera över en array

30 Iteration med for-loop VillkorB Falskt Sant Iteration med for: A utförs först en enda gång (upprepade gånger): Är {villkor} sant så utförs B och sedan C A C

31 For-loopens pseudokod for(initiering; villkor; åtgärd efter kroppen) { satser som skall repeteras } Generella formen för for-loop Samma sak i formen av en while-loop initiering; while(villkor) { satser som skall repeteras åtgärd efter kroppen }

32 for-loop: källkod vs flödesdiagram System.out. println( hour + ": " + hourCounts [hour]); Falskt Sant int hour = 0 hour++; for(int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]); } hour < hourCount.length()

33 Ett exempel i Java for(int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]); } int hour = 0; while(hour < hourCounts.length) { System.out.println(hour + ": " + hourCounts[hour]); hour++; } Version med for-loop Version med while-loop

34 Summering arrayer Arrayer är bra när man behöver en samling där antalet objekt inte ändras. Arrayer har en speciell syntax. For-loopar är ett alternativ till while-loopar när man vet hur många repetetioner man skall göra. For-loopar används ofta för att iterera över elementen i arrayer.


Ladda ner ppt "Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar"

Liknande presentationer


Google-annonser