You are on page 1of 14

EL DESARROLLO DE SOFTWARE

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

Programacin orientada a objetos

1.1.. LA COMPLEJIDAD INHERENTE AL SOFTWARE


Como Brooks sugiere, la coinplejidad del software es una propiedad esencial, no accidental Esta complejidad inherente al software, como dice Booch, se deriva de cuatro elementos: la complejidad del dominio del problema, la dificultad de gestionar el proceso de desarrollo, la posible flexibilidad a travs del software y los problemas de caracterizacin del comportamiento de sistemas discretos

1.1.1. La complejidad del dominio del problema


Los pioblemas que se intentan resolver con software implican normalmente elementos de ineludible coinplejidad, en los que se encueiitran una gran cautidad de requisitos, en muchas ocasiones contiadictorios Esta complejidad se produce por las dificiles interacciones entre los usuarios de un sistema y sus desarrolladores: los usuarios encuentran generalmente muy difcil dar precisin sobre sus necesidades de forma que los desarrolladores puedan comprender En casos extremos, los usuarios pueden tener slo ideas vagas de lo que se desea en un sistema software Por otra parte, los usuarios y desarrolladores tienen diferentes perspectivas de la naturaleza del problema y hacen suposiciones diferentes sobre la natnraleza de la solucin El medio comn de expresar los requisitos hoy da es utilizar un giaii 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 Otra complicacin frecuente es que los requisitos de un sistema software cambian durante su desariollo Esto supone que un sistema grande tiende a evolucionar con el tiempo y el mantenimieiito del software en ocasiones es un trmino que no siempre est bien acuiado Para ser ms preciso, existen diferentes trminos a definii: el mantenimiento busca errores; la evolucin 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

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

1.1.,3.. La flexibilidad a travs del software


El software ofrece flexibilidad, de modo que es posible para un desarrollador expresar prcticamente cualquier clase de abstraccin. Los sistemas orientados a objetos proporcionan el rendimiento, la flexibilidad y funcioualidad requerida para implementaciones prcticas La programacin se puede hacer con extensiones de lenguajes comerciales, tales como Object-Pascal (Turbo Pascal, Borland Pascal, Mac Pascal, etc) y C + + , que incorporan a sus tpicas propiedades las propiedades oiientadas a objetos, y lenguajes 00 puros, como Smalltalk y Eiffel Por otra parte, las ayudas de programacin actual mejoran la capacidad del programador para administrar y modificar sistemas mientras se desarrollan La programacin orientada a objetos expande tambin la variedad de aplicaciones que se pueden programar, debido a que se Iiberan las restricciones de los tipos de datos predefinidos L.a programacin orientada a objetos acomoda estructuras de datos heterogneo~y complejos Se pueden aadir nuevos tipos de datos sin modificar cdigo existente

1.,2.. LA CRISIS DEL SOFTWARE


En 1968 una conferencia sobre software, patrocinada por la OTAN, asumi los trminos iizgenieiia del roftware y ciisis del software Con estos trminos se quera expresar que el software era caro, poco fiable y escaso Las metodologas y tcnicas estructurales que han reinado en la dcada de los setenta y ochenta no han eliminado el problema, y 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

1..1.2. La dificultad de gestionar el proceso de desarrollo


El tamao de un piograma no es una gran virtud en un sistema de software Sin embargo, la esciitura de un gran programa requiere la escritura de grandes cantidades de nuevo software y la rentilizaciu del software existente Recordemas que hace dos o tres dcadas los progiamas en lenguaje emsamblador se construan a base de centenares de lneas Sin embargo, hoy es usual encontrar sistemas en funcionamiento cuyo tamao se mide en centenares de millares, o

Programaoon orientada a objetos

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

Figura 1 1 Ciclo de vida del software,

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 %

1..3. FACTORES EN LA CALIDAD DEL SOFTWARE


La constiuccin de software requiere el cumplimiento de iiumeiosas caiacteristicas Entre ellas se destacan las siguientes:

Eficiencia
La eficiencia del software es su capacidad pala hacer u11 buen uso de los recuisos que manipula

Mantenimiento
67 %

Figura 1 2

Costes de las diferentes fases del ciclo de vida de un proyecto software.

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

Prograrnacion orientada a objetos

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

1..3.1.. Razones fundamentales que estn influyendo en la importancia de la PO0


