Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
1 PARTE I INTRODUCCIÓN AL MODELO DE OBJETOS TECNOLOGÍA DE OBJETOS El Modelo Basado en Objetos se ha convertido en uno de los impulsores de la Industria del Software durante la década de los noventa. A pesar de la reciente profusión de aplicaciones, herramientas y lenguajes que soportan, emplean o se han construido tomando como base el Modelo de Objetos,los conceptos básicos del mismo se originaron en la década del ´60. Por ejemplo, el lenguaje SIMULA, uno de los precursores en el concepto de objetos fue desarrollado en 1967. 2 MODELO DE OBJETOS Los conceptos básicos del Modelo de Objetos se originaron con la definición de lenguajes que incorporan conceptos tales como: Encapsulamiento Modularidad Abstracción Polimorfismo Si bien SIMULA fue el primer lenguaje en incorporar el Modelo de Objetos, lo más importante ha sido el Modelo Conceptual que ha dejado como resultado. MODELO DE OBJETOS El Modelo de Objetos ha trascendido los sistemas de información y/o software en general, y se está utilizando como una herramienta de modelado ingenieril de varios tipos de sistemas, por ej.: distintos tipos de redes (eléctricas, de flujo, etc.) ingeniería de organizaciones y métodos (re-ingeniería de empresas, etc.) ingeniería de productos control de tráfico En realidad el Modelo de Objetos se originó a partir de la necesidad de disponer de una herramienta simple para Simular Sistemas (de cualquier tipo). 3 IMPLEMENTACIÓN CICLO DE VIDA EN EL DESARROLLO DE SOFTWARE ANÁLISIS DISEÑO . . . . . . . Paradigma de Objetos Programación Estructurada Lenguajes de Alto Nivel Programación Orientada a Objetos C O N O C I M I E N T O S A P L I C A C I O N E S EVOLUCIÓN DE LOS PARADIGMAS DE PROGRAMACIÓN 4 PARADIGMAS DE PROGRAMACIÓN Procedural Es el paradigma de programación tradicional (y probablemente aún el más usado): uso separado de los procedimientos y los datos. enfoque sobre el diseño de los procedimientos, es decir, sobre el CÓMO. Se decide qué procedimientos se necesitan, y luego se implementan con los mejores algoritmos que se puedan encontrar • El bloque físico de los primeros lenguajes que soportaban este estilo de programación era el subprograma. Inicialmente se lo consideró como un dispositivo para ordenar el trabajo. • Un avance en este enfoque fue el asignar a los subprogramas la finalidad de abstraer funciones del programa. Se crearon lenguajes con diversos mecanismos de pasajes de parámetros Se establecen los principios de la Programación Estructurada: anidación de programas, estructuras de control, ámbito y alcance de declaraciones, etc. Surgen métodos de Diseño Estructurado 5 ENCAPSULAMIENTO DECIDIR QUE MÓDULOS SE REQUIREN; EL PROGRAMA SE PARTICIONA DE FORMA TAL QUE LOS DATOS QUEDEN OCULTOS EN LOS MODULOS ⇒ Es la propiedad que asegura que la información de un módulo esta oculta al mundo exterior. ⇒ Es el proceso de ocultar todos los secretos de un módulo que no contribuyen a sus características esenciales. Es una técnica de diseño para descomponer sistemas en módulos VENTAJAS: ⇒ Centralización de todos los datos de un cierto tipo. ⇒ Programación paralela. ⇒ Facilita el Mantenimiento y Extensión. ENCAPSULAMIENTO ⇒ En los lenguajes de programación clásicos los módulos se implementan mediante subprogramas (procedimientos, funciones y subrutinas). ⇒ Ésto, en general, orienta una formulación Funcional del problema, organizándolo mediante refinamientos sucesivos de los módulos. 6 Pared Pelota Paleta Pantalla de video Juego VideoJuego Inicializar juego Jugar una partida Dibujar pared Dibujar lados Inicializar Paleta Jugar una pelota Cheq. Posición de pelota Actualizar puntaje y pantalla Mover Pelota Mover Paleta Ejemplo de refinamientos sucesivos de módulos ⇒ No se permitan extensiones en forma simple. ⇒ Las modificaciones puedan requerir un gran esfuerzo y puedan introducir errores. Cuando la descomposición se realiza considerando únicamente un Refinamiento Progresivo puede ocurrir que: ENCAPSULAMIENTO En el Diseño Clásico (estructurado) una modularización que persiga el principio de Encapsulamiento, deberá realizarse con criterios de acoplamiento y cohesión. Independencia de Módulos Mono-Funcionalidad de Módulos 7 ABSTRACCIÓN Denota las características esenciales de un objeto las cuales lo distinguen de todos los otros tipos de objetos. Provee una definición conceptual relativa a la perspectiva del observador. ABSTRACCIÓN ⇒ Enfocada sobre la vista externa del objeto que separa el comportamiento esencial del objeto de su implementación. ⇒ Decidir sobre el conjunto correcto de abstracciones para un dominio dado, es el problema central en Diseño Orientado a Objetos. ⇒ Modelo de contrato: La vista exterior de un objeto define un contrato sobre la cual otros objetos dependen. Ascensor subir Bajar Abrir puerta 8 Cliente Servidor Servicios contrato Pre con dic ion es Postcondiciones Ordenar(unArreglo) arregloOrdenado Modelo de contrato Parte del contrato que debe ser satisfecha por el cliente Parte del contrato que debe ser satisfecha por el servidor ABSTRACCIÓN Principio de diseño de los lenguajes de programación capaces de implementar la técnica de: Encapsulamiento y Ocultamiento de la Información ABSTRACCIÓN DE DATOS La abstracción de datos es la técnica de programación que permite definir nuevos tipos de datos, adecuados para la aplicación tipos de datos abstractos ( TDA ) Un lenguaje soportará la definición de tipos de datos abstractos, si: • el usuario puede definir nuevos tipos de datos asociando explícitamente la estructura de datos del mismo con las operaciones que lo manipulan • la representación y las operaciones están ocultas en el tipo de dato abstracto. 9 Un TDA se compone de estructuras de datos (representación) y las operaciones que la manipulan TDA = representación + operaciones Para que un TDA pueda ser empleado, es necesario indicar cuáles son y cómo pueden ser usadas las operaciones por los clientes del mismo. La especificación formal del TDA está compuesta por las siguientes secciones: ⇒ Tipos ⇒ Operaciones (funciones) ⇒ Axiomas ⇒ Precondiciones Operaciones push: Pila[G] x G → Pila[G] pop: Pila[G] → Pila[G] top: Pila[G] → G empty: Pila[G] → Boolean new: Pila[G] Axiomas ∇x: G , s: Pila[G] A1- top(push(s,x)) = x A2 - pop(push(s,x)) = s A3 - empty(new) A4 - not empty(push(s,x)) Precondiciones pop(s: Pila[G]) requiere not empty(s) top(s: Pila[G]) requiere not empty(s) Tipos Pila[G] Si quisieramos construir un TDA que represente una Pila, que contenga elementos del tipo G, tendríamos que establecer la siguiente especificación: Podríamos afirmar que esta especificación define la interfaz del TDA Pila 10 Lenguajes que permiten definir tipos de datos abstractos: mecanismo ⇒Simula 67 → clase ⇒Modula–2 → módulo ⇒Ada → paquete (package) ⇒Smalltalk → clase ⇒C++ → clase ⇒ Java → clase Diseñar programas empleando el concepto de TDA consiste en : DECIDIR QUE TIPOS SE REQUIEREN; Y PROVEER UN CONJUNTO COMPLETO DE OPERACIONES PARA CADA UNO DE LOS MISMOS El paradigma de Programación Orientada a Objetos representa acabadamente el concepto de TDA El Paradigma O. O. tiene como objetivo: ⇒Escribir software fácilmente modificable y extensible. ⇒Escribir software reusable. ⇒Disponer de un modelo natural para representar un dominio. DECIDIR QUE CLASES (O TIPOS) SE REQUIEREN, PROVEER UN CONJUNTO COMPLETO DE OPERACIONES PARA CADA UNA DE LAS CLASES Y HACER EXPLICITAMENTE ACCESIBLE SU ESTRUCTURA Y COMPORTAMIENTO MEDIANTE LA HERENCIA 11 Utilizando Objetos para modelar el ejemplo VideoJuego Pared Pelota Paleta Ladrillo PROGRAMACION ORIENTADA A OBJETOS Conceptos Básicos QUE ES UN OBJETO? Un objeto es una entidad que combina las propiedades de los procedimientos y de los datos. Un objeto ejecuta operaciones (comportamiento)y mantiene su estado local (estructura) Los procedimientos que incluye un objeto se denominan métodos Los métodos describen el comportamiento del objeto. 12 Los objetos encapsulan datos y operaciones (o procedimientos). DATOS (estado) PROCEDIMIENTOS (comportamiento) Los datos describen el estado del objeto. Los procedimientos u operaciones actúan sobre los datos modificándolos o interrogándolos. Se denominan también comportamientos. OBJETO PROGRAMACION ORIENTADA A OBJETOS ESTADO Edad, Peso, Altura, Domicilio Posición COMPORTAMIENTO Escala, Corre, Trabaja, ... IDENTIDAD Juan Pérez Un Objeto Posee: 13 “El estado de un objeto comprende todas las propiedades (usualmente estáticas) del objeto más los valores actuales (usualmente dinámicos) de cada una de estas propiedades”. propiedades estáticas propiedades dinámicas ESTADO Pelota Posición Radio Pelota Posición= 5x10y Radio= 1 • Es una buena práctica de ingeniería encapsular el estado de un Objeto. • Ocultar la representación del estado del objeto a sus clientes externos. • Ningún objeto puede modificar el estado de otro objeto. ESTADO 14 “El comportamiento expresa de que forma el objeto actúa y reacciona en términos de su cambio de estado y solicitud de servicio”. Representa las actividades visibles exteriormente. COMPORTAMIENTO Pila push() pop() top() push(x) Mozo, la cuenta por favor. Los métodos asociados a un objeto implementan el comportamiento del objeto. rol: es una máscara que usa el objeto y define un contrato entre una abstracción y sus clientes. COMPORTAMIENTO Profesional 15 “Es aquella propiedad del objeto la cual lo distingue de los otros objetos.” Identidad ≠ estado. la identidad de un objeto (no necesariamente su nombre) es preservada en el tiempo aún cuando su estado cambie. Juan Pérez Juan Pérez Juan Pérez Persona IDENTIDAD ¿Cómo interactúan los objetos entre sí? Todas las acciones en POO resultan de enviar mensajes entre objetos. Un mensaje es una solicitud para que un objeto ejecute una acción. Este objeto responde ejecutando métodos, es decir, usando sus propios procedimientos. PROGRAMACIÓN ORIENTADA A OBJETOS Conceptos Básicos En el envío de mensajes interactuan dos objetos: el emisor del mensaje y el receptor. Objeto Emisor Objeto ReceptorMensaje 16 La interfase pública es el protocolo o conjunto de mensajes a los que puede responder el objeto (Punto de Vista del Usuario) La representación privada son: • los datos necesarios para describir el estado y • la implementación de los métodos o procedimientos (Punto de Vista del Implementador) OBJETO PROGRAMACIÓN ORIENTADA A OBJETOS Conceptos Básicos Interfase pública Representación Privada Datos y Métodos M undo Exterior El envío de mensajes soporta un importante principio en programación: LA ABSTRACCIÓN DE DATOS El estado interno de un objeto sólo puede modificarse mediante el envío de algún mensaje válido. Puede modificarse la implementación de un objeto sin que varíe el comportamiento del mismo y por consiguiente, el programa que lo contiene. PROGRAMACIÓN ORIENTADA A OBJETOS Conceptos Básicos 17 Qué es POO? En su sentido más puro se define como La programación que se implementa a través del envío de mensajes entre objetos PROGRAMACION ORIENTADA A OBJETOS Conceptos Básicos Cliente Registro de Cliente Pedido Catálogo Orden de Embalaje Empleado 1: Solicita item 2: ExisteCliente? 3: ConsultarPorItem 5: Iniciar Empleado de Embalaje 6: Asignar 4: IncorporarItem 7: UbicaciónItem?8: Actualizar En qué consiste la solución de problemas en POO? Identificar los objetos del problema. Identificar los mensajes a los cuales los objetos deberán responder. Establecer una secuencia de mensajes a los objetos. PROGRAMACION ORIENTADA A OBJETOS Conceptos Básicos 18 Calcular la suma de dos números e imprimir el resultado. * Identificación de los objetos número1: el primer número sumando. número2: el segundo número sumando. suma: el resultado de la suma de dos números * Identificación de los mensajes + número2 el mensaje + con el parámetro número2 enviado a un receptor. El resultado de este mensaje es un objeto suma representando la suma del objeto receptor número1 y número2. imprimir mensaje que presenta en la pantalla el valor del objeto receptor. PROGRAMACION ORIENTADA A OBJETOS Conceptos Básicos (número1 + número2) imprimir (3+4) imprimir tiempo t0 tiempo t1 3 77+ 4 imprimir PROGRAMACION ORIENTADA A OBJETOS Conceptos Básicos Secuencia de los mensajes a los objetos (número1 + número2) imprimir. que equivale a: suma = número1 + número2. suma imprimir. 19 Implementación de Estructuras de Datos y sus operaciones CLASES Y VARIABLES DE INSTANCIAS Un lenguaje soporta abstracción de datos cuando tiene un mecanismo para poner juntos la totalidad de los procedimientos para un tipo de dato. Prog. Procedural POO # tipo de datos # ???? # valores # objeto # operaciones # métodos ¿COMO ABSTRAER CONCEPTOS EN POO? En el paradigma de objetos existen dos ejes conceptuales para abstraer conceptos: ⇒CLASIFICACIÓN ⇒GENERALIZACIÓN/ESPECIALIZACIÓN CLASIFICACIÓN Naturalmente, muchos objetos tendrán características semejantes. Deberán ser agrupados de alguna forma. El mecanismo que brinda la POO para representar esta agrupación es la CLASE 20 “Una clase es un conjunto de objetos que comparten estructura y comportamiento común” CLASE Persona Nombre Dirección Ciudad FechaNac DocumentoTipo DocumentoNum Incorporar() ActualizarFam() CalcularHaber() CLASE Una clase contiene la descripción de las características comunes de todos los objetos que pertenecen a ella: – la especificación del comportamiento – la definición de la estructura interna – la implementación de los métodos Expediente Titular Tema Número Estado FechaInicio Ubicación Inicio() Transferir() Finalizar() Archivar() Persona Nombre Dirección Ciudad FechaNac DocumentoTipo DocumentoNum Incorporar() ActualizarFam() CalcularHaber() { | instancia | instancia := super new. instancia inicializar. ........ } implementación de métodos {estado = ‘finalizado’ ifTrue: [self Archivar]. ........ ........ } estructura comportamiento 21 CLASES - INSTANCIAS Un objeto se dice instancia de una clase cuando sus métodos y atributos están definidos en la misma. Tiene un estado, un comportamiento y una identidad. Una instancia es un individuo de la clase INSTANCIASCLASES * define atributos. * define métodos. * puede generar instancias. * tiene valores (los almacenados localmente). * ejecuta métodos. * - CLASES - INSTANCIAS Clase Persona Persona Nombre Dirección Ciudad FechaNac DocumentoTipo DocumentoNum Incorporar() ActualizarFam() CalcularHaber() Id. Nombre Dirección Ciudad FechaNac DocumentoTipo DocumentoNum Id. Nombre Dirección Ciudad FechaNac DocumentoTipo DocumentoNum Id. Nombre Dirección Ciudad FechaNac DocumentoTipo DocumentoNum Perez, Luis San Martin 1120 Santa Fe 15/10/1958 DNI 11.304.987 Fanuchi, Joaquín Perdriel 120 Santa Fe 01/10/1962 DNI 17.374.965 Ferrari, Luca San Juan 235 Santa Fe 01/09/1957 DNI 13.390.456 es-instancia-de Se b usc a el mé tod o para res pon der al men saje reci bido CalcularHaber (mensaje enviado) 1x00 2x00 3x00 22 CARACTERÍSTICAS DE UN OBJETO ⇒ ATRIBUTOS (dato privado): son variables para las cuales el almacenamiento local está disponible en las instancias. Todos los objetos que son instancias de la clase comparten la misma descripción de la variable. ⇒ ATRIBUTOS DE CLASE (dato compartido): son variables almacenadas en la clase, cuyo valor es compartido por todas las instancias de esa clase. ⇒ CONJUNTO DE MÉTODOS: todos los objetos que son instancias de una clase dada tienen los mismos métodos, por lo tanto, responderán al mismo conjunto de mensajes. Es el conjunto de mensajes a los cuales un objeto puede responder. Las formasen las cuales un objeto puede actuar y reaccionar, constituyen la vista exterior del mismo. PROTOCOLO DE MENSAJES Definiciones Clase X Métodos: A, B, C y D A B C D atributos El protocolo de la clase X esta compuesto por los mensajes A, B, C y D 23 GENERALIZACIÓN/ESPECIALIZACIÓN Relaciones entre Clases Un conjunto de clases tendrá características generales (que pertenecen a más de una), y características particulares (que pertenecen a algunas) deberán estar organizadas en una estructura jerárquica El mecanismo que brinda la POO para representarla es la HERENCIA DE CLASES. HERENCIA Definiciones Herencia es el concepto en Lenguajes Orientados a Objetos (LOO) que es usado para definir objetos que son "casi como" otros ya existentes, con unos pocos cambios. Una clase C definida como heredera de una clase A, tiene todas las características de A, a las que puede agregar las propias. Herencia es la capacidad de una clase C de acceder a los componentes de otra más general A (nivel superior en la jerarquía) considerándolos como propios e inclusive pudiendo redefinirlos. 24 JERARQUIA de HERENCIA Vehículo Vehículo de pasajeros Camión Tren de carga Vehículo de carga Vehículo de pasajeros con motor Ciclomotor Colectivo Automóvil Deportivo Tipo 4x4 Compacto Tren de pasajeros Combi Larga distancia es-un ESPECIALIZACIÓN/GENERALIZACIÓN Es el proceso de modificación de un concepto genérico para un uso específico. Es la noción que una clase de objetos es un caso especial de otra. Por ejemplo: B es una especialización de A los metales preciosos son una especialización de los metales las novelas de misterio son una especialización de los libros. A B C D Especialización Generalización 25 HERENCIA Superclases y Subclases Ambos conceptos son relativos a la clase que se está analizando Regla de Herencia es-un No hacer que una clase B sea subclase de A, a menos que cada instancia de B pueda ser vista como una instancia de A. SUPERCLASE Clase de la que dependen otras clases en la jerarquía SUPERCLASE SUBCLASE Clase que está subordinada a otra clase en la jerarquía. SUBCLASE Actualmente es comúnmente aceptado como buena práctica que una Clase sea una Clase Abstracta (sin instancias, aunque con la posibilidad de tener implementaciones parciales) o Clase Concreta (o Final, con prohibición de tener extensiones). Clase Abstracta No posee instancia Sus subclases incorporan estructura y comportamiento Admite implementación parcial de algunas operaciones (métodos) Clase Concreta Clase más especializada Poseen instancias Clase Clase Abstracta y Concreta No se considera recomendable emplear Clases que posean simultáneamente Subclases e Instancias. 26 HERENCIA Otro Enfoque Es la propiedad de las subclases de una clase específica, mediante la cual heredan (incluyen) las propiedades de sus superclases. Persona nom bre apellido dni direccion Empleado cargo t it ulo cui l Herencia: cuestiones de Diseño √ La herencia debe ser utilizada solamente para relaciones genuinas “es un tipo de” √ Siempre debe ser posible sustituir un objeto de la subclase por uno de la superclase. √ Todos los métodos en la superclase deben tener sentido en la subclase. √ La herencia utilizada por conveniencia a corto plazo, conduce a problemas en el futuro. Persona nombre caminar() correr() saltar() Perro caminar() correr() saltar() Pila agregar() Eliminar() sacarPr im ero() agrega rP rinc ipio () Lista agregar() Eliminar() sacarPrimero() sacarUltimo() agregarPrincipio() agregarFinal() 27 HERENCIA SIMPLE en una jerarquía, una clase es definida en términos de una sola superclase inmediatamente superior. HERENCIA Tipos HERENCIA MULTIPLE es el caso en que una clase hereda de dos o más clases, que no están relacionadas como una superclase y una subclase una de otra. Problemas Las superclases definen operaciones para el mismo mensaje. Las superclases heredan de una superclase común HERENCIA MULTIPLE Ejemplo Definir la clase Figura_Compuesta, la cual es obviamente una Figura. Una Figura_Compuesta es una Lista de figuras (sus componentes), las cuales pueden ser figuras básicas o compuestas. Figura X Y Nombre Ventana Mover() Dibujar() Rotar() Lista Adicionar() PrimerElemento() Recorrer() Figura_Compuesta Círculo RectánguloLínea 28 POLIMORFISMO Definiciones Significa tener o asumir distintas formas. En el contexto de POO se refiere a la capacidad de las diferentes clases de objetos para responder al mismo protocolo. Esta característica habilita al programador para tratar uniformemente objetos que provienen de clases diferentes. Permite enviar el mismo mensaje a objetos diferentes y que cada uno responda en la forma apropiada según el tipo de objeto que sea, ejecutando su método. El polimorfismo está asociado a la ligadura dinámica (“dynamic binding”). La asociación de un método con su nombre no se determina hasta el momento de su ejecución. El polimorfismo se extiende hacia abajo en la red de herencia porque las subclases heredan los protocolos, pero los métodos pueden estar especializados localmente. Usualmente requiere del empleo de clases abstractas. Figura X Y Nombre Ventana Crear() Borrar() Mover(x, y) ActualizarX(x) ActualizarY(y) Destruir() Dibujar() Circulo Radio Dibujar() Texto Texto Tipo Tamaño Dibujar() Rectángulo Alto Ancho Dibujar() Línea Xfin Yfin Dibujar() POLIMORFISMO (x,y) self Borrar(); self Actualizar(x); self Actualizar(y); self Dibujar(). Clase Concreta Método Abstracto Clase Abstracta ( ) */se define en las subclases*/ Dibujar() tendrá una definición en cada clase concreta 29 OBJETO COMPUESTO Definición Es un objeto compuesto por otros objetos interconectados por la relación parte-de que son instanciados juntos. Es una extensión recursiva de la noción de objetos. Sistema de ArranqueSistema Elec trico Auto Puerta Techo Chasis Cuerpo Objetos Compuestos OBJETOS COMPUESTOS Principios Están especificados por una clase que contiene la descripción que indica las clases de las partes y las interconexiones. El proceso de instanciación crea las instancias correspondientes a todas las partes de la descripción. El proceso de instanciación es recursivo, por lo tanto, un objeto compuesto puede ser usado a su vez como componente. Es posible especializar una descripción por la adición de nuevas partes o substitución de partes existentes. 30 La jerarquía es una clasificación u ordenamiento de abstracciones. La identificación de jerarquías entre las abstracciones que forman parte de un diseño simplifica la comprensión del problema. Las dos jerarquías más importantes en un sistema complejo son su estructura de clases (relaciones de herencia) y su estructura de partes (relaciones parte-de) Para el manejo de la complejidad se utilizan: Abstracciones (su número puede ser elevado) Encapsulamiento (oculta la visión interna de las abstracciones) Modularidad (ofrece una vía para agrupar abstracciones relacionadas lógicamente) JERARQUÍA EJEMPLO DE EMPLEO DEL MODELO DE OBJETOS Las unidades de programa deben ser: abiertas para permitir extensiones, y cerradas a las modificaciones del código preexistente. Es aconsejable diseñar módulos cuyo comportamiento pueda ser modificado sin realizar alteraciones del código fuente del mismo. Este objetivo es más sencillo de alcanzar en el Modelo de Objetos 31 Dibujo de Formas enum FormaType {circulo, cuadrado}; struct Forma { FormaType itsType;}; struct Circulo { FormaType itsType; double Radio; PointCentro;}; struct Cuadrado {SahepType itsType; double Lado; Point SupIzq;}; void DibujarCuadrado (struct Cuadrado*); void DibujarCirculo(struct Circulo*); typedef struct Forma *FormaPointer; void DibujarTodasFormas (FormaPointer list[], int n) { int i; for (i=0; i<n; i++) {struct Forma* s = list[i]; switch (s->itsType) { case cuadrado: DibujarCuadrado ((struct Cuadrado*)s); break; case circulo: DibujarCirculo((structCirculo*)s); break; } } } No respeta el Principio Abierto/Cerrado Para dibujar una nueva forma es necesario modificar el código class Forma {public: virtual void Dibujar() const = 0;}; class Cuadrado : public Forma {public: virtual void Dibujar() const;}; class Circulo : public Forma {public: virtual void Dibujar() const;}; typedef Forma *FormaPointer; void DibujarTodasFormas(FormaPointer list[], int n) { for (int i=0; i<n; i++) list[i]-> Dibujar(); } Dibujo de Formas Si respeta el Principio Abierto/Cerrado En una aplicación compleja las estructuras switch/case se repiten profusamente para cada operación que se desee realizar con formas. Estas estructuras pueden ser difíciles de hallar, y se facilita la posibilidad de cometer errores cuando se las modifica. Cada forma responde al mensaje dibujar 32 PROGRAMACIÓN ORIENTADA A OBJETOS Síntesis de las características 1- La programación consiste en el envío de mensajes. 2 – El resultado del envío de un mensaje a un objeto es un objeto. 3 – La solución del problema consiste en: (a) identificar los objetos en el enunciado del problema (b) identificar los mensajes asociados a cada objeto (c) desarrollar una secuencia de mensajes a objetos que resuelvan el problema 4 – El lenguaje orientado a objetos debe soportar encapsulamiento, abstracción, herencia y polimorfismo. 5 – La unidad de encapsulamiento es el objeto, el cual incluye datos privados, compartidos y descripciones de mensajes. PROGRAMACIÓN ORIENTADA A OBJETOS Síntesis de las características (cont.) 6 – La POO soporta la abstracción por medio de una jerarquía de clases, que representan diferentes clases de objetos. Un protocolo de descripción de clase define las propiedades de cada abstracción. Nuevas abstracciones son agregadas por la adición de nuevas clases. 7 – Las subclases heredan las propiedades de sus superclases incluyendo los datos privados, los compartidos y los mensajes. 8 – Los mensajes heredados pueden ser polimórficamente redefinidos por las subclases. 9 – La POO soporta la definición polimórfica del mismo mensaje en diferentes clases. 33 PROGRAMACIÓN ORIENTADA A OBJETOS Síntesis de las características (cont.) 10 – En POO los datos son almacenados como objetos, los cuales son eliminados automáticamente de la memoria cuando no son más necesarios. Objetos No-Persistentes 11 – La POO provee el soporte completo para la resolución incremental del problema. 12 – Los objetos del sistema y los objetos definidos por el usuario son de la misma categoría. No existe la diferencia entre Tipos Predefinidos y Definidos por el Usuario. 13 – Se soporta completamente la extensibilidad. 14 – El uso de estructuras iterativas y el indexado multinivel está minimizado y localizado en detalles de implementación de mensajes simples. LENGUAJES ORIENTADOS A OBJETOS Un lenguaje soporta un estilo de programación si provee las facilidades que lo hacen conveniente (razonablemente fácil, seguro y eficiente) para usar ese estilo. Un lenguaje no soporta una técnica, si se debe realizar un esfuerzo o tener una destreza excepcional para implementar la misma. 34 LENGUAJES ORIENTADOS A OBJETOS Smalltalk (basado en SIMULA) C++ (basado en C) Object Pascal (basado en Pascal) ExperCommonLisp (basado en Lisp) CLOS (basado en Lisp) Eiffel Flamingo Java (basado en C++) Delphi (basado en Object-Pascal)
Compartir