La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Encapsulamiento y Abstracción

Presentaciones similares


Presentación del tema: "Encapsulamiento y Abstracción"— Transcripción de la presentación:

1 Encapsulamiento y Abstracción
Los lenguajes de programación han evolucionado para brindar mecanismos que le permitan al programador abstraerse del funcionamiento de los dispositivos físicos que conforman una computadora. En esta evolución un concepto fundamental es el de 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. Introducción a la Programación Orientada a Objetos

2 Encapsulamiento y Abstracción
El encapsulamiento permite esconder los detalles de la implementación de un módulo, de modo que sus clientes sólo conozcan su funcionalidad. Si cambian la implementación de un módulo, en tanto no cambie su funcionalidad, los módulos que lo usan no se verán afectados. Se reducen así las dependencias entre diferentes unidades de software, de modo que estos son más fáciles de leer, verificar y modificar. Introducción a la Programación Orientada a Objetos

3 Encapsulamiento y Abstracción
Un lenguaje que soporta encapsulamiento debe brindar algún mecanismo para que el programador pueda definir módulos de software independientes. En Java una clase define un módulo y los modificadores de acceso permiten establecer el nivel de encapsulamiento. Los miembros de una clase que se declaran privados quedan escondidos y no son visibles desde el exterior. Cuando un lenguaje permite definir clases y soporta encapsulamiento el programador puede definir tipos de datos abstractos. Introducción a la Programación Orientada a Objetos

4 Tipo de Dato Abstracto Un tipo de dato es un conjunto de valores y un conjunto de operaciones definidas para estos valores. Cuando la representación de los datos y la implementación de las operaciones están encapsuladas, el tipo de dato es abstracto. Un tipo de dato abstracto (TDA) define patrón a partir del cual es posible crear instancias sin conocer la representación interna de los valores ni la implementación de las operaciones. Introducción a la Programación Orientada a Objetos

5 Tipo de Dato Abstracto Float (tipo elemental) y String (tipo clase) son tipos de datos abstractos, el programador los usa sin conocer la representación interna de los valores del tipo ni la implementación (el código) de las operaciones. Las variables declaradas de clase String mantienen una referencia a una cadena de caracteres. Introducción a la Programación Orientada a Objetos

6 Caso de Estudio: TDA Racional
Diseñe e implemente un tipo de dato abstracto que permita representar números racionales. Racional num : entero den : entero Una alternativa es representar a cada número racional como un par, en donde el primer elemento es el numerador y el segundo el denominador. ¿Todo número racional puede representarse de esta manera? ¿Todo par de enteros representan a un número racional? Introducción a la Programación Orientada a Objetos

7 Caso de Estudio: TDA Racional
num : entero den : entero Requiere d > 0 <<constructor>> Racional (n,d : entero) <<comandos>> establecerNum (n : entero) establecerDen (d : entero) copy(r : Racional) El comentario asociado al constructor establece la responsabilidad de la clase cliente de controlar el valor de un atributo antes de crear un racional o modificar su denominador Introducción a la Programación Orientada a Objetos

8 Caso de Estudio: TDA Racional
num : entero den : entero <<consultas>> obtenerNum() : entero obtenerDen() : entero equals (r: Racional) :boolean toString() :String clone () : Racional Métodos generales Introducción a la Programación Orientada a Objetos

9 Caso de Estudio: TDA Racional
num : entero den : entero <<consultas>> ... suma (rac : Racional) :Racional resta (rac : Racional) :Racional producto (rac : Racional) :Racional cociente (rac : Racional) :Racional Métodos específicos Introducción a la Programación Orientada a Objetos

