La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Romeo Alvarez Arana Jorge A. Davila Montoya Fernando Hernández Guzmán

Presentaciones similares


Presentación del tema: "Romeo Alvarez Arana Jorge A. Davila Montoya Fernando Hernández Guzmán"— Transcripción de la presentación:

1 Romeo Alvarez Arana Jorge A. Davila Montoya Fernando Hernández Guzmán
Encapsulamiento Romeo Alvarez Arana Jorge A. Davila Montoya Fernando Hernández Guzmán

2 Tipos abstractos de datos.
Introducción: La abstracción es un proceso mental que tiene dos aspectos complementarios: El aspecto de destacar los detalles relevantes del objeto en estudio. El aspecto de ignorar los detalles irrelevantes del objeto.

3 Los llamados lenguajes de alto nivel Las lenguajes ensambladores
La historia de la programación está repleta de ejemplos del uso de la abstracción como mecanismo para disminuir la complejidad: Los llamados lenguajes de alto nivel Las lenguajes ensambladores La de procedimiento con parámetros, Las construcciones creadas para sincronizar procesos.

4 Podemos decir que la historia de la programación es, en realidad, un camino hacia un grado creciente de abstracción

5 La abstracción funcional
Los primeros lenguajes de alto nivel (Fortran, Cobol), ya tenían este mecanismo. Sin embargo no es posible especificar sus tipos de datos,

6 El siguiente paso fue la creación de tipos definidos por el programador,

7 Imaginemos que el programador desea definir un tipo fecha para manipular valores cuyo significado sean fechas del calendario. Una forma de hacerlo en Pascal es la siguiente: type fecha = record   día: 1..31;   mes: 1..12;   año: end

8 El programador puede definir variables del nuevo tipo mediante declaraciones de la forma:
var fl,f2: fecha; e incluso definir procedimientos que operen sobre, o consulten propiedades de los valores del tipo: function fiesta (f: fecha): boolean; Sin embargo, no puede impedir que se generen valores que no tienen semántica, teniendo en cuenta la intención del programador: f1.dia := 30; f1.mes := 2;. .. o que se realicen operaciones sin sentido sobre los valores del tipo: f1.dia := 5 * f2.mes

9 La situación equivalente respecto a los tipos predefinidos sería permitir que los programadores directamente los bits de un carácter o de un número real (de hecho, los primeros lenguajes de alto nivel proporcionaban esta "facilidad").

10 Con el advenimiento de Algol, y luego de Pascal, poco a poco se introdujo la verificación de tipos en los argumentos de cada rutina, como una herramienta para reducir el tiempo de desarrollo de un programa. Sin embargo, todavía no se reconocían las grandes ventajas de especificar procedimientos. El usuario del procedimiento sólo necesita conocer la especificación de la abstracción (el qué) y puede ignorar el resto de los detalles (el cómo).

11 Por eso decimos que que la abstracción produce un ocultamiento de información.

12 El concepto de tipo abstracto de datos, propuesto hacia 1974 por John Guttag y otros investigadores, es la siguiente: · Definición Tipo abstracto de datos Es una colección de valores y de operaciones que se definen mediante una especificación que es independiente de cualquier representación.

13 Características: ABSTRACCIÓN. ENCAPSULAMIENTO

14 ENCAPSULAMIENTO La encapsulación sirve para separar la interfaz de una abstracción y su implementación. Es un concepto complementario al de abstracción. La encapsulación da lugar a que las clases se dividan en dos partes: Especificacion Implementación

15 Para que sirve? Ocultamos los detalles, de forma que no se conoce como se implementa. Esta propiedad de los objetos se vive en el mundo real en muchas situaciones con las cajas negras. Tal es el caso de la labor de conducir un automóvil: no es necesario que el conductor sepa de mecánica automotriz, sólo tiene que saber cómo interactuar con el vehículo.

16 Protege los datos del uso arbitrario y no pretendido.
Ventajas: Evita la corrupción de los datos de un objeto. Se permite modificar los elementos internos del objeto sin afectar a los usuarios del objeto. Protege los datos del uso arbitrario y no pretendido.

17 Para implementar un TDA un lenguaje debe proveer:
Una forma de definir los tipos de datos Una forma de definir operaciones abstractas para estos objetos Encapsular los datos, es decir que solo puedan ser manipulados por operaciones abstractas.

18 Posibilidad de verificar formalmente los programas usuarios del tipo.
Otros motivos que hacen conveniente la especificación formal de un tipo abstracto son los siguientes: Unanimidad de interpretación por parte de los distintos usuarios del tipo. Posibilidad de verificar formalmente los programas usuarios del tipo. Deducción, a partir de la especificación, de propiedades satisfechas por cualquier implementación válida de tipo

