Вы находитесь на странице: 1из 53

Fundamentos de Programacin Orientada a Objetos

I.- FUNDAMENTOS DE PROGRAMACIN ORIENTADA A OBJETOS 1.1 Evolucin de la programacin 1.2 Conceptos fundamentales de la Programacin Orientada a Objetos 1.2.1 Los lenguajes orientados a objetos 1.3 Relaciones entre clases y objetos 1.4 El papel de clases y objetos en el anlisis y el diseo

Pgina 1

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

I.- FUNDAMENTOS DE PROGRAMACIN ORIENTADA A OBJETOS 1.1 Evolucin de la programacin 1.2 Conceptos fundamentales de la Programacin Orientada a Objetos 1.2.1 Los lenguajes orientados a objetos 1.3 Relaciones entre clases y objetos 1.4 El papel de clases y objetos en el anlisis y el diseo 1.1 Evolucin de la programacin

La evolucin de la programacin puede sintetizarse en tres modelos o paradigmas:

El significado de paradigma (paradigma en latn; paradeigma en griego) en su origen significaba un ejemplo ilustrativo; en particular, enunciado modelo que mostraba todas las inflexiones de una palabra. Un paradigma es una forma establecida de pensar acerca de cmo hacer algo. En el libro The Structure of Scientific Revolutions, el historiador Thomas Kuhn describa un paradigma como un conjunto de teoras, estndares y mtodos que juntos representan un medio de organizacin del conocimiento: es decir, un medio de visualizar el mundo.

La programacin mediante procedimientos (procedural), La programacin estructurada y La programacin orientada a objetos

PROGRAMACION MEDIANTE PROCEDIMIENTOS [PROCEDURAL]


Programacin y abstraccin

La abstraccin es el proceso de extraer las propiedades relevantes de un objeto al tiempo que se ignoran los detalles no esenciales. Las propiedades extradas definen una vista del objeto. En esencia, la abstraccin supone la capacidad de encapsular y aislar, la informacin del diseo, de la ejecucin. Definir una abstraccin significa describir una entidad del mundo real, no importa lo compleja que pueda ser y, a continuacin, utilizar esta descripcin en un programa. La abstraccin es fundamental para gestionar la complejidad del diseo y escritura del software. La abstraccin es la clave para disear buen software. La abstraccin es uno de los medios ms importantes, mediante el cual nos enfrentamos con la complejidad inherente al software. Una abstraccin se centra en la vista externa de un objeto, de modo que sirva para separar el comportamiento esencial de un objeto de su implementacin Como describe Wulft: Los humanos hemos desarrollado una tcnica excepcionalmente potente para tratar la complejidad: abstraemos de ella. Incapaces de dominar en su totalidad los objetos complejos, se ignora los detalles no esenciales, tratando en su lugar con el modelo ideal del objeto y centrndonos en el estudio de sus aspectos esenciales. El proceso de abstraccin fue evolucionando desde la aparicin de los primeros lenguajes de programacin. La abstraccin es esencial para el funcionamiento de una mente humana normal y es una herramienta muy potente para tratar la complejidad. El mtodo ms idneo para controlar la complejidad es aumentar los niveles de abstraccin. Las personas normalmente comprenden el mundo construyendo modelos mentales de partes del mismo; tratan de comprender cosas con las que pueden interactuar. Un modelo mental es una vista simplificada de cmo funciona, de modo que se pueda interactuar con ella. En esencia, este proceso de construccin de modelos es lo mismo que el diseo de software, aunque el desarrollo de software es nico: el diseo de software produce el modelo que puede ser manipulado por una computadora. Sin embargo, los modelos mentales deben ser ms sencillos que el sistema al cual imitan, o en caso contrario sern intiles. Por ejemplo, consideremos un mapa como un modelo de su territorio. A fin de ser til, el mapa debe ser ms sencillo que el territorio que modela. Un mapa nos ayuda, ya que abstrae slo aquellas caractersticas del territorio que deseamos modelar. Un mapa de carreteras modela cmo conducir mejor de una posicin a otra. Un mapa topogrfico modela el contorno de un territorio, quiz para planear un sistema de largos paseos o caminatas.

Pgina 2

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

De igual forma que un mapa debe ser ms pequeo significativamente que su territorio e incluye slo informacin seleccionada cuidadosamente, as los modelos mentales abstraen esas caractersticas de un sistema requerido para nuestra comprensin, mientras ignoran caractersticas irrelevantes. Este proceso de abstraccin es psicolgicamente necesario y natural: la abstraccin es crucial para comprender este complejo mundo. Un conjunto se puede definir por abstraccin como una coleccin no ordenada de elementos en el que no existen duplicados. Utilizando esta definicin, se puede especificar si sus elementos se almacenan en un arreglo, una lista enlazada o cualquier otra estructura de datos. Un vendedor de coches podra ver un coche desde el punto de vista de sus caractersticas de venta. Propiedades relevantes seran el precio, el color, el equipo opcional y la duracin de la garanta. Por otro lado, un mecnico vera el coche desde el punto de vista de los sistemas que necesitan mantenimiento. Para l, propiedades relevantes seran el motor, sistema electrnico de encendido, tipo de aceite, el tamao del filtro de aceite y el nmero y tipo de bujas. Las propiedades relevantes de un objeto vienen definidas por la forma en que se usa o manipula el objeto. Claramente las propiedades de un coche, importantes para un vendedor, son distintas de las de un mecnico. Enfocndose sobre las propiedades relevantes e ignorando los detalles irrelevantes, se puede reducir la complejidad de manejo de un objeto. Consideremos la tarea de encontrar un archivo en un disco y leer su contenido. Si tuvisemos que manejar todos los detalles de bajo nivel para saber cmo encontrar un archivo concreto en el disco y cmo leer sus contenidos, sera una tarea bastante difcil. Deberamos comprender cmo se almacenan los datos en los discos y todos los mandatos de bajo nivel que controlan las operaciones del manejador de disco. Afortunadamente, existe un sistema de archivos que proporciona una visin abstracta de la informacin en un disco, de forma que se pueden ignorar los detalles de bajo nivel. Se puede acceder al archivo sin ms que proporcionar su nombre. El sistema de archivos maneja los detalles de bajo nivel para leer los datos en el disco y devolverlos al programa. El arte de la programacin es el mtodo por el que se describir a una computadora (mediante un lenguaje de programacin) un fenmeno, una accin, un comportamiento o una idea. En general, un programa no es ms que una descripcin abstracta de un procedimiento o fenmeno que existe o sucede en el mundo real. Frecuentemente, un programa imita un comportamiento o accin humana; otras veces simula (es decir, reproduce) un fenmeno fsico. Sin embargo, la relacin entre abstraccin y lenguaje de programacin es doble: por un lado se utiliza el lenguaje de programacin para escribir un programa que es una abstraccin del mundo real; por otro lado se utiliza el lenguaje de programacin para describir de un modo abstracto el comportamiento fsico de la computadora que se est utilizando (por ejemplo, utilizando nmeros decimales en lugar de nmeros binarios, variables en lugar de celdas de memoria direccionadas explcitamente, etc.). En los primeros das de la informtica, los programadores enviaban instrucciones binarias a una computadora, manipulando directamente interrupciones en sus paneles frontales. En la dcada de los cincuenta, los nicos mecanismos de abstraccin eran el lenguaje de mquina y el lenguaje ensamblador. El lenguaje ensamblador ofreca la posibilidad de utilizar mnemnicos, que eran abstracciones diseadas para evitar que los programadores tuvieran que recordar las secuencias de bits que componen las instrucciones de un programa. Ofrece tambin la posibilidad de utilizar nombres simblicos para representar celdas de memoria. El siguiente nivel de abstraccin se consigue agrupando instrucciones primitivas para formar macroinstrucciones. Un conjunto de instrucciones realizadas por un usuario se pueden invocar por una macroinstruccin; una macroinstruccin instruye a la mquina para que realice muchas cosas. Tras los lenguajes de programacin ensambladores aparecieron los lenguajes de programacin de alto nivel, que supusieron un nuevo nivel de abstraccin. Los lenguajes de programacin de alto nivel permitieron a los programadores distanciarse de las caractersticas arquitectnicas especficas de una mquina dada. Cada instruccin en un lenguaje de alto nivel puede invocar varias instrucciones mquina, dependiendo de la mquina especfica donde se compila el programa. Esta abstraccin permita a los programadores escribir software para propsito genrico, sin preocuparse sobre qu mquina ejecutara el programa. Secuencias de sentencias de lenguajes de alto nivel se pueden agrupar en procedimientos y se invocan por una sentencia. El mundo en que vivimos se halla plagado de objetos: aviones, trenes, automviles, telfonos, libros, computadoras, etctera. Sin embargo, en esa poca las tcnicas de programacin no reflejaban esto. Lo procedural [procedimientos] fue el paradigma principal de la programacin, el cual define un programa como un algoritmo escrito en algn lenguaje de programacin. Las razones de este nfasis son principalmente histricas.

Pgina 3

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Desde la poca de su desarrollo, durante los aos cuarenta, las computadoras fueron utilizadas por los matemticos con propsitos militares: el clculo de trayectorias de bombas y la decodificacin de transmisiones hecha por el enemigo o por diplomticos son algunos ejemplos de estos propsitos. Despus de la segunda guerra mundial, las computadoras todava eran utilizadas, principalmente, por los matemticos para resolver problemas con su disciplina. Este panorama se reflej en el primer lenguaje de programacin de alto nivel comercialmente disponible, el cual se introdujo en 1957. Este lenguaje fue FORTRAN, cuyas siglas son un acrnimo para FORmula TRANslation (traduccin de frmulas). Un reflejo adicional de este uso predominante es el hecho de que en los aos sesenta casi todos los cursos de computacin se impartan en los departamentos de ingeniera o matemticas. El trmino de ciencia de la computacin todava no era de uso comn y los departamentos de ciencia de la computacin se encontraban en desarrollo. Esta situacin sufri un cambio drstico principalmente por dos razones. Una de las desventajas con los programas orientados a procedimientos es el fracaso de los lenguajes tradicionales basado en procedimientos en proporcionar medios adecuados para limitar el costo del software, lo cual incluye todos los costos asociados al desarrollo inicial del programa y su mantenimiento subsecuente. La inversin en sofware contribuye en gran medida a los costos totales del proyecto porque estn relacionados directamente con la productividad humana (son sensibles al esfuerzo laboral), mientras que el costo asociado al hardware se relaciona con la tecnologa de fabricacin. Por ejemplo, los microchips que se adquiran por ms de 500 dlares hace diez aos, ahora se pueden comprar por menos de un dlar. Es mucho ms fcil, aumentar drsticamente la productividad de fabricacin en un 1000% con la consecuente reduccin en costo del hardware, que los programadores dupliquen la cantidad o la calidad del cdigo que producen. Si bien los costos del hardware se desplomaron, la productividad de software y los costos relacionados con su desarrollo permanecieron relativamente constantes. Otra de las desventajas de la programacin basada en procedimientos fue la aparicin de pantallas grficas y el interes subsecuente en las aplicaciones utilizando ventanas. El acceso a una interfaz grfica de usuarios (GUI) donde un usuario puede moverse con facilidad alrededor de una sola ventana es un desafo cuando se intenta lograrlo con un cdigo procedural. La programacin mltiple y las posibles ventanas que se traslapan en una misma pantalla grfica simplemente aumenta la enorme complejidad cuando se utiliza cdigo procedural. Las razones anteriores movitaron la bsqueda de nuevas soluciones o mejoras a la programacin mediante procedimientos, lo que condujo a la programacin estructurada.

PROGRAMACION ESTRUCTURADA

Durante la dcada de los sesenta, muchos de los grandes esfuerzos para el desarrollo de software encontraron severas dificultades:

Los tiempos del desarrollo de software generalmente se retrasaban Los costos rebasaban en gran medida a los presupuestos y Los productos terminados no eran confiables

La gente comenz a darse cuenta de que el desarrollo de software era una actividad mucho ms compleja de lo que haban imaginado. Las actividades de investigacin en la dcada de los sesenta dieron como resultado la evolucin de la programacin mediante procedimientos a la programacin estructurada, un mtodo disciplinado para escribir programas que son:

Ms claros Fciles de probar y corregir y Ms fciles de modificar que los no estructurados

Estas mejoras de la programacin mediante procedimientos condujeron a nuevos conceptos como son: Estructuras de control, funciones y mdulos. Estructuras de control

Tal como los arquitectos disean edificios empleando la sabidura colectiva de su profesin, as deberan los programadores disear sus programas. Nuestro campo es ms joven que la arquitectura y nuestra sabidura colectiva es considerablemente menor.

Pgina 4

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Aprendimos que la programacin estructurada produce programas que son ms fciles de entender, probar, corregir, modificar, e incluso comprobar en el sentido matemtico, que los programas que no estn estructurados. La figura 1.1 utiliza diagramas de actividad (o de flujo) para resumir las estructuras de control. Los estados inicial y final indican la entrada y salida sencillas de cada estructura de control. Conectar de manera arbitraria smbolos individuales en un diagrama de actividad puede provocar que los programas no estn estructurados. Por lo tanto, la profesin de computacin eligi un conjunto limitado de estructuras de control que se pueden combinar solamente de dos sencillas maneras para construir programas estructurados.

Figura 1.1. Estructuras de secuencia de entrada sencilla/salida sencilla, seleccin y repeticin de C++.

Por simplicidad, solamente se utilizan estructuras de entrada sencilla /salida sencilla; slo existe una forma de entrar y una forma de salir de cada estructura de control. Conectar estructuras de control en secuencia para formar programas estructurados es sencillo, el estado final de una estructura de control se conecta con el estado inicial de la siguiente estructura de control, esto es, las estructuras de control se colocan una sobre la otra en el programa. A esto le llamamos apilar estructuras de control. Las reglas para formar programas estructurados permiten, adems, anidar estructuras de control. La figura 1.2 muestra las reglas para formar programas estructurados. Adems, las reglas suponen que comenzamos con el diagrama de actividad ms sencillo (figura 1.3), el cual consiste solamente en un estado inicial, un estado de accin, un estado final y flechas de transicin.

Pgina 5

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Reglas para formar programas estructurados 1. 2. 3. 4. Comience con el diagrama de actividad ms sencillo (figura 1.3). Cualquier estado de accin se puede reemplazar por dos estados de accin en secuencia. Cualquier estado de accin se puede representar mediante cualquier estructura de control (secuencia, if, if/else, switch, while, do/while o for). Las reglas 2 y 3 se pueden aplicar con la frecuencia que usted desee, en cualquier orden. Figura 1.2. Reglas para formar programas estructurados.

Figura 1.3. Diagrama de actividad ms sencillo.

Aplicando las reglas de la figura 1.2 se produce un diagrama de actividad con la apariencia de una cuidadosa construccin con bloques. Por ejemplo, al aplicar de manera repetida la regla 2 al diagrama de actividad ms sencillo, provoca un diagrama de actividad que contiene muchos estados de accin en secuencia (figura 1.4). La regla 2 genera una pila de estructuras de control, de manera que llamaremos a la regla 2 la regla del apilado. [Nota: Las lneas verticales punteadas de la figura 1.4 no son parte del UML. Las utilizamos para separar los cuatro diagramas de actividad que muestran la aplicacin de la regla 2 de la figura 1.2.]

Figura 1.4. Aplicacin repetida de la regla 2 de la figura 1.2 al diagrama de actividad ms sencillo.

La regla 3 se llama regla de anidamiento. Al aplicar de manera repetida la regla 3 al diagrama de actividad ms sencillo, provoca un diagrama de actividad con estructuras de control anidadas ms pulcras. Por ejemplo, en la figura 1.5 el estado de accin del diagrama de actividad ms sencillo se reemplaza con una estructura de seleccin doble (if/else). Entonces, la regla 3 se aplica de nuevo a los estados de accin en la estructura de seleccin doble, y reemplaza cada uno de estos estados de accin con una estructura de seleccin doble. Los smbolos punteados de estados de accin alrededor de cada una de las estructuras de seleccin doble representan el estado de accin que se reemplaz en el diagrama de actividad ms simple original.

Pgina 6

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

[Nota: Las flechas punteadas y los smbolos de estados de accin punteados que aparecen en la figura 1.5 no son parte del UML. Aqu los utilizamos como ayudas pedaggicas para mostrar que cualquier estado de accin se puede representar mediante una estructura de control].

Figura 1.5. Aplicacin repetida de la regla 3 de la figura 1.2 al diagrama de actividad ms sencillo

La regla 4 genera estructuras anidadas ms grandes, ms involucradas y ms profundas. Los diagramas que surgen de la aplicacin de las reglas de la figura 1.2 constituyen un conjunto de todos los diagramas de actividad posibles y, por lo tanto, el conjunto de todos los posibles programas estructurados. La belleza del mtodo estructurado es que utilizamos slo siete estructuras de control de entrada sencilla/salida sencilla y las ensamblamos solamente de dos maneras posibles. Si se siguen las reglas de la figura 1.2, no se puede escribir un diagrama de actividad con sintaxis incorrecta (tal como el de la figura 1.6). Si no est seguro de si un diagrama en particular es correcto, aplique las reglas de la figura 1.2 a la inversa, para reducir el diagrama al diagrama de actividad ms sencillo. Si el diagrama se reduce al diagrama de actividad ms sencillo, el original est estructurado, de lo contrario, no lo est.

Pgina 7

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Figura 1.6. Diagrama de actividad con sintaxis no permitida. Resumiendo Los resultados de Bohm y Jacopini indican que slo se necesitan tres formas de estructuras de control:

Secuencia. Seleccin. Repeticin.

La estructura de secuencia es trivial. Simplemente liste las instrucciones a ejecutar, en el orden en el que se deben ejecutar: La seleccin se implementa en una de estas tres maneras:

Estructura if (seleccin simple). Estructura if/else (seleccin doble). Estructura switch (seleccin mltiple).

De hecho, es bastante sencillo probar que la estructura if sencilla es suficiente para proporcionar cualquier forma de seleccin, todo lo que se puede hacer con la estructura if/else y la estructura switch se puede implementar mediante la combinacin de estructuras if (aunque quiz no sea tan claro y eficiente). La repeticin se implementa en una de estas tres formas:

estructura while. estructura do/while. estructura for.

