Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Forelæsning Uge 3 – Mandag Niveauer af programbeskrivelser – Statiske / dynamiske beskrivelser ArrayList –Collection med variabelt antal elementer –Der.

Lignende præsentationer


Præsentationer af emnet: "Forelæsning Uge 3 – Mandag Niveauer af programbeskrivelser – Statiske / dynamiske beskrivelser ArrayList –Collection med variabelt antal elementer –Der."— Præsentationens transcript:

1 Forelæsning Uge 3 – Mandag Niveauer af programbeskrivelser – Statiske / dynamiske beskrivelser ArrayList –Collection med variabelt antal elementer –Der er mange andre Collection typer (se Collection interfacet i JavaDoc) Javas for-each-løkke (udvidet for-løkke) Afleveringsopgave: Raflebæger 2 (DieCup 2)

2 ● Niveauer af programbeskrivelser Klassediagram (oversigt) –Hvad (specifikation) JavaDoc (mellem-niveau) –Hvad Java-kode (detaljeret) –Hvordan (inplementation) Objektdiagram (oversigt) –Relationer mellem objekter (referencer) Sekvensdiagram (detaljeret) –Interaktion mellem objekter (metodekald) Statisk (struktur) rum for hvad der generelt kan ske Dynamisk scenarie for hvad der vil ske i en konkret situation 2

3 Klassediagram (statisk, oversigt) ClockDisplay NumberDisplay int getValue() String getDisplayValue() void setValue(int val) void increment() timeTick() setTime(int h, int m) getTime() void updateDisplay() 2 TestDriver run() 1 3 UML klassediagrammer kan også vise nogle af feltvariablerne BlueJ UML

4 Java-kode (statisk, detaljeret) 4 Disse kommentarer indsættes i klassens dokumentation Vi har to forskellige konstruktører med forskellige parametre Skift mellem Java kode og dokumentation

5 JavaDOC (statisk, mellem-niveau) 5 Første sætning Hele kommentaren Tilsvarende gælder for kommentarer til klassen og kommentarer til metoder

6 Objektdiagram (dynamisk, oversigt) 0 NumberDisplay 0 limit value 0 NumberDisplay 0 limit value public ClockDisplay() { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); updateDisplay(); } public NumberDisplay(int rollOverLimit) { limit = rollOverLimit; value = 0; } 6 Konstruktører 24 60 ClockDisplay hours minutes displayString String "00:00"

7 Sekvensdiagram timeTick :ClockDisplay minutes :NumberDisplay hours :NumberDisplay timeTick() increment() getValue() increment() updateDisplay() getDisplayValue() public void timeTick() { minutes.increment(); if (minutes.getValue() == 0) { hours.increment(); } updateDisplay(); } 22:59 23:00 private void updateDisplay() { displayString = hours.getDisplayValue() + ":" + minutes.getDisplayValue(); } 7

8 ● Collections – Samlinger af objekter Objektreferencer –for at holde fast i et objekt skal der bruges en objektreference (en variabel) –for at holde fast i 10.000 objekter skal der bruges 10.000 objektreferencer... Collections –en særlig slags objekter, der kan opbevare (referencer til) objekter –f.eks. ArrayList java.util –en pakke, der bl.a. indeholder klasserne i Javas såkaldte collection framework 8

9 Klassediagram for musikafspiller Track String getName() String getArtist() int getTime() Player void add(PlayList p) List search(String q) void print() * PlayList String getName() void addTrack(Track t) void print() Track shortestTrack() Track longestTrack() List shorterThan(int r) List search(String q) void shuffle() * * ≈ én-til-mange relation Vilkårligt mange objekter af den pågældende type Hvordan realiseres dette? Playlist Track 9

10 Klassediagram for adressebog Man kan –Tilføje et vilkårligt antal personer –Printe adressebogen –Finde et telefonnummer (via personens navn) –Finde gennemsnitsalderen på personerne Problem –Hvordan kan man huske alle personerne? –Hvordan realiseres én-til-mange relationen? Svar –Det kan vi gøre ved hjælp af en arrayliste AddressBook void addPerson(Person p) void print() String getPhone(String name) int averageAge() Person String getName() String getNumber() int getAge() * 10

11 Eksempel: Index over bekendte // feltvariabel private ArrayList persons;... // initialisering (i konstruktør) persons = new ArrayList ();... // skab personer og tilføj dem til arraylisten public void createIndex() { Person person; // lokal variabel person = new Person( "Jeppe", "89425665", 33 ); persons.add(person); person = new Person( "Ole", "32789878", 28 ); persons.add(person); person = new Person( "Linda", "90023234", 21 ); persons.add(person); } 11 Husk parenteserne Kald af konstruktør Ellers typenavn og compile fejl Objekterne i arraylisten skal være af type Person

12 Objektdiagram for createIndex persons:ArrayList 12 0 ArrayList 1 2 size() = 0 1 2 3 name number age 33 Person String "Jeppe" String "89425665" name number age 28 Person String "Ole" String "32789878" name number age 21 Person String "Linda" String "90023234" Bemærk at index'erne nummereres fra 0 til size()-1 persons.add(person); person:Person

13 Realisering af én-til-mange Person String getName() String getNumber() int getAge() * 13 AddressBook ArrayList persons void addPerson(Person p) void print() String getNumber(String name) int averageAge() BlueJ UML Feltvariabel (liste af personer) Metode (tilføjer person til listen) Parametriseret type

