Presentation laddar. Vänta.

Presentation laddar. Vänta.

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

Liknande presentationer


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

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

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<String> notes; * Perform any initialization required for the * notebook. public Notebook() notes = new ArrayList<String>(); } ...

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<String> 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 Kontroll att index är OK
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 { 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
Villkor A 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
Sant Törstig? Drick en klunk vatten Falskt Iteration: ”Drick en klunk vatten” utförs (och upprepas) så länge som {Törstig?} är sant

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

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

21 Iterera över alla objekt i en samling
Returnerar ett Iterator objekt java.util.Iterator Iterator it = myCollection.iterator(); while(it.hasNext()) { call it.next() to get the next object do something with that object } 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(); } ... Deklaration av arrayvariabel Skapa ett arrayobjekt

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
A utförs först en enda gång (upprepade gånger): Är {villkor} sant så utförs B och sedan C C Sant Villkor B Falskt

31 For-loopens pseudokod
Generella formen för for-loop for(initiering; villkor; åtgärd efter kroppen) { satser som skall repeteras } 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
int hour = 0 for(int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]); } hour++; Sant hour < hourCount.length() System.out. println( hour + ": " + hourCounts [hour]); Falskt

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

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 "Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling."

Liknande presentationer


Google-annonser