Es sencillo probar que la estructura while es suficiente para proporcionar cualquier forma de repeticin. Todo lo que se puede hacer con una estructura do/while y con la estructura for, se puede hacer con la estructura while (aunque quiz no de manera sencilla). La combinacin de estos resultados muestra que cualquier forma de control necesaria en un programa en C++ se puede expresar en trminos de las siguientes estructuras de control:

secuencia. estructura if (seleccin). estructura while (repeticin).

Estas estructuras de control se pueden combinar solamente de dos maneras, apiladas o anidadas. En realidad, la programacin estructurada promueve la simplicidad. La programacin estructurada alienta el uso de abstracciones de control, tales como ciclos, sentencias if-then, que se han incorporado en lenguajes de alto nivel. Estas sentencias de control permitieron a los programadores abstraer las condiciones comunes para cambiar la secuencia de ejecucin. Nuestro objetivo es explicar cmo crear programas a partir de estructuras de control que contienen estados de accin y decisin. Veremos a continuacin otra unidad de programacin estructurada llamada funcin. Aprenderemos a crear programas grandes mediante la combinacin de funciones que, a su vez, estn compuestas por estructuras de control. Tambin explicaremos cmo es que las funciones promueven la reutilizacin del software.

Pgina 8

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Funciones

Las funciones o procedimientos fueron uno de los primeros mecanismos de abstraccin que se utilizaron ampliamente en los lenguajes de programacin. Las funciones permiten realizar tareas que se ejecutaban repetidamente, o son ejecutadas con ligeras variaciones, que se reunen en una entidad y se reutilizan, en lugar de duplicar el cdigo varias veces. Por otra parte, el concepto de funcin proporcion la primera posibilidad de ocultamiento de la informacin. Un programador puede escribir un procedimiento o conjunto de procedimientos que utilizan otros programadores. Estos programadores no necesitaban conocer con exactitud los detalles de la implementacin; slo necesitaban el interfaz necesario. Sin embargo, las funciones no resuelven todos los problemas. En particular, no es un mecanismo efectivo para ocultar la informacin, tampoco resuelve el problema que se produce al trabajar mltiples programadores con nombres de procedimientos idnticos. Para resolver este problema se ha desarrollado un mecanismo de estructuracin diferente. Mdulos

La modularidad se refiere al proceso de dividir un objeto en piezas ms pequeas, o mdulos, para que algn objetivo sea ms fcil de conseguir. Por ejemplo, se podra dividir un sistema complejo en componentes, de forma que cada componente pueda ser probado de forma individual. Cuando se monta un automvil, sus distintos componentes, tales como el motor, la transmisin y el radio, han sido ya probados individualmente. La modularidad reduce el tiempo para probar el coche y la probabilidad de que un coche sea montado con un defecto. La mayora de los sistemas complejos son modulares. Estn construidos combinando componentes o paquetes, de funcionamiento ms sencillo. Una adecuada modularizacin de un sistema complejo tambin ayuda a manejar su complejidad. Dividir las cosas en piezas ms pequeas y ms sencillas de entender hace que un sistema grande sea ms sencillo de comprender. Como se ver la modularidad es la propiedad de un sistema que permite su descomposicin en un conjunto de mdulos cohesivos y dbilmente acoplados. En computacin la modularidad es la propiedad que permite subdividir una aplicacin en partes ms pequeas (llamadas mdulos), cada una de ellas debe ser tan independiente como sea posible de la aplicacin en s y de las restantes partes. La modularizacin, como indica Liskov, consiste en dividir un programa en mdulos que se puedan compilar por separado, pero que tienen conexiones con otros mdulos. Un mdulo es una tcnica que proporciona la posibilidad de dividir sus datos y procedimientos en una parte privada slo accesible dentro del mdulo- y parte pblica -accesible fuera del mdulo-. Se pueden definir tipos, datos (variables y procedimientos) en cualquiera de las dos partes. El criterio a seguir en la construccin de un mdulo es que si no se necesita algn tipo de informacin, no se debe tener acceso a ella. Este criterio es el ocultamiento de la informacin. Una clasificacin de objetos basada en alguna relacin entre ellos es una jerarqua. Las jerarquas tambin ayudan a comprender sistemas y organizaciones complejas. La figura 1.7 incluye un diagrama de organizacin de una compaa tpica. El diagrama muestra la jerarqua de empleados basndose en la relacin de quin informa a quin. La jerarqua de la compaa ayuda a los empleados a comprender la estructura de su compaa y su relacin dentro de ella.

Pgina 9

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Director

Director de ventas

Tesorero

Director de investigacin

Director de operaciones

Gerente ventas zona

Jefe cientfico Desarrollo de lenguajes de programacin Desarrollo sistema Desarrollo de aplicaciones

Gerente de patentes

Gerente de ventas zona

Investigacin de patentes

Gerente ventas zona

Aplicacin de patentes

Gerente ventas zona

Figura 1.7. Diagrama de la organizacin de una compaa

Los cientficos han usado esta tcnica desde hace mucho tiempo para identificar y clasificar especies del reino animal y vegetal. Un orden jerrquico basado en las relaciones de la naturaleza se denomina taxonoma. Tal jerarqua hace que las abstracciones sean ms fciles de entender porque expone la relacin entre caractersticas y comportamientos comunes. Un concepto importante introducido con la programacin estructurada, ya comentado anteriormente, es el de abstraccin, que se puede definir como la capacidad para examinar algo sin preocuparse de sus datos internos. Una forma de ordenar abstracciones similares, en sistemas complejos compuestos de abstracciones, es ir del concepto ms general al menos general. La tcnica top-down, descendente, o refinamiento sucesivo comienza descomponiendo el programa en piezas manejables ms pequeas, conocidas como funciones (subrutinas, subprogramas o procedimientos), que realizan tareas menos complejas. En un programa estructurado es suficiente conocer que un procedimiento dado realiza una tarea especfica. El cmo se realiza esta tarea no es importante, sino conocer cmo se utiliza correctamente la funcin y lo que hace.

Funciones

Funcin1

Funcin2

Funcin3

Funcin4

Funcin11

Funcin21

Funcin22

Funcin31

Funcin41

Funcin42

Funcin221

Funcin311

Funcin411

Figura 1.8. Programa estructurado.

Un programa estructurado se construye rompiendo el programa en funciones. Esta divisin permite escribir cdigo ms claro y mantener el control sobre cada funcin.

Pgina 10

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Los mdulos resuelven algunos problemas, pero no todos los problemas del desarrollo de software. Por ejemplo, los mdulos permitirn a nuestros programadores ocultar los detalles de la implementacin de su pila, pero qu sucede si otros usuarios desean tener dos o ms pilas? Supongamos que un programador ha desarrollado un tipo de dato complejo o (representacin de un nmero complejo) y ha definido las operaciones aritmticas sobre nmeros complejos -suma, resta, multiplicacin y divisin-; asimismo ha definido rutinas para convertir nmeros convencionales a complejos. Se presenta un problema: slo puede manipular un nmero complejo. El sistema de nmeros complejos no ser til con esta restriccin, pero es la situacin en que se encuentra el programador con mdulos simples. Los mdulos proporcionan un mtodo efectivo de ocultamiento de la informacin, pero no permiten realizar instanciacin, que es la capacidad de hacer mltiples copias de las zonas de datos. A medida que la complejidad de un programa crece, tambin crece su independencia de los tipos de datos fundamentales que procesa. En un programa estructurado, las estructuras de datos de un programa son tan importantes como las operaciones realizadas sobre ellas. Esto se hace ms evidente a medida que crece un programa en tamao. Los tipos de datos se procesan en muchas funciones dentro de un programa estructurado, y cuando se producen cambios en esos tipos de datos, las modificaciones se deben hacer en cada sentencia que acta sobre esos tipos de datos dentro del programa. Esta tarea puede ser frustrante y consumir un tiempo considerable en programas con millones de lneas de cdigo y miles de funciones. En un programa estructurado, los datos locales se ocultan dentro de funciones y los datos compartidos se pasan como argumentos (Fig. 1.9).

Variables globales

Accesibles, por cualquier funcin

Variables locales

Variables locales

Funcin A Accesible slo por funcin A

Funcin B Accesible slo por funcin B

Figura 1.9. Variables globales y locales.

Dado que muchas funciones acceden a los mismos datos, el medio en que se almacenan los datos se hace ms crtico. La disposicin de los datos no se puede cambiar sin modificar todas las funciones que accedan a ellos. Si, por ejemplo, se aaden nuevos datos, se necesitar modificar todas las funciones que accedan a los datos, de modo que ellos puedan tambin acceder a esos elementos.

Pgina 11

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Datos globales

Datos globales

Datos globales

Funcin1

Funcin2

Funcin3

Funcin4

Figura 1.10. Descomposicin de un programa en mdulos (funciones) Resumiendo La programacin estructurada se emplea desde el principio de la dcada de los setenta y es uno de los mtodos ms utilizados en el campo de la programacin. Uno de los resultados ms tangibles de esta investigacin fue el desarrollo del lenguaje de programacin estructurado Pascal por Niklaus Wirth, en 1971. Pascal, cuyo nombre se debe al aniversario de los setecientos aos del nacimiento del filsofo y matemtico Blas Pascal, fue diseado para la enseanza de la programacin estructurada en ambientes acadmicos; convirtindose en el lenguaje de programacin favorito en varias universidades. Desafortunadamente, el lenguaje careca de muchas de las caractersticas necesarias para poder utilizarse en aplicaciones comerciales, industriales y gubernamentales, de manera que no ha sido muy aceptado fuera de las universidades. Desventajas de la programacin estructurada

Los programas basados en funciones son difciles de disear. El problema es que sus componentes principales funciones y estructuras de datos- no modelan bien el mundo real. Por ejemplo, supongamos que se est escribiendo un programa para crear los elementos de un interfaz grfico de usuario: mens, ventanas, cuadros de dilogo, etc. Qu funciones se necesitarn? Qu estructuras de datos? La solucin sera ms aproximada si hubiera una correspondencia lo ms estrecha posible entre los mens y ventanas y sus correspondientes elementos de programa. Cuando diferentes programadores trabajan en equipo para disear una aplicacin, a cada programador se le asigna la construccin de un conjunto especfico de funciones y tipos de datos. Dado que los diferentes programadores manipulan funciones independientes que relacionan a tipos de datos compartidos mutuamente, los cambios que un programador hace a los datos se deben reflejar en el trabajo del resto del equipo. Aunque los programas estructurados son ms fciles de disear en grupo, los errores de comunicacin entre miembros de equipos pueden conducir a gastar tiempo en reescrituracin. Por otra parte, los lenguajes tradicionales presentan dificultad en la creacin de nuevos tipos de datos. Los lenguajes de programacin tpicamente tienen tipos de datos incorporados: enteros, punto flotante, caracteres, etc. Cmo crear sus propios tipos de datos? Los tipos definidos por el usuario y la facilidad para crear tipos abstractos de datos en determinados lenguajes es la propiedad conocida como extensibilidad. Los lenguajes tradicionales normalmente no son extensibles, y eso hace que los programas tradicionales sean ms complejos de escribir y mantener. En resumen, con los mtodos tradicionales, un programa se divide en dos componentes: procedimientos y datos. Cada procedimiento acta como una caja negra. Esto es, es un componente que realiza una tarea especfica, tal como convertir un conjunto de nmeros o visualizar una ventana. Este procedimiento permite empaquetar cdigo programa en funciones, pero qu sucede con los datos? Las estructuras de datos utilizadas en programas son con frecuencia globales o se pasan explcitamente como parmetros. Una forma para aumentar significativamente la productividad del programador consiste en crear un cdigo que se

Pgina 12

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

pueda reutilizar sin realizar una revisin extensiva y sin volver a probarlo y evaluarlo. La incapacidad del cdigo estructurado en base a procedimientos, para proporcionar su reutilizacin condujo a la bsqueda de otros enfoques de software.

PROGRAMACION ORIENTADA A OBJETOS

Para entender mejor la programacin orientada a objetos, haremos un breve estudio sobre las causas fundamentales que llevaron a cabo la creacin de la misma. Podemos resumir como causas principales las siguientes:

La complejidad inherente al software La crisis del software Los Factores de la calidad del software

La complejidad inherente al software

A medida que las computadoras se han vuelto ms rpidas, baratas y ms potentes, se han convertido en herramientas indispensables para cientficos e ingenieros. Quiz lo ms importante es que se han vuelto parte de nuestra vida. Sin embargo, tener computadoras rpidas y baratas es slo la mitad de la ecuacin. Aunque ha habido tremendos avances en el campo del hardware, no han existido avances de la misma magnitud en el diseo de software. Parte del problema es que las expectativas para el software han crecido considerablemente. La figura 1.11 muestra lo que se conoce como paradoja de la complejidad: la complejidad del sistema crece a medida que se intenta hacer ms fcil su uso.

Alta

Complejidad total del software Complejidad Sencillez para el usuario

Baja
Figura 1.11. A medida que el software es ms fcil de usar, se incrementa su complejidad interna.

Por ejemplo, los primeros sistemas grficos necesitaban que los usuarios especificaran detalles de cmo debera verse el grfico, dando informacin tan variada como los puntos finales del grfico, la escala, cmo y dnde habra que colocar las etiquetas. Esencialmente, el usuario tena que hacer la mayor parte del trabajo. Actualmente las nuevas herramientas para hojas de clculo contienen sistemas expertos, que analizan los datos y producen un grfico de forma automtica. Tales sistemas de representacin automtica son mucho ms fciles de usar, pero esta facilidad tiene un precio, el incremento de la complejidad del software. Se dice que la complejidad del software es una propiedad esencial no accidental (si hay software, hay complejidad!). Esta complejidad se deriva de dos elementos:

La complejidad del dominio del problema La dificultad de gestionar el proceso de desarrollo (la interaccin entre componentes) Pgina 13
Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

La complejidad del dominio del problema

Los problemas a resolver mediante software implican normalmente elementos ineludibles de complejidad, en la que se encuentran una gran cantidad de requisitos, en muchas ocasiones contradictorios. Esta complejidad se produce por:

Las difciles interacciones entre los usuarios de un sistema y sus desarrolladores.

Los usuarios encuentran generalmente muy difcil precisar sus necesidades de forma que los desarrolladores puedan comprender. En casos extremos los usuarios suelen tener slo ideas vagas de lo que desean que haga el sistema. Los usuarios y desarrolladores tienen diferentes perspectivas de la naturaleza del problema y hacen suposiciones diferentes sobre la naturaleza de la solucin. El medio comn de expresar los requisitos hoy en da es utilizar un gran volumen de textos, en ocasiones acompaados por esquemas y dibujos. Tales documentos son difciles de comprender, estn abiertos a diferentes interpretaciones y con frecuencia contienen elementos que son diseos en lugar de requisitos esenciales.

Los requisitos de un sistema de software cambian durante su desarrollo. Esto supone que un sistema grande tiende a evolucionar con el tiempo y el mantenimiento del software en ocasiones es un trmino que no siempre est bien acuado. Para ser ms preciso, existen diferentes trminos a definir: El mantenimiento que busca errores; la evolucin que responde a cambios de requisitos y la conservacin cuando se utilizan medios para mantener piezas de software en funcionamiento. Desgraciadamente, la realidad sugiere que un porcentaje alto de los recursos de desarrollo de software se gastan en la conservacin del software.

La dificultad de gestionar el proceso de desarrollo

El tamao de un programa no es una gran virtud en un sistema de software. Sin embargo, la elaboracin de un programa de gran dimensin requiere la escritura de grandes cantidades de nuevo software y la reutilizacin del software existente. Recordemos que hace dos o tres dcadas los programas en lenguaje ensamblador se construan a base de centenares de lneas. Hoy es usual encontrar sistemas en funcionamiento cuyo tamao se mide en cientos de miles o incluso millones de lneas de cdigo. Esta caracterstica se facilita descomponiendo nuestras implementacin en centenares y a veces millones de mdulos independientes. No es inusual que los programas de aplicacin, tales como las hojas de clculo, procesadores de texto y programas de dibujo, consten de cientos de miles de lneas de cdigo. Otro factor que incrementa la complejidad es la interaccin entre componentes. Por ejemplo, un procesador de texto puede contener un componente para correccin ortogrfica y otro que proporcione servicios de diccionario de sinnimos. Consideremos el corrector ortogrfico. Cuando se detecta un posible error de ortografa, el corrector debe notificarlo al usuario. Por lo tanto, el corrector ortogrfico, debe relacionarse con el componente de la aplicacin que crea una ventana o caja de dilogo, de forma que el posible error pueda mostrarse en pantalla y que se pueda preguntar al usuario acerca de la accin a ejecutar, si se debe hacer algo. Si el usuario est de acuerdo en que hay un error ortogrfico, el corrector puede corregirlo. Para hacer la correccin, el corrector debe interaccionar con el componente del procesador de texto responsable de reemplazar texto en el documento. Obviamente, a medida que el nmero de componentes crece, el nmero de interacciones entre componentes crece rpidamente.

Pgina 14

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Ingeniera de Software

La Ingeniera de Software es el rea de la computacin que tiene que ver con las tcnicas de construccin de software de gran tamao. El objetivo de un Ingeniero de Software es producir un software que sea:

Fiable. Comprensible. Rentable. Adaptable. Reutilizable.

Examinemos cada una de estas propiedades.

