Indledende Programmering Uge 8 - Efterår 2006 Mere om abstraktioner Susanne Lindros.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

07 – Kort om OO Introduktion.
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,
Selve objektet versus referencen til objektet Nedarvning
Objektorienteret programmering
09 – Arv og polymorfi i java
Hvordan man skriver koden.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
Arv Idéen i arv et at kunne genbruge gennem generalisering
Indledende Programmering Uge 5 - Efterår 2006 Om at udvikle korrekte og pålidelige programmer Susanne Lindros.
NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#
FEN NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)
Forelæsning 3.1 Collections Javas for-each løkke
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
Items 4, 14, 24, 34, 44, 54 Orange gruppe Liv, Jonas, Thorkil, Søren S og Martin D.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Eksempel på realisering af domænemodel
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
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.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
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.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
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
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
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.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2002Objektorienteret systemudvikling Persistens.
 Jens Bennedsen 2002Objektorienteret systemudvikling Design -> kode Mapning af et klassediagram til kode.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Henrik Bærbak, 2000Introducerende objektorienteret programmering11B.1 Destilleret UML Oversættelse fra UML til Java.
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
 Jens Bennedsen 2001Multimedie programmering13.1 Lingo Objectorienteret Lingo.
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
Interfaces – hvorfor, hvad og hvordan?.  Michael E. Caspersen 2003IOOPInterfaces.2 Oversigt Interfaces, hvorfor –Separering af specifikation (interface)
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge46 Ancestor.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
Introduktion til programmering Repetition. dIntProg, F08Repetition.2 dIntProg Sidste forelæsning (12/10) –kort tilbagemelding på evaluering –repetition.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
DAIMI, AUIntroducerende objektorienteret programmering11A.1 Destilleret UML Oversættelse fra UML til Java.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
Forelæsning Uge 6 – Mandag
Forelæsning Uge 12 – Torsdag
Forelæsning Uge 6 – Mandag
Præsentationens transcript:

Indledende Programmering Uge 8 - Efterår 2006 Mere om abstraktioner Susanne Lindros

Plan for i dag Computer simulationer Abstrakte klasser og metoder Multipel vs. simpel arv Java Interfaces Gennemgående eksempel Foxes-and-Rabbits

Computer simulationer Programmer der simulerer aktiviteter i den virkelige verden Som regel forenklinger af virkeligheden pga. begrænsede resourcer og uklare regler Bruges bl.a. til –Forudsigelser: Hvordan bliver vejret i morgen –Eksperimenter der er svære/umulige at gennemføre i den virkelige verden: Hvad vil der ske hvis vi gør... Simuleringen kan ofte styres med parametre, der kan ”skrues op og ned på”

Foxes-and-rabbits simulationen En rovdyr – byttedyr simulation En balanceakt: –Mange byttedyr giver mange rovdyr –Mange rovdyr spiser mange byttedyr –Færre byttedyr betyder mindre mad til rovdyr –Mindre mad betyder færre rovdyr –Færre rovdyr betyder flere byttedyr –osv.

Foxes-and-rabbits simulationen

Foxes-and-rabbits simulation V1

Klasser i version1 Fox, forsimplet model af et rovdyr Rabbit, forsimplet model af et byttedyr Simulator, styrer simulationen og holder styr på samlingen af ræve og kaniner Field, repræsenterer et 2D areal Location, repræsenterer en position i et Field SimulatorView, præsenterer et view af et Field FieldStats, Counter, vedligeholder statistik

Superklassen Animal Alle dyr har en alder og en position Alle dyr kan blive født, leve og dø Alle dyr kan flytte sig til en ny position Alle dyr kan handle, men de gør det forskelligt alt efter hvem de er: –Ræve går på jagt efter kaniner –Kaniner render forvirrede rundt

Foxes-and-rabbits simulation V2

Animal/fox/rabbit hierarkiet Animal age alive location act() getAge() setAge() … Rabbit BREEDING_AGE … act() breed() … Fox foodLevel BREEDING_AGE … act() incrementHunger() …

En kanins adfærd Styres af act() metoden Alderen øges I hvert simulations trin –Alle dør ved samme alder Kaniner der er gamle nok kan føde i hvert simulations trin – vi har kun hunkaniner Kaniner prøver at gå til et nabofelt Kaniner dør hvis der er overbefolket

En rævs adfærd Styres af act() metoden Alderen øges i hvert simulations trin –Alle dør ved samme alder Sulten øves i hvert simulations trin Ræve der er gamle nok kan føde i hvert simulations trin – vi har kun hunræve Ræve leder efter mad (kaniner) i deres nabolokationer Ræve forsøger at gå til nabofelt Ræve kan dø af sult eller af overbefolkning