14 Realisering af en-til-mange – kode For at realisere en en-til-mange relation i koden skal man gøre 3 ting 14 1. Importere klassen ArrayList import java.util.ArrayList; private ArrayList persons; public AddressBook(){ persons = new ArrayList (); } 3. Initialisere feltvariablen (gøres normalt i konstruktøren) 2. Erklære en feltvariabel af typen ArrayList IM ER KO IMERKO-reglen Husk parenteserne Kald af konstruktør Ellers typenavn

15 ArrayList er en parametriseret type public class ArrayList { boolean add( E e){…} void add(int index, E element){…} boolean remove(Object o){…} E get(int index){…} boolean contains (Object o){…} boolean isEmpty(){…} int size(){…}... } Flere detaljer: se JavaDoc... LinkLink 15 Type parameter (i parenteser) Klassenavn Erklæring af ArrayList

16 Arrayliste med heltal Parameteren til ArrayList skal være en objekt type –Det betyder, at man ikke kan skrive ArrayList –I stedet skal man skrive ArrayList Integer er en objekt type med de "samme værdier" som den primitive type int –Integer er en wrapper klasse for int (wrapper = indpakning) –Integer-værdier konverteres automatisk til int-værdier (og omvendt), når der er behov for det Eksempel –private int i; –private ArrayList list –list.add(i)int  Integer –i = list.get(3)Integer  int 16

17 ● Javas for-each-løkke (udvidet for-løkke) private ArrayList persons;... persons = new ArrayList ();... public void createIndex() { Person person; person = new Person("Jeppe", "89525665", 33 ); persons.add(person);... } 17 for ( Person person : persons ) { System.out.println(person); } Keyword (reserveret ord) KROP (de instruktioner, der skal gentages) Erklæring af lokal variabel (af type Person) Reference til den arrayliste, der skal gennemløbes Vi vil gerne gennemløbe arraylisten og printe alle personerne i den

18 Find gennemsnitsalder 18 /** * return the sum of the age of the * people in the address book */ private int ageSum() { int result = 0; for (Person person : persons) { result += person.getAge(); } return result; } /** * return the average age of the * people in the address book */ public int averageAge() { return ageSum() / persons.size(); } Metoden er private (den kan kun bruges i denne klasse) Angiver at værdien af udtrykket på højresiden lægges til variablen på venstresiden

19 Print af arrayliste Elementerne i en arrayliste kan udskrives via sætningen System.out.println(list); 19 Alle klasser er subklasser af klassen Object Indeholder en metode som returnerer en tekstrepræsentation af det pågældende objekt Det er denne metode, der anvendes til at få en tekstrepræsentation af Person objekterne String toString(){…} Klassenavn ID-nr (hexa-decimal værdi) Ingen linjeskift

20 Pænere print af arrayliste 20 for (Person person : list) { System.out.println(person); } Redefinere toString metoden til at returnere noget meningsfyldt (i stedet for klassenavn og hexa- decimalt ID-nr) public String toString() { return name + " " + age + " years"; } Indsætte linjeskift mellem de enkelte objekter i listen

21 Mere info om ArrayList og String? 21 Java API Oversigt over alle de klasser (og interfaces) der er i Java Library API = Application Programming Interface LinkLink API er en softwaregrænseflade, der tillader et stykke software at interagere med andet software. Et typisk eksempel er at applikationer "taler" med styresystemet for at åbne en fil, hvorefter styresystemet på programmets vegne indlæser filen fra en harddisk eller lignende. I en nøddeskal kan et API betegnes som en måde at tilbyde tjenester, herunder data, fra et system til et andet system.

22 ● Afleveringsopgave: Raflebæger 2 (DieCup 2) I sidste uge lavede I et BlueJ projekt med et raflebæger og to terninger 22 I denne uge skal I: Lave en TestDriver klasse med en metode, som kan –Skabe et raflebæger med to terninger –Lave et kast og udskrive det samlede antal øjne i kastet De to konstruktører kan eksistere samtidigt Hedder det samme Forskellige parametre Overloadning Generalisere raflebægeret, så det kan have et vilkårligt antal terninger –Brug en feltvariabel af typen ArrayList til at huske terningerne –Lav ny konstruktør Gammel Ny // skaber bæger med 2 terninger DieCup(){…}; // skaber bæger med n terninger DieCup(int n){…}; Metoder kan også overloades

23 Eksempel på overloadning af metode 23 String klassen i Java API

24 ● Opsummering Niveauer af programbeskrivelser –statiske / dynamiske ArrayList (eksempel på en Collection type) –Kan bruges til at realisere én-til-mange relationer –Har et variabelt (ubegrænset) antal elementer Javas for-each-løkke (udvidet for-løkke) kan bruges til at gennemløbe arraylists (og andre collections) 24 for (Person person : persons) {...}; Afleveringsopgave: Raflebæger 2 (DieCup 2)

25 Det var alt for nu….. … spørgsmål 25


Download ppt "Forelæsning Uge 3 – Mandag Niveauer af programbeskrivelser – Statiske / dynamiske beskrivelser ArrayList –Collection med variabelt antal elementer –Der."

Lignende præsentationer


Annoncer fra Google