La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Diseño y Programación Orientada a Objetos"— Transcripción de la presentación:

1 Diseño y Programación Orientada a Objetos
Conferencia # 11 Caso de estudio Integrador: Acueducto TEMA # 3: Herencia y Polimorfismo Facultad Ing. Informática ISPJAE

2 Contenidos que se integran
Encapsulamiento Herencia Polimorfismo Clases genéricas

3 En el Acueducto de Albear se desea automatizar el control de los tanques de agua que abastecen del preciado líquido a la Capital. Para almacenar agua existen un conjunto de tanques, que pueden tener forma cilíndrica o de cubo con base rectangular. De cada tanque se conoce: identificación, dimensiones y el volumen de agua almacenado.

4 Cada tanque tiene un conjunto de válvulas y cada una de ellas alimenta a un municipio. Las válvulas se cierran o abren en dependencia de las necesidades de abastecimiento del municipio y se guarda la fecha en que se realiza esta acción.

5 1.Diseñe las clases necesarias para modelar la situación anterior usando UML.
2. Implemente las clases modeladas en Java. 3. Implemente las funciones necesarias para satisfacer los siguientes requerimientos funcionales :

6 Requerimientos funcionales
Conocer la cantidad de m3 disponibles actualmente para la región. Abrir las válvulas que alimentan a un municipio si los tanques donde ellas se encuentran están por encima de un % dado de su capacidad. Conocer por municipios la cantidad de válvulas de tanques cilíndricos que están vertiendo

7 Requerimientos funcionales
Cerrar las válvulas de un tanque si el municipio que alimentan recibe agua de otros tanques, y si el tanque se encuentra por debajo del 25% de su capacidad. Conocer los municipios que están siendo abastecidos. Conocer el tanque que lleva más tiempo vertiendo hacia un municipio dado.

8 Diseño de clases

9 Tank CilindricalTank - float radius +float baseArea() CubeTank
String id float height float actualVolume +float baseArea() +float Volume() CilindricalTank - float radius +float baseArea() CubeTank float sideA float sideB +float baseArea()

10 Acueduct Municipality Valve Tank String name int population Date date
String id float height float actualVolume + float baseArea() +float Volume() Acueduct 0..* 1 1 1 0..* abastece 0..* Municipality String name int population Valve Date date boolean isOpen municiplaity 0..* 1 alimenta

11 Implementación en Java

12 public abstract class Tank {
private String ID; protected float height; private ArrayList <Valve> valves; protected float actualVolumen; public Tank (String id, float height, float actualVolumen) { ID = id; this.height = height; this.actualVolumen = actualVolumen; this.valves = new ArrayList<Valve>(); } …

13 public abstract class Tank { … public float volume() {
return baseArea()*height; } public abstract float baseArea(); public void addValve(Municipality municipality, Date date){ Valve v= new Valve(municipality,date); valves.add(v); } …

14 public class CilindricalTank extends Tank { private float radius;
public CilindricalTank(String id, float height, float actualVolumen, float radius) { super(id, height, actualVolumen); this.radius = radius; } public float baseArea() { return Math.PI * Math.pow(this.radius, 2);

15 public class CubeTank extends Tank {
private float sideA; private float sideB; public CubeTank(String id, float height, float actualVolumen, float sideA, float sideB) { super(id, height, actualVolumen); this.sideA = sideA; this.sideB = sideB; }

16 public class CubeTank extends Tank {
public float baseArea() { return sideA*sideB; }

17 public class Valve { private Municipality municipality; private boolean isOpen; private Date date; public Valve(Municipality municipality, Date date) { this.municipality = municipality; this.date = date; this.isOpen = false; }

18 public class TankCollection { private ArrayList<Tank> tanks;
public TankCollection() { this.tanks = new ArrayList<Tank>(); } public boolean addTank(Tank tank) { if (find(tank.getID()) == -1) { tanks.add(tank); return true; } else return false; }

19 public class TankCollection {
public boolean addValveTank(String id, Municipality municipality, Date date){ int p= find(id); if (p != -1) { tanks.get(p).addValve(municipality, date); return true; } else return false;

20 public class Municipality { private String name; private int population; public Municipality(String name, int population) { this.name = name; this.population = population; } // métodos set y get

21 public class MunicipalityCollection { private ArrayList<Municipality> municipalities; public MunicipalityCollection() { this.municipalities = new ArrayList<Municipality>(); } public Municipality find(String name) { …} public boolean addMunicipality(Municipality municipality) { … } public boolean delete(String name) {…}

22 public class Acueduct { private TankCollection tankColl; private MunicipalityCollection munColl; public Acueduct() { this.tankColl= new TankCollection(); this.munColl= new MunicipalityCollection(); }

23 public class Acueduct { …
public boolean addCilindricalTank(String id, float height, float actualVolumen, float radius){ CilindricalTank tank = new CilindricalTank(id, height, actualVolumen, radius)); return tankColl.addTank(tank} }

24 public class Acueduct { public boolean addCubeTank(String id,
public boolean addCubeTank(String id, float height, float actualVolumen, float sideA, float sideB) { return tankCollection.addTank(new CubeTank(id, height, actualVolumen, sideA, sideB)); }

25 public boolean addValveTank(String id, Municipality municipality) {
public class Acueduct { public boolean addValveTank(String id, Municipality municipality) { return tankCollection.addValveTank(id, municipality); }

26 Solución de los incisos utilizando Patrón Experto.
a. Conocer la cantidad de m3 disponibles actualmente para la región. Clases involucradas: - Tank : devolver el volumen actual - TankCollection : devolver la capacidad total (sumando el volumen actual de todos los tanques) - Acueduct: devolver la capacidad total invocando a la instancia de TankCollection.

27 Acueduct: invoca al método correspondiente a través de la instancia
b. Abrir las válvulas que alimentan a un municipio si los tanques donde ellas se encuentran están por encima de un % dado de su capacidad. Clases involucradas: - Tank: verifica si su volumen actual está por encima del % dado y abre las válvulas que abastecen al municipio. TankCollection: manda a ejecutar la acción anterior para todos los tanques. Acueduct: invoca al método correspondiente a través de la instancia

28 Estudio Independiente
- Implementar los incisos restantes.


Descargar ppt "Diseño y Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google