10 Caso de Estudio: TDA Racional
class Racional { private int num; private int den; Introducción a la Programación Orientada a Objetos

11 Caso de Estudio: TDA Racional
class Racional { // CONSTRUCTOR public Racional(int n, int d ) { //Requiere d > 0 num = n; den = d; } Introducción a la Programación Orientada a Objetos

12 Caso de Estudio: TDA Racional
// COMANDOS public void establecerNum(int n ) { num = n; } public void establecerDen(int d ) { //Requiere d > 0 den = d; Introducción a la Programación Orientada a Objetos

13 Caso de Estudio: TDA Racional
// COMANDOS public void copy(Racional r ) { num = r.obtenerNum(); den = r.obtenerDen(); } Introducción a la Programación Orientada a Objetos

14 Caso de Estudio: TDA Racional
// CONSULTAS public int obtenerNum() { return num; } public int obtenerDen() { return den; Introducción a la Programación Orientada a Objetos

15 Caso de Estudio: TDA Racional
// CONSULTAS public boolean equals(Racional r){ int rnum = r.obtenerNum(); int rden = r.obtenerDen(); int rmcd = MCD (rnum,rden); int mcd = MCD (num,den) return num/mcd == rnum/rmcd && den/mcd == rden/rmcd; } Introducción a la Programación Orientada a Objetos

16 Caso de Estudio: TDA Racional
// CONSULTAS public String toString() { return ( num + "/" + den ); } public Racional clone (){ Racional r = new Racional(num,den); return r; return new Racional(num,den); Introducción a la Programación Orientada a Objetos

17 Caso de Estudio: TDA Racional
public Racional suma( Racional op ) { int n = num*op.obtenerDen() +den*op.obtenerNum(); int d = den * op.obtenerDen(); return( new Racional(n, d ) ); } public Racional resta( Racional op ) { - den*op.obtenerNum(); Racional s = new Racional(n,d); return s; Introducción a la Programación Orientada a Objetos

18 Caso de Estudio: TDA Racional
public Racional resta( Racional op ) { int n = num*op.obtenerDen() - den*op.obtenerNum(); int d = den * op.obtenerDen(); return( new Racional(n, d ) ); } Introducción a la Programación Orientada a Objetos

19 Caso de Estudio: TDA Racional
public Racional producto( Racional op ) { return new Racional(num*op.obtenerNum(), den*op.obtenerDen()); } Introducción a la Programación Orientada a Objetos

20 Caso de Estudio: TDA Racional
Un tipo de dato es un modelo matemático que especifica un conjunto de valores y un conjunto de operaciones sobre esos valores. El encapsulamiento es un mecanismo que permite dividir los programas en módulos que pueden ser usados conociendo sólo su interfaz. Un tipo de dato es abstracto si la representación de su estado interno y la implementación de sus operaciones queda encapsulada. La clase Racional define un tipo de dato abstracto a partir del cual es posible crear instancias. Introducción a la Programación Orientada a Objetos

21 Caso de Estudio: TDA Racional
Antes de usar el TDA Racional en una aplicación específica debemos verificar que cumple con lo especificado. Podemos probar las operaciones en forma interactiva o definir una clase tester que use a la clase Racional para verificar sus servicios. El mismo problema podría diseñarse de manera diferente, sin modificar la interface ni la funcionalidad de los servicios. En este caso el mismo tester permite verificar las dos implementaciones. Introducción a la Programación Orientada a Objetos

22 Caso de Estudio: TDA Racional
num : entero den : entero num y den no tienen factores primos comunes Requiere d > 0 <<constructor>> Racional (n,d : entero) <<comandos>> establecerNum (n : entero) establecerDen (d : entero) copy(r : Racional) El comentario asociado al constructor establece un compromiso respecto a la representación de un racional que afecta a los comandos Introducción a la Programación Orientada a Objetos

23 Caso de Estudio: TDA Racional
num : entero den : entero <<consultas>> obtenerNum() : entero obtenerDen() : entero equals (r: Racional) :boolean toString() :String clone () : Racional Métodos generales Introducción a la Programación Orientada a Objetos

24 Caso de Estudio: TDA Racional
num : entero den : entero <<consultas>> ... suma (rac : Racional) :Racional resta (rac : Racional) :Racional producto (rac : Racional) :Racional cociente (rac : Racional) :Racional Métodos específicos Introducción a la Programación Orientada a Objetos

25 Caso de Estudio: TDA Racional
class Racional { private int num; private int den; /*num y den no tienen factores primos comunes*/ // CONSTRUCTOR public Racional(int n, int d ) { //Requiere d > 0 int MCD = mcd (n,d); num = n/MCD; den = d/MCD; } Introducción a la Programación Orientada a Objetos

26 Caso de Estudio: TDA Racional
// COMANDOS public void establecerNum(int n ) { int MCD = mcd (n,den); num = n/MCD; den = den/MCD; } public void establecerDen(int d ) { int MCD = mcd (num,d); num = num/MCD; den = d/MCD; Introducción a la Programación Orientada a Objetos

27 Caso de Estudio: TDA Racional
// COMANDOS public void copy(Racional r ) { num = r.obtenerNum(); den = r.obtenerDen(); } Introducción a la Programación Orientada a Objetos

28 Caso de Estudio: TDA Racional
// CONSULTAS public int obtenerNum() { return num; } public int obtenerDen() { return den; Introducción a la Programación Orientada a Objetos

29 Caso de Estudio: TDA Racional
// CONSULTAS public boolean equals(Racional r){ return num == r.obtenerNum()&& den == r.obtenerDen(); } public String toString() { return ( num + "/" + den ); public Racional clone (){ Racional r = new Racional(num,den); return r; Introducción a la Programación Orientada a Objetos

30 Contenido de la clase Abstracciones y Modelos
Variables, Objetos y Referencias. Identidad, Igualdad y Equivalencia Encapsulamiento y Abstracción Tipos de Datos Abstractos Introducción a la Programación Orientada a Objetos


Descargar ppt "Encapsulamiento y Abstracción"

Presentaciones similares


Anuncios Google