Professional Documents
Culture Documents
CONTENIDO
1 1 La complejidad inherente al software 1 2 La crisis del software 1 3 Factores en la calidad del software 1 , 4 Programacin y abstraccin 1 , 5 El papel (el rol) de la abstraccin 1 6 Un nuevo paradigma de programacin 1 7 Orientacin a objetos 1 8 Reutilizacin de software 19. Lenguajes de programacin orientados a objetos 1 , 1 0 Desarrollo tradicional versus orientado a objetos 111. Beneficios de las tecnologas de objetos (TO) RESUMEN
La dcada de los noventa ser, 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 medio de pensar sobre lo que significa computar (computadorizar), es decir, cmo se puede estructurar informacin en un computador
incluso millones de lneas de cdigo Esta caracterstica se facilita descomponiendo nuestia implementacin en centenales y a veces millones de mdulos independientes Esta cantidad de trabajo exige el uso de un equipo de desarroIladores, aunque se trata por todos los medios de que este equipo sea lo ms pequeo posible Ahora bien, a medida que haya ms desarrolladores, se producen comunicaciones entre ellos ms complejas, e incluso con coordinacin difcil entre ellos, particularmente si el equipo est disperso geogrflcamente, como suele ser el caso de proyectos grandes La rotura de una aplicacin en entidades y relaciones que son significativas a los usuarios es un anlisis convencional y tcnicas de diseo Con la programacin orientada a objetos, este pioceso 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
El desarrollo de soitware
Entre las diferentes fases del ciclo de vida del software (Fig 1 l), el mantenimiento, aunque en tiempos fue despreciada su importancia, se considera actualmente como u110 de los problemas ms rigurosos en el desarrollo del software Anlisis
Diseo Implementacin
Los cambios iealizados en la evolucin de un progiama 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 pioducido ningn progreso significativo en el desarrollo de software, y analizaba ciiticamente todas las tecnologas ms piometedoras Aunque l confesaba que tena ms confianza en la prograiilacin orientada a objetos que en cualquiei otra tecnologa, mantena dudas sobre sus ventajas efectivas Recientemente, las propuestas de reusubilidud o i eulilizacin, reusability,de coinponeilles soJtiva~e,se considera11 como bloques iniciales para la construccin del prograina, de modo siinilar a la conslruccin de cualquier objeto complejo (tal como un automvil) que se construye ensamblando sus partes En respuesta al artculo de Brooks, Brad Cox2, el inventor de Objective-C, public un artculo en el que esencialmente rebata las tesis de Biooks: Existe una bala de plata Es un arma tremendaineiite potente, impulsada poi vastas fueizas ecouniicas a la aue nuevos obstculos tcnicos slo pueden resistii brevemente La bala de plata es uii cambio culru~ulen lugar de un cambio tecnolgico Es un nuevo paiadigma; una revoluciii industrial basada en partes ieutilizables e intercambiables que modificain el universo del software, de igual modo que la revolucin industrial cambi la fabricacin Por consiguiente, la P O 0 (Prograinacin Orientada a Objetos) no slo son nuevos Ieilguajes de piogramacin, sino un nuevo modo de pensar y diseilai aplicaciones que puede11 ayudar a resolver pioblemas que afectan al desaiiollo del software Sin embargo, el lenguaje debe ser capaz de soportar el nuevo paradigma, siendo por consiguiente uiia parte esencial de esta ievolucin
Muchos investigadores sugiere11que los costes de software requieren ms de la mitad de los costes y recursos globales en el desarrollo de software Implernentacin Depuracin
7%
Anlisis
15 %
Eficiencia
La eficiencia del software es su capacidad pala hacer u11 buen uso de los recuisos que manipula
Mantenimiento
67 %
Figura 1 2
Bnoo~s, Fredeiik P li : N o Silvei Bullet~, Coiiipurei 10-19, abril 1986 Cox, Biad J : Thei-e is a Silver Bulleta, Bi,te 209-218, octubre 1987
El desarrolio de software
Transportabilidad portabilidadl
La transportabilidad o portabilidad es la facilidad con la que un software puede ser tiansportado sobre diferentes sistemas fsicos o lgicos
Verificabilidad
L.a verificabilidad es facilidad de verificacin de un softwaie; es su capacidad para soportar los procedimientos de validacin y de aceptar juegos de test o ensayo de programas
Integridad
La integridad es la capacidad de un softwaie para proteger sus propios componentes contia los procesos que no tengan derecho de acceso
Fcil de utilizar
Capacidad de los productos software de realiza1 exactamente las tareas definidas por su especificacin
Robustez
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 pata ser reutilizados, en su totalidad o en parte, en nuevas aplicaciones
Compatibilidad
10
E l desarrollo de software
11
Sin embargo, la relacin entre abstraccin y lenguaje de programacin es doble: poi un lado se utiliza el lenguaje de programacin para escribir un programa que es una abstraccin del mundo leal; por otro lado se utiliza el lenguaje de progiamacin para desciibir 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 la dcada de los cincuenta, el nico mecanismo de abstraccin era el lenguaje eiisan~blador y de mquina, que ofreca la posibilidad de utilizar nombres simblicos para representar celdas de memoiia Posteriormente, los lenguajes de alto nivel ofrecieion un nuevo nivel de abstraccin El arte de la prograiilaciiz es el mtodo por el que se describir a una computadora (mediante un lenguaje de prograinacin) un fenmeno, una accin, un comportamiento o una idea
aquellas caracteisticas 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 De igual forma que uii 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, mientias ignoian caractersticas irrelevantes Este proceso de abstracciiz es psicolgicarneiite necesario y natural: la abstraccin es crucial para comprender este complejo inundo, L.a abstraccin es esencial para el funcionamiento de una mente humana normal y es una herramienta muy potente para tratar la complejidad Considerar, por ejemplo, el ejercicio mental de memorizar nmeros. Un total de siete dgitos se puede memorizar con ms o menos facilidad Sin embargo, si se agrupan y se deiioininan nmeios de telfono, los dgitos individuales se relegan en sus detalles de ms bajo nivel, crendose un nivel abstracto y ms alto, en el que los siete nmeros se organizan en una nica entidad Utilizando este mecanismo se pueden memorizar algunos nmeros de telfonos, de modo que la agrupacin de diferentes entidades conceptuales es un mecanismo potente al seivicio de la abstiaccin
12
El desarrollo de sotware
13
alienta el uso de abstracciones de contiol, tales como bucles o 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 El proceso de abstraccin fue evolucionando desde la aparicin de los primeros lenguajes de programacin El mtodo ms idneo para controlar la complejidad fue aumentar los niveles de abstraccin En esencia, la abstraccin supone la capacidad de encapsular y aislar la informacin del diseo y ejecucin 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 los procedimientos, los mdulos, los tipos abstractos de datos y los objetos En las siguientes secciones describiremos los mecanismos de abstraccin que han conducido al desarrollo profundo de los objetos: procedimientos, mdulos, tipos abstractos de datos y objetos
otros piopsitos En Pascal existe el mbito local y global Cualquier mbito que permite acceso a los cuatro procedimientos debe permitir tambin el acceso a sus datos comunes Para iesolver este problema se ha desarrollado un mecanismo de estructuracin diferente
1.,5..4. 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 pai te pblica -accesible fuera del mdulo- Los tipos, datos (variables) y procedimientos se pueden definir en cualquier parte, El criterio a seguii en la construccin de un indulo es que si iio se necesita algn tipo de informacin, no se debe tener acceso a ella Este criterio es la ocultaciiz de infornzaciiz 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 (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 pioporcionan un mtodo efectivo de ocultacin de la informacin, pero no permiten realizar irzstaizciacin, que es la capacidad de hacer mltiples copias de las zonas de datos
1.5..3. Procedimientos
Los procedimientos y funciones fueron uno de los primeros mecanismos de abstracciu que se utilizaron ampliamente en lenguajes de programacin Los procedimientos permitan tareas que se ejecutaban rpidamente, o eran ejecutadas slo con ligeras variaciones, que se reunan en una entidad y se reutilizaban, en lugar de duplica1 el cdigo varias veces Por otra parte, el procedimiento proporcion la primera posibilidad de ocultacin de ilzfolmacin Un programador poda escribii un procedimiento o conjunto de procedimientos que se utilizaban por otros programadores Estos otros programadores no necesitaban conoce1 con exactitud los detalles de la implementacin; slo necesitaban el interfaz necesaiio. Sin embargo, los procedimientos no resolvan todos los problemas En particular, no era un inecanismo efectivo para ocultar la informacin y pala resolver el problema que se produca al trabajar mltiples piogramadores con nombres idnticos Para ilustra1 el problema, consideremos un programador que debe escribir un conjunto de rutinas para implementar una pila Siguiendo los criterios clsicos de diseno de software, nuestro programador establece en primer lugar el interfaz visible a su trabajo, es decir cuatio rutinas: meter,sacar, pilavaca y pilallena A continuacin iinplementa los datos mediante arrays, listas enlazadas, etc Naturalmente, los datos contenidos en la pila no se pueden hacer locales a cualquiera de las cuatro rutinas, ya que se deben compartir por todos. Siil embargo, si las nicas elecciones posibles son variables locales o globales, entonces la pila se debe mantener en variables globales: por el contrario, al se1 las variables globales, no existe un mtodo para limitar la accesibilidad o visibilidad de dichas variables Por ejemplo, si la pila se representa mediante un array denominado datospila,este dato debe ser conocido por otros programadores, que puedan desear crear variables utilizando el mismo nombre pero relativo a las referidas rutinas De modo similar, las rutinas citadas estn reservadas y no se pueden utilizar en otras paites del programa para
14 1 2
Programacion
orrentada a objetos
El desarrollo de software
15
3
4
Exponei una definicin del tipo Hacer disponible un conjunto de operaciones que se puedan utilizar para manipular instancias de ese tipo Protegei los datos asociados con el tipo de modo que slo se pueda actuar sobre ellas con las rutinas proporcionadas Hacei instancias mltiples del tipo
L.a pei ti~teizciase refiere a la permanencia de un objeto, esto es, la cantidad de tiempo para el cual se asigna espacio y permanece accesible en la memoiia del computador
Los mdulos son mecanisinos de ocultacin de informacin y no cumplen bsicamente ms que los apartados 2 y 1 Los tipos abstractos de datos se implementan con iiidulos en Modula-2 y paquetes en CL.U o Ada
1.,5..6. Objetos
Uii objeto es sencillamente un tipo abstracto de datos al que se aaden importantes innovaciones en comparticin de cdigo y reutilizacin L.os mecanismos bsicos de orientacin a objetos son: objetos, ineizsujes y iiztodos, clases e iizstaizcias y heieiiciu
I I
Persistencia Polimotiismo Genericidad Entidades bsicas Mtodos Instancias Jerarqua
No existe ningn estilo de progiainacin idneo para todas las clases de programacin La orientacin a objetos se acopla a la simulacin de situaciones del mundo real En POO, las entidades centrales son los objetos, que son tipos de datos que encapsulan con el mismo nombie estructuras de datos y las opeiaciones o algoritmos que maiiipulan esos datos
Un ejemplo que sirve como modelo o patrn: Dicrioiiai.)i o/ S<ieitce aiid leiliizoloq> Acadeinic Press, 1992 KUHIV, Thomas S : The Stiucfure o/ S<icizt$i Reooiuiioii 2 " e d , Uiiiversity of Cliicaga Press Chicago, 19'70. Object-Oriented Programming (OOP)
Una idea fundamental es la coinunicacin de los objetos a travs de paso de iizeizsajes Adems de esta idea, se aaden los mecanismos de heienciu. 11 polimorfisiizo L.a herencia peimite diferentes tipos de datos para compartir el mismo cdigo, peimitiendo 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
' '
16
El desarrollo de software
17
natural L.as tcnicas orientadas a objetos proporcionan mejoras y metodologa~ 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 L.a 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 pioductos software. Estas tareas se iealizan mediante la modelizacin del mundo real El soporte fundamental es el modelo objeto Los cuatro elementos (propiedades) ms importantes de este modelo6 son: Abstraccin Encapsulacin Modularidad Jerarqua Como sugiere Booch, si alguno de estos elementos no existe, se dice que el modelo no es orientado a objetos
1..7.1. Abstraccin
La abstraccin es uno de los medios ms importantes, mediante el cual nos enfrentamos con la complejidad inherente al software La abstraccin es la propiedad que permite representar las caracteisticas esenciales de un objeto, sin preocupaise de las restantes caracteisticas (no esenciales) Una abstiaccin se centia en la vista externa de un objeto, de modo que sirva para separar el comportamiento esencial de un objeto de su implementacin 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 El elemento clave de la programacin orientada a objetos es la clase Una clase se puede definir como una descripcin abstracta de un grupo de objetos, cada uno de los cuales se diferencia por su estado especifico y por la posibilidad de realizar una serie de operacioizer Por ejemplo, una pluma estilogrfica es un obieto que tiene un estado (llena de tinta o vacia) v sobre la cual se vueden realizar algunas ~ ~ e r a c i o n e s ' ( ~ ejemplo or escribir, piner o quitar el capuchn, llenar de tinta si est vaca) La idea de escribir programas definiendo una serie de abstracciones no es nueva, pero el uso de clases para gestionar dichas abstracciones en lenguajes de programacin ha facilitado consideiablemente su aplicacin
f1--
1-
Benjainin/Cumrnings,
18
El desarrollo de soiware
19
1.,7..2. Encapsulacin
La eiicapsulaciii o eiicap~ulaiizieiito 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 L.a encapsulacin (tambin se conoce conlo otultaciiz de la iifoii~zuciiz),en esencia, es el proceso de ocultar todos los secretos de un objeto que no contribuyeri a sus caractersticas esenciales L.a encapsulacin permite la divisin de un prograina en mdulos Estos n~dulos se implementan mediante clases, de foima que una clase representa la encapsulacin de una abstraccin En la prctica, esto significa que cada clase debe tener dos partes: un interfaz y una implementaciii El iizterfaz de una clase captura slo su vista externa y la iiizplei?zeizzacincontiene la representacin de la abstraccin, as como los iilecaiiismos que realizan el comportamiento deseado
L,asje~arquas de generalizacin/especializacin se conocen como herencia Bsicamente, la herencia define una relacin entre clases, en donde una clase comparte la estructura o compoitamiento definido en una o ms clases (hereizcia sii~zple y hereizcia iizltiple, respectivamente). L.a agregacin es el concepto que permite el agrupamiento fsico de estructuras relacionadas lgicamente As, un camin se compone de ruedas, rnotoi, sistema de transmisin y chasis; en consecuencia, camin es una agregacin, y ruedas, motor, transmisin y chasis son agregados de camin
1.7.4. Jerarqua
L.a jeiarqua es una propiedad que pei~nite una ordenacin de las abstracciones L.as dos jerarquas ms importantes de un sistema complejo son: est~uctura de clases (jerarqua es-un>> (iy-a): genetalizaciii/especializacin) y estructura de objetos (jerarqua parte-de (part-of): agiegacin)
20
El desarrollo d e soffware
21
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 especifico El polimorfismo requiere ligadura tardia 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 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 tardia Cuando se envfa 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 ve~ificacinde tipos de los argumentos y del valor de retorno, pero no conoce el cdigo exacto a ejecutar Para realizar la ligadura tardia, 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
22
El desarrollo de software
23
Eii los ltinios aos han aparecido lenguajes con soporte de objetos que cada vez se estn popularizando ms: Clipper 5-2, Visual BASIC, etc, De cualquier forma, existe un Yey actual en los lenguajes oiientados a objetos: C + + La normalizacin por ANSI y AT&T de la versin 3 O y las numerosas versiones de difeientes fabricantes, tales como Borland C + + 4 014 5, Turbo C + + 3 011 1 y 4 5, Microsoft C/C+ + 7 0, Visual C + + 1 512, Symantec 6 017 0, etctera, hacen que en la seguilda mitad de los noventa ser el lenguaje orientado a objetos ms popular y utilizado en el mundo de la programacin L.a evolucin de los lenguajes orientados a objetos se han mostrado en la Figura 15, en la que se aprecia el tronco comn a todos los lenguajes modeinos Algol y las tres lneas fundamentales: enfoque en Pascal (Ada, Object Pascal), enfoque pulo de orientacin a objetos (Simula/Smalltalk/Eiffel) y enfoque en C (Objective-C, C + f , .Talla)
1.9.1.
Existen varias clasificaciones de lenguajes de programacin orientados a objetos, atendiendo a criterios de construccin o caractersticas especficas de los mismos Una clasificacii~ampliamente aceptada y difundida e s la dada poi Wegner y que se ilustra en la Figura 1 69
en objetos
+clases
\
C L U
\/
Ada
Pascal ' X
/ Smalltalk
Actor
Objet Pascal
\\\ / 1
Simula
Y
1 "--1
Orientados a objetos
Figura 1 6
BASlC
1.a clasificacin de Wegnei divide los lenguajes en tres categoras: 1 2 Lenguajes basados en objetos que soportan objetos Es decir, disponen de componentes caracterizados por un coi~junto de operaciones (coinportamiento) y un estado Lenguajes basados en clases que implican objetos y clases Es decir, disponen de componentes tipo clase con operaciones y estado coinii
objective.c
c++
Visual BASlC 3
i 4 Visual BASlC
Figura 1 5
WEGNEK, Petel [1987]: Di~iieiisioiiso j Objecr-Baied Laiiguajer Desigii Nmero especial de SIGPLAN Noti~ev
24
El desarrollo de soffware
25
Una clase de un objeto se construye con un iizte?faz que especifica las operaciones posibles y unecuerpo que implementa dichas operaciones Lenguajes orientados a objetos que adems de objetos y clases ofrecen mecanismos de herencia entre clases Esto es, la posibilidad de derivar operaciones y atributos de una clase (superclase) a sus subclases
cuyos complementos configuran, de liecho, una nueva clasificacin En este sentido, los criterios recogidos por este autor son los siguientes: L.a modularizacin de los sistemas ha de realizarse mediante estructuras de datos apropiadas. 2 Los objetos se describen como la implementacin de tipos abstractos de datos 3 La memoria se gestiona (administra) automticamente 4 Existe una correspondencia entre tipos de datos no elementales y clases 5 Las clases se pueden definir como extensiones o restricciones de otras clases ya existentes mediante herencia 6 Soportan polimorfismo y ligadura dinmica 7 Existe herencia mltiple y repetida De acuerdo con los criteiios de Meyer, recogemos en IaTabla 1 1 el cumplimiento de dichos criterios en los lenguajes 00 y basados en objetos ms populares
La definicin anterior, pese a su antigedad, sigue teniendo vigencia Existen otias clasificaciones similares, pero con la inclusin de la propiedad de polinzorfisino en la categora 1, como requisito para ser lenguaje orientado a objetos De cualquier forma, hoy en da es posible ampliar esa clasificacin de acuerdo a criterios puramente tciiicos y hacer una nueva clasificacin de la categora 3:
31
Lenguajes orieiztados a objetos puros Soportan en su totalidad el paradigma de orientacin a objetos: Smalltalk Eiffel Simula Lenguajes oiientados a objetos hibridos Soportan en su totalidad el paradigma de orientacin a objetos s o b ~ eun ncleo de lenguaje hbrido: C + + (exteizsiiz de C: Borland C + + , Microsoft C + + , Turbo C + + , Visual C + i , Symantec,Watcom ) Objective-C (exteizsiiz de C) Object COBOL. (exteizsin de COBOL). Object Pascal (extensin de Pascal: Turbo/Borland Pascal) Visual Object (extensin de Clipper). Delphi (extensiiz de Turbo Pascal 70) Java (extensiiz de C + + y Ada-95)
32
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),que se muestra en la Figura 3 1 El modelo clsico del ciclo de vida del software n o es el nico modelo posible, dado que es posible desarrolla1 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 En esta seccin nos centraremos en la metodologa ms utilizada, denominada desarrollo estructurado, que se apoya esencialmente en el diseo desceizdente y en la progiamacin estructul.ada La progiamacin estructurada es un estilo disciplinado de programacin segn los lenguajes procedimentales (por procedimientos), tales como FORTRAN, BASIC, COBOL y recientemente C y C++ Las metodologias disetio descendente (o descomposicin funcional) se centran en operaciones y tienden a descuidar la importancia de las esrtructuras de datos Se basan en la dlebre ecuacin de Wirth: Datos
Modularizacin Tipos abstractos de datos Gestin automtica de memoria 4 Slo clases 5 Herencia 6 Polirnoifismo (y ligadura dinmica ) '7 Herencia mltiole v reoetida
1 2 3
S S S S
S S S S S Si
S S
S S S S S S S
S Si S S S S
S S S S S S
No
No
E n parte En paile S
S S
No
No
No
No
De cualquier forma, Meyei, cieadoi del lenguaje Eiffel, proporciona unos criterios para considerar la bondad" de un lenguaje orientado a objetos,
'O MEYER, Bertrand: Objrct Oriei~tedSqfti4:aie Coitrtiuriioii Englewood Clifls NI, PrenticeHall, 1988
+ Algoritnzos = Programar
La idea clave del diseo descendente es rompe1 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
26
El desarrollo de software
27
que el programa se compartimentaliza en mdulos ms pequeos y que se programan fcilmente Los subprogramas facilitan el enfoque estructurado, y en el caso de lenguajes como C, estas unidades de programas, llamadasfunciones, representan las citadas tareas o mdulos individuales Las tcnicas de progiamacin estructuradas reflejan, en esencia, un modo de resolver un prograina en trminos de las acciones que realiza Para comprender mejor las relaciones entre los algoritmos (funcioiles) y los datos, consideremos una comparacin con el lenguaje natural (por ejemplo espaol o ingls), que se compone de muchos elementos pero que ieflejar poca expresividad si slo se utilizan nombres y verbos Una metodologa que se basa slo en datos o slo eiz pi.ocedi~izieiztos es similar a un lenguaje (idnea) en el que slo se utilizan nombres o veibos. Slo enlazando nombres o verbos correctos (siguiendo las reglas sen~nticas), las expresiones tomarn formas inteligibles y su proceso ser ms fcil L.as metodologias tradicionales se vuelven poco prcticas cuando han de aplicaise 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 opeiaciones que se pueden realizar sobre los tipos de datos Los datos no fluyen abiertamente en un sistema, coino ocurre en las tcnicas estructuradas, sino que estn piotegidos de n~odificacionesaccidentales En piogramacin orientada a objetos, los mensajes (en vez de los datos) se mueven -por el sisteina En lugai 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 impleinentaciones de tipos de datos abstractos n La construccin de un sistema se suele realizar mediante el ensamblado ascendente (abajo-ariiba) de clases preexistentes Las clases de un sistema pueden tener entie si, como se ver en los siguientes captulos, relaciones de uso (cliente), relaciones de deiivacin (herencia) o relaciones de agregacin (conzposicin) o iiicluso slo relaciones de asociacin As, por ejemplo, con una ielacin de cliente, una clase puede utilizar los objetos de otra clase; con una ielacin de herencia, una clu~e puede heredai. o derivar. sus propiedades definidas en otra clase El haidwaie se ensambla a partii de componentes electrnicos, tales como ciicuitos integrados (clips), 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 pieviamente a su utilizacin El ensamblado de componentes electinicos se garantiza mediante interfaces adecuados Estos conceptos se aplican tambin con tecnologas de objetos Las clases (tipos de objetos) son como los clzips de hu~divaie,Cox les llam chips de softwuie, que no slo se pueden enlazar (ensamblar) entre s, sino que tambin se pueden reutilizar (volver a utilizar), L.as clases se agiuparn 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 conveitir los existentes. L.os objetos, al reflejar entidades del mundo real, permiten desarrollar aplicaciones, creando nuevas clases y eiisamblndolas con otras ya existentes Normalmente, los desarrolladores experimentados gastan un porcentaje alto de su tiempo (20 al 40 por 100) en cieai nuevas clases y el tiempo restante en ensamblar componentes probados de sistemas, construyendo sistemas potentes y fiables
Mtodos
Figura 1 7
L.os sistemas tradicionales, por otia parte, presentan con frecuencia efectos laterales no deseados Las tecnologas de objetos ayudan a los desarrolladores a trata1 la complejidad en el desariollo del sistema La productividad del desairollador 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 piograma para la clase Por otra parte, esta productividad tambin aumenta, debido a que existe una asociacin ms natural entie objetos del sistema y objetos del mundo real
28
Figura 1 8 Proceso tradicional de datos, Taylor " considera que los beneficios del modelado y desarrollo de objetos son: 1 Desarrollo ms rpido 2 Calidad ms alta 1 Mantenimiento ms fcil 4 Coste reducido 5 Incremento en escalabilidad 6 Mejores estructuras de informacin 7 Incremento de adaptabilidad Sin embargo, TaylorL2tambin considera algunos inconvenientes, aunque algunos de ellos ya han sido superados o al menos reducido su impacto 1 Inmadurez de la tecnologa (hoy da ya no se puede considerar aso 2 Necesidades de estndares (el giupo OMG es una realidad), 3 Necesidad de mejores herramientas 4 Velocidad de ejecucin 5 Disponibilidad de personal cualificado, 6 Coste de conversin, 7 Soporte para modularidad a gran escala L.a Figura 19 muestra los beneficios genricos de las tecnologas de objetos Reutilizacin Las clases se construyen a partir de otras clases Sistemas ms fiables, Proceso de desarrollo ms rpido Desarrollo ms flexible Modelos que reflejanmejor la realidad Mejor independencia e interoperatividad de la tecnoiogia Mejor informticadfstribuiday cliente-servidor, Bibliotecas de clases comerciales disponibles Mejor relaciones con los clientes Mejora la calidad del producto software terminado Figura 1.9. Beneficios de las tecnologias de objetos
w
Programa Programa Datos
Ei
desarrollo de soitware
29
RESUMEN
Este captulo es una introduccin a los mtodos de desarrollo orientados a objetos Se comienza con una bieve revisin de los problemas encontrados en el desarrollo tradicional de software que condujeron a la crisis del software y que se han mantenido hasta los aos actuales El nuevo modelo de programacin se apoya esencialmente en el concepto de objetos La orientacin a objetos modela el mundo real de un modo ms fcil a la perspectiva del usuario que el modelo tradicional La orientacin a objetos proporciona mejores tcnicas y paradigmas para consttuir componentes de software reutilizables y bibliotecas ampliables de mdulos de software Esta caracterstica mejora la extensibilidad de los programas desarrollados a travs de metodologas de orientacin orientada a objetos Los usuarios finales, programadores de sistemas y desarrolladores de aplicaciones se benefician de las tecnologas de modelado y piogramacin orientadas a objetos L.os conceptos fundamentales de orientacin a objetos son tipos abstractos de datos, herencia e identidad de los objetos U n tipo abstracto de datos describe una coleccin con la misma estructura y comportamiento Los tipos abstractos de datos extienden la nocin de tipos de datos, ocultando la implementacin de operaciones definidas por el usuario (mensajes) asociados con los tipos de datos Los tipos abstractos de datos se implementan a travs de clases Las clases pueden heredar unas de otras Mediante la herencia se pueden construir nuevos mdulos de software (tales como clases) en la parte superior de una jerarqua existente de mdulos La herencia permite la comparticin de cdigo (y por consiguiente reutilizacin) entre mdulos de software La identidad es la propiedad de un objeto que diferencia cada objeto de los restantes Con la identidad de un objeto, los objetos pueden contener o referirse a otros objetos La identidad del objeto organiza los objetos del espacio del objeto inanipulado por un programa orientado a objetos. Este captulo examina el impacto de las tecnologas orientadas a objetos en lenguajes de programacin, as como los beneficios que producen en el desario110 de software Los conceptos claves de la programacin orientada a objetos se examina en el captulo; si no ha ledo hasta ahora nada sobre tecnologas de objetos, deber examinar con detenimiento todos los elementos conceptuales del captulo, que se ampliarn en detalle en captulos posteriores; si ya tiene conocimientos bsicos de la orientacin a objetos, este captulo debe consolidarlos y prepararle para una eficiente lectura de los siguientes captulos
. .
" IAYLOR, David A : Objet-Oriented Trchiioioqy Readirlg MA: Addison-Wesley, 1992, pginas 101-107 " Ibid pgs 108-113