Diseño y Programación Orientada a Objetos

Slides:



Advertisements
Presentaciones similares
Herencia y Polimorfismo
Advertisements

Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
Lenguajes de Programación Tema 4. Paradigma Orientado a Objetos Java 1.5 Pedro García López
JAVA J.A.C..
Patrones Creacionales
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
Crear Aplicación Cliente para Conectarse a una Base de Datos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Sonia.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Clases y Objetos en Java
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Taller de Java Universidad de los Andes
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
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Herencia y Clases Abstractas
Diseño y Programación Orientada a Objetos
BREVE INTRODUCCION A LA PROGRAMACION
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
Colecciones Carlos Fontela, 2008.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Diseño y Programación Orientada a Objetos
Clases y Objetos en Java
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
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
LISTAS..
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Diseño y Programación Orientada a Objetos
Sonia Rueda Herencia y Polimorfismo
Clases y Objetos en Java
Herencia en C#.
IPOO 2 cuatrimestre 2016 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
Programación Gráfica 5. Introducción a C++..
Fundamentos básicos del lenguaje C#. Parte 1 Introducción a C#
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
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
Tópicos Avanzados de Programación (TAP3501)
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Casos de prueba con JUnit
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
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
Clases y Objetos en Java
Transcripción de la presentación:

Diseño y Programación Orientada a Objetos Conferencia # 10: Caso de estudio integrador: Monitoreo de flotas con GPS Facultad Ing. Informática ISPJAE

Contenidos que se integran Encapsulamiento Herencia Polimorfismo Clases genéricas

Un sistema para el monitoreo de flotas con tecnología GPS (Global Position System) debe monitorear vehículos de transporte aéreo, terrestre y submarino. Los vehículos tendrán instalado un dispositivo para la transmisión y recepción del GPS.

Desde la central de monitoreo se conoce la posición geográ-fica actual (latitud y longitud) de cualquier vehículo, así co-mo la profundidad si se trata de un vehículo submarino y la altura si se trata de uno aéreo.

Todos los vehículos se identifican en la central por un código y deben seguir la ruta planificada. La ruta se expresa a través de una colección de posiciones geográficas y el centro de operaciones la informa tanto al vehículo como a la central de monitoreo.

El sistema debe chequear la posición de los vehículos para saber si se mantienen en ruta. Cuando se detecta que un vehículo no se mantiene en la ruta se emite una señal de alarma.

Un vehículo está fuera de ruta si su posición actual difiere en 10 o más unidades de todas las posiciones de la ruta o si: Aéreo: excedió los límites de altura Submarinos: excedió los límites de profundidad Terrestre: posición actual no ha cam-biado con respecto a la anterior.

Todo el tratamiento por software de los dispositivos de alarma ha sido encapsulado en una clase denominada Alarm. Se ha creado un componente GPS para encapsular el tratamiento del GPS.

Métodos del componente GPS: public Position getPosition( String code, FLOAT value) String code) value: valor de profundidad o altura según tipo de vehículo

La Central de Monitoreo, antes de iniciar el monitoreo de un vehículo, valida que la ruta programada por el Centro de Operaciones sea correcta, o sea, que la distancia entre dos puntos consecutivos no sea mayor de 20 unidades.

Dos posiciones consecutivas P1(x1,y1) y P2(x2,y2) Distancia (teorema de Pitágoras) D2 = (y2 - y1)2 + (x2 - x1)2

Diseños de clases

SubmarineV AerialV TerrestrialV - deep - height - previousPos Vehicle - String code # Position pos ArrrayList<Position> route SubmarineV - deep - limitDeep AerialV - height - minHeight - maxHeight TerrestrialV - previousPos

GPS +getPosition(String) +getPosition(String,Float) Central 1 Alarm +activate(String) Position -latitude -longitude +distance(Position) 0..* 1 0..* Vehicle 1 1

Implementación en Java public class Position { private float latit; private float long; public Position(float latit,float long) { this.latit= latit; this.long= long; }

public float getLatit() { return latit; } public float getLong() { return long;

public float distance(Position p) { float result, c1, c2; c1= p public float distance(Position p) { float result, c1, c2; c1= p.getLatit() – latit; c2= p.getLong() – long; result = Math.sqrt(c1*c1 + c2*c2); return result; }

public class Vehicle { private String code; protected Position pos; private ArrayList<Position> route; public Vehicle(String code, Position pos) { this.code = code; this.pos = pos; route = null;} …

public void update(Position pos) { this.pos = pos; } public String getCode() {…} public Position getPos() {…} public ArrayList<Position> getRoute() {…}

public boolean setRoute( ArrayList<Position> r) { int i= 0; boolean result= true; while (i < r.size() - 1 && result) if(r.get(i).distance(r.get(i+1)) > 20) result= false; else i++; if (result) route= r; else route= null; return result; }

public boolean inRoute() { int i = 0; boolean result= false; while(i < route.size() && !result) if(pos.distance(route.get(i)) < 10) result= true; else i ++; return result; } …}

public class TerrestrialV extends Vehicle { private Position previousPos; public TerrestrialV(String code, Position pos) { super(code, pos); previousPos= null; } public Position getPreviousPos(){..}

public void update(Position pos) { previousPos= this.pos; super.update(pos); } public boolean inRoute() { return super.inRoute() && pos.distance(previousPos) != 0 ? true : false;

public class AerialV extends Vehicle { private float height; private float minHeight; private float maxHeight;

public AerialV(String code, Position pos, float height, float minHeight, float maxHeight) { super(code, pos); this.height = height; this.minHeight = minHeight; this.maxHeight = maxHeight; }

public float getHeight() {…} public float getMinHeight() {…} public float getMaxHeight() {…} public boolean inRoute(){ return (super.inRoute() && height >= minHeight && height <= maxHeight)? true : false; }

public class SubmarineV extends Vehicle { private float deep; private float limitDeep;

public SubmarineV(String code, Position pos, float deep, float limitDeep) { super(code, pos); this.deep= deep; this. limitDeep= limitDeep; }

public float getDeep() public float getLimitDeep() public boolean inRoute(){ return (super.inRoute() && deep <= limitDeep)? true : false; }

Variantes de implementación VehicleCollection Variantes de implementación 1ra: Clase derivada de ArrayList 2da: Clase compuesta por una instancia de ArrayList

ArrayList<Vehicle> 1ra Variante VehicleCollection ArrayList<Vehicle>

ArrayList<Vehicle> 2da Variante VehicleCollection 1 1 ArrayList<Vehicle>

Implementación 1ra Variante public class VehicleCollection extends ArrayList<Vehicle> { public VehicleCollection() { super(); }

public boolean addTerrestrial(String c, Position p, ArrayList<Position> r) { boolean result= false; if(find(c) == null) { TerrestrialV v=new TerrestrialV(c,p); if (v.setRoute(r)) result= add(v); } return result; }

public boolean addSubmarine(…) {…} public boolean addAer(…) {..}

public boolean addVehicle(Vehicle v) { boolean result= false; if (find(v.getCode()) == null && v.getRoute() != null) result= add(v); return result; }

public boolean addVehicle(Vehicle v, ArrayList<Position> r) { boolean result= false; if (find(v.getCode()) == null && v.setRoute(r)) result= add(v); return result; }

public Vehicle find(String code) { int i=0; boolean found= false; while ( i < size() && !found) { found= get(i).getCode(). equalsIgnoreCase(code); i++; } return found? get(i-1) : null; }

public boolean inRoute(String code) { boolean result= false; Vehicle v= find(code); if (v != null) result= v.inRoute(); return result; }

ArrayList<Vehicle> 2da Variante VehicleCollection ArrayList<Vehicle> 1

Implementación public class VehicleCollection { private ArrayList<Vehicle> vehicles; public VehicleCollection() { vehicles= new ArrayList<Vehicle> (); }

public boolean add(Vehicle v) { boolean result= false; if(find(v.getCode()) == null && v.getRoute() != null) result= vehicles.add(v); return result; }

public boolean add(Vehicle v, ArrayList<Position> r) { boolean result= false; if (find(v.getCode()) == null && v.setRoute(r)) result= vehicles.add(v); return result; } …

Patrón de Diseño. Solución efectiva y reutilizable que se da a un problema de diseño no trivial. Se nombran. Efectiva: resuelve el problema de manera satisfactoria. Reutilizable: se puede aplicar siempre que se presente el mismo problema.

Patrón de Diseño: Singleton Problema: garantizar la existencia de un solo objeto de una cierta clase y accederlo fácilmente. Ejemplo: ¿Cuántos objetos de clase controladora se necesitan en una aplicación? 1

Patrón de Diseño: Singleton Solución: hacer que sea la propia clase la responsable de controlar la existencia de un solo objeto. ¿Cómo?

public class Central { private static Central central = null; private GPS gps; private VehicleCollection vehicles; private Alarm alarm; …

private Central() { vehicles= new VehicleCollection(); gps= null; alarm= null; } public static Central getInstance() { if (central == null) central = new Central(); return central;

public void setGPS(GPS gps) { this.gps= gps; } public void setAlarm(Alarm alarm) { this.alarm= alarm; …

public boolean inRoute(String code) { return vehicles.inRoute(code); } public boolean addV(Vehicle v) return vehicles.add(v); …

Conclusiones Dos variantes para implementar clases contenedoras concretas. Cada una requiere implementa-ciones distintas. ACollection ArrayList<A> 1 ACollection ArrayList<A>

Conclusiones Singleton es un patrón de diseño que garantiza trabajar con una única instancia de cierta clase: public class A{ private static A a = null; private A(){…} public static A getInstance(){…}