Forelæsning Uge 6 Mandag

Relaterede dokumenter
Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag

Forelæsning Uge 12 Torsdag

Forelæsning Uge 12 Mandag

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda

Forelæsning Uge 6 torsdag repetition

Forelæsning Uge 6 torsdag repetition

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

Forelæsning Uge 11 Torsdag

Forelæsning Uge 4 Mandag

Forelæsning Uge 11 Mandag

Forelæsning Uge 3 Mandag

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Forelæsning Uge 6 Mandag

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

DANMARKS TEKNISKE UNIVERSITET

Tree klassen fra sidste forelæsning

dintprog Manual Revision: 731 September 30, Introduktion Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

Klasser og nedarvning

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Skriftlig eksamen i Datalogi

Om binære søgetræer i Java

Forelæsning Uge 3 Torsdag

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Forelæsning Uge 3 Torsdag

Forelæsning Uge 2 Mandag

Ugeseddel 4 1. marts - 8. marts

Software Construction 1 semester (SWC) Spørgsmål 1

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

Hvad er Objekter - Programmering

Lektion 6. Grundlæggende programmering i VR

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Civilingeniøreksamen januar Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Forelæsning Uge 1 Torsdag

Forelæsning Uge 2 Torsdag

A Profile for Safety Critical Java

Skriftlig eksamen i Datalogi

Forelæsning Uge 4 Torsdag

Objektorienterede metoder

DM507 Algoritmer og datastrukturer

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

Videregående programmering i Java

Løsning af møntproblemet

BRP Kursusintroduktion og Java-oversigt

Anvendelse af metoder - Programmering

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Vejledende løsninger

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

DM507 Algoritmer og datastrukturer

Objektorienteret Programmering

Forelæsning Uge 3 Torsdag

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Stakke, køer og lidt om hægtede lister

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

COMPUTERSPIL 1. Opgave 1. Opgave 2

Skriftlig eksamen i Datalogi

DM507 Algoritmer og datastrukturer

Abstrakte datatyper C#-version

Virkefeltsregler i Java

DM507 Algoritmer og datastrukturer

SWC eksamens-spørgsmål. Oversigt

Videregående programmering i Java

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

DM507 Algoritmer og datastrukturer

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Skriftlig eksamen i Datalogi

Hashing og hashtabeller

DM502. Peter Schneider-Kamp

Serialization i Java

DM507 Algoritmer og datastrukturer

Tabeller (I) Tabeller

Hashing og hashtabeller

COMPUTERSPIL 1. Opgave 1

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Transkript:

Forelæsning Uge 6 Mandag Tingene i denne forelæsning er ikke eksamenspensum Forelæsningen afrunder kurset, og forklarer nogle af de begreber, som I har mødt under kurset uden at få detaljeret forklaring på Mange af tingene tages op i kurset Programmering 2 Nedarvning, abstrakte klasser og interfaces Sortering via forprogrammerede metoder i Java Library Comparable interfacet og compareto metoden (naturlig ordning) Comparator interfacet og compare metoden (flere ordninger) findbest algoritmeskabelonen som sorteringsproblem

Nedarvning, abstrakte klasser og interfaces Vi vil gerne modellere et simpelt nyhedssystem, med to slags meddelelser Almindelige tekstmeddelelse (MessagePost) Fotomeddelelse (PhotoPost) Uden brug af subklasser ser det sådan ud Feltvariabler Metoder Stort overlap, men ikke identiske 2

Duplikering af kode MessagePost og PhotoPost ligner hinanden Store dele af de to klassers Java kode er identisk Det gør koden svær at overskue og vanskelig at vedligeholde Der opstår let fejl og inkonsistens, f.eks. når man ændrer noget i den ene klasse, men glemmer at rette i den anden Også duplikering i NewsFeed klassen Den har to arraylister Mange metoder gennemløber begge lister (duplikeret kode) 3

Brug af subklasser Vi kan i stedet lave en Post klasse, som har MessagePost og PhotoPost som subklasser Nu har vi kun én arrayliste Fælles feltvariabler og metoder postings Post Forskellige feltvariabler og metoder MessagePost PhotoPost MessagePost Nemmere at overskue Ingen kodeduplikering 4

Object klassen Alle klasser i Java er subklasser af Object klassen Object klassen indeholder en række nyttige metoder tostring metoden returnerer en tekstrepræsentation af det pågældende objekt (Person@19bb25a) equals metoden tjekker om to objekter er ens (tjekker identitet, ==) Mange klasser redefinerer metoder fra Object klassen (f.eks. String) 5

Act metoden i Greenfoot I Greenfoot skal alle subklasser af Actor klassen have en act metode Dette kan sikres ved, at Actor klasse definerer act til at være en abstrakt metode, dvs. kun angiver signaturen og udelader kroppen Dette tvinger alle subklasser til at implementere metoden ellers vil compileren protestere I Greenfoot har man dog valgt en lidt anden løsning Act metoden er defineret som en almindelig metode Den har en tom krop og gør derfor ingen ting For at et objekt kan bevæge sig, skal den pågældende subklasse redefinere act metoden sådan som I gjorde for krabben og hummeren Denne løsning er valgt, fordi den gør det lettere for nybegyndere at komme i gang og giver mere forståelige fejlmeddelelser Hvis man ikke redefinerer act bruges versionen fra Actor klassen 6

