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

Indledende Programmering Uge 8 - Efterår 2006

  • Upload
    hayley

  • View
    42

  • Download
    0

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: Indledende Programmering Uge 8 - Efterår 2006

Indledende ProgrammeringIndledende Programmering Uge 8 - Efterår 2006Uge 8 - Efterår 2006

Mere om abstraktionerMere om abstraktionerSusanne LindrosSusanne Lindros

Page 2: Indledende Programmering Uge 8 - Efterår 2006

Plan for i dagPlan for i dag

• Computer simulationer

• Abstrakte klasser og metoder

• Multipel vs. simpel arv

• Java Interfaces

• Gennemgående eksempel Foxes-and-Rabbits

Page 3: Indledende Programmering Uge 8 - Efterår 2006

Computer simulationerComputer 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å”

Page 4: Indledende Programmering Uge 8 - Efterår 2006

Foxes-and-rabbits simulationenFoxes-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.

Page 5: Indledende Programmering Uge 8 - Efterår 2006

Foxes-and-rabbits simulationenFoxes-and-rabbits simulationen

Page 6: Indledende Programmering Uge 8 - Efterår 2006

Foxes-and-rabbits simulation V1Foxes-and-rabbits simulation V1

Page 7: Indledende Programmering Uge 8 - Efterår 2006

Klasser i version1Klasser 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

Page 8: Indledende Programmering Uge 8 - Efterår 2006

Superklassen AnimalSuperklassen 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

Page 9: Indledende Programmering Uge 8 - Efterår 2006

Foxes-and-rabbits simulation V2Foxes-and-rabbits simulation V2

Page 10: Indledende Programmering Uge 8 - Efterår 2006

Animal/fox/rabbit hierarkietAnimal/fox/rabbit hierarkietAnimal

agealivelocation

act()getAge()setAge()…

Rabbit

BREEDING_AGE…

act()breed()…

Fox

foodLevel

BREEDING_AGE…

act()incrementHunger()…

Page 11: Indledende Programmering Uge 8 - Efterår 2006

En kanins adfærdEn 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

Page 12: Indledende Programmering Uge 8 - Efterår 2006

En rævs adfærdEn 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

Page 13: Indledende Programmering Uge 8 - Efterår 2006

Simulator klassenSimulator 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

Page 14: Indledende Programmering Uge 8 - Efterår 2006

simulateOneStep() metodensimulateOneStep() metoden

// let all animals actfor(Animal animal: animals)

animal.act(field, updatedField, newAnimals);}

// add new born animals to the list of animalsanimals.addAll(newAnimals);

Page 15: Indledende Programmering Uge 8 - Efterår 2006

En abstrakt klasseEn 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

Page 16: Indledende Programmering Uge 8 - Efterår 2006

Abstrakte metoderAbstrakte 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

Page 17: Indledende Programmering Uge 8 - Efterår 2006

Den abstrakte klasse AnimalDen abstrakte klasse Animalpublic abstract class Animal { private int age; private boolean alive; private Location location;  abstract public void act(

Field currentField, Field updatedField, List<Animal> newAnimals);  public void setDead() {alive = false;} ...}

Page 18: Indledende Programmering Uge 8 - Efterår 2006

Den konkrete klasse FoxDen konkrete klasse Foxpublic class Fox extends Animal { public void act(Field currentField,

Field updatedField, List<Animal> newAnimals){

… // Move towards the source of food Location newLocation =

findFood(currentField, getLocation()); if(newLocation == null) { // no food found - move randomly newLocation = updatedField.freeAdjacentLocation( getLocation()); }}

Page 19: Indledende Programmering Uge 8 - Efterår 2006

Flere abstrationerFlere abstrationer

Page 20: Indledende Programmering Uge 8 - Efterår 2006

Multipel arvMultipel arv

draw() act()

Page 21: Indledende Programmering Uge 8 - Efterår 2006

Multipel arvMultipel 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

Page 22: Indledende Programmering Uge 8 - Efterår 2006

InterfaceInterface

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

Page 23: Indledende Programmering Uge 8 - Efterår 2006

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

Page 24: Indledende Programmering Uge 8 - Efterår 2006

Klasser der implementerer Klasser der implementerer interfacesinterfaces

public class Fox extends Animal implements Drawable{ ...}

public class Hunter implements Actor, Drawable{ ...}

Page 25: Indledende Programmering Uge 8 - Efterår 2006

Forskal på abstrakte klasser og Forskal på abstrakte klasser og interfacesinterfaces

• 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

Page 26: Indledende Programmering Uge 8 - Efterår 2006

Opsummering af arv og Opsummering af arv og implementeringimplementering

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

Page 27: Indledende Programmering Uge 8 - Efterår 2006

InterfacesInterfaces• 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

Page 28: Indledende Programmering Uge 8 - Efterår 2006

Interfaces i Collection frameworketInterfaces i Collection frameworket

Page 29: Indledende Programmering Uge 8 - Efterår 2006

Interfaces som typerInterfaces som typer

• Klasser der implementerer et interface er subtyper af interface typen

• Dvs. polymorfi kan anvendes på både interfaces og klasser

List<Animal> list = new ArrayList<Animal>();

list.add(new Fox());