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 Dependencia.

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 Dependencia."— 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 Dependencia y asociación entre clases Caso de estudio: Robot y Video Juego 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 Introducción a la Programación Orientada a Objetos IPOO - 2015 2 TEMARIO Relación, dependencia y asociación entre clases. Caso de estudio: Robot. Caso de estudio: Video juego.

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 RELACIONES ENTRE CLASES La construcción de un sistema de software orientado a objetos consiste en definir un conjunto de clases relacionadas entre sí. En esta materia describiremos tres formas de relación: –dependencia, –asociación y –herencia entre clases. 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 DEPENDENCIA ENTRE CLASES Cuando una clase A declara una variable local o un parámetro de otra clase B, o bien retorna un resultado de clase B, decimos que existe una dependencia entre la clase A y la clase B, la relación es de tipo usaUn. La clase A es cliente de los servicios que brinda la clase proveedora B. 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 ASOCIACIÓN ENTRE CLASES Cuando una clase A tiene un atributo de instancia de otra clase B, decimos que ambas clases están asociadas y la relación es de tipo tieneUn. Observemos que entre dos clases asociadas en general también se establece una relación de dependencia. Algunos de los servicios de la clase cliente, recibirán como parámetro o retornarán un resultado de la clase proveedora. Así, una clase A que tiene un atributo de la clase B, usa a la clase B. Por lo tanto A es cliente de los servicios que brinda la clase proveedora B. Introducción a la Programación Orientada a Objetos IPOO - 2015 5

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 Introducción a la Programación Orientada a Objetos IPOO - 2015 6 TEMARIO Relación, dependencia y asociación entre clases. Caso de estudio: Robot. Caso de estudio: Video juego.

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: ROBOT En una fábrica de autos de juguete una parte de la producción la realizan robots. Cada robot tiene un número de serie y un nombre. En el momento que se crea el robot se establece su número de serie, que nunca va a cambiar. El nombre se le puede asignar al robot cuando se crea o modificarlo más adelante, cuando ya está activo. Introducción a la Programación Orientada a Objetos IPOO - 2015 7

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: ROBOT Cada robot tiene una carga de energía que se va consumiendo a medida que ejecuta las órdenes que recibe. Cada robot es capaz de conectarse de modo tal que se recargue su energía hasta su capacidad máxima de 5000 unidades. Esta acción puede ejecutarse ante una orden externa o puede iniciarla el robot mismo cuando su energía está por debajo de las 100 unidades. El robot recarga su energía cuando después de armar un juguete, queda por debajo del mínimo. Introducción a la Programación Orientada a Objetos IPOO - 2015 8

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: ROBOT Cada robot tiene la capacidad para armar autos de juguete y cuenta con piezas de diferentes tipos: ruedas, ópticas y chasis. Inicialmente comienza a trabajar con 100 piezas de cada tipo. La cantidad de piezas se incrementa cuando un robot recibe una orden de abrir una caja de piezas y se decrementa cuando arma un vehículo. Cada caja tiene piezas de todos los tipos. Desarmar una caja cualquiera demanda 50 unidades de energía. Armar un auto consume 70 unidades de energía, 4 ruedas, 6 ópticas y 1 chasis. Introducción a la Programación Orientada a Objetos IPOO - 2015 9

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: ROBOT Las clases Robot y String están asociadas. La clase Robot tiene un atributo de clase String. 10 Robot > energiaMaxima : 5000 energiaMinima : 100 > nroSerie:entero nombre:String energia: entero ruedas: entero opticas: entero chasis: entero … Caja > ruedas: entero opticas: entero chasis: entero …

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: ROBOT Existe una relación de dependencia entre las clases Robot y Caja. 11 Robot … > Robot(nro: entero) Robot(nro: entero, nom: String) > establecerNombre(n: String) abrirCaja (c: Caja) … Caja … > Caja (r, o, ch: entero) > establecerRuedas(n: entero) establecerOpticas(n: entero) establecerChasis(n: entero) …

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: ROBOT La clase cliente de Robot asume la responsabilidad de controlar si se puede armar un auto antes de enviar el mensaje. 12 Robot … > Robot(nro: entero) Robot(nro: entero, nom: String) > establecerNombre(n: String) abrirCaja (c: Caja) recargar() armarAuto() … Caja … > Caja (r, o, ch: entero) > establecerRuedas(n: entero) establecerOpticas(n: entero) establecerChasis(n: entero) … Requiere que haya piezas disponibles

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: ROBOT La consulta cantAutos() permite decidir si hay piezas disponibles para armar un auto. 13 Robot … > obtenerNroSerie():entero obtenerNombre():String obtenerEnergia (): entero obtenerChasis () : entero obtenerRuedas () : entero obtenerOpticas () : entero cantAutos() : entero toString():String() … Caja … > obtenerChasis () : entero obtenerRuedas () : entero obtenerOpticas () : entero equals(c:Caja):boolean Requiere nombre ligado

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: ROBOT 14 Robot … > El constructor establece la energía en el valor máximo y las cantidades de piezas en 100. Todos los servicios que consumen energía deciden recargar cuando energía es menor que la mínima.

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: ROBOT recargar() recarga la energía del robot hasta llegar al máximo. abrirCaja(c:Caja) aumenta las piezas disponibles de acuerdo a las cantidades de la caja. armarAuto() decrementa las piezas disponibles, requiere que la clase cliente haya controlado si hay piezas disponibles antes de enviar el mensaje armarAuto a un robot. cantAutos():entero retorna la cantidad de autos que puede armar el robot con las piezas que tiene disponibles, sin desarmar una caja. Introducción a la Programación Orientada a Objetos IPOO - 2015 15

