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.

Slides:



Advertisements
Presentaciones similares
Unidad 3 Lenguajes .Net y POO
Advertisements

Curso de java básico (scjp)
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Observador (observer) Visita (Visitor) Singleton
Instituto Universitario de Gerencia y Tecnología N - Análisis de Sistemas DIAGRAMA DE CLASES INTEGRANTES: LEIVYS MAZA Informática Mención 205 Profesor:
Métricas OO Aparecieron por la necesidad de poder cuantificar la calidad del software no tradicional. El software orientado a objetos posee características.
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
POLIMORFISMO UNIDAD 4.
Herencia en C#.
Fundamentos de la programación orientada a objetos
Lenguaje de programación Java
UML 1.4 Peter Emerson Pinchao Solis.
Arquitectura CLARO-TECNOTREE
Orientación a Objetos con Java SE
Introducción a la Orientación a Objetos
Introducción 1 Puntos Clave –La orientación a objetos representa un cambio radical en los métodos tradicionales de creación de software –Los métodos tradicionales.
Tipo de Dato Abstracto Tipos de datos:
Informática II Prof. Dr. Gustavo Patiño MJ
Informática II Prof. Dr. Gustavo Patiño MJ
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno.
Diseño y programación de
PROGRAMACION ORIENTADA
UNIDAD I. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS EN JAVA.
HERENCIA.
4.- Orientación a Objetos Justo N. Hidalgo Sanz DEPARTAMENTO DE INGENIERÍA INFORMÁTICA.
Medio de tele-comunicación
Modificadores.
Lic. Rosemary Torrico Bascopé
Abstracción de los datos y Orientación a Objeto Clase 13.
PROGRAMACIÓN ORIENTADA A OBJETOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Tema 10: Interfaces Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
SCJP Sun Certified Programmer for Java 6
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Contenido: 1- Que es el .Net Framework 2- Arquitectura en .Net
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA DOS ORIENTACION A OBJETOS.
1 Objetos y Clases en Java ELO-329: Diseño y Programación Orientados a Objetos.
Alcance Dinámico La Asociación Actual para un Nombre dado es el encontrado recientemente durante la ejecución, y no a sido destruido aun por el retornado.
CS-432: Ingeniería Moderna de Software Semana 3
Herencia y tipos ● Cuanta memoria se debe asignar a un objeto cuando se asigna en la pila ● La asignación debe hacerse antes de que se conozca la cantida.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos.
Programación Orientada a Objetos
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Introducción a UML DIAGRAMA DE CLASES Departamento de Informática
Facultad de Ingeniería
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Programación orientada a objetos
Programación orientada a objetos
Programación orientada a objetos Capítulo 9 Algo mas sobre herencias.
FUNDAMENTOS DE PROGRAMACION
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
La Programación Orientado a Objetos
Clases “ Es una Abstracción de un elemento del mundo real ”
Herencias Conceptos básicos i
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Modelado UML Diagrama de Clases
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

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 tipo. Clases y Herencia. Contenedores. Constructores. Método dinámico de enlace, métodos virtuales y clases abstractas. Herencia Múltiple.

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.

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.

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

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.

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.

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.

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

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

Clase Básica Genérica

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)

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.

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.

Ejemplo:

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.

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.

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

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

Herencia Múltiple.

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

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

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

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.

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

Herencia Replicada.

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

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

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.

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

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.

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.

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

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.

Orientado a Objetos en los distintos lenguajes.

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.

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.

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.