Abstrakte klasser En klasse kan defineres til at være abstrakt Det medfører, at den kan indeholde abstrakte metoder, dvs. metoder der ikke er implementeret men den behøver ikke gøre det Man kan ikke lave instanser (dvs. objekter) af en abstrakt klasse Men man kan definere subklasser (som kan være abstrakte eller konkrete) Compileren tjekker at en konkret subklasse implementerer alle de abstrakte metoder fra den abstrakte superklasse En abstrakt klasse kan indeholde en blanding af abstrakte og konkrete metoder Klassen kan derfor indeholde en delvis implementation, mens resten overlades til subklasserne 7

Interfaces I et interface er alle metoder abstrakte Interfacet specificerer, hvilke metoder der skal være, og angiver deres signaturer Implementationen af metoderne overlades til de klasser, der implementerer interfacet Interface abstrakt klasse, hvor alle metoder er abstrakte Hvorfor har Java både abstrakte klasser og interfaces? En klasse kan kun være (direkte) subklasse af én anden klasse, men den kan godt implementere flere interfaces En abstrakt klasse kan indeholde en delvis implementation (og feltvariabler) det kan et interface ikke Hvor meget er implementeret? Almindelig (konkret) klasse: alt er implementeret (100%) Interface: ingen implementation (0%) Abstrakt klasse: delvis implementation (0-100%) 8

Hvad opnår vi? Fælles for abstrakte klasser og interfaces De bestemmer en type Man kan lave metoder, som kan bruges på alle subklasser af en abstrakt klasse alle de klasser, der implementerer et interface Sådanne metoder kaldes polymorfe (mangeartede) F.eks. kan reverse og shuffle metoderne i Collections klassen bruges på alle objektsamlinger, der implementerer Collection interfacet, mens min, max og sort metoderne desuden kræver, at element typen i objektsamlingen implementerer Comparable interfacet Nedarvning fra abstrakt eller konkret superklasse Vi arver både noget implementation og en type Klassen bliver en subtype af superklassen, og dens objekter kan bruges alle de steder superklassens objekter kan bruges Implementation af interface Vi arver kun typen 9

Collection frameworket (udsnit) implements extends Collection <<abstract class>> AbstractCollection Set List Queue HashSet SortedSet <<abstract class>> AbstractList LinkedList PriorityQueue LinkedHashSet NavigableSet ArrayList Vector TreeSet Collection frameworket 12 interfaces 35 klasser (heraf 5 abstrakte) Subklasser af klassen AbstractList og dermed forskellige implementationer af interfacet List Hver implementation har sine fordele og ulemper Nemt at skifte imellem dem (de har de samme metoder) 10

Sortering via forprogrammerede metoder Lidt repetition fra i mandags Klassen Collections indeholder en række nyttige metoder Metoderne kan bruges på forskellige typer objektsamlinger Typen skal implementere Collection interfacet Det er f.eks. tilfældet for ArrayList T min(collection<t> c) //returnerer mindste element T max(collection<t> c) //returnerer største element void sort(list<t> l) //sorterer listen void shuffle(list<t> l) //blander listen void reverse(list<t> l) //vender listen om boolean disjoint(collection<t> c1, Collection<T> c2) int frequency(collection<t> c, Object o)... 11