16 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: ROBOT 16 Robot > energiaMaxima : 5000 energiaMinima : 100 > nroSerie:entero nombre:String energia: entero ruedas: entero opticas: entero chasis: entero … class Robot { //atributos de clase private static final int energiaMaxima = 5000; private static final int energiaMinima = 100; //atributos de instancia private int nroSerie; private String nombre; private int energia; private int ruedas; private int opticas; private int chasis; … }

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: ROBOT 17 Robot … > Robot(nro: entero) Robot(nro: entero, nom: String) class Robot { … //Constructores public Robot (int nro){ nroSerie = nro; energia = energiaMaxima; ruedas = 100; opticas = 100; chasis = 100; } public Robot (int nro, String nom){ Robot(nro); nombre = nom; } … }

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: ROBOT 18 Robot … > establecerNombre(n: String) recargar() … class Robot { … //Comandos public void establecerNombre(String n){ nombre = n; } public void recargar(){ energia = energiaMaxima; } … }

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: ROBOT 19 Robot … > armarAuto() … class Robot { … public void armarAuto () { /*Requiere que se haya controlado si hay piezas disponibles*/ ruedas -= 4 ; opticas -= 6; energia -= 70; chasis --; /*Controla si es necesario recargar energía*/ if (energia < energiaMinima) this.recargar(); } … }

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: ROBOT 20 Robot … > abrirCaja(c: Caja) … public void abrirCaja (Caja caja) { /*Aumenta sus cantidades según las de la caja*/ ruedas += caja.obtenerRuedas(); opticas += caja.obtenerOpticas(); chasis += caja.obtenerChasis(); energia -= 50; /*Controla si es necesario recargar energía*/ if (energia < energiaMinima) this.recargar(); } El comando abrirCaja recibe como parámetro un objeto de clase Caja. Las clases Robot y Caja están asociadas por una relación de dependencia.

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: ROBOT 21 Robot … > obtenerNroSerie(): entero obtenerNombre(): String obtenerEnergia (): entero obtenerChasis () : entero obtenerRuedas () : entero obtenerOpticas () : entero … Class Robot{ … //Consultas public String obtenerNombre(){ return nombre;} public int obtenerNroSerie(){ return nroSerie;} public int obtenerEnergia(){ return energia;} public int obtenerRuedas(){ return ruedas;} public int obtenerOpticas(){ return opticas;} public int obtenerChasis(){ return chasis;} … }

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: ROBOT 22 Robot … > toString():String … class Robot { … public String toString(){ //Requiere nombre ligado return nroSerie+" "+nombre+" "+ ruedas+" "+opticas+" "+ chasis; } … public String toString(){ String s; if (nombre == null) s = nroSerie+" "+ruedas+" "+opticas+" "+ chasis; else s = nroSerie+" "+nombre+" "+ruedas+" "+opticas+" "+ chasis; return s; }

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: ROBOT El contrato requiere que la clase cliente de Robot controle si es posible armar el auto. 23 class FabricaJuguetes{ … public void producir { Robot unRobot; unRobot = new Robot(111); Caja c = new Caja(100,150,25); … if (unRobot.cantAutos() > 0) unRobot.armarAuto(); … } }

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: ROBOT Observemos que los valores de los atributos de instancia se establecen en la creación del objeto y se modifican cuando se arman autos o se abren cajas. Los atributos, los comandos y las consultas de Caja tienen los mismos nombres que en Robot, cuando un objeto reciba un mensaje su clase determina el método que va a ejecutarse. La clase FabricaJuguetes depende de las clases Robot y Caja porque tiene variables locales de esas clases. Introducción a la Programación Orientada a Objetos IPOO - 2015 24

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: ROBOT 25 Robot … > Robot(nro: entero) Robot(nro: entero,nom: String) > establecerNombre(n: String) abrirCaja (c: Caja) recargar() armarAuto():boolean … Caja … > Caja (r,o,ch: entero) > establecerRuedas(n: entero) establecerOpticas(n: entero) establecerChasis(n: entero) Controla si hay piezas disponibles. Si no hay piezas disponibles retorna false.

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: ROBOT 26 Robot … > armarAuto():boolean … public boolean armarAuto () { /*Controla si hay piezas disponibles. Si no hay piezas disponibles retorna false. */ boolean hayPiezas = false; if(cantAutos()> 0){ hayPiezas = true; ruedas -= 4 ; opticas -=6; energia -= 70; chasis --; /*Controla si es necesario recargar energía*/ if (energia < energiaMinima) this.recargar(); } return hayPiezas; }

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: ROBOT El contrato requiere que la clase Robot controle si es posible armar el auto y retorne un valor boolean. 27 class FabricaJuguetes{ … public void producir { Robot unRobot; unRobot = new Robot(111); Caja c = new Caja(100,150,25); … if (unRobot.armarAuto()) … } }

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 Introducción a la Programación Orientada a Objetos IPOO - 2015 28 TEMARIO Relación, dependencia y asociación entre clases. Caso de estudio: Robot. Caso de estudio: Video juego.

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: VIDEOJUEGO En un videojuego algunos de los personajes son aliens. Los aliens tienen cierta cantidad de antenas y de manos, que determinan su capacidad sensora y su capacidad de lucha respectivamente. Cada alien tiene un nombre y una cantidad de vidas que inicialmente es 5 y se van reduciendo cada vez que recibe una herida. Cuando está muerto ya no tienen efecto las heridas. Introducción a la Programación Orientada a Objetos IPOO - 2015 29

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: VIDEOJUEGO Cuando un alien logra llegar a la base recupera 2 vidas, sin superar nunca el valor 5. Cada alien tiene una nave, cada nave tiene una velocidad y una cantidad de combustible en el tanque. Ambos atributos pueden aumentar o disminuir de acuerdo a un parámetro que puede ser positivo o negativo. La fuerza de un alien se calcula como la capacidad sensora, más su capacidad de lucha, todo multiplicado por el número de vidas. Introducción a la Programación Orientada a Objetos IPOO - 2015 30

31 31 Alien > maxVidas:entero > Nave: NaveEspacial vidas:entero antenas:entero manos:entero > Alien (n:NaveEspacial,a,m:entero) > recuperaVidas() recibeHerida() copy(a:Alien) > obtenerNave():NaveEspacial obtenerVidas():entero obtenerAntenas():entero obtenerManos():entero obtenerFuerza():entero clone():Alien NaveEspacial > velocidad:entero combustible:entero > NaveEspacial(v,c:entero) > cambiarVelocidad(v:entero) cambiarCombustible(c:entero) copy(n:NaveEspacial) > obtenerVelocidad():entero obtenerCombustible():entero equals(n:NaveEspacial):boolean clone():NaveEspacial

32 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: VIDEOJUEGO La clase Alien tiene un atributo de clase NaveEspacial, existe una relación de asociación entre Alien y NaveEspacial. Algunos de los métodos de la clase Alien reciben parámetros o retonan resultados de clase NaveEspacial. La clase Alien es cliente de la clase proveedora NaveEspacial. La clase Alien solo necesita conocer la signatura de los servicios provistos por NaveEspacial. Introducción a la Programación Orientada a Objetos IPOO - 2015 32

33 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: VIDEOJUEGO Introducción a la Programación Orientada a Objetos IPOO - 2015 NaveEspacial > velocidad:entero combustible:entero > NaveEspacial(v,c:entero) > cambiarVelocidad(v:entero) cambiarCombustible(c:entero) copy(n:NaveEspacial) > obtenerVelocidad():entero obtenerCombustible():entero equals(n:NaveEspacial):boolean clone():NaveEspacial class NaveEspacial { //Atributos de instancia private int velocidad; private int combustible; //Constructor public NaveEspacial(int v,int c){ velocidad = v; combustible = c; } //Comandos public void cambiarVelocidad(int v) { velocidad =+ v; } public void cambiarCombustible (int c){ combustible =+ c; }

34 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: VIDEOJUEGO Introducción a la Programación Orientada a Objetos IPOO - 2015 NaveEspacial > velocidad:entero combustible:entero > NaveEspacial(v,c:entero) > cambiarVelocidad(v:entero) cambiarCombustible(c:entero) copy(n:NaveEspacial) > obtenerVelocidad():entero obtenerCombustible():entero equals(n:NaveEspacial):boolean clone():NaveEspacial class NaveEspacial { //Atributos de instancia private int velocidad; private int combustible; } … public int obtenerVelocidad(){ return velocidad; } public int obtenerCombustible (){ return combustible; } … }

35 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: VIDEOJUEGO class NaveEspacial { //Atributos de instancia private int velocidad; private int combustible; } … public void copy(NaveEspacial n){ velocidad = n.obtenerVelocidad(); combustible = n.obtenerCombustible(); } public boolean equals(NaveEspacial n){ return velocidad == n.obtenerVelocidad()&& Combustible == n.obtenerCombustible(); } … 35

36 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: VIDEOJUEGO Introducción a la Programación Orientada a Objetos IPOO - 2015 36 public NaveEspacial clone(){ return new NaveEspacial(velocidad, combustible); } public NaveEspacial clone(){ NaveEspacial n = new NaveEspacial(velocidad,combustible); return n; }

37 37 Alien > maxVidas:entero > Nave: NaveEspacial vidas:entero antenas:entero manos:entero > Alien (n:NaveEspacial,a,m:entero) > recuperaVidas() recibeHerida() copy(a:Alien) > obtenerNave():NaveEspacial obtenerVidas():entero obtenerAntenas():entero obtenerManos():entero obtenerFuerza():entero clone():Alien class Alien { //Atributos de clase private static final int maxVidas = 5; //Atributos de instancia private NaveEspacial Nave; private int vidas; private int antenas; private int manos; } Las clases Alien y NaveEspacial están asociadas. La clase Alien tiene un atributo de clase NaveEspacial.

38 38 Alien > maxVidas:entero > Nave: NaveEspacial vidas:entero antenas:entero manos:entero > Alien (n:NaveEspacial,a,m:entero) > recuperaVidas() recibeHerida() copy(a:Alien) > obtenerNave():NaveEspacial obtenerVidas():entero obtenerAntenas():entero obtenerManos():entero obtenerFuerza():entero clone():Alien class Alien { //Atributos de clase private static final int maxVidas = 5; //Atributos de instancia private NaveEspacial Nave; private int vidas; private int antenas; private int manos; //Constructor public Alien (NaveEspacial n, int a, int m){ Nave = n; vidas = maxVidas; antenas = a; manos = m; } }

39 39 Alien > maxVidas:entero > Nave: NaveEspacial vidas:entero antenas:entero manos:entero > Alien (n:NaveEspacial,a,m:entero) > recuperaVidas() recibeHerida() copy(a:Alien) > obtenerNave():NaveEspacial obtenerVidas():entero obtenerAntenas():entero obtenerManos():entero obtenerFuerza():entero clone():Alien class Alien { //Atributos de clase … //Atributos de instancia … //Constructores … //Comandos public void recuperaVidas(){ if (vidas+2 > maxVidas) vidas = maxVidas; else vidas = vidas+2; } public void recibeHerida(){ if (vida > 0) vida--; } … }

40 40 Alien > maxVidas:entero > Nave: NaveEspacial vidas:entero antenas:entero manos:entero > Alien (n:NaveEspacial,a,m:entero) > recuperaVidas() recibeHerida() copy(a:Alien) > obtenerNave():NaveEspacial obtenerVidas():entero obtenerAntenas():entero obtenerManos():entero obtenerFuerza():entero clone():Alien class Alien { //Atributos de clase … //Atributos de instancia … //Constructores … //Comandos … public void copy (Alien a){ Nave = a.obtenerNave(); vidas = a.obtenerVidas(); antenas = a.obtenerAntenas(); manos = a.obtenerManos(); } … }

41 41 Alien > maxVidas:entero > Nave: NaveEspacial vidas:entero antenas:entero manos:entero > Alien (n:NaveEspacial,a,m:entero) > recuperaVidas() recibeHerida() copy(a:Alien) > obtenerNave():NaveEspacial obtenerVidas():entero obtenerAntenas():entero obtenerManos():entero obtenerFuerza():entero clone():Alien //Consultas public NaveEspacial obtenerNave(){ return Nave; } public int obtenerVidas(){ return vidas; } public int obtenerAntenas(){ return antenas; } public int obtenerManos (){ return manos; } public int obtenerFuerza(){ return (antenas+manos)*vidas; }

42 42 Alien > maxVidas:entero > Nave: NaveEspacial vidas:entero antenas:entero manos:entero > Alien (n:NaveEspacial,a,m:entero) > recuperaVidas() recibeHerida() copy(a:Alien) > obtenerNave():NaveEspacial obtenerVidas():entero obtenerAntenas():entero obtenerManos():entero obtenerFuerza():entero clone():Alien //Consultas … public Alien clone(){ NaveEspacial n = Nave; int m = manos; int a = antenas; int v = vidas; Alien c = new Alien(n,a,m); c.establecerVidas(v); return c; }

43 43 Alien > maxVidas:entero > Nave: NaveEspacial vidas:entero antenas:entero manos:entero > Alien (n:NaveEspacial,a,m:entero) > recuperaVidas() recibeHerida() copy(a:Alien) > obtenerNave():NaveEspacial obtenerVidas():entero obtenerAntenas():entero obtenerManos():entero obtenerFuerza():entero clone():Alien class Alien { //Atributos de clase … //Atributos de instancia … //Constructores … //Comandos public void establecerVidas(int v){ vidas = v; }

44 44 class Alien { //Atributos de clase private static final int maxVidas=5; //Atributos de instancia private NaveEspacial Nave; private int vidas; private int antenas; private int manos; //Constructor public Alien ( NaveEspacial n, int a, int m){ Nave = n; vidas = maxVidas; antenas = a; manos = m; } class VideoJuego{ public static void main (String s[]){ Nave n1 = new Nave(100,45); Nave n2 = new Nave(100,65); Alien a1,a2,a3,a4; a1 = new Alien(n1,3,2); a4 = new Alien(n2,2,3); a2 = a1.clone(); a3 = a1; a4.copy(a1); System.out.println(a1==a2); System.out.println(a1==a3); System.out.println(a1==a4); a1.recibeHerida(); System.out.println(a1==a2); System.out.println(a1==a3); System.out.println(a1==a4);} } Dibuje el diagrama de objetos luego de la ejecución de cada instrucción del método main.

45 45 class Alien { //Atributos de clase private static final int maxVidas=5; //Atributos de instancia private NaveEspacial Nave; private int vidas; private int antenas; private int manos; //Consultas public boolean equals (Alien a){ return (Nave == a.obtenerNave()&& vidas == a.obtenerVidas() && manos == a.obtenerManos() && antenas == a.obtenerAntenas()); } } class VideoJuego{ public static void main (String s[]){ Nave n1 = new Nave(100,45); Nave n2 = new Nave(100,65); Alien a1,a2,a3,a4; a1 = new Alien(n1,3,2); a4 = new Alien(n2,2,3); a2 = a1.clone(); a3 = a1; System.out.println(a1.equals((a2)); System.out.println(a1.equals((a3)); System.out.println(a1.equals((a4)); a1.recibeHerida(); a4.copy(a1); System.out.println(a1.equals((a2)); System.out.println(a1.equals((a3)); System.out.println(a1.equals((a4)); } Dibuje el diagrama de objetos luego de la ejecución de cada instrucción del método main.

46 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: VIDEOJUEGO Introducción a la Programación Orientada a Objetos IPOO - 2015 46 class Alien { … public Alien clone(){ NaveEspacial n = Nave.clone(); int m = manos; int a = antenas; int v = vidas; Alien c = new Alien(n,a,m); c.establecerVidas(v); return v; } Clone en profundidad

47 47 class Alien { //Atributos de clase private static final int maxVidas=5; //Atributos de instancia private NaveEspacial Nave; private int vidas; private int antenas; private int manos; //Consultas public boolean equals (Alien a){ return (Nave == a.obtenerNave()&& vidas == a.obtenerVidas()&& manos == a.obtenerManos()&& antenas == a.obtenerAntenas()); } class VideoJuego{ public static void main (String s[]){ Nave n1 = new Nave(100,45); Alien a1,a2; a1 = new Alien(n1,3,2); a2 = a1.clone(); System.out.println( a1.equals((a2)); } Dibuje el diagrama de objetos luego de la ejecución de cada instrucción del método main, considerando que clone se implementó en profundidad.

48 48 class Alien { //Atributos de clase private static final int maxVidas=5; //Atributos de instancia private NaveEspacial Nave; private int vidas; private int antenas; private int manos; //Consultas public boolean equals (Alien a){ return (Nave.equals(a.obtenerNave()) && vidas == a.obtenerVidas()&& manos == a.obtenerManos()&& antenas == a.obtenerAntenas()); } class VideoJuego{ public static void main (String s[]){ Nave n1 = new Nave(100,45); Alien a1,a2; a1 = new Alien(n1,3,2); a2 = a1.clone(); System.out.println( a1.equals((a2)); } Dibuje el diagrama de objetos luego de la ejecución de cada instrucción del método main, considerando que clone se implementó en profundidad. Equals en profundidad

49 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: VIDEOJUEGO Introducción a la Programación Orientada a Objetos IPOO - 2015 49 public boolean equalsP (Alien a){ return Nave.equals(a.obtenerNave())&& vidas == a.obtenerVidas()&& manos == a.obtenerManos()&& antenas == a.obtenerAntenas()); } equals en profundidad public boolean equalsS (Alien a){ return Nave == a.obtenerNave()&& vidas == a.obtenerVidas()&& manos == a.obtenerManos()&& antenas ==a.obtenerAntenas()); } equals superficial

50 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: VIDEOJUEGO Introducción a la Programación Orientada a Objetos IPOO - 2015 50 public Alien cloneP(){ NaveEspacial n = Nave.clone(); int m = manos; int a = antenas; int v = vidas; Alien c = new Alien(n,a,m); c.establecerVidas(v); return c; } Clone en profundidad public Alien cloneS(){ NaveEspacial n = Nave; int m = manos; int a = antenas; int v = vidas; Alien c = new Alien(n,a,m); c.establecerVidas(v); return c; } Clone superficial


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 Dependencia."

Presentaciones similares


Anuncios Google