La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Abstracción de Datos y Orientación a Objetos.. Vista General. Por qué la abstracción de datos y la programación orientada a objetos. Módulos y módulos.

Presentaciones similares


Presentación del tema: "Abstracción de Datos y Orientación a Objetos.. Vista General. Por qué la abstracción de datos y la programación orientada a objetos. Módulos y módulos."— Transcripción de la presentación:

1 Abstracción de Datos y Orientación a Objetos.

2 Vista General. Por qué la abstracción de datos y la programación orientada a objetos. Módulos y módulos tipo. Clases y Herencia. Contenedores. Constructores. Método dinámico de enlace, métodos virtuales y clases abstractas. Herencia Múltiple.

3 Avances de POO Reduce la carga conceptual. –Minimiza la cantidad de detalles que el programador debe considerar. –Provee contenimiento de fallas y cambios. –Limita la porcion de programa que es necesario recorrer al eliminar errores (debugging). –Limita la porcion de programa que es necesario cambiar si la interfaz es la misma. Provee independencia entre los componentes del programa. –Facilita la reutilización de código.

4 Reutilización de Código. A menudo la funcionalidad e interfaz existente no es exactamente lo que se necesita. Útil para definir nuevas abstracciones como extensiones o refinamientos de abstracciones existentes.

5 Modulos en Modula-2 Programa Principal Notar que: Push, pop visible para ambos. Push, pop visible para módulos que los importan Top no visible del módulo de la pila

6 Módulos Tipo. Múltiples instancias abstracción dada. Clases = módulos tipo+ herencia. Cada instancia de un módulo tipo o clase tiene su propia copia de las variables del módulo o clase.

7 Módulos Tipo. Permite que un módulo tenga varias instancias. Implementación – Datos conocidos estáticamente: desplazamiento estático dentro del módulo. – Datos conocidos dinámicamente: Porción de tamaño fijo. Porción de tamaño variable. Vector al principio de la porción de tamaño fijo (descriptor a tiempo de corrida que contiene el tamaño de los datos dinámicos). – Subrutinas Código replicado para cada instancia(desperdicio de espacio). Adicionalmente, parámetro escondido a la subrutina con la dirección de almacenamiento de la instancia apropiada del módulo.

8 Declaración de una clase en C++ Una declaración puede ser puesta en un archivo.h separado del archivo.cc que contiene las definiciones. La declaración debe tener toda la información: El programador necesita usar la abstracción correctamente. El compilador para generar código necesita: – Alguna información privada dentro de la declaración. – La expansión en línea que necesite el código.

9 Ejemplo de Declaración. Declaración (puede contener información privada también).

10 Herencia Clases derivadas, clases hijas, subclases. –Tienen todos los datos y métodos de la clase base. –Datos y métodos adicionales. Clase Base, Clase Padre, Superclase. Jerarquía de clases. Clase Básica “genérica".

11 Clase Básica Genérica

12 Ocultamiento o Reemplazo de miembros de la clase base. Para reemplazar un método de la clase base, se redefine en la clase derivada. El método de la clase base está aún accesible. –El operador de resolución de alcance es :: (en C++) –Palabra clave Super (en Java y Smalltalk) –Renombramiento Explícito (en Eiffel)

13 Contenedores. Abstraccion que sostiene una colección de objetos de alguna clase de elemento. Alternativas: Basado en una clase base Contenedor – Objetos derivados de la clase base. Listar nodos como objetos separados conteniendo un apuntador. Listar nodos miembros del objeto listado. Diseñar jerarquías de clases consistentes intuitivas y útiles es difícil.

14 Herencia y Visibilidad en C++ Herencia –Ocultamiento de métodos de la clase base en C++: Clase base privada (para ocultar) Usando declaraciones (para hacerlos visibles) –Miembros protegidos: visibles a métodos de la misma clase, derivadas o amigas. –Miembros privados: visibles a métodos de la misma clase o amigas.

15 Ejemplo:

16 Resumen de Reglas de Visibilidad C++ –Cualquier clase puede limitar la visibilidad de sus miembros. –Una clase derivada puede restringir la visibilidad de miembros de una clase base, pero no puede incrementarla. –Una clase derivada que limita la visibilidad puede reestablecerla usando una declaración.

17 Resumen de Reglas de Visibilidad Eiffel –Las clases derivadas pueden tanto restringir como incrementar la visibilidad de miembros de las clases base. Java es como C++, excepto por: –No hay designación de “protegida” ni “privada” para las clases base. –La palabra Protected hace que sea visible dentro del paquete, además de dentro de las clases derivadas. –No hay clases amigas.

18 Constructores Un constructor no localiza espacio. Inicializa espacio ya localizado. Asuntos: Elección de uno entre muchos constructores Referencias versus valores Orden de ejecución de los constructores. Destructores vs. recolección de “basura”.

19 Herencia Múltiple. Herencia Múltiple: Las clases derivadas heredan características de más de una clase base. Opciones: –Herencia Simple (Simula, Smalltalk, Modula-3, Ada 95, Oberon). –Herencia Múltiple (C++, Eiffel, CLOS) –Herencia Múltiple Limitada (mix-in) (Java).