Ordning Metoderne min, max og sort kan kun anvendes, hvis elementerne i ArrayListen har en ordning String klassen har en indbygget ordning (alfabetisk sortering) Derfor kan vi uden videre bruge min, max og sort på ArrayList<String> Når vi selv laver en klasse (f.eks Person, Date eller Pixel), skal vi selv definere en ordning hvis vi vil kunne bruge min, max og sort Til det formål bruges Comparable interfacet public interface Comparable<T> { public int compareto(t o); public class Person implements Comparable<Person> {... public int compareto(person o) {......... Definerer naturlige ordning 12

Hvad gør vi, når vi har brug for flere ordninger? For personer kan vi for eksempel ønske at sortere efter alder, sortere efter fornavn, sortere efter efternavn, kombinere nogle af ovenstående sorteringskriterier Comparable tillader kun én ordning Specificeret via compareto metoden Comparator tillader flere ordninger min, max og sort har en ekstra parameter, der specificerer, hvilken ordning man vil bruge Parameteren skal være et objekt i en klasse, der implementerer interfacet Comparator Dette indeholder en compare metode, der sammenligner to elementer af den type, der ønskes sorteret 13

Brug af Comparator på ArrayList<Person> public class Driver { public static void run() { ArrayList<Person> list; list = new ArrayList<Person>(); list.add(new Person("Cecilie", 18)); list.add(new Person("Erik", 16)); list.add(new Person("Adam", 16)); list.add(new Person("Bo", 39)); list.add(new Person("Dora", 47)); print("*******************"); print("liste: " + list); print("min: " + Collections.min(list, new ByName())); print("max: " + Collections.max(list) new ByName())); Collections.sort(list, new ByName()); print("sorteret liste: " + list);... 14

Sortering efter navn import java.util.comparator; public class ByName implements Comparator<Person> { public int compare(person p1, Person p2){ return p1.getname(). compareto ( p2.getname() ); p1's navn (textstreng) Metode fra String klassen (sorterer alfabetisk) p2's navn (textstreng) 15

Sortering efter alder (med yngste først) import java.util.comparator; public class ByAge implements Comparator<Person> { public int compare(person p1, Person p2){ return p1.getage() - p2.getage(); p1's alder Subtraktion (af heltal) p2's alder 16

Sortering efter alder og navn import java.util.comparator; public class ByAgeName implements Comparator<Person> { public int compare(person p1, Person p2){ if (p1.getage()!= p2.getage()) { return p1.getage() - p2.getage(); //alderen er identisk return p1.getname().compareto(p2.getname()); 17

Klassediagram for brug af Comparable uses Collection boolean add(e e) boolean contains(object o)... extends Collections T min(collection<t> c) T max(collection<t> c) void sort(list<t> l) void reverse(list<t> l) void shuffle(list<t> l)... Nyttige metoder (programmeret en gang for alle) Diagrammet er ikke eksamenspensum uses Comparable int compareto(t o) List implements Set implements Queue ArrayList HashSet LinkedList Ca. 35 forskellige Collection klasser implements implements implements Pixel Person String NYT : compareto metode Resten er genbrug fra Java's API 18

Klassediagram for brug af Comparator uses Collections T min(collection<t> c, Comparator<T> comp ) T max(collection<t> c, Comparator<T> comp ) void sort(list<t> l, Comparator<T> comp )... Metoderne er parametriseret med et Comparator objekt uses Collection boolean add(e e) boolean contains(object o)... Nyttige metoder (programmeret en gang for alle) Diagrammet er ikke eksamenspensum Comparator int compare(t o1,t o2) extends implements implements List implements Set implements Queue ArrayList HashSet LinkedList Ca. 35 forskellige Collection klasser implements Pixel Person String NYT : compare metode (også for String) Resten er genbrug fra Java's API 19

Comparable eller Comparator Comparable public int compareto(person p){ return this.age - p.age; public Person findoldestperson() { return Collections.max(persons); Simpel compareto metoden defineres i Person klassen, som implementerer interfacet Comparable Man kan kun have en ordning ad gangen (naturlige ordning) Comparator import java.util.comparator; public class ByAge implements Comparator<Person> { public int compare (Person p1, Person p2){ return p1.getage() - p2.getage(); public Person findoldestperson() { return Collections.max(persons, new ByAge()); I dintprog eksamensopgaverne er det tilstrækkeligt at bruge Comparable Mere kompleks compare metoden defineres i en ny klasse, som implementerer interfacet Comparator min, max og sort metoderne har en ekstra parameter Til gengæld er det nu muligt at have flere ordninger samtidigt 20

findbest = finder bedste element i liste public TYPE findbest( PARAM ) { TYPE result = null; for ( TYPE elem : LISTE ) { if ( TEST(elem,PARAM) ) { if ( result == null BEST(elem,result,PARAM) ) { result = elem; return result; Algoritmeskabelon Gennemsøger LISTE og returnerer det BEDSTE af de elementer, der opfylder TEST Hvis flere elementer er lige gode returneres et vilkårligt af disse Hvis der ingen er, returneres null 21

findbest er ofte et sorteringsproblem Hvis man vil finde den ældste kvinde i en liste af personer, kan det gøres på følgende måde Definer en ordning, efter alder, på objekterne i Person klassen ved hjælp af compareto i Comparable eller compare i Comparator Brug findall algortimeskabelonen til at finde en delliste indeholdende alle kvinder (fra den oprindelige liste) Brug max metoden i Collections til at finde den ældste kvinde i dellisten (hvis dellisten er tom returneres null) Alternativt kan man erstatte de sidste to skridt med Brug sort metoden i Collections til at sortere listen efter alder (med de ældste først) Brug findone algoritmeskabelonen til at finde den første person, som er en kvinde (i den sorterede liste) Hvilken af de to fremgangsmåde er bedst og hvorfor? I den sidste laver man en sortering, hvilket kan være dyrt I den sidste antager man, at findone returnerer det første element, der opfylder betingelsen 22

Opsummering Nedarvning, abstrakte klasser og interfaces En subklasse arver alle de egenskaber (feltvariabler og metoder), som dens superklasse har (metoder fra superklassen kan redefineres) En abstrakt klasse kan indeholde abstrakte metoder, der ikke er implementeret, men kun specificeret via deres signatur I et interface er alle metoder abstrakte Sortering via forprogrammerede metoder i Java Library Comparable interfacet og compareto metoden (naturlig ordning) Comparator interfacet og compare metoden (flere ordninger) findbest algoritmeskabelonen som sorteringsproblem 23

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