Forelæsning Uge 3 – Mandag

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
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.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Forelæsning 3.1 Collections Javas for-each løkke
GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Lektion 7 Læsestof: Kopier fra Caranno
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.
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;
Repetition af dIntProg v/ Morten D. Bech. Tour de force Variabler Løkker Comparable ImErKo-reglen Eksamenssæt dIntProg, E13.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
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.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
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.
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.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge44 Java til Lingo Klasser, statements og lister.
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 3 – Mandag Niveauer af programbeskrivelser – Statiske / dynamiske beskrivelser ArrayList –Collection med variabelt antal elementer –Der.
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 5 – Mandag
Forelæsning Uge 6 – torsdag – repetition
Forelæsning Uge 3 – Mandag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 6 – Mandag
Forelæsning Uge 2 – Mandag
Klasser og objekter (Afsnit i manualen).
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 2 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 3 – Mandag
Forelæsning Uge 2 – Torsdag
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 – Torsdag
Quiz – Uge 9 – mandag – første time
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 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

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

Java-kode (statisk, detaljeret) Disse kommentarer indsættes i klassens dokumentation

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

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

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

● 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

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

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() *

Eksempel: Index over bekendte public void createIndex() { //declare a field of type Person Person person; //declare a field of type ArrayList ArrayList<Person> persons //create empty arraylist persons = new ArrayList<Person>(); // create persons and add them to arraylist person = new Person( "Jeppe", "89425665", 33 ); persons.add(person); person = new Person( "Ole", "32789878", 28 ); person = new Person( "Linda", "90023234", 21 ); } Husk parenteserne Kald af konstruktør Ellers typenavn

Objektdiagram for testMethod persons ArrayList<Person> 1 2 size() = 0 1 2 3 Bemærk at index'erne nummeres fra 0 til size()-1 name number age 33 Person String "Jeppe" "89425665" name number age 28 Person String "Ole" "32789878" Pause name number age 21 Person String "Linda" "90023234" person

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

Realisering af en-til-mange – kode For at realisere en en-til-mange relation i koden skal man gøre 3 ting: 1. Importere klassen ArrayList import java.util.ArrayList; 2. Erklære en feltvariabel af typen ArrayList<…> private ArrayList<Person> persons; 3. Initialisere feltvariablen (gøres normalt i konstruktøren) public AddressBook(){ persons = new ArrayList<Person>(); }

ArrayList er en parametriseret type Erklæring af ArrayList Klassenavn Type parameter (i <…> parenteser) public class ArrayList <E> { 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... Link

ClickerQuiz Arrayliste med heltal Parameteren til ArrayList skal være en objekt type Det betyder, at man ikke kan skrive ArrayList<int> I stedet skal man skrive ArrayList<Integer> 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 liste.add(i) i = liste.get(3) hvor i er af typen int og liste af typen ArrayList<Integer> ClickerQuiz

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

Find gennemsnitsalder /** * return the average age of the * people in the address book */ public int averageAge() { return ageSum() / persons.size(); } /** * 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; 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); 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(){…} Ingen linjeskift Klassenavn ID-nr (hexa-decimal værdi)

Pænere print af arrayliste 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 for (Person person : list) { System.out.println(person); }

Mere info om ArrayList og String? Java API Oversigt over alle de klasser (og interfaces) der er i Java Library API = Application Programming Interface Link 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 indeværende uge laver I et BlueJ projekt med et raflebæger og to terninger I den kommende uge skal I: Lave en TestDriver klasse med en metode, som kan Skabe et raflebæger med to terninger Lave et kast med terningerne Udskrive det samlede antal øjne i kastet Generalisere raflebægeret, så det kan have et vilkårligt antal terninger Brug ArrayList<Die> til at huske terningerne Modificere testmetoden til at håndtere den nye situation

● 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 kan bruges til at gennemløbe arraylists (og andre collections) for (Person person : persons) {...}; Afleveringsopgave: Raflebæger 2 (DieCup 2)

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