Asignatura: Programación 2 Unidad 2: Orientación por Objetos Tema 1: Orientación por Objetos Unidad II: Introducción a la Orientación por Objetos OxO Origen de la Programación Orientada por Objeto OxO Problemas en el desarrollo del software: La crisis del software, a finales de los años 60 (dio origen a la ingeniería del software), la cual se caracterizaba por: 1. Imprecisión de planes y costos. 2. Baja productividad 3. Baja calidad del producto (alto costo, baja flexibilidad, confiabilidad y adaptabilidad, etc.). 4. Insatisfacción del cliente 5. Retraso en la entrega. 6. Altísimos costos del desarrollo (en comparación con hardware) 7. Complejidad creciente de los requerimientos (superan las tecnologías disponibles) 8. Complejidad de mantenimiento. La O x O emerge como una nueva respuesta alternativa al enfoque estructurado, en la búsqueda de soluciones a la tan conocida crisis. La crisis se manifiesta en: • Dificultad de los cambios de desarrollo de software para cumplir con los tiempos de entrega y los costos de desarrollo estimados inicialmente. • Dificultad para satisfacer los requerimientos del usuario. La O x O contribuye a aminorar estos problemas y trae como ventajas: 1. Mayor manipulación de la complejidad inherente del software (abstracción, descomposición y jerarquización) 2. Mejor reutilización de componentes de software. 3. Reducción de costos y tiempos de desarrollo. 4. Uso de un único paradigma de desarrollo para análisis, especificación, diseño y programación. ¿Qué es la O x O? Es un paradigma de desarrollo de software que modela las entidades de un dominio de aplicación en una forma natural en términos de objetos. paradigma: enfoque, punto de vista, forma de pensar. Entidad: todo lo que existe (real o ideal, tangible o intangible) Dominio de aplicación: porción del mundo real donde está enmarcado la situación o problema. Objeto: unidad de software que modela a una entidad (estado y dinámica de la entidad). La O x O tiene un basamento formal en la Ontología. Ontología: “Teoría del ente, intento de clasificar los entes, intentos de definir la estructura de cada ente, de cada tipo de ente y será también la teoría del ser en general, de lo que todos los entes tienen en común, de lo que los cualifica como entes”. ( Morente, 1983). Antes del mundo real era imperativo, jerárquico, funcional y relacional. Ahora con la OxO el mundo real es la agregación de cosas o entidades que poseen propiedades, se relacionan entre sí, obedecen a leyes, tienen un estado transformable por eventos y cambian. Esto no es más que la aplicación de los principios ontológicos (Aristóteles) sobre el análisis de un dominio de aplicación generando así un nuevo paradigma. Principios Ontológicos: • El mundo está compuesto por entidades. • Las entidades se conocen a través de sus propiedades (características, atributos). • Cada entidad cambia (tiempo, cambio en atributos) • Los cambios de estado son ocasionados por eventos (tiempo) • Todo evento da inicio a un proceso (secuencia de eventos) • Cada entidad acata leyes (relación entre propiedades) • Una entidad puede ser simple o compuesta. • Las propiedades permiten agrupar conceptualmente a las entidades en clases o especies (conjunto de entidades) • Las entidades se agrupan en sistemas. La O x O captura el dominio de aplicación en términos de cosas o entidades que le componen usando: La estructura (estado) y el comportamiento (cambio de estado) de las entidades. Constructos del Modelado OxO: Ontología modelado OxO Tipos de Datos Abstractos (TDA) Lenguaje de programación C++ Objeto Clase Clase base Clase derivada Miembro Cosa o entidad Especie Objeto Clase Variable del TDA TDA Propiedad, ley Atributo Campos de la estructura de datos del TDA Datos miembros Acción Método Función miembro Evento Mensaje Operación del TDA Llamada a la operación Llamada a función Lenguaje de programación Java Objeto Clase Metaclase Interface Paquete Campo Variable tipo primitivo, referenciado, estática. Método Constructor Llamada a método Definición de objeto Un objeto es la representación de una entidad en un dominio de aplicación. Un objeto tiene: a) Una identidad única b) Un estado (conjunto de valores de sus atributos) c) Un comportamiento (conjunto de operaciones que transforman o tienen acceso al estado del objeto. El identificador de un objeto: es el nombre único independiente del valor y localización del objeto. La identidad no tiene que ver con sus propiedades sino con su existencia (dos objetos distintos no son iguales aunque todos los valores de sus propiedades sean iguales). Definición de Clase (equivalente a la definición de un TDA) Una clase representa una colección de entidades que tienen un conjunto de propiedades comunes. Una clase define la estructura (atributos, estado) y el comportamiento (operaciones) de un conjunto de entidades. Definir una clase consiste en determinar 3 elementos: 1. Nombre de la clase 2. Atributos (estado) 3. Métodos (comportamiento) * Se representa gráficamente con el siguiente diagrama: Nombre de la Clase Atributos de la Clase Métodos de la Clase NOMBRE DE LA CLASE Nombre_atributo1: tipo_dato1 Nombre_atributo2:tipo_dato2 . . . Nombre_método1(<listaargumentos>):tipo_result1 Nombre_método2(<listaargumentos>):tipo_result2 . . . Por ejemplo: Definimos la clase complejo (TDA complejo, especificada anteriormente, tema TDA). Complejo PReal: Real PImaginaria: Real Llenar (Real, Real) Sumar (Complejo, Complejo) Multiplicar (Complejo, Complejo) Igual (Complejo): Booleano Real (): Real Imaginaria (): Real Nota: Como puede verse, los argumentos y valores de cada operación del TDA son ahora diferentes (sutilmente) en los métodos de la clase complejo. ¿Por qué? Nota: Un objeto de una clase sólo son los valores de los atributos de una clase. A partir de esta clase Complejo, puedo fabricar (instanciar) “infinitos” objeto. Por ejemplo: 5 7.8 12.45 67 45 4 1 0,44 Estas son objetos instanciados de la Clase Complejo Nota: Cada objeto tiene sus propios valores de los atributos y comparte los nombres de los atributos en la clase En O x O, la definición de una clase permite obtener un verdadero “encapsulamiento” del estado (estructuras) de los objetos que pertenecen a la clase. Esto se logra a través de los modificadores de acceso, que controlan y restringen el uso de los atributos y métodos de una clase. Los modificadores de acceso son básicamente tres (03): • Público: Accesible desde cualquier parte en la que el objeto se encuentre (tenga alcance). • Privados: Sólo accesible a métodos de la clase. • Protegidos: Sólo accesible a través de las relaciones entre objetos (herencia, composición). Cada lenguaje de programación O x O puede tener o agregar otros tipos de modificadores de acceso, pero estos son los básicos. Definición de Método (Equivalente a las operaciones del TDA) Representa una operación o proceso que se ejecuta sobre las entidades de una misma especie (instancias de una clase = objetos) Definidos por: Nombre_método (<lista_argumentos>): <tipo_retorno> Métodos especiales en la O x O: • Constructor (en general en todo lenguaje de programación) • Destructor (sólo en C++, se usa para el manejo de memoria dinámica) El constructor es un método que se utiliza para inicializar los atributos de los objetos de la clase. Tiene las siguientes características: • Se invoca cuando se crea el objeto de la clase. • Puede recibir argumentos. • Tiene el mismo nombre de la clase. • No tiene valor de retorno. Por ejemplo, en la clase complejo su constructor sería: Æ Complejo() Su codificación sería (inicializa en 0 los atributos): Complejo(){ PReal = 0 PImaginaria = 0 } El destructor (sólo usado en C++) es un método especial que también se llama implícitamente (al desfavorecer el objeto). Se identifica con el nombre de la clase con el carácter “~” delante. A diferencia del constructor no puede recibir parámetros ni tampoco retorna valor. Definición de Mensaje: Está asociado a un evento del dominio de aplicación y señala el momento en el que debe ejecutarse un método sobre un objeto determinado. El mensaje asocia un método a un objeto. No puede existir un mensaje sin objeto. El formato de un mensaje es el siguiente: Objeto_receptor . nombre_método (<argumentos>) El punto “.” Establece la relación objeto_método Por ejemplo en la clase complejo se tendría: Complejo A // crea el objeto A de la clase complejo A.llenar (10,5.8) // Mensaje: ejecuta el método Llenar (con sus atributos) sobre el objeto A. Ejercicios: a) Para asegurarse que comprende los conceptos de O x O trate de dar respuesta a las siguientes preguntas: • Diferencia y semejanzas entre la O x O y TDA. • Relación entre clase y objeto • Relación entre método y mensaje. • Diferencia entre atributo y método. • ¿ Qué es instanciación de un objeto? ¿ qué se instancia? • Significado de “encapsulamiento”. • ¿Cuáles son los modificadores de acceso para los componentes de una clase y por qué? b) Investigue como definir e implementar los métodos de una clase en C++ y Java. Como práctica transforme el TDA Complejo en una clase en C++ c) Modele OxO (defina la clase: especificar nombre, atributos y métodos con argumentos y retorno) de las siguientes entidades: • Estudiante • Punto en el espacio bidimensional • Conjunto de elementos del mismo tipo (homogéneos) • Características del conjunto: no hay orden y no hay elementos duplicados • Secuencia de elementos del mismo tipo (homogéneos) • Características de la secuencia: hay orden secuencial (canónico) y puede tener elementos duplicados. • Tiempo (hora) • Cuenta bancaria • Producto en venta de un supermercado • Número racional (fracción, formado por numerador y denominador). • Fecha (describe el día) • Empleado de una empresa • Vehículo (para un estacionamiento por ejemplo) • Cola de elementos del mismo tipo (homogéneos) • Características de la cola: es una secuencia en donde los elementos son insertados por un extremo de la lista y si son eliminados y accesado por el otro extremo. • Matriz (vector bidimensional) • Libro (para una biblioteca) • Materia o asignatura (para el pensum de una carrera)