abstracción de datos y orientación a objetos.. vista general. por qué la abstracción de datos y...

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

Upload: lupita-estrella

Post on 28-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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

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

Page 2: 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

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.

Page 3: 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

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.

Page 4: 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

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.

Page 5: 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

Modulos en Modula-2

Programa Principal

Notar que:

Push, pop visible para ambos.Push, pop visible para módulos que los importanTop no visible del módulo de la pila

Page 6: 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

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 delmódulo o clase.

Page 7: 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

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.

Page 8: 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

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.

Page 9: 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

Ejemplo de Declaración.

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

Page 10: 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

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".

Page 11: 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

Clase Básica Genérica

Page 12: 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

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)

Page 13: 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

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.

Page 14: 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

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.

Page 15: 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

Ejemplo:

Page 16: 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

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.

Page 17: 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

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.

Page 18: 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

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”.

Page 19: 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

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).

Page 20: 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

Herencia Múltiple.

Page 21: 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

Implementación de Herencia Múltiple.

Asignación de una referencia a un objeto estudianteEn una variable del tipo gp_list_node* requiereUn cambio de vista añadiendo d.

La entrada tiene una corección thisque provee la vista derecha..

Page 22: 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

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).

Page 23: 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

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”.

Page 24: 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

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.

Page 25: 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

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).

Page 26: 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

Herencia Replicada.

Page 27: 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

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*.

Page 28: 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

Herencia Replicada.

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

Page 29: 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

Herencia Compartida.

Page 30: 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

Herencia Compartida.

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.

Page 31: 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

Herencia Compartida.

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

Page 32: 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

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.

Page 33: 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

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.

Page 34: 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
Page 35: 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

Implementación de Herencia Mix-in

Interfaces

Clase base “Real”

Clase DerivadaCorrecciones this

Data membersOf augmented_widgetonly

From named_widget

Page 36: 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

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.

Page 37: 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

Orientado a Objetos en los distintos lenguajes.

Page 38: 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

• 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.

Page 39: 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

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.

Page 40: 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

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.