Simulator klassen Populate() metoden –Opretter alle dyr og giver dem en tilfældig startalder simulateOneStep() metoden –Itererer over populationen –Kalder act() på alle dyr –Tilføjer nyfødte dyr til populationen –Arbejder med to felter: field og updatedField –Viser den opdaterede population

simulateOneStep() metoden // let all animals act for(Animal animal: animals) animal.act(field, updatedField, newAnimals); } // add new born animals to the list of animals animals.addAll(newAnimals);

En abstrakt klasse En superklasse der –Anvendes til at repræsentere fælles egenskaber for subklasserne i et hierarki –Anvendes til at give subklasserne i et hierarki en fælles grænseflade –Anvendes for at kunne anvende polymorfe metoder på subklasserne –Ikke kan instantieres Defineres med nøgleordet abstract foran klassedefinitionen

Abstrakte metoder En abstrakt klasse indeholder ofte abstrakte metoder, dvs. metoder der ikke er implementeret i superklassen Abstrakte metoder: –Har kun et hoved - ingen krop –Skal implementeres i subklasserne hvis disse ikke også skal blive abstrakte –Defineres med abstract foran metodeerklæringen

Den abstrakte klasse Animal public abstract class Animal { private int age; private boolean alive; private Location location; abstract public void act( Field currentField, Field updatedField, List newAnimals); public void setDead() {alive = false;}... }

Den konkrete klasse Fox public class Fox extends Animal { public void act(Field currentField, Field updatedField, List newAnimals){ … // Move towards the source of food Location newLocation = findFood(currentField, getLocation()); if(newLocation == null) { // no food found - move randomly newLocation = updatedField.freeAdjacentLocation( getLocation()); }

Flere abstrationer

Multipel arv draw() act()

Multipel arv En klasse arver fra flere direkte superklasser f.eks. ”class Hjælpelærer extends Underviser, Studerende” Komplekst at anvende og ofte ikke nødvendigt – mange fejlmuligheder Nogle sprog tillader det (f.eks. C++) I Java kan man kun anvende simpel arv mellem klasser I Java kan man anvende multiple arv mellem interfaces

Interface Hidtil: En uformel beskrivelse af hvordan en klasse anvendes –Ofte javadoc dokumentation Nu også: Et sprogelement i java, der svarer til en abstrakt klasse, hvor alle metoder er abstrakte (ikke implementerede)

Interfacet Actor public interface Actor { /** * Perform the actor's daily behavior. * Transfer the actor to updatedField if it is * to participate in further steps of the simulation. currentField The current state of the * field. location The actor's location in the field. updatedField The updated state of the * field. */ void act(Field currentField, Location location, Field updatedField); }

Klasser der implementerer interfaces public class Fox extends Animal implements Drawable {... } public class Hunter implements Actor, Drawable {... }

Forskal på abstrakte klasser og interfaces Abstrakte klasser: –Kan både indeholde abstrakte og ikke abstrakte (implementerede) metoder –Kan definere instansvariabler/felter Interfaces –Kan ikke indeholde implementation –Kan kun definere konstanter –Understøtter multipel arv Tommelfingerregel: brug interfaces hvis det er muligt – og kun abstrakte klasser i de øvrige tilfælde

Opsummering af arv og implementering Klasser kan arve andre klasser med simpel arv (eks.: K2 extends K1) Klasser kan implementere vilkårligt mange interfaces (eks.: K2 implements I1, I2, I3) Disse 2 muligheder kan kombineres (eks.: K2 extends K1 implements I1, I2, I3) Interfaces kan arve vilkårligt mange interfaces (eks.: I4 extends I1, I2, I3) Alle andre kombinationsmuligheder er ulovlige (eks.: Interfaces kan ikke implementere interfaces)

Interfaces Anvendes til –Definere et ensartet interface til mange klasser (fælles datatype) –Muliggøre uafhængig implementation af systemets dele –Muliggøre udskiftning af implementation uden at ændre interfacet –Realisere multipel arv Bortset fra det sidste punkt gælder det samme for abstrakte klasser – men interfaces giver et ”renere snit” fordi de ikke kan indeholde implementerede metoder

Interfaces i Collection frameworket

Interfaces som typer Klasser der implementerer et interface er subtyper af interface typen Dvs. polymorfi kan anvendes på både interfaces og klasser List list = new ArrayList (); list.add(new Fox());