Un software debera ser fiable, es decir, debera funcionar correctamente y sin fallas. Imagine que ha pasado varias horas escribiendo un texto para un curso en un procesador de textos y, cuando lo tiene casi terminado, el procesador de textos falla de forma inesperada. Se pierde todo su trabajo. Sin duda, estara muy enfadado y tendra todo el derecho a estarlo. Aunque la falla de un procesador de textos es molesta, la prdida es insignificante comparada con la prdida potencial cuando falla un sistema crtico: las vidas humanas. Un sistema de seguridad crtico es aquel en el que una falla podra significar la prdida de una vida humana. Ejemplos de este tipo de sistemas son los aviones militares y civiles, las mquinas de terapia radioactiva y los marcapasos. Una falla del software en cualquiera de estos sistemas podra tener consecuencias desastrosas. Una forma de conseguir que el software sea ms fiable es hacerlo ms fcil de comprender o comprensible. Es decir, lograr que la operacin y el diseo del sistema sean fcilmente entendibles por otros profesionales del software. La comprensibilidad es muy importante porque los software de gran tamao son construidos por muchas personas agrupadas en equipos de trabajo. La construccin del software ir mejor y con menos errores si todo el mundo que trabaja en la aplicacin entiende la operatividad global del sistema y sus componentes. La comprensibilidad es tambin muy importante debido a la larga vida del software. Un producto de software suele evolucionar con el tiempo y a menudo Ingenieros del Software, que no tienen nada que ver con el producto original, son los que se encargan de introducir mejoras y arreglar los errores del producto. Este proceso se llama mantenimiento del software. Si la prxima generacin de Ingenieros del Software comprende cmo funciona, las modificaciones de los sistemas complejos, aunque difciles, se podrn llevar a cabo. Por el contrario, es extremadamente difcil hacer modificaciones o correcciones para un sistema pobremente diseado. A menudo, es ms econmico reconstruir el sistema desde el principio. Como medida de la dificultad del mantenimiento del software, los expertos estiman que el 67% del costo de desarrollo del software se dedica al mantenimiento. Este costo puede reducirse cuando el diseo y el funcionamiento del sistema son comprensibles. Por la discusin previa, se puede ver que un software debera ser rentable. Es decir, el costo de desarrollo y mantenimiento del software no debera exceder el beneficio esperado por la venta del producto. Muchas compaas de software han ido a la bancarrota por haber subestimado los costos de desarrollo de un sistema. Un componente muy relacionado con el costo es el tiempo que se necesita para disear y construir el software. Ser el primero en introducir un producto en el mercado da a una compaa una decidida ventaja sobre sus competidores. Reducir el tiempo para desarrollar un producto puede reducir costos y por lo tanto, incrementar los beneficios. Debido a la larga vida del software, el software debera ser adaptable. A menudo, es difcil predecir qu caractersticas y capacidades pueden querer los clientes del software. El mantenimiento adaptativo involucra cambios y aadiduras al software que mejoran la efectividad o competitividad del producto. Diseando software al que puedan aadir fcilmente en el futuro nuevas caractersticas y capacidades, el Ingeniero del Software puede reducir los costos de mantenimiento global. Por el alto costo de desarrollo, el software debera ser reutilizable. Si se ha de gastar muchos millones de dlares en un software, tiene sentido hacer sus componentes flexibles de forma que puedan ser reutilizados cuando se desarrolle

Pgina 15

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

un nuevo sistema. Esta estrategia es ciertamente una prctica frecuente en otros negocios. La reutilizacin puede mejorar la fiabilidad, reducir los costos de desarrollo y mejorar el mantenimiento.

La cantidad de trabajo que conlleva exige el uso de un equipo de desarrolladores, aunque se trata por todos los medios de que este equipo sea lo ms pequeo posible. Ahora bien, a medida que hay mas desarrolladores, se producen comunicaciones entre ellos mas complejas, e incluso con coordinacin difcil entre ellos, particularmente si el equipo est disperso geogrficamente, como suele ser el caso de proyectos grandes. La descomposicin de una aplicacin en entidades y relaciones que son significativas a los usuarios es un anlisis convencional con tcnicas de diseo. Con la programacin orientada a objetos, este proceso de descomposicin se extiende a la fase de implementacin. Es ms fcil disear e implementar aplicaciones orientadas a objetos, ya que los objetos en el dominio de la aplicacin se corresponden directamente con los objetos en el dominio del software. Los Ingenieros del Software han desarrollado un cierto nmero de principios de diseo que ayudan a llevar a cabo los objetivos marcados en la seccin anterior gestionando la inevitable complejidad del software de sistemas grandes, estos principios son: Principios de diseo en Ingeniera de Software

Abstraccin. Modularidad. Encapsulamiento u ocultamiento de la informacin.

Estos principios de diseo de la Ingeniera de Software ya han sido tratados en otra parte de estas notas, sin embargo, es conveniente comprender que los tipos abstractos de datos es uno de los conceptos ms interesantes de la abstraccin; el principio de encapsulamiento u ocultamiento de la informacin tiene caractersticas mucho ms poderosas que las que se realizan en la programacin estructurada, aclaremos un poco ms estos conceptos.

Un Tipo Abstracto de Dato (TAD) es un tipo de dato definido por el programador que se puede manipular de un modo similar a los tipos de datos definidos por el sistema. Al igual que los tipos definidos por el sistema, un tipo abstracto de dato corresponde a un conjunto (puede ser de tamao indefinido) de valores legales de datos y un nmero de operaciones primitivas que se pueden realizar sobre esos valores. Los usuarios pueden crear variables con valores que estn en el rango de valores legales y pueden operar sobre esos valores utilizando las operaciones definidas. Por ejemplo, en el caso de una pila se puede definir dicha pila como un tipo abstracto de datos y las operaciones sobre la pila como las nicas operaciones legales que estn permitidas para ser realizadas sobre instancias de la pila. Los mdulos se utilizan frecuentemente como una tcnica de implementacin para tipos abstractos de datos. El tipo abstracto de datos es un concepto ms terico. Para construir un tipo abstracto de datos se debe poder:

Exponer una definicin del tipo. Hacer disponible un conjunto de operaciones que se puedan utilizar para manipular instancias de ese tipo. Proteger los datos asociados con el tipo de modo que slo se pueda actuar sobre ellos con las rutinas proporcionadas. Permitir instancias mltiples del tipo.

Los mdulos son mecanismos de ocultamiento de informacin y no cumplen bsicamente ms que los apartados 1 y 2. El encapsulamiento u ocultamiento de la informacin, es el proceso de separar los aspectos de un objeto en externos e internos. Los aspectos externos de un objeto deben ser visibles o conocidos, para otros objetos del sistema. Los aspectos internos son detalles que no deberan afectar a otras partes del sistema. Ocultar ciertos aspectos de un objeto permite modificarlos sin afectar a otras partes del sistema. Por ejemplo, los aspectos externos del radio de un coche son los controles y los tipos de conexiones necesarios para conectar el radio al sistema elctrico, los altavoces y la antena. Los aspectos internos son los detalles del funcionamiento del radio. Para instalar y usar el radio en un coche, no se necesita conocer nada de ingeniera elctrica. Esencialmente, el radio puede verse como una caja negra con botones y cables.

Pgina 16

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

El encapsulamiento es la propiedad que permite asegurar que el contenido de la informacin de un objeto est oculta al mundo exterior: el objeto A no conoce lo que hace el objeto B y viceversa. El encapsulamiento (tambin se conoce como ocultamiento de la informacin), en esencia, es el proceso de ocultar todos los secretos de un objeto que no contribuyen a sus caractersticas esenciales. El encapsulamiento permite la divisin de un programa en mdulos. Estos mdulos se implementan mediante clases, de forma que una clase representa el encapsulamiento de una abstraccin. En la prctica, esto significa que cada clase debe tener dos partes: un interfaz y una implementacin. El interfaz de una clase captura slo su vista externa y la implementacin contiene la representacin de la abstraccin, as como los mecanismos que realizan el comportamiento deseado. Un gran beneficio del ocultamiento de informacin es que ayuda a hacer cambios en sistemas complejos. Se puede reemplazar la radio de un coche por un reproductor de CD sin afectar a otros componentes del vehculo. Debido a que el manejo de la radio ha sido encapsulado y su vista externa est definida mediante controles y conectores, se puede quitar el radio viejo, insertar el nuevo y conectarlo. Cuando se aplica al diseo de sistemas de software, el encapsulamiento permite que se pueda cambiar el comportamiento interno de un componente software sin afectar a otros aspectos del sistema. Por ejemplo, si el principio de encapsulamiento ha sido aplicado correctamente a un sistema automtico de correo de voz, debera ser capaz de cambiar el componente que se encarga de almacenar los mensajes sin afectar a otras partes del sistema. Se podra incrementar el nmero de mensajes que un usuario puede almacenar. Si el sistema de almacenamiento de mensajes ha sido debidamente ocultado y aislado, este cambio no debera afectar a la forma en que los usuarios acceden al sistema y dictan o leen mensajes. La crisis del software

En 1968 una conferencia sobre software, patrocinada por la OTAN, asumi los trminos ingeniera del software y crisis del software. Con estos trminos se quera expresar que el software era caro, poco fiable y escaso. Las metodologas y tcnicas estructuradas que han reinado en la dcada de los setenta y ochenta no han eliminado el problema, de hecho la crisis del software contina hoy en da. Pese a las muchas herramientas y mtodos utilizados, los problemas del diseo descendentes permanecen igual, posiblemente debido a que la complejidad del problema ha crecido considerablemente. Entre las diferentes fases del ciclo de vida del software (Figura 1.12), el mantenimiento, aunque en otro tiempo fue despreciada su importancia, se considera actualmente como uno de los problemas ms graves en el desarrollo del software. Muchos investigadores sugieren que los costos del mantenimiento requieren ms de la mitad de los costos y recursos globales del desarrollo total del software. Anlisis

Diseo

Implementacin

Depuracin

Mantenimiento Figura 1.12. Ciclo de vida del software

Pgina 17

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Anlisis 6% Diseo 5%

Implementacin 7%

Depuracin 15 %

Mantenimiento 67% Figura 1.13. Costos de las diferentes fases del ciclo de vida de un proyecto software.

Los cambios realizados en la evolucin de un programa son el punto dbil de los mtodos tradicionales de desarrollo de software, siendo paradjicamente uno de los puntos fuertes de los mtodos de desarrollo de software orientado a objetos. En 1986, Fredrick P. Brooks, en un famoso artculo, apuntaba que en los ltimos diez aos no se haba producido ningn progreso significativo en el desarrollo de software, y analizaba crticamente todas las tecnologas ms prometedoras. Aunque l confesaba que tena ms confianza en la programacin orientada a objetos que en cualquier otra tecnologa, mantena dudas sobre sus ventajas efectivas. Recientemente, las propuestas de reusabilidad o reutilizacin, de componentes software, se consideran como bloques iniciales para la construccin del programa, de modo similar a la construccin de cualquier objeto complejo (tal como un automvil) que se construye ensamblando sus partes. En respuesta al artculo de Brooks, Brad Cox, el inventor de Objective-C, public un artculo en el que esencialmente rebata las tesis de Brooks:

Existe una bala de plata. Es un arma tremendamente potente, impulsada por vastas fuerzas econmicas a la que nuevos obstculos tcnicos slo pueden resistir brevemente. La bala de plata es un cambio cultural en lugar de un cambio tecnolgico. Es un nuevo paradigma; una revolucin industrial basada en partes reutilizables e intercambiables que modificarn el universo del software, de igual modo que la revolucin industrial cambi la fabricacin.

Por consiguiente, la POO (Programacin Orientada a Objetos) no slo son nuevos lenguajes de programacin, sino un nuevo modo de pensar y disear aplicaciones que pueden ayudar a resolver problemas que afectan al desarrollo del software. Sin embargo, el lenguaje debe ser capaz de soportar el nuevo paradigma, siendo por consiguiente una parte esencial de esta revolucin.

Pgina 18

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Los factores de la calidad del software La construccin de software de calidad requiere el cumplimiento de numerosas caractersticas. Entre ellas se destacan las siguientes:

Eficiencia

La eficiencia del software es su capacidad para hacer un buen uso de los recursos que manipula.
Transportabilidad (portabilidad)

La transportabilidad o portabilidad es la facilidad con la que un software puede ser transportado sobre diferentes sistemas fsicos o lgicos.
Verificabilidad

La verificabilidad es facilidad de verificacin de un software; es su capacidad para soportar los procedimientos de validacin y de aceptar juegos de pruebas o ensayos de programas.
Integridad

La integridad es la capacidad de un software para proteger sus propios componentes contra los procesos que no tengan derecho de acceso.
Fcil de utilizar

Un software es fcil de utilizar si se puede comunicar con l de manera cmoda.


Correccin

Capacidad de los productos software de realizar exactamente las tareas definidas por su especificacin.
Robustez

Capacidad de los productos software de funcionar incluso en situaciones anormales.


Extensibilidad

Facilidad que tienen los productos de adaptarse a cambios en su especificacin. Existen dos principios fundamentales para conseguir esto:

diseo simple descentralizacin

Reutilizacin

Capacidad de los productos para ser reutilizados, en su totalidad o en parte, en nuevas aplicaciones.
Compatibilidad

Facilidad de los productos para ser combinados con otros.

Pgina 19

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Para poder enfrentar todos los problemas anteriores, as como cumplir con los requerimientos de Ingeniera de sofware y los factores de calidad, se hace necesario el desarrollo de una nueva forma de pensar y de desarrollar programas, esto se logra con la programacin orientada a objetos. En un determinado sentido, las tcnicas orientadas a objetos pueden verse como un producto natural de una larga progresin histrica que va desde las estructuras de control, pasando por las funciones o procedimientos, los mdulos, los tipos abstractos de datos y los objetos ( este ltimo concepto se ver ms adelante ).

La dcada de los noventa fu, sin lugar a dudas, la dcada de la programacin orientada a objetos. Como Rentsch predijo, la programacin orientada a objetos ser en los ochenta lo que la programacin estructurada fue en la dcada de los setenta. En la actualidad la programacin orientada a objetos se ha hecho enormemente popular. Escritores y diseadores de software, junto a compaas importantes en el campo del software, se dedican de modo continuo a producir compiladores de lenguajes, sistemas operativos, bases de datos, etc., orientados a objetos. Qu es la programacin orientada a objetos? Por qu es tan popular?

La programacin orientada a objetos es algo ms que una coleccin de lenguajes de programacin, tales como Smalltalk, Object Pascal, C++, etc. Se podra decir que este tipo de programacin es un nuevo modo de pensar sobre lo que significa computar (computarizar), es decir, cmo se puede estructurar informacin en una computadora. Grady Booch, autor del mto Booch de diseo orientado a objetos muy popular en la dcada de los noventa, creador de la empresa Racional fabricante de la herramienta Rose para ingeniera de software orientada a objetos - e impulsor del lenguaje unificado de modelado UML, define la programacin orientada a objetos (POO) como: Un mtodo de implementacin en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representan una instancia de alguna clase, y cuyas clases son todas miembros de una jerarqua de clases unidas mediante relaciones de herencia.

Existen tres importantes partes en la definicin: la programacin orientada a objeteos 1) utiliza objetos, no algoritmos, como bloques de construccin lgicos (jerarqua de objetos); 2) cada objeto es una instancia de una clase, y 3) las clases se relacionan unas con otras por medio de relaciones de herencia. Algunos autores de libros an recuerdan la gran frustracin que sentan las empresas de desarrollo de software, especialmente aquellas que desarrollaban proyectos a gran escala, como por ejemplo, el desarrollo de sistemas operativos con tiempo compartido y memoria virtual. La realidad llegaba cuando la empresa decida producir de manera comercial el sistema en el que cientos de personas haban trabajado durante muchos aos. Era difcil poner a punto este software. El software es un asunto complejo. Las mejoras a la tecnologa de software comenzaron a aparecer con los beneficios de la denominada programacin estructurada (y las disciplinas relacionadas como el anlisis y diseo de sistemas estructurados) que se realizaba en la dcada de los setenta. Pero no fue hasta que la tecnologa de la programacin orientada a objetos se hizo popular en la dcada de los noventa, que los desarrolladores de software sintieron que tenan las herramientas necesarias para realizar mayores adelantos en el proceso de desarrollo de software. Antes de la aparicin de los lenguajes orientados a objetos, los lenguajes de programacin (tales como FORTRAN, Pascal, Basic y C) se basaban en acciones (verbos), en lugar de cosas u objetos (sustantivos). Los programadores, que viven en un mundo de objetos, programan primordialmente mediante el uso de verbos. Este cambio de paradigma complic la escritura de programas. Ahora, con la disponibilidad de los lenguajes orientados a objetos tales como Java y C++, los programadores siguen viviendo en un mundo orientado a objetos y pueden programar de una manera orientada a objetos. ste es un proceso ms natural de programacin y ha dado como resultado un mayor grado de productividad. Un problema fundamental con la programacin basada en procedimientos es que las unidades de programacin no reflejan de manera fcil y efectiva a las entidades del mundo real; as, estas unidades no son particularmente reutilizables. Con gran frecuencia los programadores deben comenzar de nuevo cada nuevo proyecto y escribir cdigo similar desde cero: esto significa gasto de tiempo y de dinero, ya que tiene que reinventar las cosas repetidamente. Mediante la tecnologa de objetos, las entidades de software creadas (llamadas clases), si se disean apropiadamente tienden a ser mucho ms reutilizables en proyectos futuros.

Pgina 20

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Con las bibliotecas de componentes reutilizables, tales como la MFC (Microsoft Foundation Classes) y las creadas por Rogue Wave y muchas otras empresas desarrolladoras de software, se puede reducir la cantidad del esfuerzo requerido para implementar ciertas clases de sistemas (comparadas con el esfuerzo que se hubiera requerido para reinventar estas capacidades en nuevos proyectos). Algunas empresas indican que la reutilizacin de software no es, de hecho, el principal beneficio que obtienen de la programacin orientada a objetos. Ms bien, mencionan que la programacin orientada a objetos tiende a producir software que es ms comprensible, mejor organizado y fcil de mantener, modificar y corregir. Esto puede ser importante debido a que se estima que el 80% de los costos de software no estn asociados con los esfuerzos originales para el desarrollo de software, estn asociados con la continua evolucin y mantenimiento de ese software durante su vida til. Cualesquiera que sean los beneficios que se perciban de la programacin orientada a objetos, es claro que sta ser la metodologa clave de la programacin para las siguientes dcadas. La desventaja es el tiempo y esfuerzos que implica el diseo e implementacin de nuevo cdigo. La orientacin a objetos fuerza a reconsiderar nuestro pensamiento sobre la computacin, sobre lo que significa realizar computacin y sobre cmo se estructura la informacin dentro de la computadora. Jenkins y Glasgow observan que la mayora de los programadores trabajan en un lenguaje y utilizan slo un estilo de programacin. Ellos programan en un paradigma forzado por el lenguaje que utilizan. Con frecuencia, no se enfrentan a mtodos alternativos de resolucin de un problema, y por consiguiente tienen dificultad en ver la ventaja de elegir un estilo ms apropiado al problema a manejar. Bobrow y Stefik definen un estilo de programacin como un medio de organizacin de programas sobre la base de algn modelo conceptual de programacin y un lenguaje apropiado para hacer programas en un estilo claro. Sugieren que existen cuatro clases de estilos de programacin:

Orientados a procedimientos Orientados a objetos Orientados a lgica Orientados a reglas

Algoritmos Clases y objetos Expresado en clculo de predicados Reglas If-then

No existe ningn estilo de programacin idneo para todas las clases de programacin. La orientacin a objetos se acopla a la simulacin de situaciones del mundo real. Qu son los objetos y por qu son tan especiales?

En realidad, la tecnologa de objetos es un esquema de compactacin que permite crear unidades tiles de software. Existen objetos de datos, de tiempo, de cheques, de facturas, de audio, vdeo, de archivo, de registro, y otros ms. De hecho, casi cualquier sustantivo puede representarse razonablemente como un objeto. Vivimos en un mundo de objetos. Slo mire a su alrededor. Existen automviles, aviones, gente, animales, edificios, semforos, elevadores, y otras cosas. Desde el enfoque de un TAD, un objeto es, sencillamente, un tipo abstracto de dato al que se aaden importantes innovaciones en lo referente a compartir cdigo y la reutilizacin. Los objetos son tipos de datos que encapsulan con el mismo nombre estructuras de datos y las operaciones o algoritmos que manipulan esos datos. Los mecanismos bsicos de orientacin a objetos son: objetos, mensajes y mtodos, clases e instancias, herencia y persistencia. Una idea fundamental es la comunicacin de los objetos a travs de paso de mensajes. Adems de esta idea se aaden los mecanismos de herencia y polimorfismo. La herencia permite diferentes tipos de datos para compartir el mismo cdigo, permitiendo una reduccin en el tamao del cdigo y un incremento en la funcionalidad. El polimorfismo permite que un mismo mensaje pueda actuar sobre objetos diferentes y comportarse de modo distinto. La persistencia se refiere a la permanencia de un objeto, esto es, la cantidad de tiempo para el cual se asigna espacio y permanece accesible en la memoria del computador.

Pgina 21

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Conceptos clave
Abstraccin Encapsulacin Persistencia

Herencia

Polimorfismo

Genericidad

Entidades bsicas
Objeto
Mensajes, Mtodos Clases, Instancias Herencia, Jerarqua

Figura 1.9. Principios bsicos de la orientacin a objetos. Razones fundamentales que estn influyendo en la importancia de la POO

Algunas de las causas que estn influyendo considerablemente en el notable desarrollo de las tcnicas orientadas a objetos son:

La POO (Orientacin a Objetos) es especialmente adecuada para realizar determinadas aplicaciones, sobre todo realizacin de prototipos y programas de simulacin. Los mecanismos de encapsulamiento de la POO soportan un alto grado de reutilizacin de cdigo, que se incrementa por sus mecanismos de herencia. En el entorno de las bases de datos, la POO se adjunta bien a los modelos semnticos de datos para solucionar las limitaciones de los modelos tradicionales, incluido el modelo relacional. Aumento espectacular de LPOO (Lenguajes de Programacin Orientada a Objetos). Interfaces de usuario grficos (por iconos) y visuales. Los interfaces de usuario de una aplicacin manipulan la entrada y salida del usuario. Por consiguiente, su funcin principal es la comunicacin con el usuario final. La entrada al sistema se puede controlar a travs de lneas de rdenes (enfoque utilizado por DOS y UNIX), o alternativamente el usuario puede interactuar con el sistema, con construcciones de programacin visuales, tales como iconos de mens, Windows, Macintosh, etc.

Estas razones hacen fundamentalmente que dentro de las tendencias actuales de la ingeniera de software, el marco de POO se revela como el ms adecuado para la elaboracin del diseo y desarrollo de aplicaciones. Est marco se caracteriza por la utilizacin del diseo modular OO y la reutilizacin del software. Los TAD (Tipo Abstracto de Dato) han aumentado la capacidad para definir nuevos tipos (clases) de objetos, cuyo significado se definir abstractamente, sin necesidad de especificar los detalles de implementacin, tales como la estructura de datos a utilizar para la representacin de los objetos definidos. Los objetos pasan a ser los elementos fundamentales en este nuevo marco, en detrimento de los subprogramas que lo han sido en los marcos tradicionales. Introduciremos tambin otras unidades de programacin estructurada llamadas clases. Despus, crearemos objetos a partir de clases y procederemos con nuestra explicacin acerca de la programacin orientada a objetos.

Pgina 22

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

1.2 Conceptos fundamentales de la Programacin Orientada a Objetos



Comenzaremos nuestra introduccin a la orientacin a objetos. Veremos que la orientacin a objetos es una manera natural de pensar acerca del mundo real y de escribir programas de cmputo. En esta seccin introduciremos los conceptos bsicos, es decir, pensar en objetos y la terminologa, es decir, hablar de objetos. Comenzaremos nuestra introduccin a la programacin orientada a objetos con la terminologa clave de sta. Mire a su alrededor en el mundo real. Por donde quiera que voltee los puede ver, objetos!, gente, animales, plantas, automviles, edificios, computadoras, etctera. Los humanos pensamos en trminos de objetos. Tenemos la maravillosa habilidad de abstraccin que nos permite ver imgenes en pantalla como objetos tales como gente, aviones, rboles y montaas, en lugar de puntos individuales de color. Podemos, si lo deseamos, pensar en trminos de playas en vez de granos de arena, bosques en vez de rboles y casas en lugar de ladrillos. Quiz nos inclinemos a dividir los objetos en dos categoras: objetos animados y objetos inanimados. Los objetos animados estn vivos de alguna manera. Se mueven y hacen cosa. Los objetos inanimados, como las toallas, parecen no hacer nada en absoluto. Parecen que slo estn ah. Sin embargo, todos los objetos tienen algo en comn, todos tienen atributos, como tamao, forma, color, peso, etctera, que los describen. Todos exhiben un comportamiento, o realizan operaciones (por ejemplo, una bola rueda, rebota, se infla y se desinfla; un beb llora, duerme, gatea, camina y parpadea; un automvil acelera, frena y gira; una toalla absorbe agua, etctera) que especifican lo que hacen. Los humanos aprendemos de los objetos al estudiar sus atributos y al observar su comportamiento. Objetos diferentes pueden tener atributos similares y comportamiento similares. Por ejemplo, se pueden hacer comparaciones entre bebs y adulto, y entre humanos y chimpancs. Los automviles, camiones, vagones y patinetas tienen mucho en comn. La programacin orientada a objetos (POO) toma como modelo a los objetos reales para elaborar su contraparte en software. Toma ventaja de las relaciones entre clases, en donde objetos de cierta clase, tal como una clase de vehculos, tiene atributos y operaciones similares. Toma ventaja de las relaciones de herencia e incluso de las relaciones de herencia mltiple, en donde las nuevas clases de objetos creadas se derivan mediante la absorcin de atributos y operaciones de clases existentes y mediante la adicin de sus propias caractersticas nicas. Un objeto de la clase convertible ciertamente tiene las caractersticas de la clase ms general automvil, pero el techo del convertible puede quitarse o ponerse. La programacin orientada a objetos nos brinda una forma natural de ver el proceso de programacin, a saber, mediante el modelado de objetos reales, sus atributos y comportamiento. La programacin orientada a objetos proporciona tambin comunicacin entre los objetos. Tal como las personas se envan mensajes entre s (por ejemplo, un sargento que le ordena a un soldado que se coloque en posicin de firmes), los objetos tambin se comunican mediante mensajes. La programacin orientada a objetos encapsula datos (atributos) y funciones (operaciones) en paquetes llamados objetos; los datos y las funciones de un objeto estn ntimamente ligados. Los objetos tienen la propiedad de ocultar informacin. Esto significa que aunque los objetos pueden saber cmo comunicarse con otros a travs de interfaces bien definidas, por lo general, los objetos no saben cmo se implementan otros objetos, los detalles de implementacin se ocultan dentro de los mismos objetos. Con seguridad, es posible manejar un automvil de manera efectiva sin tener que conocer a fondo los detalles de cmo funcionan internamente los sistemas del motor y la transmisin.

Pgina 23

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Tambin, veremos por qu el ocultamiento de informacin es crucial para la buena ingeniera de software. En C y otros lenguajes de programacin por procedimientos, la programacin tiende a ser orientada a acciones; mientras que en C++, la programacin tiende a ser orientada a objetos. En C, la unidad de programacin es la funcin. En C++, la unidad de programacin es la clase, a travs de la cual se obtienen las instancias. En C++, las clases contienen funciones que implementan el comportamiento y datos que implementan los atributos de la clase. Los programadores de C se concentran en escribir funciones. Los programadores agrupan acciones dentro de funciones que realizan alguna tarea comn y agrupan funciones para formar programas. Ciertamente, los datos son importantes en C, pero la idea es que los datos existen primordialmente para apoyar las acciones que realizan las funciones. Los verbos en una especificacin de sistema ayudan al programador en C a determinar un conjunto de funciones que trabajan juntas para implementar el sistema. Los programadores en C++ se concentran en crear sus propios tipos definidos por el usuario llamados clases y componentes. Cada clase contiene datos, as como un conjunto de funciones que manipulan esos datos. En C++, a los componentes de datos de una clase se les llama dato miembro. En C++, a las funciones que componen una clase se les llama funciones miembro (por lo general, en otros lenguajes de programacin orientados a objetos, como Java, se les denomina mtodos). Tal como a una instancia de un tipo predefinido como int se le llama variable, a una instancia de un tipo definido por el usuario (es decir, una clase) se le llama objeto. El programador utiliza tipos predefinidos (y otros tipos definidos por el usuario) como bloques de construccin, para construir tipos definidos por el usuario (clases). El foco de atencin en C++ se centra en las clases (desde las que se crean los objetos) en vez de funciones. Los sustantivos en una especificacin de sistema ayudan al programador en C++ a determinar el conjunto de clases desde el que se crean los objetos que trabajan juntos para implementar un sistema. Las clases son a los objetos lo que los planos son a las casas. Podemos construir muchas casas a partir de un plano, y podemos crear instancias de muchos objetos a partir de una clase. Adems, las clases pueden tener relacin con otras clases. Por ejemplo, en el diseo orientado a objetos de un banco, la clase CajeroBanco necesita relacionarse con la clase CuentaBanco. La ms simple de estas relaciones se denomina asociacin. Veremos que el software empaquetado como clases puede reutilizarse en futuros sistemas de software. A menudo, grupos de clases relacionadas se empaquetan como componentes reutilizables. La orientacin a objetos puede describirse como el conjunto de disciplinas (ingeniera) que desarrollan y modelan software que facilitan la construccin de sistemas complejos a partir de componentes. El atractivo intuitivo de la orientacin a objetos es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible. Las ventajas de la orientacin a objetos son muchas en programacin y modelado de datos. Como apuntaban Ledbetter y Cox (1985):

La programacin orientada a objetos permite una representacin ms directa del modelo de mundo real en el cdigo. El resultado es que la radicalmente transformacin normalmente llevada a cabo de los requisitos del sistema (definido en trminos de usuario) a la especificacin del sistema (definido en trminos de computadora) se reduce considerablemente.

Pgina 24

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

La Figura 1.15 ilustra el problema. Utilizando tcnicas convencionales, el cdigo generado para un problema del mundo real consta de una primera codificacin del problema y, a continuacin, la transformacin del problema en trminos de un lenguaje de computadora Von Newmann. Las disciplinas y tcnicas orientadas a objetos manipulan la transformacin automticamente, de modo que el volumen de cdigo del problema y la transformacin se minimiza. De hecho, cuando se compara con estilos de programacin convencionales (procedimentales, o por procedimientos), las reducciones de cdigo van desde un 40% hasta un orden de magnitud elevado cuando se adopta un estilo de programacin orientado a objetos.

Problemas del mundo real

Transformacin de Von Newmann

Programa

Codificacin del programa Figura 1.15. Construccin de software

Los conceptos y herramientas orientados a objetos son tecnologas que permiten que los problemas del mundo real sean expresados de modo fcil y natural. Las tcnicas orientadas a objetos proporcionan mejoras y metodologas para construir sistemas de software complejos a partir de unidades de software modularizado y reutilizable. Se necesita un nuevo enfoque para construir software en la actualidad. Este nuevo enfoque debe ser capaz de manipular tanto sistemas grandes como pequeos y debe crear sistemas fiables que sean flexibles, mantenibles y capaces de evolucionar para cumplir las necesidades de cambio. La tecnologa orientada a objetos puede cubrir estos cambios y algunos otros ms en el futuro. La orientacin a objetos trata de cumplir las necesidades de los usuarios finales, as como las propias de los desarrolladores de productos software. Estas tareas se realizan mediante la modelizacin del mundo real. El soporte fundamental es el modelo objeto. Las propiedades ms importantes de este modelo son:

Abstraccin Encapsulamiento Modularidad Jerarqua Polimorfismo Otras propiedades: concurrencia (multitarea), persistencia, genericidad, manejo de excepciones.

Como sugiere Booch, si alguno de estos elementos no existe se dice que el modelo no es orientado a objetos.

Como algunos de estos temas ya han sido tratados (abstraccin, encapsulamiento, modularidad, jerarqua ), no lo haremos aqu, salvo que se quisiera agregar algun comentario extra.

Pgina 25

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Jerarqua

La jerarqua es una propiedad que permite una ordenacin de las abstracciones. Las dos jerarquas ms importantes de un sistema complejo son: estructura de clases (jerarqua es-un (is-a): generalizacin/especializacin) y estructura de objetos (jerarqua parte-de (part-of): agregacin). No se debe confundir clases y objetos de la misma clase: un coche rojo y un coche azul no son objetos de clases diferentes, sino objetos de la misma clase con un atributo diferente. Las jerarquas de generalizacin/especializacin se conocen como herencia. Bsicamente, la herencia define una relacin entre clases, en donde una clase comparte la estructura o comportamiento definido en una o ms clases (herencia simple y herencia mltiple, respectivamente). La agregacin es el concepto que permite el agrupamiento fsico de estructuras relacionadas lgicamente. As, un camin se compone de ruedas, motor, sistema de transmisin y chasis; en consecuencia, camin es una agregacin, y ruedas, motor, transmisin y chasis son agregados de camin. Polimorfismo

La quinta propiedad significativa de los lenguajes de programacin orientados a objetos es el polimorfismo. Esta propiedad no suele ser considerada como fundamental en los diferentes modelos de objetos propuestos, pero dada su importancia, no tiene sentido considerar un modelo objeto que no soporte esta propiedad. Polimorfismo es la propiedad que indica, literalmente, la posibilidad de que una entidad tome muchas formas. En trminos prcticos, el polimorfismo permite referirse a objetos de clases diferentes mediante el mismo elemento de programa y realizar la misma operacin de diferentes formas, segn sea el objeto que se referencia en ese momento. Por ejemplo, cuando se describe la clase mamferos se puede observar que la operacin comer es una operacin fundamental en la vida de los mamferos, de modo que cada tipo de mamfero debe poder realizar la operacin o funcin comer. Por otra parte, una vaca o una cabra que pastan en un campo, un nio que se come un bombn o caramelo y un len que devora a otro animal, son diferentes formas que utilizan los distintos mamferos para realizar la misma funcin (comer). El polimorfismo implica la posibilidad de tomar un objeto de un tipo (mamfero, por ejemplo) e indicarle que ejecute comer; esta accin se ejecutar de diferente forma, segn sea el objeto mamfero sobre el que se aplica. Clases, herencia y polimorfismo son aspectos claves en la programacin orientada a objetos y se reconocen a estos elementos como esenciales en la misma. El polimorfismo adquiere su mxima expresin en la derivacin o extensin de clases, es decir, cuando se obtiene una clase a partir de una clase ya existente, mediante la propiedad de derivacin de clases o herencia. As, por ejemplo, si se dispone de una figura que represente figuras genricas, se puede enviar cualquier mensaje, tanto a un tipo derivado (elipse, crculo, cuadrado, etc.) como al tipo base. Por ejemplo, una clase figura puede aceptar los mensajes dibujar, borrar y mover. Cualquier tipo derivado de una figura es un tipo de figura y puede recibir el mismo mensaje. Cuando se enva un mensaje, por ejemplo dibujar, esta tarea ser distinta segn que la clase sea un tringulo, un cuadrado o una elipse. Esta propiedad es el polimorfismo, que permite que una misma funcin se comporte de diferente forma segn sea la clase sobre la que se aplica. La funcin dibujar se aplica igualmente a un crculo, a un cuadrado o a un tringulo y el objeto ejecutar el cdigo apropiado dependiendo del tipo especfico. El polimorfismo requiere ligadura tarda o postergada (tambin llamada dinmica), y esto slo se puede producir en lenguajes de programacin orientados a objetos. Los lenguajes no orientados a objetos soportan ligadura temprana o anterior; esto significa que el compilador genera una llamada a un nombre especfico de funcin y el enlazador (linker) resuelve la llamada a la direccin absoluta del cdigo que se ha de ejecutar.

Pgina 26

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

En POO, el programa no puede determinar la direccin del cdigo hasta el momento de la ejecucin; para resolver este concepto, los lenguajes orientados a objetos utilizan el concepto de ligadura tarda. Cuando se enva un mensaje a un objeto, el cdigo que se llama no se determina hasta el momento de la ejecucin. El compilador asegura que la funcin existe y realiza verificacin de tipos de los argumentos y del valor de retorno, pero no conoce el cdigo exacto a ejecutar. Para realizar la ligadura tarda, el compilador inserta un segmento especial de cdigo en lugar de la llamada absoluta. Este cdigo calcula la direccin del cuerpo de la funcin para ejecutar en tiempo de ejecucin utilizando informacin almacenada en el propio objeto. Por consiguiente, cada objeto se puede comportar de modo diferente de acuerdo al contenido de ese puntero. Cuando se enva un mensaje a un objeto, ste sabe qu ha de hacer con ese mensaje. Otras propiedades

El modelo objeto ideal no slo tiene las propiedades anteriormente citadas, sino que es conveniente que soporte, adems, estas otras propiedades:

Concurrencia (multitarea). Persistencia Genericidad Manejo de excepciones