19 Encapsulación por Subprogramas

20 Características de los Subprogramas
Permite crear abstracción de proceso: – encapsulando código – definiendo una interfaz de invocación para paso de parámetros y resultados Permite reutilizar código, ahorrando memoria y tiempo de codificación.

21 Elementos en la definición de interfaces
Nombre: permite referenciar al subprograma como unidad e invocarlo. Parámetros (Opcional): Define la comunicación de datos (nombre, orden y tipo de parámetros formales) Valor de retorno: Opcional para funciones (tipificado).

22 Firmas y protocolos de la Interfaz
La firma (signature) es un contrato entre el invocador y el subprograma que define la semántica de la interfaz. El protocolo especifica cómo debe realizarse la comunicación de parámetros y resultados (tipo y orden de los parámetros y, opcionalmente, valor de retorno).

23 Encapsulación por Subprogramas
Diseño del Programa. Diseño del lenguaje.

24 Diseño del Programa

25 Subprogramas como operaciones abstractas
Especificación. Implementación.

26 Especificación de un Subprograma
Nombre del subprograma. Prototipo del subprograma. Acción realizada por el subprograma.

27 Subprogramas como funciones
Especificación de una Función en C: float FN(float X, int Y) Representación: FN : real x integer  real

28 Subprogramas como funciones
Especificación de una Función en Pascal: function FN(X: real;Y: integer): real Representación: FN : real x integer  real

29 Subprogramas como funciones
Especificación de una función en Ada: function Arcsin(X : Real) return Real Representación: Arcsin : real  real

30 Subprogramas como subrutinas
Especificación de una subrutina en C: void Sub(float X, int Y, float *Z, int *W)

31 Subprogramas como subrutinas
Especificación de una subrutina en Ada: procedure Sub(X: in REAL; Y: in integer; Z: in out REAL; W: out BOOLEAN) Representación: Sub: real1 x integer x real2  real3 x Boolean

32 Implementación de Subprogramas
Un subprograma representa una operación del nivel de computadora virtual construido por el programador. Es implementado haciendo uso de las operaciones y estructuras de datos que posee el lenguaje.

33 Implementación de Subprogramas
Las declaraciones e instrucciones se encuentran encapsuladas. El usuario podrá invocar el subprograma solo con un determinado número de argumentos.

34 Implementación de Subprogramas
Forma típica de la implementación: Especificación del subprograma. Declaración de tipos de datos locales. Secuencia de instrucciones que definen las acciones que realiza el subprograma.

35 Cuerpo de Subprogramas
Implementación de un subprograma en C: float FN(float X, int Y) { float M(10); int N; . }

