Forelæsning Uge 3 – Mandag

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
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,
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
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
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.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
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.
Introduktion til programmering Repetition - ArrayList.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
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.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Indledende Programmering Uge 6 - Efterår 2006
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
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.
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
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;
Objecter Introduktion Webintegrator HF1 PHP Object orienteret.
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 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 4 – Mandag
Forelæsning Uge 6 – torsdag – repetition
Quiz – Uge 3 – mandag – første time
Forelæsning Uge 2 – Mandag
Forelæsning Uge 6 – Mandag
Forelæsning Uge 3 – Mandag
Klasser og objekter (Afsnit i manualen).
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 4 – Mandag
Forelæsning Uge 2 – Mandag
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 3 – Torsdag
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 5 – Mandag
Forelæsning Uge 4 – Torsdag
Quiz – Uge 9 – mandag – første time
Præsentationens transcript:

Forelæsning Uge 3 – Mandag ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel på brug af ArrayList Javas for-each løkke Alternativ til den almindelige for løkke Velgenet til gennemløb af arraylister (og andre collections) Java API (grænsefladen til Javas klassebibliotek) Afleveringsopgave: Raflebæger 3 (DieCup 3) På Projekt Euler og CodingBats findes en masse ekstra opgaver, hvor I kan øve jer i Java programmering, hvis I har tid tilovers Links under Uge 1 og 4 på Ugeoversigten

● 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> search(String q) void print() * Playlist PlayList String getName() void addTrack(Track t) void print() Track shortestTrack() Track longestTrack() List<Track> shorterThan(int length) List<Track> search(String q) void shuffle() * Track * angiver én-til-mange relation Vilkårligt mange objekter af den pågældende type Hvordan realiseres dette? Track String getName() String getArtist() int getTime()

Klassediagram for adressebog Man kan Tilføje et vilkårligt antal personer Udskrive adressebogen Finde et telefonnummer (via personens navn) Finde gennemsnitsalderen på personerne Problem Hvordan kan AddressBook "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 // Feltvariabel private ArrayList<Person> 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 ); person = new Person( "Linda", "90023234", 21 ); } Objekterne i arraylisten skal være af type Person Husk parenteserne Kald af konstruktør Ellers typenavn og compile fejl

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

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

Realisering af en-til-mange relation – Java For at realisere en en-til-mange relation i koden skal man gøre 3 ting IM 1. Importere klassen ArrayList import java.util.ArrayList; ER 2. Erklære en feltvariabel af typen ArrayList<…> private ArrayList<Person> persons; KO 3. Initialisere feltvariablen (gøres ofte i konstruktøren) public AddressBook() { persons = new ArrayList<>(); } IMERKO reglen Vi behøver ikke at gentage parameteren til ArrayList ArrayList<> ArrayList<Person> Husk de runde parenteser Kald af konstruktør Ellers typenavn

ArrayList er en parametriseret type Dokumentationen for ArrayList fortæller, at der bl.a. er nedenstående metoder: 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

Pause 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 private int i; private ArrayList<Integer> list list.add(i) int  Integer i = list.get(3) Integer  int Pause

● MusicOrganizer – brug af ArrayList Vi vil lave en klasse som kan holde styr på vores musik Klassen minder lidt om vores musikafspiller, men den gør nogle lidt andre ting (kartotek over musik – ingen aktiv afspilning) I første version repræsenteres hvert musiknummer ved hjælp af en tekststreng (String) Senere skal vi indføre en Track klasse til at repræsentere musiknumre MusicOrganizer void addFile(String filename) void removeFile(int index) void listFile(int index) int getNumberOfFiles() Tilføj nummer Fjern nummer Udskriv nummer Antal numre?