Algunos lenguajes soportan todas estas propiedades y otros slo algunas de ellas. As, por ejemplo, Ada soporta concurrencia y Ada y C++ soportan genericidad y manejo de excepciones. La persistencia o propiedad de que las variables -y por extensin los objetos- existan entre las invocaciones de un programa es posiblemente la propiedad menos implantada en los LPOO, aunque ya es posible considerar la persistencia en lenguajes tales como Smalltalk y C++, lo que facilitar el advenimiento de las bases de datos orientadas a objetos, como as est sucediendo. REUTILlZACIN DE SOFTWARE

Cuando se construye un automvil, un edificio o un dispositivo electrnico, se ensamblan una serie de piezas independientes, de modo que estos componentes se reutilicen, en vez de fabricarlos cada vez que se necesita construir un automvil o un edificio. En la construccin de software, esta pregunta es continua. Por qu no se utilizan programas ya construidos para formar programas ms grandes? Es decir, si en electrnica los computadores y sus perifricos se forman esencialmente con el ensamblado de circuitos integrados, existe algn mtodo que permita realizar grandes programas a partir de la utilizacin de otros programas ya realizados? Es posible reutilizar estos componentes de software? Las tcnicas orientadas a objetos proporcionan un mecanismo para construir componentes de software reutilizables que posteriormente puedan ser interconectados entre s y formar grandes proyectos de software. En los sistemas de programacin tradicionales y en particular en los basados en lenguajes de programacin estructuradas (tales como FORTRAN, C, etc.), existen las bibliotecas de funciones, que contienen funciones (o procedimientos, segn el lenguaje) que pueden ser incorporados en diferentes programas. En sistemas orientados a objetos se pueden construir componentes de software reutilizables, al estilo de las bibliotecas de funciones, normalmente denominados bibliotecas de software o paquetes de software reutilizables. Ejemplos de componentes reutilizables comercialmente disponibles son: Turbo Visin de Turbo Pascal, OLE 2.0 de C++, jerarqua de clases Smalltalk, clases MacApp para desarrollo de interfaces grficos de usuario en Object Pascal, disponibles en Apple, la coleccin de clases de Objective-C, etc. En el futuro inmediato, los ingenieros de software dispondrn de catlogos de paquetes de software reutilizable, al igual que sucede con los catlogos de circuitos integrados electrnicos, como les ocurre a los ingenieros de hardware. Las tcnicas orientadas a objetos ofrecen una alternativa de escribir el mismo programa una y otra vez. El programador orientado a objetos modifica una funcionalidad del programa sustituyendo elementos antiguos u objetos por nuevos objetos, o bien conectando simplemente nuevos objetos en la aplicacin.

Pgina 27

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

La reutilizacin de cdigo en programacin tradicional se puede realizar copiando y editando, mientras que en programacin orientada a objetos se puede reutilizar el cdigo, creando automticamente una subclase y anulando alguno de sus mtodos. Muchos lenguajes orientados a objetos fomentan la reutilizacin mediante el uso de bibliotecas robustas de clases preconstruidas, as como otras herramientas, como hojeadores (browser), para localizar clases de inters y depuradores interactivos para ayudar al programador.

Pgina 28

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

1.2.1 Los lenguajes orientados a objetos La evolucin de los LPOO

Al principio de la dcada de los sesenta, Kristen Nygaard y Ole-Johan Dhal desarrollaron Simula en el Norwegian Computer Center (NCC), un lenguaje que soportaba modelado por simulacin de procesos industriales y cientficos. Fue un lenguaje de propsito general que ofreca capacidad de simulacin de sistemas. Sin embargo, sus usuarios descubrieron pronto que Simula proporcionaba nuevas y poderosas posibilidades para fines distintos de la simulacin, como la elaboracin de prototipos y el diseo de aplicaciones. Las sucesivas versiones de Simula fueron mejorndose hasta llegar a Simula-67 (aparicin en diciembre de 1966). Simula-67 se derivaba de Algol 60, donde tiene sus races, y se dise fundamentalmente como un lenguaje de programacin de diseo; tom de Algol el concepto de bloque e introdujo el concepto de objeto. Los objetos de Simula tenan su propia existencia y podan comunicarse entre s durante un proceso de simulacin. Conceptualmente, un objeto contena tanto datos como las operaciones que manipulaban esos datos. Las operaciones se llamaron mtodos. Simula incorporaba tambin la nocin de clases, que se utilizaron para describir la estructura y comportamiento de un conjunto de objetos. La herencia de clases fue tambin soportada por Simula. La herencia organiza las clases en jerarquas, permitiendo compartir implementacin y estructura. En esencia, Simula sent la base de los lenguajes orientados a objetos y defini algunos de los conceptos clave de la orientacin a objetos. Adems, Simula era un lenguaje fuertemente tipificado. Esto significa que el tipo de cada variable se conoce en tiempo de compilacin, de modo que los errores que implican tipos se encuentran en esta etapa y no cuando el programa se ejecuta. Simula-67 fue el primer lenguaje de programacin que incorpor mecanismos para soportar los conceptos orientados a objetos ms sobresalientes:

Encapsulamiento y objetos, que agrupan juntos atributos de datos y acciones (mtodos) que procesen esos datos. Verificacin esttica de tipos, que se realiza durante el proceso de compilacin para proporcionar seguridad en tiempo de ejecucin para la manipulacin externa de los atributos de los objetos. Clases, como plantillas o patrones de objetos. Herencia, como medio de agrupar clases con propiedades comunes. Ligadura dinmica (polimorfismo), para permitir a las clases de objetos que tengan interfaces idnticos y propiedades que se puedan intercambiar.

La Figura 1.16 muestra la evolucin (genealoga) de los lenguajes de programacin orientados a objetos (LPOO). En esta figura se muestra que Simula-67 (Simula) inspir el desarrollo de Smalltalk, que es el verdadero primer lenguaje de programacin orientado a objetos.

Pgina 29

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Figura 16. Genealoga de los lenguajes de objetos segn Sebesta

Pgina 30

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Alan Kay cre Smalltalk-80 en Xerox PARC (Xerox Palo Alto Research Park) con Adele Goldberg, que previamente haba trabajado con una implementacin de Simula. Smalltalk es un lenguaje orientado a objetos puro, todos es un objeto de una clase y todas las clases heredan de una nica clase base denominada Object. Smalltalk afirm el trmino mtodo para describir las acciones realizadas por un objeto y el concepto de paso de mensajes como el medio para activar mtodos. Es tambin un lenguaje tipificado dinmicamente, que liga (enlaza) un mtodo a un mensaje en tiempo de ejecucin. Smalltalk ha sido, a su vez, el inspirador de un gran nmero de lenguajes OO. Entre ellos destaquemos Eiffel, Smalltalk-80, Smalltalk/V, C++, Actor, Objective-C y CLOS, as como extensiones OO de lenguajes tradicionales, tales como Object Pascal, Object COBOL, etc. Bertran Meyer, el diseador de Eiffel, fue tambin un usuario de Simula, e incluso lleg a ser presidente de la Asociacin de Usuarios de Simula. Jean Ichbiah, el diseador jefe de Ada-83, dirigi un equipo que implement un subconjunto de Simula, y Bjarne Stroustrup, el diseador de C++, utiliz Simula y siempre ha agradecido su influencia en el diseo de C++. Existen varias versiones y dialectos de Smalltalk: Smalltalk- 72, -74, -76, -78, -80 y ms recientemente -y seguramente la ms popular- Smalltalk/V de Digitalk. Smalltalk no es un lenguaje tipificado. Smalltalk es extraordinariamente rico en conceptos orientados a objetos. En Smalltalk todo es un objeto, incluyendo clases base y tipo base. Esto significa que la potencia de Smalltalk, como un entorno de programacin completo, se fundamenta en el envo de mensajes a objetos. Otra caracterstica fundamental que diferencia a Smalltalk es su capacidad de concurrencia. La concurrencia es un aspecto del mundo real. Por ejemplo, en un entorno de oficina, secretarias, administrativos, gerentes y otros empleados funcionan simultnea e independientemente. Se comunican entre s, a travs de conversaciones, informes, correo electrnico, etc. Smalltalk emple la construccin denominada proceso para soportar concurrencia. Durante la dcada de los ochenta, los conceptos orientados a objetos (tipos abstractos de datos, herencia, identidad de objetos y concurrencia), Smalltalk, Simula y otros lenguajes comenzaron a mezclarse y producir nuevos lenguajes orientados a objetos, as como extensiones y dialectos. El desarrollo de lenguajes de orientacin a objetos en esa dcada se muestra en la siguiente clasificacin:

Extensiones, dialectos y versiones de Smalltalk. Xerox y Textronix incorporaron en sus mquinas, a principios de los ochenta, la versin Smalltalk-80, que posteriormente se fue incorporando a otras muchas plataformas. Digitalk lanz Smalltalk/V para computadoras personales IBM y compatibles. Extensiones orientadas a objetos de lenguajes convencionales. Uno de los lenguajes orientados a objetos ms populares es C++. Este lenguaje fue diseado por Bjarne Stroustrup en AT &T al principio de los ochenta [Stroustrup, 1986]. La primera implementacin del lenguaje C++ se lanz como un preprocesador a los compiladores C. C++ proporcion dos construcciones para definiciones de clases. El primer mtodo es una extensin de la construccin struct (estructura de C) y la otra nueva construccin class (clase). C++ incorpor jerarqua de clases y permita subclases que podan acceder a mtodos y variables instancias de otras clases de su jerarqua. El lenguaje C++ permita la ligadura dinmica y el polimorfismo, as como sobrecarga de funciones y operaciones. Sin embargo, al contrario que Smalltalk, las primeras versiones de C++ no comercializaban bibliotecas grandes de clases predefinidas. Otro dialecto importante de C++, con propiedades orientadas a objetos, es Objective-C [Cox 1987]. Este lenguaje es un superconjunto de C, que incorpora caractersticas orientadas a objetos de Smalltalk. Al igual que Smalltalk, Objective-C inclua una gran coleccin de clases predefinidas que permita simplificar el proceso de desarrollo. Objective-C soportaba tipos abstractos de datos, herencia y sobrecarga de operadores. Sin embargo, al contrario que C++, no ampliaba la definicin de construcciones existentes en lenguajes, y dise nuevas construcciones y operadores para realizar tareas tales como definicin de clases y paso de mensajes. Las computadoras NEXT, cuyo xito no pas de unos aos, eligieron Objective-C como su principal lenguaje de desarrollo. Niklaus Wirth y un grupo de ingenieros informticos de Apple Computer disearon Object Pascal [Schmucker, 1986]. Extendi el lenguaje Pascal con soporte para tipos abstractos de datos, mtodos y herencia. Incluy el concepto de tipo de objeto y definicin de clases. Los nuevos lenguajes Ada-95 y Java son totalmente orientados a objetos. Pgina 31
Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Lenguajes orientados a objetos fuertemente tipificados. Simula fue uno de los lenguajes orientados a objetos que se desarrollaron en la dcada de los ochenta y que fueron implementados en diversas plataformas. Otros lenguajes han emergido en la dcada de los ochenta, con caractersticas fuertemente tipificadas (con verificacin estricta de tipos). Un lenguaje disponible comercialmente y muy interesante es Eiffel [Meyer, 1988] de Interactive Software Engineering, Inc. Adems de encapsulamiento y herencia, Eiffel incorpora muchas caractersticas orientadas a objetos, tales como tipos paramtricos y pre y post-condiciones para mtodos. Otro lenguaje fuertemente tipificado que soporta conceptos orientados a objetos (abstraccin, objetos, tipos paramtricos) es Ada, aunque la versin Ada-83 presenta el inconveniente de no soportar herencia.

Extensiones orientadas a objetos de LlSP. Existen diferentes versiones de LISP, aunque la ms conocida y notable es CLOS (Common List Object System). CLOS es un lenguaje OO que introduce notables mejoras y tiene garantizada larga vida, especialmente desde la creacin del comit X3J13 de ANSI para la estandarizacin del lenguaje.

Estado de los lenguajes orientados a objetos en la dcada de los noventa

La dcada de los ochenta lanz la orientacin a objetos como base de la futura ingeniera de software orientada a objetos de la dcada de los noventa. En 1982 se predijo que la programacin orientada a objetos sera en la dcada de los ochenta lo que la programacin estructurada fue en los setenta (Rentsch, 1982). La profeca se cumpli y la dcada de los ochenta se consagr como el origen de la explosin de la orientacin a objetos que se producira en la dcada de los noventa. Sin duda, el desarrollo de conferencias internacionales sobre orientacin a objetos y, en especial, OOPSLA (ObjectOriented Programming Systems and LAnguages) han sido los detonantes de la explosin de la OO en la dcada de los noventa. La primera conferencia se celebr en el ao 1986. Otros hechos que han influido considerablemente en el enorme desarrollo de los LPOO han sido la aparicin de diferentes publicaciones peridicas exclusivamente dedicadas a orientacin a objetos. En 1988 apareci la primera revista de prestigio: The Journal of Object-Oriented Programming. En la dcada de los noventa, los lenguajes, tcnicas, interfaces grficos y bases de datos se hicieron muy populares. Sin duda, los noventa fu la dcada de la proliferacin de tecnologas y lenguajes orientados a objetos. Microsoft, IBM, Borland, Sun, AT &T, Digitalk, Symantec y otras grandes compaas lanzaron productos orientados a objetos de modo continuo y progresivo. Los lenguajes ms implantados en la actualidad son Smalltalk y Eiffel, junto con C++, Object Pascal (Turbo/Borland Pascal especialmente), Visual BASIC y Object Visual como lenguajes hbridos, y Java como un hbrido propio de Sun su fabricante- que rene propiedades de C++, Ada-95, Object Pascal, Smalltalk, etc., diseado para Internet con propiedades de objetos. C++ es, sin lugar a dudas, el lenguaje ms popular, aunque Smalltalk est ganando adeptos da a da. Tanto C++ como Smalltalk han sido implementados en diferentes plataformas: DOS, UNIX, OS/2, Windows e incluso en sistemas grandes; su importancia reside en la gran cantidad de desarrolladores y vendedores que comercializan estos lenguajes. Clasificacin de lenguajes orientados a objetos

Como ya se ha comentado anteriormente, los lenguajes de programacin orientados a objetos son: Eiffel, Lisp, Prolog, Simula, Smalltalk, C++, Object Pascal, etc. Se entienden por lenguajes orientados a objetos aquellos que soportan las caractersticas de orientacin a objetos. Otros lenguajes de programacin, tales como Ada, C, Clipper, pueden implementar algunas caractersticas orientadas a objetos, utilizando ciertas tcnicas de programacin, pero no se consideran orientados a objetos. Los principales lenguajes de programacin utilizados actualmente para sistemas de tiempo real son C y Ada. Ada fue diseado especficamente para la implementacin de sistemas en tiempo real, especialmente empotrados. Aunque Ada (Ada-83) no cumple las propiedades importantes de un LPOO (por ejemplo herencia y ligadura dinmica), soporta un enfoque de diseo orientado a objetos y se le conoce usualmente como basado en objetos [Wegner, 87]. Ada-95, ya estandarizado por ISO y ANSI, soporta herencia y ligadura dinmica; en consecuencia, aunque todava con restricciones, se considera orientado a objetos. Taxonoma de lenguajes orientados a objetos

Una taxonoma de lenguajes de programacin con propiedades de orientacin a objetos fue creada por Wegner. La clasificacin incluye los siguientes grupos:

Pgina 32

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Basado en objetos. Un lenguaje de programacin es basado en objetos si su sintaxis y semntica soportan la creacin de objetos que tienen las propiedades descritas en temas anteriores. Basado en clases. Si un lenguaje de programacin es basado en objetos y soporta adems la creacin de clases, se considera basado en clases. Orientacin a objetos. Un lenguaje de programacin orientado a objetos es un lenguaje basado en clases que soporta tambin herencia.

Objetos

Basado en objetos
Ada-83 Actor Clipper 5.x Clu

+ clases

Basado en clases

+ herencia

Orientada a objetos
C++ Eiffel Simula Smalltalk Turbo Borland Pascal Delphi Visual Object Object COBOL Ada-95
Figura 1.17. Taxonoma de lenguajes OO de Wegner

Esta taxonoma de orientacin a objetos proporciona una definicin estricta de los lenguajes de programacin orientados a objetos, que ha prevalecido en la poca actual. Segn esta taxonoma, no es suficiente que un lenguaje soporte la creacin de objetos; para ser considerado orientado a objetos, es necesario que existan construcciones de creacin de clases y que soporten herencia adecuadamente. C++ soporta la creacin de objetos y clases, as como herencia, y es por consiguiente totalmente orientado a objetos. Ada-83 soporta la creacin de objetos mediante paquetes (tipos abstractos de datos). Un paquete en Ada no es una definicin de tipos como la clase C++, y en consecuencia Ada es un lenguaje basado en objetos. Ada-95 soporta, adems de las propiedades de Ada-83, clases y herencia, y se puede considerar orientado a objetos. De acuerdo a la taxonoma de Wegner, se podra actualizar la clasificacin de los lenguajes pensando en la segunda dcada de los noventa:

Lenguajes basados en objetos Lenguajes basados en clases Lenguajes orientados a objetos

Ada-83, Actor, Clipper 5.2, Visual Basic 4/5/6. Clu. C++, Objective-C, Java, Object Pascal, Delphi, Visual Object, Object COBOL, Oyeron, Eiffel, Smalltalk, Simula, Prolog++, CLOS, Ada-95.

Caractersticas de los lenguajes orientados a objetos

Adems de las caractersticas citadas anteriormente de objetos, clases y herencia, los LPOO debern tener algunas, o todas, las caractersticas que se citan a continuacin:

