La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

Presentaciones similares


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

1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Encapsulamiento Caso de estudio: Punto Dr. Luciano H. Tamargo Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2017

2 1er Parcial es el 22 de abril !!! Entra hasta el práctico 6.
Introducción a la Programación Orientada a Objetos IPOO

3 TEMARIO Encapsulamiento. Encapsulamiento y abstracción.
Caso de estudio: Punto. Caso de estudio: Rectángulo y Punto. Introducción a la Programación Orientada a Objetos IPOO

4 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

5 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

6 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

7 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

8 TEMARIO Encapsulamiento. Encapsulamiento y abstracción.
Caso de estudio: Punto. Caso de estudio: Rectángulo y Punto. Introducción a la Programación Orientada a Objetos IPOO

9 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

10 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

11 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

12 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

13 TEMARIO Encapsulamiento. Encapsulamiento y abstracción.
Caso de estudio: Punto. Caso de estudio: Rectángulo y Punto. Introducción a la Programación Orientada a Objetos IPOO

14 La distancia entre dos puntos se calcula aplicando Pitágoras
CASO DE ESTUDIO: PUNTO Punto <<Atributos de instancia>> x, y: real <<Constructores>> Punto(x,y:real) <<Comandos>> establecerX(x:real) establecerY(y:real) copy(p:Punto) <<Consultas>> 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

15 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

16 CASO DE ESTUDIO: PUNTO Punto <<Atributos de instancia>>
x, y: real <<Constructores>> 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

17 CASO DE ESTUDIO: PUNTO Requiere p ligado Punto
<<Atributos de instancia>> x, y: real <<Comandos>> establecerX(x:real) establecerY(y:real) copy (p:Punto) Requiere p ligado 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();

18 CASO DE ESTUDIO: PUNTO Punto <<Atributos de instancia>>
x, y: real <<Consultas>> 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

19 CASO DE ESTUDIO: PUNTO p2 (x2,y2) y2 dy = y2 - y1 p1 (x1,y1) y1
distancia(p:Punto):real Requiere p ligadoLa distancia entre dos puntos se calcula aplicando Pitágoras Punto <<Atributos de instancia>> x, y: real <<Consultas>> distancia(p:Punto):real y p2 (x2,y2) y2 dy = y2 - y1 p1 (x1,y1) y1 dx = x2-x1 x x1 x2 19

20 CASO DE ESTUDIO: PUNTO p2 (x2,y2) y2 dy = y2 - y1 p1 (x1,y1) y1
public double distancia(Punto p) { float dx = x - p.obtenerX(); float dy = y - p.obtenerY(); return Math.sqrt(dx*dx+dy*dy); } y p2 (x2,y2) y2 dy = y2 - y1 p1 (x1,y1) y1 dx = x2-x1 x x1 x2 20

21 CASO DE ESTUDIO: PUNTO Punto <<Atributos de instancia>>
x, y: real <<Consultas>> equals(p:Punto):boolean clone():Punto toString():String equals(p:Punto):boolean Requiere p ligado 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+")";

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

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

24 TEMARIO Encapsulamiento. Encapsulamiento y abstracción.
Caso de estudio: Punto. Caso de estudio: Rectángulo y Punto. Introducción a la Programación Orientada a Objetos IPOO

25 CASO DE ESTUDIO: RECTÁNGULO Y PUNTO
Rectangulo <<Atributos de instancia>> verticeI, verticeD: Punto <<Constructores>> Rectangulo(vI, vD: Punto) <<Comandos>> copy(c: Rectangulo) <<Consultas>> obtenerVI(): Punto obtenerVD(): Punto equals(c: Rectangulo): boolean clone(): Rectangulo Rectangulo(vI,vD:Punto) Requiere que vi represente el vértice superior izquierdo y el vd el vértice inferior derecho copy (c: Rectangulo) Requiere c ligado. Copia Superficial equals(c:Rectangulo):boolean Requiere c ligado. Igualdad superficial clone():Rectangulo Clon superficial La clase Rectangulo define un TDA y está asociada a la clase Punto, tiene dos atributos de clase Punto.

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

27 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); Introducción a la Programación Orientada a Objetos IPOO

28 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 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); } :Punto x = 1 y = 6 p1 :Rectangulo verticeI = verticeD = r1 :Punto x = 5 y = 1 p2 :Rectangulo verticeI = verticeD = r2 :Punto x = 1 y = 6 p3 :Rectangulo verticeI = verticeD = r3 :Punto x = 5 y = 1 p4

30 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); } :Punto x = 1 y = 6 p1 :Rectangulo verticeI = verticeD = r1 :Punto x = 5 y = 1 p2 :Rectangulo verticeI = verticeD = r2 Estamos imponiendo una exigencia muy fuerte para decidir si dos rectángulos son equivalentes, requerimos que referencien a los mismos puntos.

31 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); } :Punto x = 1 y = 6 p1 :Rectangulo verticeI = verticeD = r1 :Punto x = 5 y = 1 p2 Para la implementación de equals propuesta r1 y r3 no son equivalentes. :Punto x = 1 y = 6 p3 :Rectangulo verticeI = verticeD = r3 :Punto x = 5 y = 1 p4

32 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); } :Punto x = 1 y = 6 p1 :Rectangulo verticeI = verticeD = r1 :Punto x = 5 y = 1 p2 :Rectangulo verticeI = verticeD = r4 Rectangulo r4 = r1.clone();

33 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

34 CASO DE ESTUDIO: RECTÁNGULO Y PUNTO
Rectangulo <<Atributos de instancia>> verticeI, verticeD: Punto <<Constructores>> Rectangulo(vI, vD: Punto) <<Comandos>> copy(c: Rectangulo) <<Consultas>> obtenerVI(): Punto obtenerVD(): Punto equals(c: Rectangulo): boolean clone(): Rectangulo Rectangulo(vI,vD:Punto) Requiere que vi represente el vértice superior izquierdo y el vd el vértice inferior derecho copy (c: Rectangulo) Requiere c ligado. Copia profundidad equals(c:Rectangulo):boolean Requiere c ligado. Igualdad profundidad clone():Rectangulo Clon en profundidad En este caso se considera el estado interno de los vértices, no su identidad.

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

36 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()); } Se comparan los estados internos de los vértices. Dos rectángulos son equivalentes si sus vértices son equivalentes.

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

38 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


Descargar ppt "INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS"

Presentaciones similares


Anuncios Google