Descargar la presentación
La descarga está en progreso. Por favor, espere
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
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.