Pgina 33

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Tipificacin estricta (fuerte). Tipificacin es el proceso de declarar el tipo de informacin que puede contener una variable. Los errores de programacin relacionados con el nmero de parmetros, tipos de parmetros e interfaces de mdulos, se detectan durante las fases de diseo e implementacin, en lugar de en tiempos de ejecucin. Encapsulamiento. Es deseable que el lenguaje soporte ocultamiento de la informacin, mediante partes independientes, para la especificacin y la implementacin. Esta caracterstica proporciona un diseo dbilmente acoplado que cumple con rigor el principio bsico de la inferencia de software: acoplamiento dbil y fuerte cohesin entre los mdulos de un programa. Compilacin incremental. Caracterstica en el desarrollo de sistemas grandes, en los que las porciones del sistema se crean e implementan de un modo sistemtico (poco a poco, etapa a etapa). Esta caracterstica complementa la caracterstica de tipificacin estricta, que soporta partes independientes de implementacin y especfica. Genericidad. Las clases parametrizadas (mediante plantillas -templates- o unidades genricas) sirven para soportar un alto grado de reusabilidad (reutilizacin). Estos elementos genricos se disean con parmetros formales, que se instanciarn con parmetros reales, para crear instancias de mdulos que se compilan y enlazan, y ejecutan posteriormente. Paso de mensajes. El lenguaje es conveniente que soporte paso bidimensional de mensajes entre mdulos, lo que implicar mdulos dbilmente acoplados y diseos flexibles. Esto significa que se deben poder pasar seales entre mdulos, sin necesidad de tener que pasar realmente ningn dato. Polimorfismo. Los lenguajes deben permitir que existan operaciones con igual nombre, que se utilicen para manejar objetos de tipos diferentes en tiempo de ejecucin. El polimorfismo se implementa, normalmente, en unin con la herencia. Excepciones. Se deben poder detectar, informar y manejar condiciones excepcionales utilizando construcciones del lenguaje. Esta propiedad aadida al soporte de tolerancia a fallos del software permitir una estrategia de diseo eficiente. Concurrencia. Es conveniente que el lenguaje soporte la creacin de procesos paralelos independientes del sistema operativo. Esta propiedad simplificar la transportabilidad de un sistema de tiempo real de una plataforma a otra. Persistencia. Los objetos deben poder ser persistentes; es decir, los objetos han de poder permanecer despus de la ejecucin del programa. Datos compartidos. Los mdulos se deben poder comunicar mediante memoria compartida, adems del paso de mensajes.

Los lenguajes de programacin disponibles actualmente no cumplen todas las caractersticas citadas anteriormente. En general, los lenguajes orientados a objetos no soportan concurrencia; este es el caso de C++, aunque las versiones de C++ que siguen el futuro estndar 4.0 comienzan a incorporar propiedades de concurrencia e incluso persistencia. Asimismo, Ada-95, adems de concurrencia, soporta ya herencia y polimorfismo. Puros frente a hbridos

Existe un profundo debate entre los usuarios y desarrolladores de OO sobre la decisin del lenguaje a emplear. Este debate no es reciente, aunque s es en la actualidad cuando este debate se ha acrecentado y ha comenzado a ser decisivo en el desarrollo de la OO. Un LPOO puro es un lenguaje diseado para soportar nicamente el paradigma orientado a objetos, en el que todo consta de objetos, mtodos y clases. Los LPOO ms populares son Smalltalk y Eiffel. Un LPOO hbrido, por otra parte, soporta otros paradigmas de programacin (tales como el tradicional -estructurado-, funcional, etc.), adems del paradigma orientado a objetos. Los lenguajes hbridos se construyen a partir de otros lenguajes existentes, tales como C o Pascal, de los cuales se derivan; es posible utilizar el LPOO de un modo no orientado a objetos y tambin como orientado a objetos utilizando objetos, clases y mtodos.

Pgina 34

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Lenguajes puros Objetos Mensajes Clases

Lenguajes hbridos Objetos Mensajes Clases

+
Lenguajes base tradicional

Figura 1.18. Lenguajes OO puros/hbridos

Cada tipo de lenguaje tiene sus ventajas e inconvenientes. Los lenguajes puros, tales como Smalltalk o Eiffel, pueden ser ms potentes, ya que utilizan todas las ventajas de la tecnologa. Proporcionan su mxima flexibilidad para cambiar los aspectos esenciales del lenguaje. Dado que todo en el lenguaje se construye sobre la base de los objetos, se pueden realizar cambios profundos si son necesarios. Existe un precio, sin embargo, a la potencia y flexibilidad de los lenguajes puros. La mayora de los lenguajes puros no son tan rpidos como los hbridos y son difciles de codificar en toda clase de operaciones fundamentales. Esto les hace perder eficiencia en tiempo de ejecucin. En contraste, los lenguajes hbridos pierden con frecuencia alguna de las caractersticas de los lenguajes puros y normalmente no permiten modificar caractersticas de construccin del lenguaje base; aunque, como ya se ha comentado, son normalmente ms rpidos para operaciones construidas en el lenguaje base. Los lenguajes puros e hbridos difieren tambin en la facilidad de aprendizaje, si bien esta facilidad depender del nivel de cada persona. As, para un programador la enseanza de un lenguaje puro normalmente es ms fcil, ya que es ms sencillo: slo ha de aprenderse un lenguaje y no dos, como en el caso de un lenguaje hbrido. Sin embargo, para un programador experimentado, el movimiento o emigracin hacia un lenguaje hbrido puede ser ms fcil si est ya familiarizado con el lenguaje base, pues entonces slo necesita dominar las extensiones orientadas a objetos. En la actualidad, C++ es el lenguaje ms popular y utilizado; sin embargo, Smalltalk est ganando da a da en aceptacin, debido esencialmente a estar soportado por las plataformas DOS, UNIX y Windows. El hecho de que en 1994 IBM lanzase versiones de Smalltalk para sus sistemas OS/2 y AIX hizo crecer el nmero de usuarios de este lenguaje. Por otra parte, Java se est configurando como un nuevo estndar para programacin orientada a objetos. Tipificacin esttica frente a dinmica

Tipificacin o tipado (typing) es el proceso de declarar cul es el tipo de informacin que puede contener una variable. Por ejemplo, una variable se puede tipificar para contener un nico carcter, una cadena de caracteres, un nmero entero o un nmero de punto flotante. Una vez que se ha declarado el tipo (tipificado), la variable est restringida a contener esa clase de datos. Cualquier intento de situar otra clase de datos en la variable producir un mensaje de error. Algunos lenguajes de objetos requieren que a todas las variables se les asigne un tipo antes de que se pueda utilizar. Otros lenguajes no requieren esos requisitos, permitiendo que las variables puedan tomar sus tipos adecuados en cualquier instante dado. Estas dos opciones se denominan tipificacin fuerte, estricta o esttica, y tipificacin dbil, no estricta o dinmica. La tipificacin fuerte o sistemas de tipos estticos exige que el programador asocie explcitamente un tipo con cada nombre declarado en un programa, de modo que el compilador del lenguaje puede verificar que los nombres y expresiones compuestas de estos nombres se refieren siempre a los objetos del tipo especificado. El tipo de cada objeto se ha de determinar y comprobar antes que se ejecute el programa. Lenguajes con sistemas de tipos estticos son los tradicionales FORTRAN, COBOL y PASCAL. La tipificacin fuerte es menos flexible pero ms segura, ya que el lenguaje puede realizar comprobaciones de rutinas para asegurar que los parmetros de los mensajes sean de tipo correcto. Las ventajas de un lenguaje tipificado estticamente son que los errores relativos a tipos se capturan (detectan) durante la compilacin, antes de que se ejecute el programa, y el programa se puede ejecutar ms eficientemente, dado que

Pgina 35

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

no hay necesidad de hacer ninguna verificacin de tipos en tiempo de ejecucin.

Los lenguajes con un sistema de tipos dinmicos (lenguajes de tipificacin dbil) no exigen que el programador especifique el tipo de objeto que puedan contener las variables cuando se escribe el programa. Cada objeto conoce su propio tipo cuando se crea durante la ejecucin. Las ventajas de los lenguajes con un sistema de tipos dinmicos son que los programas son ms flexibles y puede disponer de nuevos tipos de objetos que no fueron previstos cuando se escribi el programa. Esta flexibilidad se hace a costa de una prdida de eficiencia durante la ejecucin del programa, debido a la necesidad de mantener y comprobar el tipo de todos los objetos durante la ejecucin. Los lenguajes de objetos puros normalmente utilizan tipificacin dbil, ya que este enfoque les proporciona mxima flexibilidad, especialmente durante el desarrollo, cuando se crean nuevos tipos objetos. Los lenguajes hbridos, en contraste, tienden a construirse como lenguajes fuertemente tipificados. Es posible especificar el tipo de un argumento, de modo que haya flexibilidad en tiempo de ejecucin, pero esta tarea requiere esfuerzos especiales.

*prueba = definir( int idPar )


Devuelve un apuntador al objeto prueba Mtodo definir Requiere un parmetro entero

Figura 1.19. Tipificacin de un mensaje Ligadura esttica frente a dinmica

Ligadura es el proceso de asociar un atributo a un nombre. En el caso de funciones, el trmino ligadura (binding) se refiere a la conexin o enlace entre una llamada a la funcin y el cdigo real ejecutado como resultado de la llamada. La ligadura se clasifica en dos categoras: ligadura esttica y ligadura dinmica. La ligadura esttica se conoce tambin como ligadura temprana o anticipada y se realiza en tiempo de compilacin. La ligadura dinmica se conoce tambin como ligadura retardada o postergada y se realiza en tiempo de ejecucin. Normalmente, los lenguajes funcionales y orientados a objetos presentan ligadura dinmica, al contrario que los lenguajes imperativos, que suelen presentar ligadura esttica. Desde el punto de vista de la estructura del lenguaje, los intrpretes por definicin realizan todos ligadura dinmica, mientras que los compiladores realizan normalmente ligadura esttica. Como ejemplo de ligadura esttica, considere las declaraciones:

const n = 3; var x : integer;

el valor 3 se enlaza estticamente al nombre n, mientras que el tipo de dato integer se enlaza al nombre x. Por otra parte, consideremos la sentencia de asignacin x := 3; en este caso, se enlaza 3 dinmicamente a x cuando se ejecuta la sentencia de asignacin. Y la sentencia

new( y ) ;
enlaza dinmicamente una posicin de almacenamiento a y y asigna a esa posicin el valor de y. Ejemplo de ligadura esttica

Se desea procesar una determinada funcin, segn sea un determinado carcter (cdigo). Mediante una sentencia switch se podra realizar el programa correspondiente en C++: #include <ctype.h> #include <iostream.h> / / .. . static void salir( ), funcl( ) , func2( ); char car; //;

Pgina 36

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

//car, contiene el cdigo de carcter int codigo = toupper( car ); switch ( codigo ) { case ' S' : salir ( ) ; case 'P' : funcl( ); break; case '*' : func2( ); break; default : cout << "Cdigo desconocido: " << car << endl; }

En este caso, la funcin invocada en respuesta a cada orden se conoce cuando el programa se est compilando, ya que cada funcin se llama explcitamente por el nombre. En el caso de propiedades orientadas a objetos, la ligadura se considera como el proceso mediante el cual se determina el receptor de un mensaje. En lenguajes que requieren ligadura esttica, la identidad del receptor se debe especificar cuando se crea el programa. Si un lenguaje soporta ligadura dinmica, la identidad del receptor se puede dejar indeterminada hasta que se enva realmente el mensaje en tiempo de ejecucin. La ligadura dinmica permite la implementacin de una de las caractersticas ms sobresalientes de la orientacin a objetos: el polimorfismo. Revisin de lenguajes orientados a objetos

Los dos lenguajes ms utilizados en el desarrollo OO y ms introducidos en el mercado son Eiffel, Smalltalk (en sus versiones 80 y V), C++, Actor, Objective-C, CLOS, Object Pascal (especialmente Turbo Pascal) y Visual BASIC. El lenguaje Ada se suele considerar por muchos autores como basado en objetos, debido esencialmente a que soporta el concepto de abstraccin de datos mediante el paquete y la genericidad mediante unidades genricas; tambin es considerado basado en objetos, debido a que Grady Booch, autor del famoso mtodo de diseo Booch, se apoy en dicho lenguaje en su primera versin del mtodo; la metodologa HOOD tambin se apoya en Ada como lenguaje fundamental. La nueva versin Ada-95 ya es totalmente orientada a objetos. El lenguaje Eiffel se examina brevemente, debido a que fue diseado para soportar totalmente la orientacin a objetos y otras caractersticas de ingeniera de software. El uso de precondiciones, poscondiciones e invariantes mejoran significativamente la robustez y documentacin de programas desarrollados en Eiffel. Smalltalk, como heredero directo de Simula, es el prototipo de lenguaje de programacin orientado a objetos puro. Por la importancia del lenguaje C++ y dado que es el lenguaje utilizado en este curso para la implementacin de los conceptos orientados a objetos, se dedicarn captulos especficos para ensear la escritura y sintaxis del lenguaje, as como reglas y consejos para mejorar el estilo de programacin y reglas y consejos para la depuracin de programas. De cualquier forma, Meyer, creador del lenguaje Eiffel, proporciona unos criterios para considerar la bondad de un lenguaje orientado a objetos, cuyos complementos configuran, de hecho, una nueva clasificacin. En este sentido, los criterios recogidos son los siguientes:

La modularizacin de los sistemas ha de realizarse mediante estructuras de datos apropiadas. Los objetos se describen como la implementacin de tipos abstractos de datos. La memoria se gestiona (administra) automticamente. Existe una correspondencia entre tipos de datos no elementales y clases. Las clases se pueden definir como extensiones o restricciones de otras clases ya existentes mediante herencia. Soportan polimorfismo y ligadura dinmica. Existe herencia mltiple y repetida.

De acuerdo con los criterios de Meyer, recogemos en la Tabla 1 el cumplimiento de dichos criterios en los lenguajes OO y basados en objetos ms populares.

Pgina 37

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Tabla 1. Criterios de Meyer en lenguajes OO y basados en objetos

Criterios
1. Modularizacin 2. Tipos abstractos de datos 3. Gestin automtica de memoria 4. Slo clases 5. Herencia 6. Polimorfismo (y ligadura dinmica) 7. Herencia mltiple y repetida

Ada-83 Ada-95
S S S S No No No S S S S S S No

C++
S S En parte En parte S S S

Eiffel Smalltalk Java


S S S S S S S S S S S S S No S S S S S S No

Pgina 38

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

1.3 Relacin entre clases y objetos

Un objeto es un simple elemento, no importa lo complejo que pueda ser. Ciertamente, las cosas fsicas son objetos. Un baln, un archivero, una agenda, un rbol y una computadora son todos objetos. Qu pasa con cosas como un nmero, una palabra, una cuenta bancaria o una nota musical? No son objetos fsicos, pero son objetos porque tienen propiedades, o atributos, y podemos llevar a cabo acciones sobre ellos. Un nmero tiene un valor, y se pueden sumar dos nmeros. Una palabra tiene longitud y si estamos hablando de un procesador de textos, se puede borrar o insertar en un documento. Una nota musical tiene tono, duracin y volumen. Casi siempre, algo es un objeto si tiene:

Un nombre. Propiedades asociadas al mismo. Mensajes que puede entender.

Cuando un objeto recibe un mensaje, se produce la ejecucin de una accin o cambia una propiedad del objeto como consecuencia de dicho mensaje. En el caso del control de un televisor, cuando el televisor recibe el mensaje cambi de canal desde el control, cambia de canal. Una clase, por el contrario, describe una familia de elementos similares. En la prctica, una clase es como un molde o plantilla que se utiliza para definir o crear objetos. A partir de una clase se puede definir un nmero determinado de objetos. Cada uno de estos objetos generalmente tendr un estado particular propio (una pluma estilogrfica puede estar llena, otra puede estar medio llena y otra totalmente vaca) y otras caractersticas (como su color), aunque compartan algunas operaciones comunes ( como escribir o llenar su depsito de tinta ). Los objetos tienen las siguientes caractersticas:

Se agrupan en tipos llamados clases. Tienen datos internos que definen su estado actual. Soportan ocultamiento de los datos. Pueden heredar propiedades de otros objetos. Pueden comunicarse con otros objetos pasando mensajes. Tienen mtodos que definen su comportamiento.

Una clase es un tipo definido que determina las estructuras de datos y operaciones asociadas con ese tipo. Las clases son como plantillas que describen cmo estn construidos ciertos tipos de objetos. Cada vez que se construye un objeto de una clase estamos creando lo que se llama una instancia (modelo o ejemplar) de una clase y la operacin correspondiente se llama instanciacin (creacin de instancias). Por consiguiente, los objetos no som ms que instancias de clases. En general, los trminos objeto e instancia de una clase se pueden utilizar indistintamente.

Un objeto es una instancia de una clase. Una clase puede tener muchas instancias y cada una es un objeto independiente. Una clase es una plantilla que se utiliza para describir uno o ms objetos de un mismo tipo.

La idea fundamental en los lenguajes orientados a objetos es combinar en una sola unidad datos y funciones que operan sobre esos datos. Tal unidad se denomina objeto. Por consiguiente, dentro de los objetos residen los datos de los lenguajes de programacin tradicionales, tales como nmeros, arreglos, cadenas y registros, as como funciones o subrutinas que operan sobre ellos. Las funciones dentro del objeto (funciones miembro en C++, mtodos en Object Pascal, Java y C#) son el nico medio de acceder a los datos privados de un objeto. Si se desea leer un elemento datos de un objeto se llama a la funcin miembro del objeto. Se lee el elemento y se devuelva el valor. No se puede acceder a los datos directamente. Los datos estn ocultos, y eso asegura que no se pueden modificar accidentalmente por funciones externas al objeto. Los datos y las funciones (procedimientos en Object Pascal) asociados se dicen que estn encapsulados en una nica entidad o mdulo. La encapsulacin de datos y ocultamiento de datos son trminos importantes en la descripcin de lenguajes orientados a objetos. Si se desea modificar los datos de un objeto, se conoce exactamente cules son las funciones que interactan con el mismo. Ninguna otra funcin puede acceder a los datos. Esta caracterstica simplifica la escritura, depuracin y mantenimiento del programa. Una clase es la descripcin de un conjunto de objetos; consta de mtodos y datos que resumen caractersticas comunes de un conjunto de objetos. Se puede definir muchos objetos de la misma clase. Dicho de otro modo, una clase es la declaracin de un tipo objeto. Las clases son similares a los tipos de datos y equivalen a modelos o plantillas que describen cmo se construyen ciertos tipos de objetos. Cada vez que se construye un objeto a partir de una clase estamos creando lo que se llama

Pgina 39

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

una instancia de esa clase. Una instancia es una variable de tipo objeto.

En Poo un objeto es una instancia de una clase. Los objetos son miembros de una clase.

Cada vez que se construye un objeto de una clase se crea una instancia de esa clase. Los objetos se crean cuando un mensaje de peticin de creacin se recibe por la clase. Una clase es una coleccin de objetos similares. Los objetos y las clases se comparan a variables y tipos en lenguajes de programacin convencional. Una variable es una instancia de un tipo, al igual que un objeto es una instancia de una clase; sin embargo, una clase es ms expresiva que un tipo. Expresa la estructura y todos los procedimientos y funciones que se pueden aplicar a una de sus instancias. En un lenguaje estructurado, un tipo int, por ejemplo, define la estructura de una variable entera, por ejemplo, una secuencia de 16 bits y los procedimientos y funciones que se pueden realizar sobre enteros. De acuerdo a nuestra definicin de clase, el tipo int ser una clase. Sin embargo, en estos lenguajes de programacin no es posible agrupar nuevos tipos y sus correspondientes nuevas funciones y procedimientos en una nica unidad. En un lenguaje orientado a objetos una clase proporciona este servicio. La clase es la construccin del lenguaje utilizada ms frecuentemente para definir los tipos abstractos de datos en lenguajes de programacin orientada a objetos. Generalmente, una clase se puede definir como una descripcin abstracta de un grupo de objetos, cada uno de los cuales se diferencia por un estado especfico y es capaz de realizar una serie de operaciones. Por ejemplo, una pluma estilogrfica es un objeto que tiene un estado (llena de tinta o vaca) que puede realizar algunas operaciones (por ejemplo, escribir, poner/quitar la tapadera, rellenar si est vaca). En programacin, una clase es una estructura que contiene datos y procedimientos (o funciones) que son capaces de operar sobre esos datos. Una clase pluma estilogrfica puede tener, por ejemplo, una variable que indica si est llena o vaca; otra variable puede contener la cantidad de tinta cargada realmente. La clase contendr algunas funciones que operan o utilizan esas variables. Dentro de un programa, las clases tienen dos propsitos principales: definir abstracciones y favorecer la modularidad. Cul es la diferencia entre una clase y un objeto, con independencia de su complejidad? Una clase verdaderamente describe una familia de elementos similares. En realidad, una clase es una plantilla para un tipo particular de objetos. Si se tienen muchos objetos del mismo tipo, solo se tienen que definir las caractersticas generales de ese tipo una vez, en lugar de en cada objeto. En resumen un objeto es una instancia de una clase.

Pgina 40

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

1.4 El papel de clases y objetos en el anlisis y el diseo



Una de las tarea en el anlisis y el diseo de sistemas es la identificacin de las clases dentro del sistema. Primero, revisamos el enunciado del problema y localizamos todos los sustantivos; con gran similitud, stos representan a la mayora de las clases (o instancias de las clases) necesarias para la implementacin del sistema. Normalmente estos nombres o sustantivos y sus sinnimos se suelen escribir en una tabla de la que luego se deducirn los objetos reales. Los objetos, segn Shlaer, Mellor y Coad/Yourdon, pueden caer dentro de las siguientes categoras: Cosas tangibles: avin, reactor nuclear, fuente de alimentacin, televisor, libro, automvil, etc. Roles o papeles jugados o representados por personas: gerente, cliente, empleado, mdico, paciente, ingeniero. Organizaciones: empresa, divisin, equipo, etc. Incidentes que representan un suceso, evento u ocurrencia: vuelo, accidente, suceso, llamada a un servicio de asistencia tcnica, etc. Interacciones que implican generalmente una transaccin o contrato y que relacionan dos o ms objetos del modelo: compras comprador, vendedor artculo, matrimonio esposo esposa fecha de boda. Especificaciones que muestran aplicaciones de inventario o fabricacin: refrigerador, nevera, etc. Lugares: sala de embarque, muelle de carga, etc.

Se modelan las clases del sistema y sus relaciones, mediante diagramas de clases. Se modelan los objetos del sistema y sus vnculos. Los vnculos son relaciones sencillas entre los objetos, las asociaciones son a las clases como los vnculos son a los objetos. Se identifican los atributos de las clases y se elabora un diagrama de estados. Los estados describen la condicin de un objeto (por ejemplo, los valores de los atributos de un objeto) en un determinado punto en el tiempo. Los diagramas de estado nos brindan una forma de expresar cmo y bajo que condiciones el objeto de un sistema cambia de estado. Se elabora el diagrama de actividad. El diagrama de actividad se centra en las acciones que realiza un objeto; en otras palabras, el diagrama de actividad modela lo que hace un objeto durante su vida til. Se identifican las operaciones de una clase y con ella se elaboran los diagramas de secuencia. El diagrama de secuencia se enfoca en la manera en que se envan los mensajes entre los objetos en el tiempo. Se elaboran los diagramas de colaboracin. Una colaboracin consiste en una coleccin de objetos que trabajan juntos para llevar a cabo una tarea. Los diagramas de colaboracin y los diagramas de secuencia proporcionan informacin acerca de la manera en que interactan los objetos, pero cada diagrama hace en informacin diferente. Los diagramas de secuencia hacen nfasis en cundo ocurren las interacciones. Los diagramas de colaboracin hacen nfasis en cules objetos participan en las interacciones y en las relaciones entre dichos objetos. Dicho en pocas palabras, la participacin de los objetos y las clases en la POO es de suma importancia. DESARROLLO TRADICIONAL FRENTE A ORIENTADO A OBJETOS

El sistema tradicional del desarrollo del software para un determinado sistema es la subdivisin del mismo en mdulos, a la cual deben aplicarse criterios especficos de descomposicin, los cuales se incluyen en metodologas de diseo. Estos mdulos se refieren a la fase de construccin de un programa, que en el modelo clsico sigue a la definicin de los requisitos (fase de anlisis). El modelo clsico del ciclo de vida del software no es el nico modelo posible, dado que es posible desarrollar cdigo de un modo evolutivo, por refinamiento y prototipos sucesivos. Existen numerosos lenguajes de programacin y metodologas que se han desarrollado en paralelo a los mismos, aunque normalmente con independencia de ellos. Nos centraremos en la metodologa ms utilizada, denominada desarrollo estructurado, que se apoya esencialmente en el diseo descendente y en la programacin estructurada. La programacin estructurada es un estilo disciplinado de programacin segn los lenguajes procedimentales (por procedimientos), tales como FORTRAN, BASIC, COBOL y recientemente C y C++. Las metodologas del diseo descendente (o descomposicin funcional) se centran en operaciones y tienden a descuidar la importancia de las estructuras de datos. Se basan en la clebre ecuacin de Wirth:

Datos + Algoritmos = Programas

La idea clave del diseo descendente es romper un programa grande en tareas ms pequeas, ms manejables. Si una de estas tareas es demasiado grande, se divide en tareas ms pequeas. Se contina con este proceso hasta que

Pgina 41

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

el programa se compartimentaliza en mdulos ms pequeos que se programan fcilmente. Los subprogramas facilitan el enfoque estructurado, y en el caso de lenguajes como C, estas unidades de programas, llamadas funciones, representan las citadas tareas o mdulos individuales. Las tcnicas de programacin estructuradas reflejan, en esencia, un modo de resolver un programa en trminos de las acciones que realiza.

Para comprender mejor las relaciones entre los algoritmos (funciones) y los datos, consideremos una comparacin con el lenguaje natural (por ejemplo, espaol o ingls), que se compone de muchos elementos, pero que reflejar poca expresividad si slo se utilizan nombres y verbos. Una metodologa que se basa slo en datos o slo en procedimientos es similar a un lenguaje en el que slo se utilizan nombres o verbos. Slo enlazando nombres o verbos correctos (siguiendo las reglas semnticas), las expresiones tomarn formas inteligibles y su proceso ser ms fcil. Las metodologas tradicionales se vuelven poco prcticas cuando han de aplicarse a proyectos de gran tamao. El diseo orientado a objetos se apoya en lenguajes orientados a objetos que se sustentan, fundamentalmente, en los tipos de datos y operaciones que se pueden realizar sobre los tipos de datos. Los datos no fluyen abiertamente en un sistema, como ocurre en las tcnicas estructuradas, sino que estn protegidos de modificaciones accidentales. En programacin orientada a objetos, los mensajes (en vez de los datos) se mueven por el sistema. En lugar del enfoque funcional (invocar una funcin con unos datos), en un lenguaje orientado a objetos, se enva un mensaje a un objeto. De acuerdo con Meyer, el diseo orientado a objetos es el mtodo que conduce a arquitecturas de software basadas en objetos que cada sistema o subsistema evala. Recordemos qu son los objetos? Un objeto es una entidad cuyo comportamiento se caracteriza por las acciones que realiza. Con ms precisin, un objeto se define como una entidad caracterizada por un estado; su comportamiento se define por las operaciones que puede realizar; es una instancia de una clase; se identifica por un nombre; tiene una visibilidad limitada para otros objetos; se define el objeto mediante su especificacin y su implementacin. Una definicin muy elaborada se debe a Meyer: Diseo orientado a objetos es la construccin de sistemas de software como colecciones estructuradas de implementaciones de tipos de datos abstractos. La construccin de un sistema se suele realizar mediante el ensamblado ascendente (abajo-arriba) de clases ya existentes. Las clases de un sistema pueden tener entre s, como se ver en los siguientes temas, relaciones de uso (cliente), relaciones de derivacin (herencia) o relaciones de agregacin (composicin) o incluso slo relaciones de asociacin. As, por ejemplo, con una relacin de cliente, una clase puede utilizar los objetos de otra clase; con una relacin de herencia, una clase puede heredar o derivar sus propiedades definidas en otra clase. El hardware se ensambla a partir de componentes electrnicos, tales como circuitos integrados (chips), que se pueden utilizar repetidamente para disear y construir conjuntos mucho ms grandes, que son totalmente reutilizables. La calidad de cada nivel de diseo se asegura mediante componentes del sistema que han sido probados previamente a su utilizacin. El ensamblado de componentes electrnicos se garantiza mediante interfaces adecuados. Estos conceptos se aplican tambin con tecnologas de objetos. Las clases (tipos de objetos) son como los chips de hardware, Cox les llam chips de software, que no slo se pueden enlazar (ensamblar) entre s, sino que tambin se pueden reutilizar (volver a utilizar). Las clases se agruparn normalmente en bibliotecas de clases, que son componentes reutilizables, fcilmente legibles. En la actualidad existe gran cantidad de software convencional, en su mayora escrito normalmente para resolver problemas especficos; por esta razn, a veces es ms fcil escribir nuevos sistemas que convertir los existentes. Los objetos, al reflejar entidades del mundo real, permiten desarrollar aplicaciones, creando nuevas clases y ensamblndolas con otras ya existentes. Normalmente, los desarrolladores experimentados gastan un porcentaje alto de su tiempo (20 al 40%) en crear nuevas clases y el tiempo restante en ensamblar componentes probados de sistemas, construyendo sistemas potentes y fiables.

Beneficios de las Tecnologas de objetos (TO)

Una pregunta que hoy da se hacen muchos informticos es: Cul es la razn para introducir mtodos de TO en los procesos de desarrollo? La principal razn, sin lugar a dudas, son los beneficios de dichas TO: aumento de la fiabilidad y productividad del desarrollador. La fiabilidad se puede mejorar, debido a que cada objeto es simplemente una caja negra con respecto a objetos externos con los que debe comunicarse. Las estructuras de datos internos y mtodos se pueden refinar sin afectar a otras partes de un sistema (Figura 1.20).

Pgina 42

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Objeto Mtodos
Datos

Figura 1.20. El objeto como caja negra

Los sistemas tradicionales, por otra parte, presentan con frecuencia efectos laterales no deseados. Las tecnologas de objetos ayudan a los desarrolladores a tratar la complejidad en el desarrollo del sistema. La productividad del desarrollador se puede mejorar, debido a que las clases de objetos se pueden hacer reutilizables de modo que cada subclase o instancia de un objeto puede utilizar el mismo cdigo de programa para la clase. Por otra parte, esta productividad tambin aumenta, debido a que existe una asociacin ms natural entre objetos del sistema y objetos del mundo real.

Figura 1.21. Proceso tradicional de datos

Taylor considera que los beneficios del modelado y desarrollo de objetos son:

Desarrollo ms rpido. Calidad ms alta. Mantenimiento ms fcil. Costo reducido. Incremento en escalabilidad. Mejores estructuras de informacin. Incremento de adaptabilidad.

Sin embargo, Taylor tambin considera algunos inconvenientes, aunque algunos de ellos ya han sido superados o al menos reducido su impacto.

Inmadurez de la tecnologa (hoy da ya no se puede considerar as). Necesidades de estndares ( el grupo OMG es una realidad). Necesidad de mejores herramientas. Velocidad de ejecucin. Disponibilidad de personal calificado. Costo de conversin. Soporte para modularidad a gran escala. Reutilizacin. Las clases se construyen a partir de otras clases. Sistemas ms fiables. Proceso de desarrollo ms rpido. Desarrollo ms flexible. Modelos que reflejan mejor la realidad. Mejor independencia e interoperatividad de la tecnologa. Mejor informtica distribuida y cliente-servidor. Pgina 43
Ing. Isis Espinosa Salazar

A continuacin se muestran los beneficios genricos de las tecnologas de objetos.

Fundamentos de Programacin Orientada a Objetos

Bibliotecas de clases comerciales disponibles. Mejores relaciones con los clientes. Mejora la calidad del producto software terminado.

DISEO ORIENTADO A OBJETOS

Para sustentar los principios descritos anteriormente, se han desarrollado distintas metodologas de diseo y programacin. Recientemente, un enfoque: el diseo y la programacin orientada a objetos, se ha mostrado particularmente prometedor para ayudar a los desarrolladores de software a lograr los objetivos de fiabilidad, rendimiento, adaptabilidad, comprensibilidad y reutilidad. El diseo de software orientado a objetos elabora el software como un modelo muy prximo a la forma en que pensamos e interactuamos en el mundo real. A temprana edad, aprendemos acerca de los objetos y de cmo se manipulan. Los bebs, por ejemplo, aprenden que si mueven un sonajero har ruido. A medida que desarrollan sus capacidades cognoscitivas, son conscientes de que los objetos tienen propiedades y empiezan a pensar en ellos de forma abstracta. El beb pronto se dar cuenta de que hacer ruido es una capacidad de todos los sonajeros. Para ilustrar como la visin del mundo, como un conjunto de objetos, facilita el manejo de su complejidad, consideremos una actividad que muchos de nosotros hacemos: ver la televisin. Mirando la televisin recuerda que su programa favorito empezar pronto en un canal distinto. Toma el control, oprime el botn y cambia al canal deseado. Analicemos esta actividad. Primero, tom el control, que es un objeto fsico. Dicho objeto tiene propiedades, tales como peso y tamao, y adems puede hacer algo: enviar mensajes a la televisin. No est claro de cmo lo hace o cmo estn codificados los mensajes, pero no es necesario saberlo. Slo necesita saber cmo se oprimen los botones adecuados. Los botones son la interfaz del control. Si se conoce la interfaz de un objeto, se puede usar dicho objeto para hacer algo, aunque no se sepa cmo funciona. Cuando oprimi los botones adecuados hizo que el control enviase algunos mensajes al televisor. El televisor es tambin un objeto fsico con varias propiedades. Al recibir el mensaje del control, el televisor cambi al canal deseado. Estas interacciones son tan rutinarias que es fcil no darse cuenta de lo sorprendente de esta actividad. Ha sido capaz de hacer que dos objetos interaccionen y ejecuten una actividad compleja sin comprender el funcionamiento interno de ninguno de ellos. Fue capaz de hacerlo as porque dispona de las abstracciones apropiadas para ambos objetos. Adems, su abstraccin mental del control implica que puede ir a casa de un amigo y ser capaz de usar su control y su televisor, incluso aunque tengan una marca de televisor distinta. Objetos similares muestran un comportamiento similar. Esta forma de afrontar nuestro mundo puede ser aplicada al diseo y a la programacin de software. Un paso clave en el desarrollo de un sistema complejo usando diseo orientado a objetos es determinar los objetos que constituyen el sistema. Creando cuidadosamente abstracciones de estos objetos y separando su implementacin interna de su comportamiento externo, se puede manejar la complejidad de un sistema de software de gran tamao. Si vamos a adoptar un enfoque orientado a objetos para desarrollar software, tiene sentido usar un lenguaje de programacin que sustente esta forma de pensar y permita implementar soluciones en trminos de objetos. Un lenguaje que tiene esas caractersticas es un lenguaje de programacin orientada a objetos. Observe que se ha tenido cuidado de incluir la frase implementar un diseo orientado a objetos. Ya que se puede usar un lenguaje orientado a objetos, pero no pensar en trminos de objetos. Algunos lenguajes orientados a objetos populares actualmente son Smalltalk y C++. Las caractersticas que incluyen para manejar objetos son, en su mayor parte, idnticas. Difieren principalmente en la terminologa usada para referirse a los objetos y en la sintaxis del lenguaje.

Pgina 44

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

RESUMEN

La orientacin a objetos es una manera natural de pensar acerca del mundo y de escribir programas de computadora. Los objetos tienen atributos (como tamao, forma, color, peso y aspecto) y exhiben un comportamiento. Los humanos aprendemos acerca de los objetos mediante el estudio de sus atributos y la observacin de su comportamiento. Objetos distintos pueden tener muchos atributos iguales y exhibir un comportamiento similar. La programacin orientada a objetos (POO) modela objetos del mundo real con contrapartes en software. Toma ventaja de las relaciones entre clases, en donde los objetos de cierta clase tiene las mismas caractersticas y comportamientos. Aprovecha las relaciones de herencia e incluso las relaciones de herencia mltiple, en donde las clases recin creadas se derivan mediante la herencia de las caractersticas de clases existentes, aunque contiene caractersticas nicas propias. La programacin orientada a objetos proporciona una manera intuitiva de ver el proceso de programacin, a saber, mediante el modelado de objetos reales, sus atributos y sus comportamientos. La POO tambin modela la comunicacin entre objetos mediante mensajes. La POO encapsula los datos (atributos) y las funciones (comportamiento) dentro de los objetos. Los objetos tienen la propiedad de ocultar informacin. Aunque los objetos pueden saber como comunicarse entre s a travs de interfaces bien definidas, los objetos por lo general no estn autorizados para saber los detalles de la implementacin de otros objetos (para eliminar dependencias innecesarias). El ocultamiento de informacin es crucial para una buena ingeniera de software. En C y en otros lenguajes de programacin por procedimientos, la programacin tiende a ser orientada a acciones. En realidad, los datos son importantes en C, pero la visin es que los datos existen primordialmente para permitir las acciones que realizan las funciones. Los programadores en C++ se concentran en la creacin de sus propios tipos definidos denominados clases. Cada clase contiene datos, as como el conjunto de funciones que manipulan los datos. Los componentes de datos de una clase se denominan datos miembro. Los componentes de funcin de una clase se denominan funciones miembro o mtodos.

Pgina 45

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

EJERCICIOS
1)
Llene el espacio vaco con el trmino de objetos correcto de cada una de las siguientes oraciones:

