further abstraction techniques further abstraction
play

Further abstraction techniques Further abstraction techniques - PowerPoint PPT Presentation

Further abstraction techniques Further abstraction techniques Abstract classes and interfaces 1.0 Main concepts to be covered Main concepts to be covered Abstract classes Interfaces Multiple inheritance 01/12/2005 Lecture 9:


  1. Further abstraction techniques Further abstraction techniques Abstract classes and interfaces 1.0

  2. Main concepts to be covered Main concepts to be covered � Abstract classes � Interfaces � Multiple inheritance 01/12/2005 Lecture 9: Abstraction Techniques 2

  3. Simulations Simulations � Programs regularly used to simulate real-world activities. – city traffic – the weather – nuclear processes – stock market fluctuations – environmental changes – LAN networks – animal behavior 01/12/2005 Lecture 9: Abstraction Techniques 3

  4. Simulations Simulations � They are often only partial simulations. � They often involve simplifications. – Greater detail has the potential to provide greater accuracy. – Greater detail typically requires more resources. � Processing power. � Simulation time. 01/12/2005 Lecture 9: Abstraction Techniques 4

  5. Benefits of simulations Benefits of simulations � Support useful prediction. – The weather. � Allow experimentation. – Safer, cheaper, quicker. � Example: – ‘How will the wildlife be affected if we cut a highway through the middle of this national park?’ 01/12/2005 Lecture 9: Abstraction Techniques 5

  6. Predator- -prey simulations prey simulations Predator � There is often a delicate balance between species. – A lot of prey means a lot of food. – A lot of food encourages higher predator numbers. – More predators eat more prey. – Less prey means less food. – Less food means ... 01/12/2005 Lecture 9: Abstraction Techniques 6

  7. The foxes- -and and- -rabbits project rabbits project The foxes 01/12/2005 Lecture 9: Abstraction Techniques 7

  8. Main classes of interest Main classes of interest � Fox – Simple model of a type of predator. � Rabbit – Simple model of a type of prey. � Simulator – Manages the overall simulation task. – Holds a collection of foxes and rabbits. 01/12/2005 Lecture 9: Abstraction Techniques 8

  9. The remaining classes The remaining classes � Field – Represents a 2D field. � Location – Represents a 2D position. � SimulatorView , FieldStats , Counter – Maintain statistics and present a view of the field. 01/12/2005 Lecture 9: Abstraction Techniques 9

  10. Example of the visualization Example of the visualization 01/12/2005 Lecture 9: Abstraction Techniques 10

  11. A Rabbit’ ’s state s state A Rabbit // Characteristics shared by all rabbits (static fields). // The age at which a rabbit can start to breed. private static final int BREEDING_AGE = 5; // The age to which a rabbit can live. private static final int MAX_AGE = 50; // The likelihood of a rabbit breeding. private static final double BREEDING_PROBABILITY = 0.15; // The maximum number of births. private static final int MAX_LITTER_SIZE = 5; // A shared random number generator to control breeding. private static final Random rand = new Random(); 01/12/2005 Lecture 9: Abstraction Techniques 11

  12. A Rabbit’ ’s state s state A Rabbit // Individual characteristics (instance fields). // The rabbit's age. private int age; // Whether the rabbit is alive or not. private boolean alive; // The rabbit's position private Location location; 01/12/2005 Lecture 9: Abstraction Techniques 12

  13. A Rabbit’ ’s behavior s behavior A Rabbit � Managed from the run method. � Age incremented at each simulation ‘step’. – A rabbit could die at this point. � Rabbits that are old enough might breed at each step. – New rabbits could be born at this point. 01/12/2005 Lecture 9: Abstraction Techniques 13

  14. A Rabbit’ ’s behavior s behavior A Rabbit public Rabbit(boolean randomAge){…} public void run(Field updatedField, List newRabbits) { incrementAge(); if(alive) { int births = breed(); for(int b = 0; b < births; b++) { Rabbit newRabbit = new Rabbit(false); newRabbits.add(newRabbit); Location loc = updatedField.randomAdjacentLocation(location); newRabbit.setLocation(loc); updatedField.place(newRabbit, loc); } 01/12/2005 Lecture 9: Abstraction Techniques 14

  15. A Rabbit’ ’s behavior s behavior A Rabbit Location newLocation = updatedField.freeAdjacentLocation(location); // Only transfer to the updated field if //there was a free location if(newLocation != null) { setLocation(newLocation); updatedField.place(this, newLocation); } else { // can neither move nor stay – //overcrowding - all locations taken alive = false; }}} 01/12/2005 Lecture 9: Abstraction Techniques 15

  16. A Rabbit’ ’s behavior s behavior A Rabbit private void incrementAge() { age++; if(age > MAX_AGE) { alive = false; } } private int breed() { int births = 0; if(canBreed() && rand.nextDouble() <= BREEDING_PROBABILITY) { births = rand.nextInt(MAX_LITTER_SIZE) + 1; } return births; } 01/12/2005 Lecture 9: Abstraction Techniques 16

  17. Rabbit simplifications Rabbit simplifications � Rabbits do not have different genders. – In effect, all are female. � The same rabbit could breed at every step. � All rabbits die at the same age. 01/12/2005 Lecture 9: Abstraction Techniques 17

  18. A Fox’ ’s state s state A Fox public class Fox { S tatic fields omitted // The fox's age. private int age; // Whether the fox is alive or not. private boolean alive; // The fox's position private Location location; // The fox's food level, which is increased // by eating rabbits. private int foodLevel; Methods omitted. } 01/12/2005 Lecture 9: Abstraction Techniques 18

  19. A Fox’ ’s behavior s behavior A Fox � Managed from the hunt method. � Foxes also age and breed. � They become hungry. � They hunt for food in adjacent locations. 01/12/2005 Lecture 9: Abstraction Techniques 19

  20. A Fox’ ’s behavior s behavior A Fox public void hunt(Field currentField, Field updatedField, List newFoxes) { incrementAge(); incrementHunger(); if(isAlive()) { // New foxes are born into adjacent locations. int births = breed(); for(int b = 0; b < births; b++) { Fox newFox = new Fox(false); newFoxes.add(newFox); Location loc = updatedField.randomAdjacentLocation(location); newFox.setLocation(loc); updatedField.place(newFox, loc); } 01/12/2005 Lecture 9: Abstraction Techniques 20

  21. A Fox’ ’s behavior s behavior A Fox // Move towards the source of food if found. Location newLocation = findFood(currentField, location); if(newLocation == null) {// no food found –move randomly newLocation = updatedField.freeAdjacentLocation(location); } if(newLocation != null) { setLocation(newLocation); updatedField.place(this, newLocation); } else { // can neither move nor stay - overcrowding – all // locations taken alive = false; }}} 01/12/2005 Lecture 9: Abstraction Techniques 21

  22. A Fox’ ’s behavior s behavior A Fox private Location findFood(Field field, Location location) { Iterator adjacentLocations = field.adjacentLocations(location); while(adjacentLocations.hasNext()) { Location where = (Location) adjacentLocations.next(); Object animal = field.getObjectAt(where); if(animal instanceof Rabbit) { Rabbit rabbit = (Rabbit) animal; if(rabbit.isAlive()) { rabbit.setEaten(); foodLevel = RABBIT_FOOD_VALUE; return where; }}} return null; } 01/12/2005 Lecture 9: Abstraction Techniques 22

  23. Configuration of foxes Configuration of foxes � Similar simplifications to rabbits. � Hunting and eating could be modeled in many different ways. – Should food level be additive? – Is a hungry fox more or less likely to hunt? � Are simplifications ever acceptable? 01/12/2005 Lecture 9: Abstraction Techniques 23

  24. The Simulator class The Simulator class � Three key components: – Setup in the constructor. – The populate method. � Each animal is given a random starting age. – The simulateOneStep method. � Iterates over the population. � Two Field objects are used: field and updatedField . 01/12/2005 Lecture 9: Abstraction Techniques 24

  25. The update step The update step public class Simulator { … public void simulateOneStep() { step++; newAnimals.clear(); // let all animals act for(Iterator iter = animals.iterator(); iter.hasNext(); ) { Object animal = iter.next(); 01/12/2005 Lecture 9: Abstraction Techniques 25

  26. The update step The update step if(animal instanceof Rabbit) { Rabbit rabbit = (Rabbit)animal; if(rabbit.isAlive()) { rabbit.run(updatedField, newAnimals); } else { iter.remove(); } } else if(animal instanceof Fox) { Fox fox = (Fox)animal; if(fox.isAlive()) { fox.hunt(field, updatedField, newAnimals); } else { iter.remove(); } } 01/12/2005 Lecture 9: Abstraction Techniques 26

  27. Instanceof Instanceof � Checking an object’s dynamic type – obj instanceof Myclass � General not considered good practice � Make code to depend on the exact type of objects. � The usage of instanceof is an indicator of refactoring 01/12/2005 Lecture 9: Abstraction Techniques 27

  28. Room for improvement Room for improvement � Fox and Rabbit have strong similarities but do not have a common superclass. � The Simulator is tightly coupled to the specific classes. – It ‘knows’ a lot about the behavior of foxes and rabbits. 01/12/2005 Lecture 9: Abstraction Techniques 28

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend