La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.

Presentaciones similares


Presentación del tema: "0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo."— Transcripción de la presentación:

1 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo y Ligadura Dinámica Dr. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2015

2 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES Consideremos un conjunto de robots que construyen juguetes en una fábrica. Todo robot puede fabricar autos, que le demandan 1 chasis, 4 ruedas y 4 ópticas. Cada robot está asignado a uno o más sectores. Algunos sectores pueden no tener asignado un robot. El conjunto de sectores pueden mantenerse en un arreglo en el cual cada elemento representa a un sector y puede referenciar a un robot o no estar ligado. Introducción a la Programación Orientada a Objetos IPOO - 2015 2

3 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES Inicialmente el arreglo está vacío. Cada vez que se asigna un robot a un sector, se asigna un objeto a un elemento del arreglo. Cada vez que se retira un robot de un sector, se asigna nulo a un elemento del arreglo. En todo momento puede procesarse el arreglo. Por ejemplo, para calcular cuántos robots tienen más de g unidades de energía. Introducción a la Programación Orientada a Objetos IPOO - 2015 3

4 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES La clase SectoresFabrica encapsula entonces un arreglo de objetos de clase Robot y brinda comandos para: –asignar un Robot r en un sector s, requiere que s represente un sector de la fábrica. –asignar un Robot r en un sector libre, requiere que haya al menos un sector libre. –desasignar un Robot r del sector al que está asignado. –desasignar el Robot de un sector s, requiere que s represente un sector de la fábrica. Introducción a la Programación Orientada a Objetos IPOO - 2015 4

5 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES La clase SectoresFabrica encapsula entonces un arreglo de objetos de clase Robot y brinda consultas para: –Decidir si un Robot está asignado a algún sector. –Recuperar el Robot asignado a un sector s, requiere que s represente un sector de la fábrica. –Calcular la cantidad de sectores de la fábrica, esto es, la cantidad de componentes del arreglo. –Calcular cuántos sectores tienen asignado un robot, esto es, cuántas referencias del arreglo están ligadas. 5 Introducción a la Programación Orientada a Objetos IPOO - 2015

6 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES La clase SectoresFabrica encapsula entonces un arreglo de objetos de clase Robot y brinda consultas para: –Decidir si todos los sectores tienen asignado un robot, es decir, todas las componentes del arreglo están ligadas. –Contar la cantidad de sectores asignados a robots con más de g unidades de energía. –Decidir si alguno de los robots puede armar al menos n autos. 6 Introducción a la Programación Orientada a Objetos IPOO - 2015

7 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES SectoresFabrica > T [] Robot > SectoresFabrica(max: entero) > asignar(r: Robot, s: entero) asignar(r: Robot) desasignar(s: entero) desasignar(robot: Robot) Robot > energiaMaxima : 5000 energiaMinima : 100 > nroSerie:entero nombre:String energia: entero ruedas: entero opticas: entero chasis: entero > Robot(n:entero) > armarAuto ()

8 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES SectoresFabrica … > cantSectores(): entero cantSectoresOcupados(): entero todosOcupados(): boolean estaRobot (r: Robot): boolean existeSector(s: entero):boolean robotSector (s: entero): Robot cantMasEnergia(g: real): entero almenosNAutos(n: entero): boolean Robot … > obtenerNroSerie():entero obtenerNombre():String obtenerEnergia (): entero obtenerChasis () : entero obtenerRuedas () : entero obtenerOpticas () : entero cantAutos() : entero

9 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES La fábrica incorpora dos nuevos tipos de robots. –Los robots alfa pueden construir, además de autos, camiones y motos. Se agregan atributos chasisCamion y chasisMoto. –Los robots beta pueden construir autos y aviones. Se agrega un atributo chasisAvion. 9 Introducción a la Programación Orientada a Objetos IPOO - 2015

10 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES Introducción a la Programación Orientada a Objetos IPOO - 2015 10 Robot Alfa Beta SectoresFabrica

11 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES Alfa > chasisCamion: entero chasisMoto: entero > Alfa(n:entero) > armarCamion () armarMoto() > cantCamiones() cantMotos() Beta > chasisAvion: entero > Beta(n:entero) > armarAvion () > cantAviones() Introducción a la Programación Orientada a Objetos IPOO - 2015 11

12 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES Un objeto de clase Alfa tiene los mismos atributos que un objeto de clase Robot, más chasisCamion y chasisMoto. Un objeto de clase Alfa puede recibir los mismos mensajes que un objeto de clase Robot, más cualquiera de los mensajes que se corresponden con los métodos definidos en la clase Alfa. Análogamente para la clase Beta 12 Introducción a la Programación Orientada a Objetos IPOO - 2015

13 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 13 class SectoresFabrica { private Robot[] T; //Constructor public SectoresFabrica(int max) { /*Crea un arreglo con max sectores */ T= new Robot [max]; }... } La variable T mantiene una referencia a un arreglo de variables polimórficas, el objeto referenciado puede ser de clase Robot, Alfa o Beta.

14 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 14 //Comandos public void asignar (Robot r) { /*Busca el primer sector libre y asigna el robot r al sector. Requiere que haya un sector libre*/ int i = 0; while (T[i] != null) i++; T[i] = r; } Como el parámetro r es una variable polimórfica, el método es polimórfico.

15 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 15 public void asignar (Robot r, int s) { /*Asigna el robot r al sector s. Requiere 0 <= s < cantSectores() */ T[s] = r; } Introducción a la Programación Orientada a Objetos IPOO - 2015

16 16 class Fabrica{ public static void main (String a[]){ SectoresFabrica s = new SectoresFabrica (10); Robot r1,r2,r3; r1 = new Robot ("Tom"); r2 = new Alfa ("Sam"); r3 = new Beta ("Jim"); s.asignar(r1,1); s.asignar(r2,3); s.asignar(r1,8); s.asignar(r1); s.asignar(r2,9); s.asignar(r3); } } Dibuje el diagrama de objetos Introducción a la Programación Orientada a Objetos IPOO - 2015

17 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 17 public void desasignar(int s) { /*Elimina la asignación del robot r del sector s. Requiere 0 <= s < cantSectores()*/ T[s] = null; } Introducción a la Programación Orientada a Objetos IPOO - 2015

18 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 18 public void desasignar(Robot r) { /*Elimina la asignación del robot r de todos los sectores a los que está asignado*/ int i = 0; while (i < cantSectores()){ if (T[i] == r) T[i] = null; i++; } } Buscar el robot por identidad, el objeto ligado a r puede ser una instancia de clase Robot, Alfa o Beta. Introducción a la Programación Orientada a Objetos IPOO - 2015

19 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 19 public int cantSectores(){ return T.length; } public int cantSectoresOcupados (){ int i = 0; int cant = 0; while (i < cantSectores()){ if (T[i]!= null) cant++; i++; } return cant; } Introducción a la Programación Orientada a Objetos IPOO - 2015

20 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 20 public boolean todosOcupados (){ int i = 0; boolean hayNulo= false; while (i < cantSectores() && !hayNulo ){ hayNulo = T[i]==null; i++; } return !hayNulo; } Introducción a la Programación Orientada a Objetos IPOO - 2015

21 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 21 public boolean estaRobot (Robot r){ /*Decide si el robot r, que asume ligado, está asignado al menos a un sector*/ int i = 0; boolean esta = false; while (i < cantSectores() && !esta ){ esta = T[i] == r ; i++; } return esta; } Introducción a la Programación Orientada a Objetos IPOO - 2015

22 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 22 public boolean existeSector (int s){ return s >= 0 & s < cantSectores(); } public Robot robotSector (int s){ /*Retorna el Robot en un sector s, requiere 0 <= s < cantSectores()*/ return T[s]; } Introducción a la Programación Orientada a Objetos IPOO - 2015

23 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 23 public int cantMasEnergia(float g){ /*Cuenta la cantidad de sectores asignados a robots con más de g unidades de energía*/ int cont = 0; for (int i = 0; i < cantSectores(); i++) if (T[i] != null) if(T[i].obtenerEnergia() > g) cont++; return cont; } Introducción a la Programación Orientada a Objetos IPOO - 2015

24 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 24 public boolean alMenosNAutos (int n){ int i = 0; boolean puede = false; while (i < cantSectores() && !puede ){ puede = T[i] != null && T[i].cantAutos() >= n; i++; } return puede; } Introducción a la Programación Orientada a Objetos IPOO - 2015

25 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES La fábrica incorpora un nuevo tipo de Robot, llamado Delta que construye los mismo aviones que Beta pero arma autos con 6 ópticas, en lugar de 4. 25 Introducción a la Programación Orientada a Objetos IPOO - 2015

26 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES Introducción a la Programación Orientada a Objetos IPOO - 2015 26 Robot Alfa Beta SectoresFabrica Delta

27 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES Delta > Delta(n: entero) > armarAuto() > cantAutos() Introducción a la Programación Orientada a Objetos IPOO - 2015 27 La clase Delta no agrega nueva funcionalidad, sino que redefine dos de los servicios provistos por Robot.

28 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 28 class Fabrica{ public static void main (String a[]){ SectoresFabrica s = new SectoresFabrica (5); Robot r1,r2,r3,r4; r1 = new Robot ("Tom"); r2 = new Alfa ("Sam"); r3 = new Beta ("Jim"); r4 = new Delta ("Liz"); s.asignar(r1,1); s.asignar(r2,3); s.asignar(r1); s.asignar(r3); s.asignar(r4); }

29 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 29 :Robot Introducción a la Programación Orientada a Objetos IPOO - 2015 t :Alfa 5 :Beta :Delta

30 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: FÁBRICA DE JUGUETES 30 public boolean alMenosNAutos (int n){ int i = 0; boolean puede = false; while (i < cantSectores() && !puede ){ puede = T[i] != null && T[i].cantAutos() >= n; i++; } return puede; } La ligadura entre el mensaje y el método depende de la clase del objeto ligado a la variable T[i]. El compilador no conoce la clase de T[i] de modo que la ligadura es dinámica.


Descargar ppt "0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo."

Presentaciones similares


Anuncios Google