a) b) c) d) e) f) g) h) i) j)

Los humanos podemos ver hacia la pantalla del televisor y ver puntos de colores, o podemos retroceder y ver a tres personas sentadas en una mesa de conferencias, ste es un ejemplo de una capacidad llamada __________________. Si vemos un automvil como un objeto, el hecho de que sea convertible es un atributo/comportamiento (elija uno) _________________ del automvil El hecho de que un automvil pueda acelerar o desacelerar, dar vuelta a la izquierda o a la derecha, o ir hacia delante y hacia atrs es un ejemplo de _____________ del automvil. Cuando una nueva clase hereda las caractersticas de distintas clases diferentes, a esto se le denomina herencia _____________________. Los objetos se comunican entre s envindose ____________________. Los objetos se comunican entre s mediante el uso de __________________ bien definidas. Por lo general, a un objeto no se le permite saber cmo estn implementados otros objetos; a esta propiedad se le llama ______________________. Los _______________ en una especificacin de sistema ayuda al programador de C++ a determinar las clases que se requerirn para implementar el sistema. Los componentes de datos de una clase se llaman ____________ y a los componentes de funcin de una clase se les llama _________________________. A una instancia de un tipo definido por el usuario se le llama _________________.

2)

Responda de manera breve cada una de las siguientes preguntas pensando en objetos:

a) b) c) d) e)

Por qu se prefiere explicar primero y con detalle la programacin estructurada, antes de explicar a fondo la programacin orientada a objetos? Cules son los pasos tpicos de un proceso de diseo orientado a objetos? Cmo se puede mostrar la herencia mltiple en los seres humanos? Qu tipo de mensajes se enva la gente entre s? Los objetos se envan mensajes entre s a travs de interfaces bien definidas. Qu tipos de interfaces presenta el radio de un automvil (objeto) a su usuario (objeto persona)?

3)

Probablemente porta en su mueca uno de los objetos ms comunes en el mundo, un reloj. Explique cmo cada uno de los siguientes trminos y conceptos se pueden aplicar a la nocin de un reloj: objeto, atributo, comportamiento, clase, herencia (por ejemplo, considere un reloj de alarma), abstraccin, modelado, mensajes, encapsulado, interfaz, informacin, ocultamiento, datos miembro y funciones miembro. Considere un cajero automtico en un banco. Cules son algunas de las propiedades relevantes del cajero para las siguientes persona? a) b) c) d) Un usuario. Una persona de mantenimiento. Un empleado del banco. El presidente del banco.

4)

5) 6)

D un ejemplo de encapsulamiento en el funcionamiento de un contestador automtico telefnico. La mayor parte de los sistemas son modulares. Nombre algunos de los componentes/mdulos de los siguientes sistemas: a) b) c) d) e) Equipo de msica. Televisor. Lavadora. Video. Bicicleta.

7)

La mayora de las organizaciones tienen una estructura jerrquica. Elija una organizacin a la que pertenezca y dibuje un diagrama que ilustre su jerarqua.

Pgina 46

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

8)

Son los siguientes elementos objetos? Justifique su respuesta. a) b) c) d) e) Belleza. Tiempo. Celos. Arbol. Bosque.

9)

Casi todos los dispositivos electrnicos han sido diseados siguiendo el principio de modularidad, que hace que los dispositivos sean ms fciles de fabricar y reparar. Nombre los principales componentes de los siguientes dispositivos: a) b) c) d) e) f) Televisor. Video. Horno de microondas. Equipo de msica. Radio. Telfono.

10) Por qu se presta tanta atencin hoy da a la programacin orientada a objetos en general y a C++ en particular?

Pgina 47

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

EJEMPLO DE DISEO ORIENTADA A OBJETOS

Para mostrar algunas caractersticas de un lenguaje orientado a objetos, se va a hacer un esbozo de diseo de un sencillo juego de computadora llamado CAZA DE LA PULGA. El propsito de este juego, ms que nada es ayudar a la gente a desarrollar su coordinacin cuando usa un ratn de computadora. El juego funciona de la manera siguiente:

El juego CAZA DE LA PULGA est formado por una ventana con la imagen de una pulga. La pulga cambia de direcciones aleatoriamente dentro de la ventana (ver figura 1.22). El objetivo del juego es eliminar a la pulga. Una pulga es eliminada aplastndola, es decir oprimiendo el botn del ratn cuando la pulga est debajo. Son pulgas duras y hay que aplastarlas varias veces hasta matarlas. Hay dos tipos de pulgas: lentas y rpidas. Obviamente, una pulga lenta se mueve ms despacio que una rpida. Cuando se elimina la primera pulga, una ms rpida toma su lugar. Si se falla (es decir, se oprime el botn del ratn cuando la pulga no est debajo), el jugador pierde. Un jugador gana cuando elimina las pulgas lentas y rpidas sin fallar. Los dos tipos de pulgas se mueven de forma distinta. Cuando una pulga lenta llega al borde de la ventana, cambia de direccin como si hubiera chocado con una pared. Cuando una pulga rpida alcanza el borde de la ventana, la atraviesa y aparece por el lado opuesto de la ventana.

Caza de la Pulga
Movimientos posibles de la pulga

PULGA

Direccin actual
Figura 1.22. El juego Caza de la pulga

Los pasos sugeridos en el diseo orientado a objetos son los siguientes:

Paso 1. Determinar los objetos que se definen en el problema. Paso 2. Para cada objeto determinar sus atributos (propiedades) y sus acciones.

De la definicin del problema, se pueden extraer algunos objetos identificando los nombres. Los objetos nombrados en la definicin del problema son: ventana, ratn y pulga. Para mostrar las caractersticas disponibles en un lenguaje orientado a objetos, nos centraremos en el diseo de los dos objetos pulga. El diseo de los objetos ventana y ratn son similares. Para cada pulga, es necesario determinar las propiedades asociadas con ella y las acciones que pueden realizar. Segn el problema, una pulga tiene las siguientes propiedades o atributos:

Pgina 48

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Una Posicin en la ventana. Una imagen. Velocidad. Direccin. Resistencia (es decir, el nmero de golpes necesarios para eliminar la pulga).

Una pulga debe ser capaz de manejar los siguientes mensajes o mandatos:

Dibujar. Mover (es decir, actualizar su posicin). Cambiar la direccin en que se mueve. Golpear (es decir, decir a la pulga que ha sido aplastada). Matar (decir a la pulga que debe morir). estaApuntandoA (pregunta a la pulga si el cursor del ratn est sobre ella).

Estas propiedades y mensajes forman la abstraccin de las pulgas del juego. Los lenguajes orientados a objetos proporcionan una forma de definir una abstraccin mediante la encapsulacin de sus propiedades y mensajes en un nico concepto, denominado clase. Cuando un conjunto de propiedades y mensajes estn encapsulados en una clase, se dice que son miembros de la clase. Los miembros que definen las propiedades de una clase se denominan miembros de datos, porque contienen informacin. Los mensajes que una clase puede manejar se denominan mtodos o miembros de funcin. La diferencia entre clase y objeto es sutil, pero importante. Mientras una clase es un concepto abstracto, un objeto es una entidad concreta. Por ejemplo, el concepto de automvil es una clase, pero un Ford Taunus con interior de piel y motor V-6 es un objeto. En trminos prcticos, se puede pensar en una clase como una plantilla para un objeto. A partir de la clase, se pueden crear o instanciar objetos con propiedades especficas. La nocin de instanciar un objeto concreto a partir de una clase abstracta se muestra en la figura 1.23. En ella se instancian tres pulgas distintas, cada una con su propia posicin, imagen, velocidad, direccin y resistencia, a partir de la clase pulga. En esencia, una clase define las propiedades y mensajes de un objeto. La instanciacin crea un objeto con valores especficos para cada una de las propiedades.

Pgina 49

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

PULGA MENSAJES PROPIEDADES


Posicin Imagen Velocidad Direccin Resistencia Dibujar Mover FijarDireccion Golpear Matar estarApuntandoA

La clase pulga

Objetos pulga con propiedades particulares

Posicin: 1, 2 Imagen Velocidad: 3 Direccin: arriba Resistencia: 3

Pulga

Posicin: 12, 2.2 Imagen Velocidad: 4 Direccin: izquierda Resistencia: 4

Pulga

Posicin: 5, 3.8 Imagen Velocidad: 2 Direccin: derecha Resistencia: 2

Dibujar Mover FijarDireccion Golpear Matar estarApuntandoA

Dibujar Mover FijarDireccion Golpear Matar estarApuntandoA

Pulga

Dibujar Mover FijarDireccion Golpear Matar estarApuntandoA

Figura 1.23. Instanciacin de tres objetos pulga a partir de la clase pulga

Se puede pensar en crear una clase por cada tipo de pulga (lenta y rpida) e instanciar tipos distintos de pulga segn se requiriera. Sin embargo, una caracterstica importante de los lenguajes orientados a objetos es que permiten al programador explotar la similitud de los objetos. Si piensa acerca de ello, una pulga rpida y una pulga lenta tienen muchas caractersticas en comn. Tanto si una pulga es rpida como si es lenta, tiene posicin, imagen, velocidad, direccin y resistencia. De hecho, la nica caracterstica que distingue a ambas pulgas es cmo se mueven. Una pulga lenta da la vuelta cuando llega al borde de la ventana, mientras que una rpida la atraviesa y reaparece por el borde opuesto de la ventana. Por lo tanto, se puede pensar en crear una pulga bsica que capture los atributos y comportamientos que todas las pulgas tienen en comn y usarla para crear dos tipos esenciales de pulgas, pulgaLenta y pulgaRapida, que se comportan de forma distinta cuando llegan al borde de la ventana. As, ambas pulgas son tipos especiales de pulga. Estas relaciones, definen una jerarqua como se muestra en la figura 1.24.

Pgina 50

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Pulga
PROPIEDADES
Posicin Imagen Velocidad Direccin Resistencia

MENSAJES
Dibujar Mover FijarDireccion Golpear Matar EstarApuntandoA

Es una

Es una

PulgaLenta
Propiedades Mensajes

PulgaRapida
Propiedades Mensajes

Mover

Mover

Mensaje especfico de pulgaLenta

Mensaje especfico de pulgaRapida

Figura 1.24. Abstraccin y herencia de pulgas con diferente comportamiento

En la parte alta del diagrama est la clase Pulga. Esta clase, la ms general, se denomina a veces clase base o superclase. Debajo de la clase base estn las subclases o clases derivadas. Las clases derivadas heredan mensajes y propiedades de sus ancestros. Por lo tanto la PulgaRapida y la PulgaLenta tienen como propiedades su posicin, Imagen, Velocidad, Direccin y Resistencia. De forma similar, una PulgaRapida y una PulgaLenta entienden los siguientes mensajes o mandatos: Dibujar, Mover, FijarDireccion, Golpear, Matar y EstarApuntandoA. La nocin de herencia es una caracterstica que define a los lenguajes orientados a objetos. La habilidad de una clase para heredar propiedades y funciones miembro de un ancestro sustenta el principio de reutilizacin. Ambos tipos de pulgas comparten las funciones miembro para Dibujar, Mover, FijarDireccion, Golpear, Matar y EstaApuntandoA. Estas funciones slo se implementan una vez.

Pgina 51

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

La jerarqua para la clase Pulga ilustra otra caracterstica de los lenguajes orientados a objetos: el polimorfismo. El polimorfismo es la capacidad de asumir diferentes formas. En un lenguaje orientado a objeto, el polimorfismo es la propiedad que permite que un mensaje pueda significar distintas cosas dependiendo del objeto que lo reciba. El mensaje Mover significa una cosa distinta si se enva a un objeto PulgaLenta o a una de tipo PulgaRapida. Una pulga lenta da la vuelta cuando llega al borde de la ventana, mientras que una pulga rpida hace un tnel hasta el otro lado. Este uso del polimorfismo se ilustra en la figura 1.18 mediante la inclusin del mensaje Mover para los objetos: PulgaLenta y PulgaRapida. El polimorfismo es un concepto natural que se aplica bien a los objetos. Objetos similares aceptan a menudo los mismos mensajes, pero hacen cosas distintas. Por ejemplo, considere la interfaz grfica de una computadora. Los objetos son iconos que representan archivos. Se usa el ratn para enviar mensajes a estos objetos. Un mensaje tpico es una doble pulsacin, que se enva al objeto colocando el ratn sobre su icono y pulsando el ratn dos veces. Para un archivo ejecutable, ese mensaje significa que debe ejecutar el archivo, mientras que para un archivo de texto, la pulsacin doble indica que debe arrancar el editor de texto y abrir el archivo para editarlo. El desarrollo de la jerarqua de Pulga ilustra mucha de las caractersticas disponibles en un lenguaje orientado a objetos. Sin embargo, para demostrar completamente la potencia del diseo y la programacin orientada a objetos, es necesario discutir cmo se puede crear un sistema completo a partir de un conjunto de objetos. Se har mediante el diseo esquemtico de alto nivel del juego CAZA DE LA PULGA. Recuerde que, de la descripcin previa que se hizo del juego, los otros objetos mencionados fueron el ratn y la ventana. Ciertamente, es necesario desarrollar estos objetos. Sin embargo, en la descripcin se menciona otro objeto muy importante: el mismo juego! Es fcil de olvidar, porque la definicin del problema es una descripcin de este objeto. Si lo piensa un momento, tiene sentido pensar en el juego como en un objeto. Desde un punto de vista abstracto, el objeto juego es el elemento que coordina las actividades de otros objetos y asegura el cumplimiento de las reglas del juego. Se llamar a este objeto, que es el juego, ControladorDeJuego. Ahora ya se puede completar el diseo de alto nivel del juego. Como se mencion, se necesitan los objetos ventana y ratn. Por ahora, se ignorar el objeto ventana. Aunque es necesaria para la realizacin del juego, la creacin y el control de la ventana no tienen un papel fundamental en la operacin del juego. El ratn, por otro lado, es un componente fundamental del juego, ya que gran parte de la accin del juego se centra en las actividades del ratn. La visin abstracta del ratn, Raton, es la de un objeto que enva mensajes al ControladorDeJuego. El raton enva un mensaje al ControladorDeJuego cada vez que se pulsa un botn. El mensaje contiene la posicin en la pantalla del cursor. Con las abstracciones Raton y Pulga, el diseo y manejo del juego es bastante sencillo. El manejo global se ilustra en la figura 1.25. Cuando se pulsa una tecla del ratn, el Ratn enva el mensaje PulsacionRaton al ControladorDeJuego. Este extrae la posicin del ratn del mensaje y enva un mensaje EstaApuntandoA, que incluye la posicin del ratn, a la pulga de la pantalla. La pulga determina si la posicin en el mensaje est dentro de ella. Si el ratn apunta a la pulga, responde s al mensaje; en caso contrario, responde no. Si el ControladorDeJuego recibe una respuesta afirmativa, enva un mensaje de La pulga fue golpeada. Si se ha sobrepasado la resistencia de la pulga, la pulga responde al mensaje diciendo que no tiene ms resistencia. Si se recibe esta respuesta, el ControladorDeJuego mata a la pulga. Si la pulga era lenta, el controlador crea una PulgaRapida y el juego contina. Las interacciones entre el ControladorDeJuego y la Pulga se muestran en la figura 1.25.

Caza de la pulga
Respuesta: si o no
controladorDeJuego

pulga

estaApuntandoA?
PulsacionRaton

pulsacionRaton
raton

Figura 1.25. Interaccin entre el controlador del juego, el ratn y la pulga.

Pgina 52

Ing. Isis Espinosa Salazar

Fundamentos de Programacin Orientada a Objetos

Si la pulga responde que no, el ratn no est apuntando sobre ella; en ese caso, el ControladorDeJuego crea una nueva ventana y muestra un mensaje diciendo al jugador que ha perdido el juego. Si se ha eliminado a todas las pulgas sin errores, el controlador muestra un mensaje felicitando al jugador por su habilidad con el ratn. Por supuesto, quedan muchos detalles que perfilar para completar la implementacin del juego. Sin embargo, el diseo de alto nivel est resuelto.

EJERCICIOS
1. Esboce el diseo de la clase Ventana para el juego CAZA DE LA PULGA. Asegrese de incluir los atributos (es decir, miembros de datos) y las acciones (es decir, miembros de funcin) que la clase debe tener. Esboce el diseo de la clase Ratn para el juego CAZA DE LA PULGA. Asegrese de incluir los atributos (es decir, miembros de datos) y las acciones (es decir, miembros de funcin) que la clase debe tener. Esboce el diseo de la clase ControladorDeJuego para el juego CAZA DE LA PULGA. Asegrese de incluir los atributos (es decir, miembros de datos) y las acciones (es decir, miembros de funcin) que la clase debe tener. Usando los diseos de los problemas 1 y 3, dibuje un diagrama que muestre cmo podran interactuar las distintas clases entre s. Esboce un diseo orientado a objetos de una mquina despachadora de refrescos. Cules son los objetos clave? Cules son los atributos y comportamientos de los objetos? Cmo interaccionan los objetos? El ejemplo herencia en la figura 1.24 ignora algunos detalles. Considere los siguientes temas: a) La posicin es una propiedad de todas las pulgas. Cmo se podra especificar la posicin? b) Trace las acciones que una pulga ejecuta cuando recibe un mensaje Matar. 7. Extienda la jerarqua de la clase de la figura 1.24 para incluir una clase PulgaEspectro. Una PulgaEspectro desaparece ocasionalmente y reaparece en una nueva posicin. Es necesario cambiar las propiedades de Pulga?

2.

3.

4.

5.

6.

Pgina 53

Ing. Isis Espinosa Salazar

Вам также может понравиться