Algunas de las causas que estn influyendo consideiablemente en el notable desarrollo de las tcnicas orientadas a objetos son: L.a 00 (Orientaciii a Objetos) es especialmente adecuada para iealizar determinadas aplicaciones, sobre todo realizacin de prototipos y simulacin de programas Los mecanismos de encapsulacin de P O 0 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 00 se adjunta bien a los n~odelos semnticos de datos para solucionar las limitaciones de los modelos tradicionales, incluido el modelo relaciona1 Aumento espectacular de L.POO (Lenguajes de Programacin Orieiltados a Objetos) Interfaces de usuario grficos (por iconos) y visuales Los interfaces de usuario de una aplicacin manipulan la entrada y salida del usuaiio Por consiguiente, su funcin principal es la comunicacin con el usuario final L.a entrada al sistema se puede controlas a travs de lneas de rdenes (enfoque utilizado por DOS y UNIX), o alternativamente el usuario puede interactuar con el sistema, con construccioiies 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 P O 0 se revela como el ms adecuado para la elaboracin del diseo y desarrollo de aplicaciones Este marco se caracteriza por la utilizacin del diseo modular 00 y la reutilizacin del software Los T'AD (Tipo Abstracto de Dato) ha11 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 delinidos Los objetos pasan a ser los elementos fundamentales en este nuevo marco, en detrimento de los subprograinas que lo han sido en los marcos tradicionales

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

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


Correccin

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

Capacidad de los productos soflwaie 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

1..4. PROGRAMACION Y ABSTRACCION


Para comprender mejor el significado de la revolucin que suponen las tecnologas orientas a objetos, se va a examinar uno de los elementos fundamentales: p~oyiamacinpol. abst~accin En general, un programa no es ms que uiia 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, lo reproduce) un fenmeno fsico

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

Facilidad de los productos para ser combinados con otros

10

Proqrarnacin orientada a objetos

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

1.5.. EL PAPEL (EL ROL) DE LA ABSTRACCION


Los piograinadores han tenido que luchar con el problema de la complejidad durante mucho tiempo desde el nacimiento de la informtica Para comprender lo mejor posible la importancia de las tcnicas orientadas a objetos, reviseinos cules han sido los dif'eientes mecanisinos utilizados por los programadores para controlar la complejidad Entre todos ellos destaca la abstracciiz Como describe Wulft: Los humanos hemos desarrollado una tcnica excepcionaliliente potente paia tratar la complejidad: abstraernos de ella. Incapaces de dominar en su totalidad los objetos complejos, se igiioia los detalles no esenciales, tratando en su lugar con el modelo ideal del objeto y centrndonos en el estudio de sus aspectos esenciales En esencia, lu abstracciiz es la capacidad para encaprulai y aislar la iizforinaciiz del direizo y ejecucin En otro sentido, las tcnicas orientadas a objetos se ve como iesultado de una larga progiesin histrica que comienza en los procedimientos y sigue en los mdulos, tipos abstractos de datos y objetos,

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

1..5.2.. Historia de la abstraccin del software


L.a abstraccin es la clave para disear buen software En los primeros dias de la informtica, los programadores enviaban instrucciones binarias a una computadora, manipulando directamente interrupciones en sus paneles fiontales Los ileinotcnicos del lenguaje ensamblados eran abstracciones diseadas para evitar que los programadores tuvieran que recordar las secuencias de bits que componen las instrucciones de un programa El siguiente nivel de abstracciii se consigue agrupando instrucciones primitivas paia formar macroinstrucciones Por ejemplo, un conjunto se puede definir por abstraccin como una coleccin no ordenada de elementos en el que no existen duplicados Utilizando esta definicin, se pueden especificar si sus elementos se almacenan en un array, una lista enlazada o cualquier otia estructura de datos Un coi~junto de instrucciones realizadas por un usuario se pueden invocar por una macroinstiuccin; una macioinstruccin instruye a la mquina para que realice inuchas cosas Tras los lenguajes de prograiiiacin ensambladores aparecieron los lenguajes de prog~amacin de alto nivel, que supusieron un nuevo nivel de abstraccin Los lenguajes de programacin de alto nivel permitieron a los programadores distanciarse de las interioridades arquitectnicas especficas de una mquina dada, Cada instiuccin en un lenguaje de alto nivel puede iiivocai varias instrucciones mquina, dependiendo de la mquina especfica donde se compila el programa Esta abstraccin permita a los programadores escribir software pala propsito genrico, sin preocuparse sobre que mquina corre el programa Secuencias de sentencias de lenguajes de alto nivel se pueden agrupar en procedimientos y se invocan por una sentencia La programaci6n estructurada