36 Cuerpo de Subprogramas
Implementación de un subprograma en Ada: function Strip_Leading_Blank (Str : String) return String is begin -- Strip_Leading_Blank if Str (Str'First) = ' ' then return Str (1+Str'First .. Str'Last); else return Str; end if; end Strip_Leading_Blank;

37 Cuerpo de Subprogramas
Implementación de un subprograma en LISP: (defun recur (x) (when (> x 0) (recur (1- x)))) => RECUR Uso de un subprograma en LISP: (recur 8) => (7)

38 Cuerpo de Subprogramas
Especificación de una función en LISP: defun function-name lambda-list [[declaration* | documentation]] form* => function-name

39 Diseño del Lenguaje

40 Definición e invocación de Subprogramas
Definición y activación de subprogramas. Implementación de la definición e invocación de subprogramas. Subprogramas genéricos.

41 Definición y activación de Subprogramas
Definición de un programa como propiedad estática. La activación como medio para el uso del subprograma.

42 Definición de un Subprograma
Almacenamiento de un programa en forma escrita. Es la única información que se tiene de un porgrama cuando es traducido.

43 Activación de un Subprograma
Representa un bloque de almacenamiento cuando el subprograma se ejecuta. Su tiempo de vida transcurre entre la llamada al subprograma en el que la activación es creada y el regreso de resultados, instante en el que la activación es destruida.

44 Componentes de la definición
La especificación. Declaración de variables. Almacenamiento de literales y variables constantes. Instrucciones o cuerpo del subprograma.

45 Definición de Subprogramas
Definición de un subprograma en C: float FN (float X, int Y) { const initval=2; #define finalval 10 float M(10); int N; N=initval; if (N < finalval) . } return (20 * X + M(N));

46 Segmento de código y Registro de Activación

47 Estructura en ejecución

48 Subprogramas genéricos
Subprograma genérico en FORTRAN 90: INTERFACE ENTER SUBROUTINE ENTER_STUDENTS(STUDENT, SECT) INTEGER :: STUDENT SECTION :: SECT END SUBROUTINE ENTER_STUDENTS SUBROUTINE ENTER_SECTION(S, TAB) SECTION :: S CLASSLIST :: TAB END SUBROUTINE ENTER_SECTION END INTERFACE ENTER

49 Subprogramas genéricos
Subprograma genérico en Ada: procedure Enter (Student: in integer; Sect: in out Section) is begin serie de funciones que permiten inscribir a un alumno a una clase. end Enter; procedure Enter(S: in Section; Tab: in out Classlist) is serie de instrucciones que permiten ingresar una sección en la lista de clases.

50 Compilación de Subprogramas
Compilación Separada: unidades de programas pueden compilarse en diferentes tiempos, pero se consideran dependencias. Compilación Independiente: Se compilan unidades de programa sin información de otras.

51 Definición de Tipos

52 Definición de Tipos Mecanismo para la definición de una clase de un objeto dato, en los lenguajes es llamado definición de tipo Una definición de tipo no define completamente un tipo de dato abstracto

53 Definición de Tipos end
Nombre de tipo, junto con una declaración que describe la estructura de una clase del objeto dato type Racional = record Numerador : integer; Denominador : integer end var A, B, C : Racional;

54 Definición de Tipos Struct Tiporacional {int numerador;
int denominador;} struct Tiporacional A,B,C;

55 Definición de Tipos Typedef struct Tiporacional {int numerador;
int denominador;} Racional; Racional A,B,C;

56 Definición de Tipos La modificación de la estructura del objeto dato se realiza solo en la definición del tipo Al pasar el objeto dato como argumento a un subprograma, solo se necesita su nombre

57 Nueva forma de encapsulamiento y ocultamiento de información
Definición de Tipos Nueva forma de encapsulamiento y ocultamiento de información La estructura interna del objeto dato es independiente de la declaración de variables

58 Nueva forma de encapsulamiento y ocultamiento de información
Definición de Tipos Nueva forma de encapsulamiento y ocultamiento de información La definición puede ser modificada sin alterar los subprogramas en donde es llamado Estructura encapsulada, solo subprogramas definidos accesan a los componentes internos

59 Definición de Tipos Implementación
El traductor pone la información de la definición de tipo en una tabla, y en donde el nombre del tipo es referenciado, utiliza la información de la tabla para producir el código ejecutable

60 Equivalencia de Tipos La verificación de tipos involucra una comparación entre el tipo de dato del argumento dado y el tipo de dato del argumento esperado por la operación

61 Equivalencia de Tipos ¿Qué significa que dos tipos sean el mismo?
¿Qué significa que dos objetos dato del mismo tipo son iguales?

62 Equivalencia de Tipos program main(input,output);
type Vect1: array [1..10] of real; Vect2: array [1..10] of real; Var X,Z: Vect1; Y: Vect2; procedure Sub(A:Vect1); . end; begin X:=Y; Sub(Y) end.

63 Equivalencia de Tipos Equivalencia de nombres
Dos tipos de datos son considerados equivalentes solo si tienen el mismo nombre

64 Equivalencia de Tipos program main(input,output);
type Vect1: array [1..10] of real; Vect2: array [1..10] of real; Var X,Z: Vect1; Y: Vect2; procedure Sub(A:Vect1); . end; begin X:=Y; Sub(Y) end.

65 Equivalencia de Tipos Equivalencia de nombres, desventajas
Cada objeto usado en una asignación debe tener el mismo nombre de tipo y no pueden tener tipos anónimos Var W: array [1..10] of real;

66 Equivalencia de Tipos Equivalencia de nombres, desventajas
Una vez que el tipo de un objeto dato es pasado como un argumento a una serie de subprogramas, no puede ser definido nuevamente en cada subprograma

67 Equivalencia de Tipos Equivalencia estructural
Dos tipos de datos son considerados equivalentes si definen objetos dato que tengan los mismos componentes internos

68 Equivalencia de Tipos program main(input,output);
type Vect1: array [1..10] of real; Vect2: array [1..10] of real; Var X,Z: Vect1; Y: Vect2; procedure Sub(A:Vect1); . end; begin X:=Y; Sub(Y) end.

69 Equivalencia de Tipos Equivalencia estructural, desventajas
Dos variables pueden ser estructuralmente equivalentes type Metros = integer; Litros = integer; var Long: Metros; Vol: Litros;


Descargar ppt "Romeo Alvarez Arana Jorge A. Davila Montoya Fernando Hernández Guzmán"

Presentaciones similares


Anuncios Google