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

Slides:



Advertisements
Lignende præsentationer
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
Advertisements

KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Collectionklasser Klassifikation og anvendelse. Collections Motivation –hvorfor bruge collections? Realisering af en-til-mange relationer –Importer, erklær,
Grundlæggende programmering Efterår 2001
Hvordan man skriver koden.
Forelæsning 3.1 Collections Javas for-each løkke
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
Objekter og klasser Rasmus D. Lehrmann DM
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Forelæsning 2.2 Tilstand og opførsel (repetition)
Fundamentale sprogbegreber
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Forelæsning 7.1 – repetition
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn)
Introduktion til programmering Repetition - ArrayList.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Introduktion til programmering Repetition. dIntProg, F08Repetition.2 dIntProg Sidste forelæsning (12/10) –kort tilbagemelding på evaluering –repetition.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Forelæsning Uge 2 – Torsdag Java syntax og style guide Sætninger –Simple sætninger (assignment, interne og eksterne metodekald) –Sammensatte sætninger.
Forelæsning Uge 4 – Torsdag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 6 – Mandag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 1 – Torsdag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 6 – torsdag – repetition
Quiz – Uge 2 – torsdag – første time
Forelæsning Uge 3 – Mandag
Forelæsning Uge 2 – Mandag
”Avanceret” Programmering
Forelæsning Uge 6 – Mandag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 3 – Mandag
Klasser og objekter (Afsnit i manualen).
Quiz – Uge 3 – torsdag – første time
Dokumentation.
Forelæsning Uge 4 – Mandag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 3 – Mandag
Forelæsning Uge 2 – Torsdag
Dokumentation.
Programmering.
Forelæsning Uge 12 – Mandag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 2 – Mandag
Quiz – Uge 4 – mandag – første time
Forelæsning Uge 3 – Mandag
Forelæsning Uge 2 – Mandag
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 2 – Mandag
Forelæsning Uge 3 – Mandag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

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)

● 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

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

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

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

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 ClockDisplay hours minutes displayString String "00:00"

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

● Collections – Samlinger af objekter Objektreferencer –for at holde fast i et objekt skal der bruges en objektreference (en variabel) –for at holde fast i objekter skal der bruges 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

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

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

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", " ", 33 ); persons.add(person); person = new Person( "Ole", " ", 28 ); persons.add(person); person = new Person( "Linda", " ", 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

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

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

Realisering af en-til-mange – kode For at realisere en en-til-mange relation i koden skal man gøre 3 ting 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

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

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

● Javas for-each-løkke (udvidet for-løkke) private ArrayList persons;... persons = new ArrayList ();... public void createIndex() { Person person; person = new Person("Jeppe", " ", 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

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

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

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

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.

● 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

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

● 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)

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