1..5.1.. La abstraccin como proceso natural mental


Las personas noiinalmente 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 siinplificada de cmo funciona de modo que se pueda inteiactuar contra 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 poi 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

12

Programacin orjentada a objetos

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

1.5.5.. Tipos abstractos de datos


Un tipo abstiacto de datos (TAD) es un tipo de dato definido poi el programador que se puede manipular de un modo similai a los tipos de datos definidos por el sistema Al igual que los tipos definidos por el sistema, un tipo de dato abstr.acto 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 pueda operar sobre esos valores utilizando las operaciones definidas Por ejemplo, en el caso de la pila ya citada 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, y el tipo abstracto de datos es un concepto ms terico Para construir un tipo abstracto de datos se debe poder:

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

1.6. U N NUEVO PARADIGMA DE PROGRAMACION


La piogiaiizaciiz oiientada a objetos (POO)* se suele conocer como un nuevo paradigiiza de programacin Otros paradigmas conocidos son: el paiadigiiza de la prog~aiizaciiziiizpeiativa (con lenguajes tales como Pascal o C), el paiadigiiia de la prograiilacin lgica (PROLOG) y el paiadigiiza de la progiaiiiaciiz fuizcioiza1 (Lisp) El significado de paiadigiizu3 (paradigiiza en latn; paradeigiiza e11 griego) en su oiigen significaba un ejemplo ilustrativo, en particular enunciado modelo que mostraba todas las inflexiones de una palabra En el libro Tlie St~u(tu1eo j Scieiztzfic Revolutioizs, el historiador Thomas Kuhn4 describa un paradigma como un conjunto de teoras, estndar y mtodos que juntos representan un medio de organizacin del conocimiento: es decir, u 1 1 medio de visualizar el mundo En este sentido, la piogramacin orientada a objetos es un nuevo paradigma La orientacin a objetos berza a reconsideiar nuestro peiisamiento sobre la computacin, sobre lo que significa realizar computacin y sobre cmo se estructura la informacin dentio del computador5 Jenkins y Glasgow observan que la mayoia 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 manejai Bobrow y Stefik definen un estilo de programacin como un medio de organizacin de piogramas sobre la base de algn modeloconceptual de programacin y un lenguaje apiopiado pala hacer programas en un estilo claro Sugieren que existen cuatro clases de estilos de programacin: Orientados Orientados Oiientados Orientados a a a a procedimientos objetos lgica reglas Algoritmos Clases 11 objetos Expre~adoeiz clculo de piedicadf~r Reglas if-then

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

Conceptos clave Abstraccin Encapsulacin

I I
Persistencia Polimotiismo Genericidad Entidades bsicas Mtodos Instancias Jerarqua

Figura 1 . 3 Principios bsicos de la orientacin a objetos

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

Programacion orientada a objetos

El desarrollo de software

17

1.7.. ORlENTAClON A OBJETOS


L.a orientacin a objetos puede describiise como el conjunto de dircipliizas (ingeizielia) que derari,ollail y iizodelizaiz softivare que facilitan la construccin de sisteiizay cori~plejosa pal tii de coinpoizeiztes 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 modelacin de datos Como apuntaban Ledbetter y Cox (1985): La programacin orientada a objetos permite una representacin ms directa del modelo de inundo tea1 en el cdigo El resultado es que la transformacin radical noimal de los requisitos del sistema (definido en trminos de usuario) a la especificacin del sistema (definido en trminos de coinputador) se reduce consideiablemente La Figura 1 4 ilustra el problema Utilizando tcnicas convencionales, el cdigo generado para un problema de mundo real consta de una primera codificacin del problema y a continuacin la transformacin del problema en trminos de un lenguaje de coinputador Von Newmann Las disciplinas y tcnicas orientadas a objetos manipulan la transformacin autornticamente, de inodo que el volumeil de cdigo codifica el problema y la transformacin se minimiza. De hecho, cuando se compara con estilos de programacin convencionales (plocediiizerztales por procedinzie~ztor),las reducciones de cdigo van desde un 40 por 100 hasta un orden de magnitud elevado cuando se adopta un estilo de piogiamacin orientado a objetos. Los conceptos y herramientas orientados a objetos son tecnologas que permiten que los problemas del inundo real sean expresados de modo fcil y

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--

Transformacin de "017 Newrnan

1-

Codificacin del programa Booc~; Giady: Objert-Oiientcd


1994
Arzalysis and Deiiyn with 4pplications

Figura 1 . 4 Construccin de software,

Benjainin/Cumrnings,

18

Programacion orientada a objetos

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.5. Polimorfismo 1.7.3. Modularidad


L,a modularidad es la propiedad que permite subdividii una aplicacin en partes ms pequeas (llamadas nzdulos), cada una las cuales debe ser tan independiente como sea posible de la aplicacin en s y de las restantes partes La modulaiizacin, como indica Liskov, consiste en dividir un programa en mdulos que se puedan compilar por separado, pero que tienen conexiones con otros mdulos Al igual que la encapsulacin, los lenguajes soportan la modularidad de diversas formas. Por ejemplo, en C + + los mdulos son archivos compilados poi separado L.a prctica usual (se ver en el Captulo 2) es situar los inteifaces de los mdulos en archivos con nombres con extensin , h (aiclzivos de cabecera) y las implementacioiies de los mdulos se sitan en archivos con nombres con extensin cpp En Ada, el mdulo se define como paquete (package) Un paquete tiene dos partes: la espec@cacin del paquete y el cuerpo del paquete; tambin se pueden compilar por separado Como se ver en el Captulo 2, la i~zodulai idod es la propiedad de un sistema que peiinite su descomposicin en un conjunto de indulos cohesivos y dbilmente acoplados La quinta propiedad significativa de los leiiguajes de programacin orientados a objetos es el poliiizorfisino Esta propiedad no suele ser considerada como fundamental en los diferentes modelos de objetos propuestos, pero, dada su importancia, no tiene sentido considera1 un objeto nzodelo que no soporte esta propiedad, Polimo~fismo es la propiedad que indica, literalmente, la posibilidad de que una entidad tome rnuclzar foriizar En triiiinos prcticos, el polimorfismo permite iefeiirse a objetos de clases diferentes mediante el mismo elemento de programa y realizar la misma opeiacin de diferentes formas, segn sea el objeto que se referencia en ese momento Por ejemplo, cuando se desciibe la clase rilainjel.os se puede observar que la operacin coiizer es una operacin fundamental en la vida de los mamferos, de modo que cada tipo de mamfero debe poder realizar la operacin o funciii corizei 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 (conzel.). El polimorfismo implica la posibilidad de tomar un objeto de un tipo (mamfero, por ejemplo) e indicarle que ejecute conzer; esta accin se ejecutar de diferente foima, 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 orientaciiz a objetos El polimorfismo adquiere su mxima expresin en la del ivacin o exteizsiiz de clases, es decir, cuando se obtiene una clase a partii 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,figuia puede acepta1 los mensajes dibujar, bor~ary nzover Cualquier tipo derivado de una figura es un tipo de figura y puede recibir el inirino mensaje Cuando se enva un mensaje,

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

Programacrn orientada a objetos

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

1.8. REUTlLlZAClON DE SOFTWARE


Cuando se construye un automvil, un edificio o uii dispositivo electinico, 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, jexiste algn mtodo que permita realizar grandes programas a partir de la utilizacin de otros programas ya realizados? Es posible reutilizar estos componentes de software? L.as tcnicas orientadas a objetos proporcioiian un mecanismo para construir cornporzentes de rofrware reutilizables que posterioimente puedan ser inteiconectados entre s y formar grandes proyectos de software8 En los sistemas de programacin tradicionales, y en particular en los basados en lenguajes de programacin estructuiadas (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 constiuir componentes de software reutilizables, al estilo de las bibliotecas de funciones, normalmente denominados bibliotecas de softivare o paquetes de softivare reutilizables Ejemplos de componentes reutilizables comercialmente disponibles son: 'Turbo Visin de Turbo Pascal 0L.E 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 ocurie 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 obietos en la aplicacin La reutilizacin de cdigo en reprogramacin tradicional se puede realiza1 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 iobustas de clases preconstruidas, as como otias herramientas, como hojeadores (broivse~), para localizar clases de intesks y depuradores interactivos para ayudar al programador
BRADCOX, en su ya clsico libro Objecr-Oiieilted Piograi>irniiig An Eoo1utioiiai.v Approa~lf [Con, Novobilski, 911, acu el trmino chip de rqftiuaie (Software-IC), o ioinpoiienter de software para definir las clases de objetos como componentes de software reutilizables Existe versin en espaol de Addisoii-Wesley/Daz de Santos, 1993, con el ttulo Prograrnacibri oiiei~tadaa objetor Uii eif<,yue evolurivo

1.7.6.. Otras propiedades


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

Concurrencia (multitarea) Per sistencia Geizer icidad Manejo de excepciones


Muchos 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 a los objetos- existan entre las invocaciones de un programa es posiblemente la propiedad menos implantada en los L P O 0 7 , aunque ya es posible considerar la persistencia en lenguajes tales como Smalltalk y C i , lo que facilitar el advenimiento de las bases de datos orientadas a objetos, como as est sucediendo en esta segunda mitad de la dcada de los noventa,

' Lenguaje de Programacin Orientado a Objetos

22

Programacion orientada a objetos

El desarrollo de software

23

1..9.. LENGUAJES DE PROGRAMACION ORIENTADOS A OBJETOS


El priinei lenguaje de progiamacin que introdujo el concepto de clase fue Simula-67, como entidad que contena datos y las operaciones que maiiipulaban los datos Asimisino, introdujo tambin el concepto de herencia El siguiente lenguaje orientado a objetos, y seguramente el ms popular desde un enfoque conceptual exclusivamente de objetos, es Sinalltalk, cuya primera versin comercial se desarroll en 1976, y en 1980 se populariz con la aparicin de Smalltalk-80. Posteiiormente se ha populaiizado gracias al desarrollo de Smalltalk/V de la casa Digital Y, que iecientemente se lid implementado bajo entorno Windows El lenguaje se caracteriza por soportar todas las propiedades fundamentales de la orientacin a objetos, dentro de un entorno integrado de desarrollo, con interfaz interactivo de usuario basado en mens Entre los lenguajes orientados a objetos que se han desarrollado a partir de los ochenta destacan extensiones de lenguajes tradicionales tales como C + + y Objective-C (extensiones de C), Modula-2 y Object Pascal (extensin de Pascal) y recientemente Object Cobol, que a lo largo de 1994 han aparecido sus primeras veisiones comeiciales, y lava, el nuevo lenguaje para programaciii en Internet. Otro lenguaje orientado a objetos puros es Eiffel, creado por Bertrand Meyer y que soporta todas las propiedades fundamentales de objetos Hasta ahora no ha adquirido popularidad ms que eii ambientes universitarios y de investigacin Sin embargo, la prevista aparicin para el ao 1995 de la versin 3, que coirer bajo Windows, segurameilte aumentar su difusin Ada ha sido tambin un lenguaje -en este caso basado en objetos- que sopoita la mayora de las propiedades orientadas a objetos Sin embargo, la nueva veisin Ada-95 ya soporta herencia y polimorfismo Algol

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.

Clasificacin de los lenguajes orientados a objetos

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

Clasificacin de lenguajes 00 de Wegner

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

v Ada-95 'E~i:!a~d Pascal


Java

objective.c

c++

Visual BASlC 3

i 4 Visual BASlC

Figura 1 5

Evolucin de los lenguajes orientados a objetos,

WEGNEK, Petel [1987]: Di~iieiisioiiso j Objecr-Baied Laiiguajer Desigii Nmero especial de SIGPLAN Noti~ev

24

Programacin orientada a objetos

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

1..lo. 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),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

Tabla 1 . , 1 Criterios de Meyer en lenguajes 00 y basados en objetos,,

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

Programacion or~entada a obletos

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

1.11. BENEFICIOS DE LAS TECNOLOGIAS DE OBJETOS (TO)


Una pregunta que hoy da se hacen muchos informticos es: Cul es la ~ a z n pura introducir mtodos de TO en los procesos de desariollo? L.a 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 comuiiicarse L.as estructuras de datos internos y mtodos se pueden refina1 sin afecta1 a otras partes de un sistema (Fig 1 7 )
Objeto
//

Mtodos

Figura 1 7

El objeto como cala negra

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

Programacin orientada a objetos

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

You might also like