ESCUELA POLITECNICA NACIONAL PRINCIPIOS DE ORIENTACION A OBJETOS AUTOR: Ing. Raúl Córdova Bayas, M.Sc. PRINCIPIOS DE ORIENTACION A OBJETOS • AGENDA: – Demanda de la Orientación a Objetos – Abstracción y Ocultamiento de Datos – Conceptos fundamentales de la Orientación a Objetos – Problemas de los lenguajes procedurales – Campos de demanda de la O.O. – Lenguajes orientados a objetos. PRINCIPIOS DE ORIENTACION A OBJETOS • Demanda de la Orientación a Objetos – Cambio de concepción a la hora de analizar, diseñar y codificar aplicaciones. – Permite escribir software de forma que esté organizado en la misma manera que el problema que trata de modelar. – Uniformidad: representación de objetos lleva implícita el análisis, diseño y codificación. PRINCIPIOS DE ORIENTACION A OBJETOS • Comprensión: datos y procedimientos que los manipulan agrupados en clases, que se corresponden con las estructuras de información que el programa trata. • Flexibilidad: al tener relacionados procedimientos y datos, un cambio realizado sobre ellos queda reflejado automáticamente en cualquier lugar. 4 PRINCIPIOS DE ORIENTACION A OBJETOS • Estabilidad: los datos cambian menos que los procedimientos. • Reusabilidad: se realizan programas mediante la combinación de objetos ya definidos. • Confiabilidad: los programas son más fiables, por estar desarrrollados sobre objetos fáciles de manipular. PRINCIPIOS DE ORIENTACION A OBJETOS • Abstracción y Ocultamiento de Datos – La actividad fundamental que ocurre en el desarrollo de un programa o sistema es el reconocimiento de abstracciones. – Los programas son desarrollados a través del análisis repetitivo del problema y de su subdivisión en subproblemas. – Existen dos tipos de abstracciones: la Abstracción Procedural y la Abstracción de datos. PRINCIPIOS DE ORIENTACION A OBJETOS • Abstracción procedural – Es un sinónimo para procedimiento o función. – Cuando en un programa hacemos una llamada de función, ésta es encarada como una “caja negra”, es decir, ella ejecuta una determinada función, sin que el programa llamante necesite saber cuál algoritmo está siendo empleado en la ejecución de esta función. PRINCIPIOS DE ORIENTACION A OBJETOS • Abstracción de Datos – Puede ser definida como un conjunto de operaciones - procedimientos o funciones agrupadas en torno de una estructura de datos común y, que debe quedar “escondida” de las demás abstracciones del programa. – Información que está escondida se dice que está encapsulada. PRINCIPIOS DE ORIENTACION A OBJETOS • Las técnicas que dan enfoque especial a los datos son denominadas Métodologías Orientadas a Datos. • Entre estas técnicas se destacan las Metodologías de Diseño de Bases de Datos y las Metodologías Orientadas a Objetos. PRINCIPIOS DE ORIENTACION A OBJETOS • Tipos Abstractos de Datos – Tipo Abstracto de Datos o ADT (Abstract Data Type) es una estructura de programa, orientada al encapsulamiento de la información. – El ADT restringe la visibilidad del dato a su interior, haciendo con que el resto del sistema tenga acceso a este dato apenas a través de las operaciones definidas sobre él. PRINCIPIOS DE ORIENTACION A OBJETOS • Estas operaciones constituyen la interface entre el ADT y el exterior y son denominadas métodos de acceso o simplemente métodos. • Estructuras de datos – Son conjuntos de informaciones agregadas y con relaciones estructurales establecidas entre sí. PRINCIPIOS DE ORIENTACION A OBJETOS • Las estructuras de datos más comunes son las tablas, listas, árboles, grafos, conjuntos y archivos. • El estudio de las estructuras de datos envuelve propiedades y operaciones. PRINCIPIOS DE ORIENTACION A OBJETOS • Propiedades: – Tipo de estructura: estática (como una matriz) o dinámica (como una lista). – Forma de representación: organizada secuencialmente en la memoria o manipulada a través de punteros. – Forma de alocación y desalocación de memoria: estática o dinámica. – Densidad de la estructura. PRINCIPIOS DE ORIENTACION A OBJETOS • Operaciones: – – – – – Creación e inicialización Inclusión o exclusión de información Acceso a los datos almacenados Alteración de datos Duplicación o modificación de la estructura PRINCIPIOS DE ORIENTACION A OBJETOS • La finalidad principal de los ADT´s es permitir el uso de las estructuras de datos sin que sea necesario el conocimiento de los detalles internos de implementación de estas estructuras. • Todo proceso que desee manipular la estructura, necesita utilizar el método de acceso conveniente, codificado en la forma de una función o procedimiento. PRINCIPIOS DE ORIENTACION A OBJETOS • Criterios de utilización de los ADT´s: – Definición: los usuarios deben conocer la definición de todos los métodos de acceso aplicables a la estructura. – Encapsulamiento de la información: el usuario no debe conocer los métodos de manipulación interna de la estructura. – Integridad: el usuario debe manipular la estructura solamente a través de los métodos definidos para ella. PRINCIPIOS DE ORIENTACION A OBJETOS • Ventajas del encapsulamiento de datos y uso de ADTs – Consistencia: decurre de la utilización disciplinada de los datos, una vez que pocos procedimientos tienen acceso a ellos. – Flexibilidad: decurre de la facilidad con que se puede alterar la estructura de un ADT, sin que las alteraciones se propaguen a través de todo el software. PRINCIPIOS DE ORIENTACION A OBJETOS • Ventajas del uso de los métodos orientados a datos – Permiten descomponer un sistema de acuerdo con la realidad. – Permiten que las alteraciones efectuadas en el sistema queden más localizadas que en el caso de una descomposición funcional. PRINCIPIOS DE ORIENTACION A OBJETOS – Permiten que el sistema descompuesto por objetos sea mapeado en más de una CPU, lo que torna este tipo de programación mucho más atrayente para el desarrollo de sistemas de tiempo real. CONCEPTOS BASICOS • 1. Objeto Representado – Entidad del mundo real que posee determinados atributos e identidad, y que se diferencia de los demás objetos. – Los objetos representados pueden ser: • cosas tangibles y/o visibles, como un vehículo o una persona. • algo que puede ser entendido intelectualmente o algo sobre lo que puede ser dirigido un pensamiento o una acción, como un contrato o una factura. CONCEPTOS BASICOS • Un objeto representa un item, una unidad o una entidad individual e identificable, sea real o abstracta, con un papel bien definido en el dominio del problema a ser resuelto. • En un sistema bancario, un cliente es un objeto real, mientras que las cuentas corrientes y de ahorros son objetos abstractos. CONCEPTOS BASICOS • 2. Objeto Representante – Agregado de datos y operaciones que manipulan esos datos. • Para los objetos representados indicados antes, los representantes tendrían los mismos nombres: cliente, cuenta corriente y cuenta de ahorros. CONCEPTOS BASICOS • Los datos (atributos) de cliente serían CI, nombre, dirección, teléfono, estado civil. Sus operaciones: crear, eliminar, modificar, consultar cliente. • Para las cuentas, los datos serían: número, saldo actual, fecha de apertura, saldo promedio. Y sus operaciones: abrir, cerrar, consultar, depositar, cobrar cheque, retirar. CONCEPTOS BASICOS • Los objetos representantes poseen identidad, comportamiento y estado. • La identidad está compuesta por sus atributos: CI, nombre, etc. • El estado de un objeto incluye todas las usualmente estáticas propiedades del objeto, más los usualmente dinámicos valores actuales de cada una de estas propiedades. CONCEPTOS BASICOS • El estado de un objeto cuenta estará formado por su atributos: número, saldo actual, etc. más los valores actuales de esos atributos, como 1617301, $/. 800.000, etc. • El comportamiento es la forma como un objeto actúa y reacciona, en términos de sus cambios de estado y del paso de mensajes. CONCEPTOS BASICOS • Para una cuenta, un mensaje depositar haría que el objeto reaccione y actúe sobre su saldo actual, haciendo con que éste se actualice, de forma que el saldo actual sea igual al saldo actual (anterior) más el valor del depósito. CONCEPTOS BASICOS • 3. Clasificación – Este concepto permite agrupar objetos con la misma estructura de datos o atributos y el mismo comportamiento u operaciones en clases. – Dicho de otra manera, una clase es un conjunto de objetos que comparten una estructura común y un comportamiento común. CONCEPTOS BASICOS • La clase Cliente estará formada por todos los objetos cliente, por cuanto todos ellos poseen los mismos atributos (no los mismos valores) y las mismas operaciones. • Además, a partir de una clase se puede instanciar un objeto, esto es, a los atributos de una clase se les puede dar valores, con lo que se crea un objeto. CONCEPTOS BASICOS • 4. Herencia – Heredar significa compartir los atributos y las operaciones entre las clases, en base a un relacionamiento jerárquico. – Una clase puede ser definida en forma amplia y después ser refinada en sucesivas subclases. – De esta manera, las propiedades y operaciones no necesitan ser repetidas en cada subclase. CONCEPTOS BASICOS • La herencia permite factorar las propiedades y operaciones comunes a diferentes clases, colocándolas dentro de una superclase común, para poder utilizarlas luego sin volver a crearlas. • En un banco, una clase cuenta sería definida como superclase, y las clases cuenta corriente y cuenta de ahorros como subclases de cuenta. CONCEPTOS BASICOS • 5. Polimorfismo – Es la característica de la orientación a objetos que permite tener operaciones con el mismo nombre, asociadas a diferentes objetos (clases), pero actuando de manera diferente. – Polimorfismo significa también que el remitente de un mensaje a otro objeto, cuando se hace un paso de mensaje, no necesita conocer el objeto receptor. CONCEPTOS BASICOS • El objeto receptor del estímulo es quien determina cómo un estímulo deberá ser interpretado, no el remitente. • El remitente solamente necesita saber que otra instancia puede desempeñar un determinado comportamiento y no a qué clase la instancia pertenece y, por lo tanto, qué operación realmente efectúa la acción. CONCEPTOS BASICOS • 6. Enlace dinámico – Los objetos se enlazan dinámicamente a través de los mensajes que intercambian. – Así, un objeto cliente puede enviar el mensaje depositar con argumentos número de cuenta y depósito hacia un objeto cuenta. – El objeto cuenta será el responsable de realizar esta operación, haciendo saldo actual = saldo actual + depósito. LENGUAJES PROCEDURALES • Las aplicaciones que tratan con objetos complejos tienen serios problemas para garantizar la consistencia de los datos almacenados. • Como los lenguajes procedurales no dan importancia a los datos, sino a los procesos, no pueden enfrentar de forma adecuada el manejo de este tipo de estructuras. LENGUAJES PROCEDURALES • En objetos, en cambio, se pueden utilizar estructuras de datos complejas que permiten describir objetos complejos y, asegurar su consistencia, mediante la distribución de la complejidad funcional entre todos los procesos que manipulan el objeto. LENGUAJES PROCEDURALES • Las técnicas procedurales o técnicas estructuradas, los lenguajes y las herramientas procedurales, están basados en la abstracción procedural, esto es, reconocen como lo más importante dentro de un sistema a los procesos. LENGUAJES PROCEDURALES • Se basan también en la técnica top-down (de arriba hacia abajo), de forma que el gran proceso, que es el sistema mismo, es descompuesto en procesos cada vez de menor tamaño, hasta llegar a un nivel lo suficientemente bajo como para que cada proceso pueda ser descrito fácilmente. LENGUAJES PROCEDURALES • Los procesos de menor nivel pueden entonces ser implementados mediante un lenguaje procedural, típicamente como funciones, donde cada función posee unos parámetros de entrada y devuelve, opcionalmente, uno o más valores al proceso que la llama. LENGUAJES PROCEDURALES • La identificación de procesos y su descomposición no es una tarea fácil, además de ser subjetiva. • Otro problema que se presenta es que, al organizarse un programa en torno a los procesos, y siendo estos mucho más volátiles que los datos, el mantenimiento es mucho más complejo. LENGUAJES PROCEDURALES • Otro problema es que, al crecer el sistema, esto es, al aumentarse requerimientos, la flexibilidad no es adecuada. • No es una tarea sencilla aumentar funciones a un programa, puesto que éstas deben estar claramente relacionadas con las demás funciones, lo que provoca grandes cambios en el sistema. LENGUAJES PROCEDURALES • Otro problema de la programación procedural es que, al originarse un error en el sistema e intentar corregirlo, sucede el fenómeno denominado efecto de onda, esto es, un error se empieza a propagar por todo el programa, haciendo muy difícil su mantenimiento. LENGUAJES PROCEDURALES • Otro problema en el diseño de software procedural radica en la poca representación de la realidad. • Los programas procedurales no representan directamente los objetos del mundo real, sino que representan más bien, el comportamiento de esos objetos: se tiene así una representación indirecta de la realidad. LENGUAJES PROCEDURALES • Los lenguajes procedurales no poseen herencia ni facilidad de reutilización. • Tampoco existe la posibilidad de nombrar dos funciones o procesos con el mismo nombre: no existe polimorfismo. • Las funciones y los datos se encuentran separados, por lo que no existe encapsulamiento. LENGUAJES PROCEDURALES • Las funciones pueden accesar de manera indiscriminada a los datos, quedando éstos desprotegidos: puede haber entonces, inconsistencia e inseguridad en la información. • Los datos normalmente se almacenan en archivos, lo que hace que puedan ser redundantes e inconsistentes: no existe integración de datos y procesos. CAMPOS DE DEMANDA • • • • Programación orientada a eventos. Programación visual. Bases de datos orientadas a objetos. Sistemas de manejo de objetos complejos: voz, video, imagen. • Servidores de objetos. • INTERNET e INTRANET. CAMPOS DE DEMANDA • • • • • Ambientes Cliente-Servidor. Data Warehouse y Data Mart. Sistemas de tiempo real. Sistemas de alta confiabilidad. Software básico, software de gestión, software empotrado, software de inteligencia artificial, sistemas expertos y sistemas de información geográfica. LENGUAJES ORIENTADOS A OBJETOS • C++ – Es un lenguaje de uso general basado en C. – Es un lenguaje híbrido, pues incluye las características estructuradas de C. – Usa el concepto de clase como un nuevo tipo de datos. LENGUAJES VISUALES • Son nuevos tipos de lenguajes que han aparecido para desarrollar interfaces de sistemas, básicamente para sistemas de bases de datos. • Poseen la característica de ser orientados a eventos y objetos. • Los eventos son estímulos que los objetos reciben. LENGUAJES VISUALES • Los objetos son denominados visuales, pues representan elementos visuales, como ventanas (windows), botones, íconos y otros, propios del estándar Windows. • Los eventos pueden ser la pulsación de un tecla o de un botón del mouse, que permiten activar scripts asociados al objeto. LENGUAJES VISUALES • El núcleo de este tipo de lenguajes es el controlador o dispatcher. • Este controlador, que proporciona el lenguaje o el sistema operativo, identifica un evento del sistema, llamando a la aplicación, rutina u objeto asociado. LENGUAJES VISUALES • Una vez terminada esta rutina, el controlador toma el control otra vez para aceptar nuevos eventos. • Ejemplos: – – – – – Visual Basic v.4.0, 5.0, 6.0 Visual FoxPro v.3.0 Power Builder v. 5.0, 6.0, 7.0 SQL Windows Java (para INTERNET)