Diseño y Programación Orientada a Objetos

Slides:



Advertisements
Presentaciones similares
© Lic. Fernando Campos Camacho
Advertisements

Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Herencia e Interfaces.
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
Detalles Generales sobre Java
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
Programación Orientada a Objetos EIF200 FUNDAMENTOS DE INFORMÁTICA Compilado por: Mag. Sonia Mora. Dra. Mayela Coto. Proyecto UNA – Mora & Coto,
PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento y constructores.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
PROGRAMACIÓN ORIENTADA A OBJETOS
Programación Avanzada
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Polimorfismo subtipado
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Diseño y Programación Orientada a Objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Fundamentos de la programación orientada a objetos
Polimorfismo y Métodos Virtuales
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Estructuras de Datos Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Clases y Objetos en Java
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Diseño y Programación Orientada a Objetos
Sonia Rueda Herencia y Polimorfismo
Sonia Rueda Herencia y Polimorfismo
Programación Avanzada
Herencia en C#.
IPOO 2 cuatrimestre 2016 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2015 Departamento de Ciencias e Ingeniería
Programación Orientada a Objetos
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Estructuras de Datos Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de.
Herencia en C++ Agustín J. González ELO329.
Templates (en español: Pantillas, modelos, patrones)‏
Casos de prueba con JUnit
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Herencia en C++ Agustín J. González ELO329.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
ELO329: Diseño y Programación Orientados a Objetos
Programación Orientada a Objetos
Polimorfismo en C++ y Métodos Virtuales
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Clases abstractas e interfaces
Transcripción de la presentación:

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

Contenidos que se integran Encapsulamiento Herencia Polimorfismo Clases genéricas

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.

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.

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 :

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

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.

Diseño de clases

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

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

Implementación en Java

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

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); } …

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

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

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

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

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

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;

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

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) {…}

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

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} }

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

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

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.

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

Estudio Independiente - Implementar los incisos restantes.