1 / 29

Indledende Programmering Uge 8 - Efterår 2006

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.

hayley
Download Presentation

Indledende Programmering Uge 8 - Efterår 2006

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Indledende ProgrammeringUge 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 agealivelocation act()getAge()setAge()… Rabbit Fox BREEDING_AGE… foodLevel BREEDING_AGE… act()breed()… 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<Animal> newAnimals); public void setDead() {alive = false;} ... }

  18. Den konkrete klasse Fox public 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()); } }

  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<Animal> list = new ArrayList<Animal>(); list.add(new Fox());

More Related