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

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 Encapsulamiento."— 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 Encapsulamiento Caso de estudio: Punto 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 2016

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 - 2016 2 TEMARIO Encapsulamiento. Encapsulamiento y abstracción. Caso de estudio: Punto. Caso de estudio: Rectángulo y Punto.

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 ENCAPSULAMIENTO El encapsulamiento es un mecanismo que permite la definición de módulos de software que pueden ser utilizados como “cajas negras”, esto es, sabiendo qué hacen sin saber cómo lo hacen. Cada módulo de software tienen una interfaz que le permite comunicarse con los demás módulos del sistema. Un sistema complejo se construye a partir de módulos que se comunican a través de su interfaz. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 ENCAPSULAMIENTO En la POO cada clase es un módulo de software cuya implementación debe quedar escondida, de modo que pueda ser modificada sin afectar al resto de las clases. La interfaz está constituida por la signatura de los servicios. La construcción de un sistema orientado a objetos va a estar conformado por una colección de clases relacionadas entre sí. Algunas de las clases son proveedoras de servicios usados por otras clases clientes. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 ENCAPSULAMIENTO Entre cada clase proveedora y sus clientes se establece un contrato que define la funcionalidad y las responsabilidades. El código de cada clase proveedora se escribe a partir del contrato especificado por los requerimientos y el diseño, sin conocer las clases que la usan. El programador de la clase cliente usa a la clase proveedora, conoce su interfaz y el contrato, pero no la implementación. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 ENCAPSULAMIENTO EN JAVA En Java el programador de una clase establece el nivel de encapsulamiento usando los modificadores de acceso. Los constructores, comandos y consultas especificados por el diseñador en el diagrama, se declaran como públicos y son visibles para las clases clientes. Los atributos se declaran como privados y quedan encapsulados en la clase, de modo que puedan ser modificados sin provocar un impacto en el resto de las clases que conforman el sistema. Introducción a la Programación Orientada a Objetos IPOO - 2016 6

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 Introducción a la Programación Orientada a Objetos IPOO - 2016 7 TEMARIO Encapsulamiento. Encapsulamiento y abstracción. Caso de estudio: Punto. Caso de estudio: Rectángulo y Punto.

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 ENCAPSULAMIENTO Y ABSTRACCIÓN Un lenguaje de programación que permite definir nuevos tipos de datos y brinda un mecanismo de encapsulamiento, permite definir tipos de datos abstractos. Un tipo de dato define un conjunto de operaciones que se aplican sobre un conjunto de valores. Un tipo de dato abstracto (TDA) es un tipo de dato en el cual la representación del conjunto de valores y la implementación del conjunto de operaciones está encapsulada. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 ENCAPSULAMIENTO Y ABSTRACCIÓN EN JAVA En Java el tipo elemental float es un TDA. Cuando el programador declara una variable de tipo float, conoce los valores que la variable puede tomar, pero no cómo se representan internamente. Conoce también las operaciones provistas por el tipo, pero no el código específico de cada operación. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 ENCAPSULAMIENTO Y ABSTRACCIÓN EN JAVA La clase String provista por Java también define un TDA. Cada clase que crea un objeto de clase String no puede acceder directamente al estado interno, porque está encapsulado. La clase brinda un conjunto de servicios que conforman las operaciones del tipo. Introducción a la Programación Orientada a Objetos IPOO - 2016 10

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 ENCAPSULAMIENTO Y ABSTRACCIÓN EN JAVA Java permite crear nuevos tipos de datos abstractos definiendo clases con atributos privados. Por ejemplo, es posible definir un tipo de dato abstracto Punto. El conjunto de valores es el conjunto de pares de números reales. El conjunto de operaciones incluye, entre otras: –crear un punto, –decidir si dos puntos son iguales, –calcular la distancia entre dos puntos. El siguiente diagrama de clase modela el TDA Punto. Introducción a la Programación Orientada a Objetos IPOO - 2016 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 Introducción a la Programación Orientada a Objetos IPOO - 2016 12 TEMARIO Encapsulamiento. Encapsulamiento y abstracción. Caso de estudio: Punto. Caso de estudio: Rectángulo y Punto.

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: PUNTO 13 Punto > x, y: real > Punto(x,y:real) > establecerX(x:real) establecerY(y:real) copy(p:Punto) > obtenerX():real obtenerY():real equals(p:Punto):boolean distancia(p:Punto):real clone():Punto toString():String Requiere p ligado La distancia entre dos puntos se calcula aplicando Pitágoras

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 ENCAPSULAMIENTO Y ABSTRACCIÓN EN JAVA La clase Punto define un TDA a partir del cual es posible crear instancias. Cada uno de los servicios provistos por la clase corresponde a una operación definida para el tipo. Punto es una clase proveedora, que puede definirse sin saber quiénes son sus clientes. Las clases clientes de la clase Punto no conocen la representación interna de los datos ni la implementación de los servicios. Para usar la clase Punto solo es necesario conocer su interfaz, esto es, la signatura de los servicios, su funcionalidad y sus responsabilidades. Introducción a la Programación Orientada a Objetos IPOO - 2016 14

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: PUNTO 15 Punto > x, y: real > Punto(x,y:real) … class Punto{ //Atributos de Instancia private float x,y; //Constructores public Punto (float x,float y){ this.x = x; this.y = y; } Introducción a la Programación Orientada a Objetos IPOO - 2016

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: PUNTO 16 Punto > x, y: real > establecerX(x:real) establecerY(y:real) copy (p:Punto) public void establecerX (float x){ this.x = x; } public void establecerY (float y){ this.y = y; } public void copy (Punto p){ //requiere p ligado x = p.obtenerX(); y = p.obtenerY(); } Requiere p ligado

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: PUNTO 17 Punto > x, y: real > obtenerX():real obtenerY():real … //Consultas public float obtenerX(){ return x; } public float obtenerY(){ return y; } Introducción a la Programación Orientada a Objetos IPOO - 2016

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: PUNTO 18 Punto > x, y: real > … distancia(p:Punto):real … 18 y x p 2 (x 2,y 2 ) p 1 (x 1,y 1 ) x2x2 x1x1 dx = x 2 -x 1 y1y1 y2y2 dy = y 2 - y 1

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: PUNTO 19 y x p 2 (x 2,y 2 ) p 1 (x 1,y 1 ) x2x2 x1x1 dx = x 2 -x 1 y1y1 y2y2 dy = y 2 - y 1 public double distancia(Punto p) { float dx = x - p.obtenerX(); float dy = y - p.obtenerY(); return Math.sqrt(dx*dx+dy*dy); }

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: PUNTO 20 Punto > x, y: real > … equals(p:Punto):boolean clone():Punto toString():String public boolean equals (Punto p){ return x == p.obtenerX() && y == p.obtenerY(); } public Punto clone(){ return new Punto(x,y); } public String toString(){ return "("+x+","+y+")"; } Requiere p ligado

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: PUNTO class Geometria{ … public void Figuras(){ Punto p1,p2,p3; p1 = new Punto(1,2); p2 = new Punto(1,2); p3 = p1; if (p3.equals(p1)) System.out.println(“p3 igual a p1”); if (p3.equals(p2)) System.out.println(“p3 igual a p2”); p3.establecerX(0); if (p3.equals(p1)) System.out.println(“p3 igual a p1”); if (p3.equals(p2)) System.out.println(“p3 igual a p2”); } 21

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: PUNTO class Geometria{ … public void Figuras(){ Punto p1,p2,p3; p1 = new Punto(1,2); p2 = new Punto(1,2); p3 = p1.clone(); if (p3.equals(p1)) System.out.println(“p3 igual a p1”); if (p3.equals(p2)) System.out.println(“p3 igual a p2”); p3.establecerX(0); if (p3.equals(p1)) System.out.println(“p3 igual a p1”); if (p3.equals(p2)) System.out.println(“p3 igual a p2”); } 22

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 Introducción a la Programación Orientada a Objetos IPOO - 2016 23 TEMARIO Encapsulamiento. Encapsulamiento y abstracción. Caso de estudio: Punto. Caso de estudio: Rectángulo y Punto.

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: RECTÁNGULO Y PUNTO 24 Rectangulo > verticeI, verticeD: Punto > Rectangulo(vI, vD: Punto) > copy(c: Rectangulo) > obtenerVI(): Punto obtenerVD(): Punto equals(c: Rectangulo): boolean clone(): Rectangulo Requiere c ligado Requiere que vi representa el vértice superior izquierdo y el vd el vértice inferior derecho La clase Rectangulo define un TDA y está asociada a la clase Punto, tiene dos atributos de clase Punto.

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: RECTÁNGULO Y PUNTO class Rectangulo{ //Atributos de Instancia private Punto verticeI; private Punto verticeD; //Constructores public Rectangulo(Punto vI, Punto vD){ /*Requiere que vi representa el vértice superior izquierdo y el vd el vértice inferior derecho*/ this.verticeI = vI; this.verticeD = vD; } //Comandos public void copy (Rectangulo c){ //Requiere c ligado verticeI = c.obtenerVI(); verticeD = c.obtenerVD(); } //Consultas public Punto obtenerVI(){return verticeI;} public Punto obtenerVD(){return verticeD;}

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: RECTÁNGULO Y PUNTO class Rectangulo{ //Atributos de Instancia private Punto verticeI; private Punto verticeD; … //Consultas … public boolean equals(Rectangulo c){ //Requiere c ligado return verticeI == c.obtenerVI() && verticeD == c.obtenerVD(); } public Rectangulo clone() { return new Rectangulo (verticeI,verticeD); } 26 Introducción a la Programación Orientada a Objetos IPOO - 2016

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: RECTÁNGULO Y PUNTO class Geometria{ … public void Figuras(){ Punto p1,p2,p3,p4; Rectangulo r1,r2,r3; boolean b1,b2; p1=new Punto(1,6); p2=new Punto(5,1); p3=new Punto (1,6); p4=new Punto (5,1); r1 = new Rectangulo(p1,p2); r2 = new Rectangulo(p1,p2); r3 = new Rectangulo(p3,p4); b1 = r1.equals(r2); b2 = r1.equals(r3); } 27

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: RECTÁNGULO Y PUNTO class Geometria{ … public void Figuras(){ Punto p1,p2,p3,p4; Rectangulo r1,r2,r3; boolean b1,b2; p1=new Punto(1,6); p2=new Punto(5,1); p3=new Punto (1,6); p4=new Punto (5,1); r1 = new Rectangulo(p1,p2); r2 = new Rectangulo(p1,p2); r3 = new Rectangulo(p3,p4); b1 = r1.equals(r2); b2 = r1.equals(r3); } 28 p1 p2 r1 :Punto x = 1 y = 6 :Rectangulo verticeI = verticeD = :Punto x = 5 y = 1 p4 :Punto x = 5 y = 1 p3 :Punto x = 1 y = 6 r2 :Rectangulo verticeI = verticeD = r3 :Rectangulo verticeI = verticeD =

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: RECTÁNGULO Y PUNTO class Geometria{ … public void Figuras(){ Punto p1,p2,p3,p4; Rectangulo r1,r2,r3; boolean b1,b2; p1=new Punto(1,6); p2=new Punto(5,1); p3=new Punto (1,6); p4=new Punto (5,1); r1 = new Rectangulo(p1,p2); r2 = new Rectangulo(p1,p2); r3 = new Rectangulo(p3,p4); b1 = r1.equals(r2); b2 = r1.equals(r3); } 29 p1 p2 r1 :Punto x = 1 y = 6 :Rectangulo verticeI = verticeD = :Punto x = 5 y = 1 r2 :Rectangulo verticeI = verticeD = Estamos imponiendo una exigencia muy fuerte para decidir si dos rectángulos son equivalentes, requerimos que referencien a los mismos puntos.

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: RECTÁNGULO Y PUNTO class Geometria{ … public void Figuras(){ Punto p1,p2,p3,p4; Rectangulo r1,r2,r3; boolean b1,b2; p1=new Punto(1,6); p2=new Punto(5,1); p3=new Punto (1,6); p4=new Punto (5,1); r1 = new Rectangulo(p1,p2); r2 = new Rectangulo(p1,p2); r3 = new Rectangulo(p3,p4); b1 = r1.equals(r2); b2 = r1.equals(r3); } 30 p1 p2 r1 :Punto x = 1 y = 6 :Rectangulo verticeI = verticeD = :Punto x = 5 y = 1 p4 :Punto x = 5 y = 1 p3 :Punto x = 1 y = 6 r3 :Rectangulo verticeI = verticeD = Para la implementación de equals propuesta r1 y r3 no son equivalentes.

31 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: RECTÁNGULO Y PUNTO class Geometria{ … public void Figuras(){ Punto p1,p2,p3,p4; Rectangulo r1,r2,r3; boolean b1,b2; p1=new Punto(1,6); p2=new Punto(5,1); p3=new Punto (1,6); p4=new Punto (5,1); r1 = new Rectangulo(p1,p2); r2 = new Rectangulo(p1,p2); r3 = new Rectangulo(p3,p4); b1 = r1.equals(r2); b2 = r1.equals(r3); } 31 p1 p2 r1 :Punto x = 1 y = 6 :Rectangulo verticeI = verticeD = :Punto x = 5 y = 1 r4 :Rectangulo verticeI = verticeD = Rectangulo r4 = r1.clone();

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: RECTÁNGULO Y PUNTO La igualdad superficial compara referencias, exige que los vértices de los rectángulos tengan la misma identidad. La clonación superficial genera un nuevo rectángulo con referencias a los mismos vértices que el rectángulo que recibe el mensaje. La copia superficial copia el estado interno del rectángulo que pasa como parámetro, en el rectángulo que recibe el mensaje, esto es, las referencias a los vértices. Introducción a la Programación Orientada a Objetos IPOO - 2016 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: RECTÁNGULO Y PUNTO 33 Rectangulo > verticeI, verticeD: Punto > Rectangulo(vI, vD: Punto) > copy(c: Rectangulo) > obtenerVI(): Punto obtenerVD(): Punto equals(c: Rectangulo): boolean clone(): Rectangulo Requiere que vi representa el vértice superior izquierdo y el vd el vértice inferior derecho En este caso se considera el estado interno de los vértices, no su identidad. Copia en profundidad Clonación en profundidad Igualdad en profundidad

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: RECTÁNGULO Y PUNTO class Rectangulo{ //Atributos de Instancia private Punto verticeI; private Punto verticeD; … //Consultas //Comandos public void copy (Rectangulo c){ //En profundidad. Requiere c ligado verticeI.copy(c.obtenerVI()); verticeD.copy(c.obtenerVD()); } public Rectangulo clone() { //En profundidad return new Rectangulo (verticeI.clone(), verticeD.clone()); } } 34

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: RECTÁNGULO Y PUNTO class Rectangulo{ //Atributos de Instancia private Punto verticeI; private Punto verticeD; … //Consultas … public boolean equals(Rectangulo c){ //En profundidad. Requiere c ligado return verticeI.equals(c.obtenerVI()) && verticeD.equals(c.obtenerVD()); } … } 35 Se comparan los estados internos de los vértices. Dos rectángulos son equivalentes si sus vértices son equivalentes.

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: RECTÁNGULO Y PUNTO Punto p1,p2,p3; Rectangulo c1,c2,c3; boolean b1,b2; p1=new Punto(1,6); p2=new Punto(5,1); p3=new Punto (4,2); c1 = new Rectangulo(p1,p2); c2 = new Rectangulo(p1,p3); c3 = c1.clone(); b1 = c1.equals(c3); c1.copy(c2); b2 = c1.equals(c2); 36 Dibuje el diagrama de objetos e indique los valores de b1 y b2 considerando: equals, copy y clone superficial. equals, copy y clone en profundidad. equals superficial, copy y clone en profundidad. Introducción a la Programación Orientada a Objetos IPOO - 2016

37 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: RECTÁNGULO Y PUNTO Es el diseñador de la aplicación quien especifica si los métodos equals, copy y clone se implementan en forma superficial o en profundidad, dependiendo de las características del problema. En algunos casos puede ser necesario brindar ambas alternativas. En cualquier caso el código de los servicios provistos por la clase, como así también la representación de los datos, queda encapsulado dentro de la clase. Las clases que usan los TDA Punto y Rectangulo conocen sus interfaz, esto es, la signatura, funcionalidad y responsabilidades de las operaciones. Introducción a la Programación Orientada a Objetos IPOO - 2016 37


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

Presentaciones similares


Anuncios Google