20 Herencia Múltiple.

21 Implementación de Herencia Múltiple. Asignación de una referencia a un objeto estudiante En una variable del tipo gp_list_node* requiere Un cambio de vista añadiendo d. La entrada tiene una corección this que provee la vista derecha..

22 Asuntos Semánticos en Herencia Múltiple (I) Qué pasa si un método está definido en ambas clases base (y no está definido en la clase derivada? –CLOS: usa la versión de la clase que aparece primero en el encabezado de la clase derivada. –Eiffel: static semantic error for the derived class –C++: Error semántico estático cuando se trate de usar el método ambiguo (se debe emplear una operación de resolución de alcance para resolverlo).

23 Asuntos Semánticos en Herencia Múltiple(II) Qué pasa si un método es virtual en al menos una clase base, y queremos sobreescribirlo en la clase derivada? Existen tres opciones posibles para manejar este tipo de situación: – 1. Redefinir miembros ambiguos. – 2. Dar nuevos nombres. – 3. Usar clases “Interfaz”.

24 3. Usar interfaces. 1. Redefinir miembros ambiguos. 2. Dar nuevos nombres. Está bien mientras debug_print no sea invocado en la vista estudiante de un objeto estudiante.

25 Asuntos Semánticos en H.M.(III) Qué pasa si D hereda de B y C, y tanto B como C heredan de A? Una instancia de D debe contener una o dos copias de los miembros de A? Herencia Replicada: dos copias. –C++ (por defecto). –Eiffel (por renombramiento). Herencia compartida: una copia. –Eiffel (por defecto). –CLOS (a menos que se introduzcan interfaces). –C++ (especificando la clase base como virtual).

26 Herencia Replicada.

27 Cómo acceder a miembros de A de un objeto D? No se puede hacer directamente por nombre. Se usa un apuntador intermediario B* o C*.

28 Herencia Replicada. Las entradas de Vtable consisten de pares(method_address, this_correction).

29 Herencia Compartida.

30 Qué pasa si B o C sobreescriben un método f, declarado en A? Cuál versión hereda D? C++: Las definiciones del descendiente dominan. Si ambos –B y C- redefinen f, es un error. Eiffel: D puede especificar cuál f quiere.

31 Herencia Compartida. Apuntadores a la porción de campos de A, Para facilitatar una vista B Y una vista C view de un objeto D. Los apuntadoresson necesarios porque ahora no es posible tener vistas compactas de B y C del objeto D

32 Herencia Mix-in. Interfaz: una clase compuesta completamente de metodos abstractos. –No tienen miembros –No tienen implementaciones de sus métodos Herencia Mix-in: –Una clase base “real”. –Un número arbitrario de interfaces. Polymorfismo: El parámetro formal de un método puede ser de tipo interfaz. –Cualquier clase derivada de la interfaz puede ser pasada como argumento.

33 Mix-in inheritance Implementación Método de búsqueda a tiempo de corrida. –Anadir métodos de una interfaz al diccionario de métodos de cualquier clase que implemente la interfaz. Sin método de búsqueda a tiempo de corrida. –Aumentar la representación de objetos con direcciones de vtables para las interfaces implementadas.

34

35 Implementación de Herencia Mix-in Interfaces Clase base “Real” Clase Derivada Correcciones this Data members Of augmented_widget only From named_widget

36 Lenguajes Reales y el OO Ideal. Requieren o sólo permiten que el programador escriba en OO? Smalltalk: requiere Modula-3, Ada, C++, Common Lisp: permiten C++ –Los tipos simples no son clases. –Las subrutinas fuera de las clases. –Binding estático y uso de Mix-In replicado (por defecto). –Conserva todas las características de bajo nivel de C (insta al programador que sabe C a escribir código parecido a C). –C++ es OO en la misma medida que Lisp es funcional.

37 Orientado a Objetos en los distintos lenguajes.

38 Hay tres conceptos básicos vinculados a la programación orientada a objetos: –La herencia. –La encapsulación. –Método dinámico de bindings. Los diferentes lenguajes de programación consideran estos conceptos fundamentales en distintos grados.

39 El Modelo de Objeto de SmallTalk. SmallTalk es el lenguaje orientado a objeto canónico. Está fuertemente integrado a su ambiente de programación. Usa un modelo de referencia no tipeado para todas sus variables. Las operaciones son conceptualizadas como mensajes enviados a objetos.

40 El Modelo de Objeto de SmallTalk. SmallTalk evalúa las expresiones de izquierda a derecha, sin precedencia ni asociatividad. Para los lazos controlados por enumeración, utiliza timesRepeat. Los bloques de SmallTalk permiten al programador tener constructores de control de flujo casi arbitrarios.


Descargar ppt "Abstracción de Datos y Orientación a Objetos.. Vista General. Por qué la abstracción de datos y la programación orientada a objetos. Módulos y módulos."

Presentaciones similares


Anuncios Google