Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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

Lignende præsentationer


Præsentationer af emnet: "Indledende Programmering Uge 8 - Efterår 2006 Mere om abstraktioner Susanne Lindros."— Præsentationens transcript:

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

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

3 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å”

4 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.

5 Foxes-and-rabbits simulationen

6 Foxes-and-rabbits simulation V1

7 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

8 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

9 Foxes-and-rabbits simulation V2

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

11 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

12 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

13 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

14 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);

15 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

16 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

17 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;}... }

18 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()); }

19 Flere abstrationer

20 Multipel arv draw() act()

21 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

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

23 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. * @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); }

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

25 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

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

27 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

28 Interfaces i Collection frameworket

29 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());


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

Lignende præsentationer


Annoncer fra Google