Oprettelse af arrayliste IM import java.util.ArrayList; /** * A class to hold details of audio files. */ public class MusicOrganizer { // An ArrayList for storing the // file names of music files. private ArrayList<String> files; * Create a MusicOrganizer. public MusicOrganizer() { files = new ArrayList<>(); } ... // Methods omitted 1. Importere ArrayList klassen ER 2. Erklære en feltvariabel af type ArrayList<…> KO Initialisere feltvariablen i konstruktøren IMERKO reglen

Tilføjelse og fjernelse af musiknumre /** * Add a file to the collection. * @param filename File to be added. */ public void addFile(String filename) { files. add(filename); } Metode i ArrayList klassen Inden vi kalder remove metoden tester vi om indexet er i brug (så vi undgår at få en IndexOutOfBoundsException) /** * Remove a file from the collection. * @param index Index of the file to be removed. */ public void removeFile(int index) { if( index >= 0 && index < files.size() ) { files. remove(index); } Metode i ArrayList klassen

Antal numre og udskrivning /** * Return the number of files in the collection. * @return Number of files in the collection. */ public int getNumberOfFiles() { return files. size(); } Metode i ArrayList klassen Inden vi kalder get metoden tester vi om indexet er i brug (så vi undgår at få en IndexOutOfBoundsException) /** * List a file from the collection. * @param index Index of the file to be listed. */ public void listFile(int index) { if( index >= 0 && index < files.size() ) { String filename = files. get(index); System.out.println(filename); } Metode i ArrayList klassen Udskrift

● Javas for-each løkke (udvidet for løkke) Bruges til at gennemløbe alle elementer i en Arrayliste og gøre "et eller andet" ved dem Kan bruges på alle Collections (og på Arrays) Keyword (reserveret ord) Erklæring af lokal variabel Reference til den arrayliste, der skal gennemløbes for ( String file : files ) { System.out.println(file); } KROP (de sætninger der skal gentages, dvs. udføres på alle elementer i arraylisten) for-each løkken gør det nemt at lave en metode, der udskriver alle musiknumre /** * List all files from the collection. */ public void listAllFiles() { for(String file : files) { System.out.println(file); }

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

Udskrift 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 udskrift 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); }

● Java API (Java's klassebibliotek) Hvis vi vil have mere info om ArrayList og String kan vi konsultere Java API'en som beskriver grænsefladen til Java's klassebibliotek Oversigt over alle klasser (og interfaces) 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. Demo Clicker Quiz

Eksempel på overloadning af metode String klassen i Java API Overloadning Flere metoder/konstruktører hedder det samme De har forskellige parametre Det gør at compileren kan kende forskel på dem

● Afleveringsopgave: Raflebæger 3 (DieCup 3) Vi skal endnu en gang arbejde videre med vores Raflebæger I skal først lave et raflebæger, som kan indeholde et vilkårligt (positivt) antal terninger (som alle har 6 sider) For at gøre dette, skal I fastholde (huske) terningerne ved hjælp af en feltvariabel, der er en arrayliste (som jo kan indeholde et vilkårligt antal) DieCup ArrayList<Die> dies void roll() int getEyes() Die int eyes void roll() int getEyes() * Derudover skal I ændre konstruktøren for DieCup klasen, så den får en parameter, der angiver antallet af terninger // skaber raflebæger med n terninger DieCup(int n){…}

Raflebæger 3 (DieCup 3) – fortsat Dernæst skal I lave et raflebæger, som kan indeholde et vilkårligt (positivt) antal terninger, som hver har et vilkårligt antal sider (≥ 2) Bemærk at vi nu kan have et raflebæger, hvori vi har terninger med forskellige antal sider For at håndtere dette, skal I ændre konstruktøren for DieCup klassen, så antallet af terninger og antallet af deres sider kan specificeres Dette kan gøres ved hjælp af en arrayliste af heltal // skaber raflebæger med de specificerede terninger DieCup(ArrayList<Integer> dies){…} [6,8,5,6] Endelig skal I tilpasse metoderne i TestDriver klassen, således at de kan anvendes til raflebægre af ovenstående slags

● Opsummering ArrayList (eksempel på en Collection type) Kan bruges til at realisere én-til-mange relationer Har et variabelt (ubegrænset) antal elementer MusicOrganizer projektet Eksempel på brug af ArrayList Javas for-each løkke Alternativ til den almindelige for løkke Velgenet til gennemløb af arraylister (og andre collections) Java API (grænsefladen til Javas klassebibliotek) Afleveringsopgave: Raflebæger 3 (DieCup 3) for(Person person : persons) {...}

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