programacion orientada a objetos luis joyanes aguilar

Upload: jaqueline-salas

Post on 18-Oct-2015

179 views

Category:

Documents


14 download

TRANSCRIPT

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    1/95

    C O N S U L T O R E S E D I T O R I L E SR E D E I N F O R M T I C Y C O M P U T C I O Nn t o n i o V a q u e r o S n c h e zCatedrtico de Lenguajes y Sistemas InformticosEscuela Superior de InformticaUniversidad C omplutense de Madrid

    E S P NG e r a r d o Q u i r o z V i e y raIngeniero en Coinunicaciones y Electrnicapor la ESIME del Instituto Politcnico NacionalProfesor de la Universidad utnom a Metrop olitanaUnidad XochimilcoMEXICOW i l l y V ega G l vezUniversidad Nacional de IngenieraP E R U

    PROGR M CIONORIENT D OBJETOS

    Luis Joyanes AguilarDirector del Departamento deLenguajes y Sistemas Informticos e Ingeniera de Software

    Facultad de InformticaUniversidad Pontificia de Salamanca ainpus Madiid

    McGraw HillMADR ID BUENOS AIRES CAR ACAS GUATEMALA LISBOA MEXICONUEVA YORK PANAMA SAN JUAN SANTAFE DE BOGOTA SANTIAGO SAO PAULOAUCKLAND HAMBURGO LOND RES MllAN MO NTREAL NUEVA DELHl ARISSAN FRANCISCO SIDNEY SINGAPUR ST LOUlS TOKIO TORONTO

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    2/95

    PROGRAMACION ORIENIADA A 0B.JEIOSNo est permitida la reproduccin total o parcial de este libro, ni su tratamientoinformtica ni la transmisin de ninguna forma por cualquier medio, ya seaelectrnico, mecnico, por fotoco pia, por registro u otros metodos, sin el permisoprevio y por escrito de los titulares del Copyright

    DEREC HOS RESERVADOS 0 1 9 96 , resp ec to a la p r i ~ adicin en espa ol, porMcGRAW HILL/INTERAMERICANA E ESPANA, S AEdificio Valrealty, 1 plantaBasauri, 1728023 Aravaca (Madrid)ISBN: 84-481-0590- 7Depsito legal: M 30 121-1996

    Editor: Jos Dominguez AlconchelDiseo de cubierta: Juan GarciaCompuesto e impreso en Fernndez Ciudad, S I

    Prlogo xviParte 1

    EL MUN DO DE LA ORIENTACION A OBJETOS:CONCEPTOS RELACIONES MODELADO Y LENGUAJESDE PROGRAMACIONCaptulo 1 El desarrollo de software1 1 L.a complejidad inbeiente al software1 1 1 La com plej idad del dom inio del problema1 1 2 La dificultad de gestionar el proceso de desarrollo

    1 1 La flexibilidad a travs del software1 2 La cri sis del sof twate1 3 Factores en la calidad del sof tware1 1 1 Razones fundamentales que estn influyendo en la imwortancia dela P O 01 4 Pro eramaci n ab s tr acci n1 5 El papel (el rolj de la abstraccin1 5 1 La abst raccin como proceso natural mental1 5 2 Histor ia de la abst raccin del sof tware1 5 3 Procedimientos1 5 4 M du lo s , , ,5 5. Tipos abst ractos de datos1.56 Objetos1 6 Un nuevo paradigma de programacin

    1 7 Orientacin a objetos1 7 1 Abstraccin1 7 2 Encapsulacin , ,17 3 Mo d u l ar i d ad1 7 4 Jerarqua1 7 Polimorfismo1 7 6 Otras propiedades1 8 Reutilizacin de software , , ,

    1 9 Lenguajes de programacin or ientados a objetos1 9 1 Clasificacin de los lenguajes orientados a objetos

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    3/95

    vi ontenido ontenido vii1 10 Desarrollo tiadicioiial frente a oiientad o a objetos 251 11 Beneficios de las tecnologas de objetos (TO) 27Resumen 29

    Captulo 2 Modularidad: tipos abstractos de datos2 1 Modularidad 3 1

    2 11 L.a estiuctura de un mdulo 3 12.1 2 Reglas de modula rizacin 32 2 Diseno de mdulos 35

    2 2 1 Acoplamieiito de mdulos 352.2 2 Cohesin de mdulos 352 3 Tipos de daios 362 4 Abstiaccin en lenguajes de progiaiiidcin 382 4 1 Abstracciones de control 382 4 2 Abstracciii de datos 9.2 5 Tipos abstiactos de datos2 5 1 Veritajas de los tipos abstI%dctosde daios

    2.5 2 Iinplementacin de los TAD .2 6 Tipos abstractos de datos en 'Turbo Pascal .2.6 1 Aplicaciii del tipo abstiacto de dato Pila2 7 Tipos abstiactos de datos en Modula-22 7 1 Mdulos

    2 7 2 Mdulos locales2 7 Tinos onacos2 7 4 Tipos transpdientes .2 7 5 Una versin del tipo abstracto de dato Pila con datos opacos7 6 Otra aolicaciii del TAD Pila. . .

    2 8 Tipos abstractos de datos en Ada2 8 1 Tipos piiuados2.8 2 Tipos privados limitados2 9 Tipos abstractos de datos en C .2.9 1 Un ejemplo de un tipo abstracto de datos en C2 10 Tipos abstractos de datos en C ++ ..

    2 10 1 Definicin de una clase Pila en C++ResumenEjerciciosCaptulo 3 Conceptos fundamentales de programacin orientada a objetos3 1 Piograiiiacin estruct uiada3 1 1 Desventajas de la piogramacin estructuiada1 2 &QuCes la piogramacin otientada a objetos3 2 1 El objeto3 2 2 Ejemplos de objetos3 2 3 Mtodos y mensajes3 3 Clases3 3 1 Irnplementacin de clases en lenguajes3 32 Sintaxis3 4 Un mundo de objetos

    3 4 1 Definicin de objetos3 4 2 Identificacin de objetos34 3 Duracin de los objetos . .3 4 4 Objetos frente a clases Representacin gif ica (Notacin de Ege)3 4 5 Datos internos3.4 6 Ocultacin de datos3 5 Herencia3 5 1 Sintaxis3.5 2 Tipos de herencia .3 6 Comunicaciones eiitie objetos: los mensajes3 6 1 Activacin de objetos3 6 2 Mensajes .3 6 3 Paso de mensajes3 7 Estiuctura interna de un objeto37 1 Atributos3.7.2 Mtodos3 8 Clases .3.8 1 Una comparacin con tablas de datos3 9 Herencia y tipos3 9 1 Herencia simple (he? iicia ,jerdrquica)3 9 2 Herencia mltiple (Ii ere i~ia ii malla)3 9 3 Clases abstractas3 10 Anulacin/Sustitucin

    3 11 Sobrecarga3 12 Ligadura dinmica3 12 1 Funciones o mtodos viituales3 12 2 Polimorfismo3 13 Objetos compuestos3 13 1 Un ejemplo de objetos compuestos3 13 2 Niveles de prolundidad3 14 Reutilizacin con orientacin a objetos3 14 1 Objetos y ieutilizaciii3 15 PolimorfisinoResumen

    Captulo 4 . Lenguajes de programacin orientados a objetos4 1 Evolucin de los LPOOS .4 1 1 Estado actual de los leiiguajes orientados a objetos en la dcada delos noventa4 2 Clasilicaciii de lenguajes orientados a objetos .

    4 2 1 Taxonoma de lenguajes orieiitados a objetos .4 2 2 Caractersticas de los lenguajes oiientddos a objetos4 2 3 Puros frente a hbridos .4 2 4 Tipificacin esttica freiite a diiimica4 2 5 Ligadura esttica frente a dinmica4 2 6 Revisin de lenguajes orientados a objetos43 Ada . . .4 3 1 Abstraccin de datos en Ada4 3 2 Genericidad eii Ada .4 3 3 Sopoite de herencia en Ada-834 3 4 Soporte Ada para orientacin a objetos

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    4/95

    oneni o

    4 4 Eiffel4 4 1 La biblioteca de clases Eiffel4 4 2 El entorno de programacin Eiffel4 4 3. El le ngua je Eif fel4 5 Smalltalk .4 5 1 El lenguaje Smalltalk4.52 La jerarqua de clases Smallialk4 6 Otros lenguajes de programacin orientados a objetosResumenEjerciciosCaptulo S. Modelado de objetos: relaciones5 1 Relaciones entre clases ..5 2 Relacin de generalizacin especializacin i s -des -un)52.1 Ierarquas de generalizacin especializacin5 3 Relacin de agregacin has-a/tiene-un)3.1 Agregacin frente a generalizacin5 Relacin de asociaciii5.4 1 Otros ejemplos de cardinalidad5 5 Herencia: jerarqua de clases5 5 1 Herencia simple5 5 2 Herencia mltiple5 5 2 1 Ventajas de la herencia mltiple5 5 2 2 Inconvenientes de la herencia mltiple5 5 2 3 Diseo de clases con herencia mltiple5 6 Herencia repetidaResumenEjercicios

    Parte 11P R OGRA M A C ION OR I E N TA D A A O B JE I O S C ON C

    Captulo 6 Clases y objetos en C6 1 Clases y objetos6 2 Objetos6.2 1 Identificacin de objetos6 3 Clases6 4 Creacin de clases6 5 Diagramas de clases y objetos6 6 Construccin de clases en C+ +6 6 1 Declaracin de clases6 6 2 Definicin de una clase6 6 3 Constructores y destructores6 6 4 Usar las clases6 6 5 Especificacin/implementacin de clases6 6 6 Compilaciii separada de clases6 6 7 Reutilizacin de clases6 6 8 Estilos de declaracin de clases

    6 Diseos prcticos de clases6. 7 1 Clases Reloj y Pre,seiltal6 8 Tcnicas de creacin e inicializacin de objetos6 8 1 Objetos dinmicos neiv y delete6 9 Inicializacin y limpieza de objetos6 9 1 Uso de una clase .6 10 R eglas prcticas para constru ccin de clases6 10 1 Funciones m iembro6 10 2 Un a aplicacin sencilla6 10 3 Control de acceso a los miembros de una clase610 4 Creacin, inicializacin y destruccin de objetos6 11 El puntero thisResumenEjerciciosCaptulo 7. Clases abstractas y herencia7 1 Abstraccin de la geneializacin y especializacin de clases7 2 Clases abstractas .7 3 Herencia en C++: clases derivadas7 3 1 Sintaxis de la herencia simple

    7 3 2 Sintaxis de la herencia mltiple7.3 3 Ambigedad y resolucin de mbito7 4 Herencia repetida y clases base virtuales7 5 Funciones virtuales puras7.5 1 Otro ejemplo de clase abstracta7 6 Diseo de clases abstractas7 7 Una aplicacin prctica: jerarqua de figuras7 7 1 La clase FiguraResumenEjerciciosCaptulo 8 . Polimorfismo8 1 L.igadura8.1 1 Ligadura en C8 2 Funciones virtuales8 2.1 Ligadura dinmica m ediante funciones virtuales8 3 Polimorfism o8 3 1 El poliinorfismo sin ligadura dinmica8 3 2 El polimorfismo con ligadura dinmica8 4 Uso del polimorfismo

    8 4 1 Uso del polimorfiosmo en C+ +8 5 Ligadura dinmica freiite a ligadura esttica8 6 Ventajas del polimorfismoResumenEjerciciosCaptulo 9 . Genericidad: plantillas t empla t e s )9 1 Genericidad9 2 Conceptos fundamentales de plantillas en C

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    5/95

    x ontenido ontenido

    9 3 Plantillas de funciones9 3 1 Fundaineiitos tericos9 3 2 Definicin de plantilla de funcin9 3 3, Un ejemplo de plantilla de funciones9 3 4 Un ejemplo de funcin plantilla9 3 5 Plantillas de funcin ordeiiar y buscai9 3 6 Una aplicacin prctica9 3 7 Probleinas en las funcioiies plantilla9 4 Plantillas de clases . . .9 4 1 Definicin de una plaiitilla de clase9 4 2 Instanciacin de una plantilla de clases9 4 3 Utilizacin de uiia plantilla de clase9 4 4 Argumentos de plantillas9.4 5 Aplicaciones de plantillas de clases9 5 Una plantilla para manejo de pilas de datos9 5 1 Definicin d e las funciones mieinbro9 5 2 Utilizacin de una clase plantilla9 5 3 Instanciacin de una clase plantilla con clases9 5 4 Uso de las plantillas de funcioiies con clases9 6 Plantillas frente a polimorfismoResumenEjercicios

    Capitulo 10. Excepciones10 1 Concep to de excepciii10 2 Manejo de excepciones10 2 1 Medios tpicos pala el manejo de excepciones10 3 El mecanismo de excepciones en C +10 4 L.anzamiento de excepciones10 4 1 F oi inatos de thiow10 5 Manejado res de excepciones10 5 1 Bloques 1rj)10 5 2 Captura de excepciones10 5 3 Relanzamiento de excepciones10 6 Especificacin de excepciones10 Aplicaciones prcticas de manejo de excepciones , .10 7 1 Calculai las races de uiia ecuacin de segundo grado10 2 Con trol de excepciones en una estructura tipo pilaResuineuEjerciciosCaptulo 11.. Reutilizacin de software con C + i11 1 Mecanismos de reutilizacin , ,11 1 1 Herramien tas tradicionales de reutilizacin11 2 Reutilizacin por herencia11 2 1 Ventajas de la reutilizacin a travs de la herencia11 3 Las recompilaciones en C++11 4 Reutilizacin mediante plantillas o tipos genricos11 4 1 Polimorfismo frente a geuericidad , ,

    11 5 Bibliotecas de clases 3211 5 1 Coiitenedores 3211 5 2 La riecesidad de los coiitened oies 311 5 3 Clases contenedoias de Boiland C ++ 3 1 a 5 0 311 5 4 La biblioteca estndar de plantillas (S IL ) 311 6 Clases contenedoras en Boiland C 4 515 311 6 1 Nom bies de las clases contenedo ias 311 6 2 Clases vector 311 6 3 Clases listas dobleme nte enlazadas 311 6 4 Clases array 311 6 5 Creacin y uso de contenedores 3Resumen 33

    Parte 111DISENO O R I EN TA D O A OBJETOS

    Captulo 1 2 Diseo orientado a objetos Notaciones Booch, Rumbaugliy CoadlYonrdon) . . . . . . , , . , . . . . . . 3312 1 Desarrollo de un sistema orientado a objetos12 1 1 Identifica1 clases y objetos12 1 2 Asignacin de atributos y coinpoi tamiento

    12 1 3 Encontiar las ielaciones entre clases y objetos1 2 1 4 Interfaz e implementacin de las clases12 2 Notacioiies grficas .12 2 1 Notacin de Booch 9312 2 2 Notaciii de Yourdon12 2 3 Notacin de Rumbaugh (OMT )12 3 Implementacin d e clases y objetos en C + +12 3 1 El modificado1 coiist , . .12 4 Creacin de funciones mieinbro en C+ +12 4 1 Funcioiies iniiize1 2 4 2 Funciones miembro virtuales y virtuales pulas124 .3 Variables miembro y accesibilidad12 5 Implementacin de relaciones coi1 C + +12 5 1 Relaciones de generalizacin-especializacin es-un)12 5 2 Relacin de agregacin/composicin t iene-un)12 3 Relacin de asociacin12 5 4 Relacin uti l izu uses)12 6 Clases abstractas ,12 6 1 Abstraccin mediante plantillas12 7 Una aplicacin orieiitada a objetos12 1 Identificar las clases12 7 2 Identificar relaciones .12 7 3 Definir el interfaz de cada clase , ,ResumenEjercicios

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    6/95

    x Contenido Contenido xParte IV

    EL LENGUAJE C ++ : SINTAXIS, CONSTRUCCIONY PU E ST A A PU N T O E PROGRAMASCaptulo 13 . e C a C + + , , , , , , , , , , ,13 1 Limitaciones de C13 2 Mejora de caracterst icas de C en C i +13 3 El primer programa C+ + ..13 3 1 Comparacin de programas C y C+ +13 4 Nuevas palabras reservadas de C + +13 5 Comentarios13 6 Declaraciones de variables , .13 6 1 Declaracin de variables en un bucle foi , , ,13 6 2 Declaraciones externas13 6 3 El mbito de una variable13 7 El especificador de tipos conrt ,13 7 1 Diferencias entre coiist de C+ + y conrt de C13 7 2 Las variables voltiles13 8 Especificador de tipo uoid11 8 1 Punteros void13 9 L.os tipos ch r13 9 1 Inicializacin de caracteres13 10 Cadenas , , ,13 11 Conversin obligatoria de tipos (Castiilg)13 12 El especificador de tipo volatile13 13 Estructuras, uniones y enumeraciones13 13 1 Estructuras y uniones13 13 2 Uniones annimas13 13 3 Enumeraciones ,13 13.4 Enumeraciones annimas13 14 Funciones en C+ +13 14 1 i?~aii () , ,13 14 2 Prototipos de funciones1 3 1 4 3 Un a declaracin tpica de funciones y prototipos13 144 Funciones en lnea , ,13 14 5 Ventajas sobre las macros13 14 6 Argumentos por omisin13 147 Funciones con un nmero variable de parmetros (el parme-tro .. , , , ,13 15 Llamada a funciones C Program as mixtos C/C+ +13 16 El tipo ieferencia , ,13 17 Sobrecarga13 17 1 Sobiecarga de funciones1 3 1 7 2 Aplicacin de sobrecarga de funciones13 1'7 3 Sobrecarga de operadores13 18 Asignacin diiimica de m emoria13 18 1 El operador new13 18 2 El puntero nulo/cero13 18 3 El operador delete13 184 Ventajas de nen y delete , ,

    13 19 Organizacin de un programa C+ +13 19 1 Evitar definiciones mltiples , . ,13 19 2 Evitar incluir archivos de cabecera ms de una vezResumenEjercicios , , , , , ,Captulo 14. Construccin de programas en C + + / C14 1 Compilacin separada de programas , ,14 1 1 Programas multiarcbivo1 4 1 2 Bibliotecas de clases14 2 Almacenamiento extern y static1 4 2 1 xt rn14 2 2 static1 4 3 Estructura de un programa C , ,1 4 4 Compilacin separada de clases , , , ,1 4 5 Estructura de un programa C+ +14 5 1 Qu son archivos de cabecera?14 5 2 Inclusin de archivos1 4 6 Programas multiarchivo , ,14 6 1 Qu se debe poner en un archivo fuente?14 6 2 Referencias externas , , ,14 ' 7 Construccin de archivos proyecto1 4 7 1 Abrir un proyecto , ,14 7 2 Aadir archivos fuente1 4 8 Transporte de aplicaciones desde C a C t +1 4 8 1 Enlace entre programas C y C , , ,ResumenEjerciciosCaptulo 1 5 Puesta a punto de programas en C ,. Errores de progra-macin tpicos , , , , , , ,15 1 Depuracin de programas15 1 1 Errores durante la depuracin , , ,15 2 Errores en arrays15 3 Errores en cadenas . , , ,15 3 1 Clculo incorrecto de la longitud de una cadena , , , ,1 5 4 Errores en comentarios , , ,15 5 Errores en corchetes y llaves15 6 Errores en funciones , , . ,15 6 1 Pasar un a rgume nto por valor en lugar de por variable

    15 6 2 Fallos en el valor de retorno de la funcin , , , ,15 6 3 No incluir el archivo de cabecera de una funcin en tiempo deejecucin , ,15 7 Errores en macros . , , . , , ,15 7 1 Omisin de parntesis en los argumentos de macros15 7 2 Especificacin no vlida de macros tipo funcin15 8 Errores con operadores , , ,15 8 1 al uso de operadores de incremento ++) y decremento --)15 8 2 Confusin de operadores de asignacin , , , ,15 8 3 Fallos en la precedencia de operadores

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    7/95

    x v ontenido

    15 9 Errores en punteros15 9 1 Olvido del operador de direccin ( )15 9 2 Fallos al inicializar un puntero15 9 3 Declaracin de un puntero con el tipo incorrecto15 10 Errore s en sentencias d e seleccin (switcli, if-else)15 11 Errores en separadores15 12 Errore s bsicos frecuentes15 13 Eriore s en clasesResumenEjerciciosApndice A Gua de referencia de sintaxis del lenguaje C + + Estn-dar C++ ANSI) 5 3A 1 Elementos del lenguajeA 1 1 CaracteresA 1 2 Comen tar iosA 1 3 IdentificadoresA.14 Palabras reservadasA 2 Tipos de datos ,A 2 1 Verificacin de tiposA 3 ConstantesA 3 1 Declaracin de constantesA 4 Conversin de tiposA 5 Declaiaci n de variablesA 6 OperadoresA 6 1 Operadores aritmticosA 6 2 Operadores de asignacinA 6 3 Operaciones lgicos y relacionalesA 6 4 Operadores de manipulacin de bits , ,A 6 5 El opera dor rizeof , ,A 6 6 Prioridad y asociatividad de operadoresA 6 7 Sobrecarga de operadoresA 7 Entradas y salidas bsicasA 7 1 SalidaA 7 2 EntradaA 7 3 ManipuladoresA 8 SentenciasA 8 1 Sentencias de declaracinA 8 2 Sentencias de expresin

    A 8 3 Sentencias compuestasA 9 Sentencias condicionales i jA 9 Sentencias ij-else anid ada s ,A 9 2 Sentencias de alterna tiva mltiple: sivitch , ,A 10 Bucles: sentencias repetitivasA 10 1 Sentencia w hileA 10 2 Sentencia doA 10 3 Sentencia forA 10 4 Sentencias bieak y coi~tinueA 10 5 Sentencia nulaA 10 6 Sentencia returiz

    ontenido X

    A 11 Punteros (Apuntadores)A 11 1 Declaracin de punterosA 11 2 Punteros a arraysA 11 3 Punteros a estiucturasA 11 4 Punteros a objetos constantesA 11 5 Punteros a voidA 11 6 Punteros y cadenasA 11 7 Aritmtica de punterosA 12 Los op erado res new y deleteA 13 ArraysA 13 1 Definicin de arraysA 14 Enumeraciones, estructuras y unionesA 15 CadenasA 16 F uncionesA 16 1 Declaracin de funcionesA 16 2 Definicin d e funcionesA 16 3 Argumentos por omisinA 16 4 Funciones en lnea (inl~iie)A 16 5 Sobrecarga de funcionesA 16 6 El modificador constA 16 7 Paso de par metros a funcionesA 16 8 Paso de arraysApndice B Propiedades de objetos de Turbo/Borland Pascal 7.0 ObjectPascal) 5B 1 Objetos 5B 2 Herencia 5B 3 Polimorfism o y mtod os virtuales 5B 4 Objetos dinmicos 5Apndice C El lenguaje Delphi Object Pascal ) frente a C+ + , , , 5C 1 El nuevo inodelo de objetos , , , 5C 2 Mtodos de clases 5C 3 Definicin de mtodos 5C 4 Tipos de m6todos 5C Anulacin de un mtodo 5C 6 S el f , 5C 7 Especificador es de visibilidad de clases 5C 8 Construccin de un nuevo tipo derivado (Herencia) 5C 9 Ligadura esttica y dinmica 5C 10 Diseno de clases , , , , 5C 11 Reutilizacin 5Apndice D . El lenguaje Ada-95. Gua de referencia 5D 1 Caractersticas basadas en objetos de Ada-83 , , 5D 2 Propiedades orientadas a objetos de Ada-95 , 5D 3 Clases, polimorfism o y ligadura dinmica de Ada-95 5D 4 Clases abstractas 5D 5 Aplicaciii comp leta 5

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    8/95

    xv ontenido

    Apndice E Java: el lenguaje orientado a objetos de Internet. Gua desintaxis 571E 1 Caractersticas del lenguaje .Java 571E 2 La sintaxis del lenguaje Java 572E 3 Caractersticas eliminadas de C y C+ + 5 76E 4 Los objetos 578E 5 Herencia de clases 582E 6 Intertaces 584E 7 Paquetes 585E 8 Excepciones 587E 9. Bibliografa 587E 10 Fuente de informacin en Internet 588Apndice F Sobrecarga de operadores en C 589F 1 Conceptos generales 589F 2 Sobrecarga de operadores unitar ios 597F 3 Sobrecarga de operadores binarios 603F 4 Sobrecarga de operado~es e inse~cin extraccin 610F 5 Conversin de datos y operadores de conversin forzada de tipos 614F 6 Sobrecarga de new y delete: asignacin dinmica 618F 7 Manipulacin de sobrecarga de operadores 621F 8 Una aplicacin de sobrecarga de operadores 623F 9 Resumen 625Apndice G Metodologa de anlisis y diseo orientados a objetos. No-taciones 626Booch 93 6262 OMT (Rumbaugh e t a l 6293 Coad/Yourdon 6334 Notacin de R Edge 6365 Notacin de iaylor 640Apndice H. Glosario 642Bibliografa 651Indice 653

    PROLOGO

    L ORlENT ClON OBJETOSLas teciiologas orientadas a objetos se han convertido en la dcada de losnoventa en uno de los motores clave de la industi ia del software Sin embargo,las tecnologas de objetos no es, como algunos innovadores pregonan, unanovsima tecnologa, sino que, muy al contrario, es una vieja y madura tecno-loga que se remonta a los aos sesenta. De hecho, Simula, uno de los lengua-jes orientados a objetos ms antiguos, fue desarrollado en 967El desarrollo de piogramas orientados a objetos es un enfoque diferentedel mundo informtico Implica la creacin de n~odelos el mundo real y laconstruccin de progra mas informticos basados en esos modelos El procesocompleto de programacin comienza con la construccin de un modelo delsuceso (evento) real El resultado final del proceso es un programa de compu-tadora que contiene caractersticas que representan algunos de los objetos delmundo real que son parte del sucesoEl principio bsico de la programacin orientada a objetos es que unsistema de software se ve como una secuencia de transfoimaciones en unconjunto de objetos. El trmino objeto tiene el mismo significado que unnombre o una frase nominal Es una persona, un lugar o una cosa E jemplosde objetos del inundo real son: persona, tabla, computadoia, avin, vuelo deavin, diccionario, ciudad o la capa de ozono La mayora de los bjetos delmundo real tienen atributos (caracterlsticas que los describen) Por ejemplo,los atributos de una persona incluyen el nombie, la edad, el sexo, la fecha denacimiento, la direccin, etc Los objetos tienen atributos, y ellos, a su vez,comportamiento El comportamiento (behavkr) es el conjunto de cosas quepuede hacer un objeto; por ejemplo, una persona puede estudiai, caminar,trabajar, etc En sntesis, se puede decir que los objetos conocen cosas y haceizcosas Las cosas que un objeto conoce son sus atributos; las cosas que puedehacer un objeto son su comportamientoLos principios en que se apoyan las tecnologas orientadas a objetos son:

    Objetos como instancia de una claseMtodosMensajes

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    9/95

    xviii rlogo rlogo xix

    Y las caracteristicas que ayudan a definir un objeto son:e Encapsulamientoe ModularidadAbstraccinPolimorfismoLas clases se organizan pala modelar el mundo real en las siguientesielaciones:e Herencia generalizacin/especializacin)

    AgregacinAsociacinu s o

    TIPOS BSTR CTOSDE D TOSYCL SESUna clase es una caracterizacin abstracta de un conjunto de objetos; todoslos objetos similares pertenecen a una clase determinada Por ejemplo, unconjunto de objetos tales como cuadrados, tringulos, crculos, lneas, etc,pertenecen a una clasefigura De mo do ms formal, una clase define variablesdatos) y mtodos operaciones) comunes a un c onjunto de objetos En realidad,una clase es un prototipo o generador de un conjunto de objetosUna clase bien diseada especifica un tipo abstracto de dato TAD) Untipo de dato es abstracto si las operaciones de alto nivel adecuadas a los tiposde dat os estn aisladas de los detalles de la implementacin asociados con eltipo de dato s As, por ejemplo, si diseamos una clase cnculo que conviertea un crculo en un tipo abstracto de dato, la clase nos proporciona mtodosfunciones) tales como dibujar, mover, ampliar, contraer, borrar, et c Se puedenutilizar estos mtodos para manipular objetos cilculo de todas las formasesperadas Los mtodos son todo lo que se necesita conocer sob re la clasecirculo Una estructura de datos fundamental de un crculo puede ser un array,un registro, una cadena de caracteres, etc. Los detalles de la representacininterna de un crculo se pueden ignorar mientras se crean, amplan o muevencrculos Un crculo como tipo abs tracto de d ato se centra exclusivamente enoperaciones mtodos) apropiadas a los crculos; un clculo como tipo abstrac-to de dato ignora totalmente la representacin interna de un crculo

    La clase es el bloque de constiuccin fundamental de un lenguaje deprogramacin orientada a objetos Una clase es un tipo abstracto de datosjunto con un conjunto de transformaciones permitidas de dicho tipo abstractode datos; puede definir tambin su interfaz a otras clases o funciones, descu-briendo para ello que parte de su descripcin interna de datos o conjunto detransformaciones permitidas pueden hacerse pblicos La regla por defecto esque nada de una clase es pblica, a menos que se declare explcitamente porel desarrollador de software que defini la claseAunque no es completamente una terminologa estndar en POO, el tr-mino objeto se utiliza normalmente para repiesentar una instancia de una

    clase Otra visin de la clase es que un tiempo de ejecucin tiene un estadoun comportamiento y una identidadEl entorno orientado a objetos oculta los detalles de implementaciu deun objeto Es la propiedad conocida como ocultacin de la informacin Laparte que no est oculta de un objeto es su interfaz pblico que consta de losmensajes que se pueden enviar al ob jeto L.os mensajes representan operacionede alto nivel, tales como dibujar un crculo El trmino encapsulamiento seutiliza tambin para enfatizar un aspecto especfico de un tipo abstracto dedatos Un I A D combina mtodos opeiacioizes) representacin inte rna i111pleiizentacin),Un objeto es una instaizcia -ejeinplar o caso- de una clase que encapsulaoperaciones y representacin Este encapsulamiento contrasta con la separacin tradicional de operaciones funciones) y representacin datos) La clasen C + + el paquete en Ada-95 soportan el eucapsulamiento

    N LlSlS Y ISENO ORIENT DO OBJETOSEl problema fundamental que debe asumir u n equipo de desarrollo de softwarees convertir el mundo real en un programa informtica. En esencia, la tareaclave de la piogramacin es describir las tareas de especificacin del programaque lesuelve el problema dado,Un problema de programacin se desciibe normalmente con un conjuntode especificaciones detalles que constituyen el problema real) Las especificaciones son parte de lo que se denomina anlisis orientado a objetos AOO),que iesponde en realidad a la pregunta Qu hace? Durante la fase deanlisis se piensa en las especificaciones en trminos intuitivos y con indepen-dencia del lenguaje y de la mquina La etapa crtica de esta actividad esdeducir los tipos de objetos del mundo real que estn implicados y obteneilos atributos de estos objetos deteiminando su comportamiento e interac-cionesLa siguiente fase del proceso de desarrollo de software es el diseo orientadoobjetos DOO), que responde a la pregunta j,Cmo lo hace? Durante estafase se comienza a crear un modelo de computadora basado en el anlisis querealice la tarea especfica concreta En esta etapa se piensa en objetos demundo real que pueden ser representados como objetos del mundo inforin-tico Se deben especificar los ob jetos con mayor precisin especificando endetalle lo que los objetos conocen y lo que pueden hacer, describe conprudenc ia sus interacciones Durante la fase de diseo se pueden encont raratributos tiles adicionales y comportamient o de los objetos que no.aparecie-ron en la fase de anlisis o no estaban definidos con claridadLa diferencia entre A 0 0 D O 0 no es clara, y es difcil definirla transicinentre ambas etapas De hecho, ninguna de las metodologas de clsicascomo Yourdon/Coad, Booch o Rumbaugh OMT) proporcionan reglas preci-sas para pasar de una etapa a otra De hecho, las fases A 0 0 y D O 0 norepresentan un proceso estricto de dos etapas, y a veces se funden en una solaNormalmente, ocurrir que el modelo inicial que se selecciona no es el apro-

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    10/95

    xx rologo

    piado, y se necesita retroceder y volver a reiterar el proceso sucesivamente Sepueden descubrir especificacioiles adicionales que n o se conocan al comenzarsu trabajo iriicial y encontrar que los atributos o comportamiento de un objetosean diferentes de lo que se decidi en la eta pa de anlisis De cualquier forma,el mejor medio para practicar desarrollo de software orientado a objetos esrealizar el anlisis diseo de ejemplos de todo tipo Por esta causa, en ellibro se incluyen numerosos ejemplos que tratan de ayudar al lector a fami-liarizarse con la P O 0L.a fase de diseo conduce a la fase de iinplementacin, que consiste entraducir dicho diseo en un cdigo real en un lenguaje de programacinLa fase de codificacin del proceso de desarrollo se llama programacinorientada a objetos POO).El proceso de desarrollo orientado a objetos supone, en sntesis, la cons-truccin de un modelo del mundo real que se pueda traducir posteriormenteen un cdigo real escrito en un lenguaje de programacin En realidad,las tres fases, anlisis, diseo y programacin, interactan entre s L.as deci-siones de progiamacin pueden cambiar algunos aspectos del modelo o pue-den refinar lealmente algunas decisiones anterioresLos objetos pueden cambiar, o incluso modificarse o deducirse de otrosobjetos; atributos y comportamiento se pueden tambin modificar o aadir acada objeto En resumen, el anlisis, diseo programacin no constituyenun proceso nico de tres etapas para la resolucin de un problema, sino quetodas las etapas interactan entre s para resolver los problemas del mundoreal Sin embargo, como regla general, el anlisis se debe hacer antes deldiseo, y ste se ha de hacer antes de la programacin o codificacin

    NOTACIONES ORIENTADAS A OBJETOSEl mejor sistema para modelar el mundo real con objetos de un modo prcticoes disponer de una notaciii grfica consistente y eficiente Cada metodologade anlisis y diseo orientado a objetos posee su propia notacinNuestra experiencia en estos cinco ltimos ao s impartiendo c u~ so s eA 0 0 y D O 0 a estudiantes de pregrado, postgrado y profesionales nos hallevado a seleccionar las notaciones que personalmente hemos comprobadoque son las ms idneas, tanto desde el punto de vista pedaggico comoprofesional Pensando en un aprendizaje rpido y gradual , hemos seleccionadotres metodologas de las ms populares:

    Coad/YourdonBooch 93OMT (Rumbaugh et alJunto con otras dos notaciones, que si bien no son tan conocidas, anosotros nos han resultado de gran valor y podemos considerarlas excelentespara el aprendizaje de objetos Son las notaciones de Raimund K Ege y DavidT aylor, que hemos incluido en el texto y con ejemplos inspirados en sus textos

    rlogo xxbase, que se recogen en el momento oportuno y en la bibliografa, y querecomendamos como lecturas notables y excelentes, as como referencia obligada de todo buen estudioso de las tecnologas de objetos

    PROGRAMACION ORIENTADA A OBJETOSLa programacin orientada a objetos es una extensin natural de la actualtecnologa de programacin, y representa un enfoque nuevo y distinto altradicional Al igual que cualquier otr o programa, el diseo de un programaorientado a objetos tiene lugar durante la fase de diseo del ciclo de vida dedesarro llo de software El diseo de un programa es nico en el sentidode que se organiza en funcin de los objetos que manipular De hechoprobablemente la parte ms difcil de la creacin de software orientado aobjetos es identificar las clases necesarias y el modo en que interactan entre sDesgiaciadamente, no hay reglas fciles para determinar las clases de unprograma da do L.a identificacin de clases puede ser tan to a rte como cienciaEl proceso es algo impreciso, y por esta causa h an surgido numerosos mtodosque propoicionan reglas para la identificacin de clases y las relaciones queexisten entre ellas; estos mtodos son los citados anteriormente

    EL LENGUAJE CC + i todava no es un lenguaje estndar, aunque ya se encuentra en la fasefinal de estandarizacin C ++ es sin duda el lenguaje del futuro, y marca laspautas de desarrollo para nuevos lenguajes, como es el caso de Java ellenguaje de programacin orientado a objetos para desarrollo en Internet, oAda-95, el lenguaje de desarrollo para sistemas en tiempo leal tambin orien-tado a objetosL.as caracteristicas comunes ms importantes a las nuevas veisiones deC++ son:

    C++ es esencialmente un superconjunto de C ANSI,C + + tiene las mismas caractersticas de tipificacin que ANSI parapropiedades noLos compiladores de C+ + aceptan normalmente cdigo escrito en laversin original de K R (Kernighan y Ritchie) Generalmente, los co111-piladores de C++ propoicionan mensajes de error o advertencia cuandoel cdigo C no tiene prototiposDesde el punto de vista especfico de sintaxis, algunas caracteristicas deC han sido mejoradas notablemente:1 Las funciones de entradalsalida printf y sc nf se utilizan rara-mente en C+ + , y en su lugar se emplean cin y cout , que realizanun trabajo mejor y ms eficiente

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    11/95

    2 Las constantes define las macios han sido sustituidas por elcalificador const y las funciones inline3 Identificadores de tipos en tiempo de ejecucin4 Espacios de nombreL.as piincipales diferencias entre los diversos compiladores de C + + son,adeins del precio, entornos integrados de desarrollo (editores, depurado-res, etc , velocidad d e compilacin, velocidad del cdigo ejecutable, sistema entiempo de ejecucin, calidad de mensajes de error e interoperabilidad decdigo con ot ro software: tales como sistemas ope rativos, sistemas de ventana,

    enlazadores u otros programas de aplicacinOtras diferencias incluyen soporte para inanejadores de excepciones yplantillas templates) La m ayora de los compiladores actuales proporcionansoporte para ambas propiedades Los manejadores haizdleis) de excepcionesson construcciones que permiten a los programas recuperar su control anteeirores en tiempo de ejecuciil no previstos Las plantillas permitirn a lasclases ser definidas mediante tipos genricos de datos

    HISTORI EL LENGU JE CAl principio de los ochenta, Bjarne Stroustrup dise una extensin del len-guaje C al que Ilain C con clases, debido a que su caracterstica fundamentaleia aadirle clases a C El concepto de clase proceda de Simula 67 y servapara captuiar el comportamieilto del inundo real a la vez que oculta losdetalles de su implementacinEn 1983-84, C con clases fue rediseado, extendido e implementado en uncompilador El lenguaje se denomin C+ + y fue descrito poi S troustr up enData Abst~ac tioiz iz C en el Iechnical Jouinal (vol 63, nm. 8, octubre 1984),de AT T Be11 Laboratories L.a primera versin comercial de C+ + estuvodisponible en 1985 y se document en el libio de Bjarne Stroustrup Ilze C + +Prograi?ziizinq Language , editado por Addison-Wesley en 1986.El nombre de C fue elegido coino variante del lenguaje de programa-ci6n C Da do aue ei a una extensin de C, se decidi elegir C + + debido a~que el ope iado r significa aadir uno a la variable y poi consiguienteel lenguaje C + + se supondra que era una ve~ sin nmediatamente superior osiguiente a CEn realidad, Stroust rup cre C+ + con dos objetivos principales: (1) hacercompatible C + + con el C ordinario, y (2) ampliar C con construcciones deP O 0 basadas en la const ruccin clase de Simula 67. El lenguaje en su formaactual ha sido descrito en 1990 por Stroustrup y Ellis en el Anizotated C + +Refereizce Maiiual (el ARM)', que sirve como documento base para la estan-

    M A R G A R E T~ r r s B J A R N ErxousrRuP: iie Aniiotatud C + + Refefei eiiie Ma~lua l Reading,Mass, Addisoii-Wesiey, 1990 Existe versin en espaol con el ttulo C + Maiiual de refeieizciacoi? ai~utacioizei edita do por Addison-\l'esley/Daz de Santos en 1994

    dariracin de la versin 0, actualme nte en fase de estandarizaciii por elcomit ANSIComo C ++ es una extensin del C estndar, la mayoila de los progiamasC se pueden compilar utilizando un compilador C+ +L.a versin actual estandarizada por AN SI -la citada actualizacin 3 0-es la que soportan la mayora de los fabricantes mundiales: Borland, Micro-soft, Watcom , AT T, etc., en sus ltimas actualizaciones tales com o 4,515 deBorland, Visual C+ + 4, la 10 de Watcom, etc

    OBJETIVOS DEL LIBROPiogiaiizatin Oiieiztada a Objetos Coiiceptor, rizodelado, diseio codificaciizeiz C + + , es una ob ra, como su nombre indica, esencialmente de objetos Tratafundamentalmente de ensear a programar con tecnologas de objetos, peroal contra rio que otra s obras -incluso algunas nuestras- centradas exclusi-vamente en un lenguaje de programacin o rientada a objetos -casi siempreC++-, hemos pensado que sera muy interesante -sin abandonar el estudiode C ++ - dar mayor importancia a los conceptos tericos y prcticos fun-damentales del mulido de objetos, que slo son tratados por libros especficosde las metodologas de A O O /D 0 0 e incluso ingenieria de software yotros de caicter avanzadoDesde finales de los ochenta, en que decidimos adentiarnos en las emer-gentes tecnologas de objetos, se ha producido un cambio radical en el mund ode la ingenieria de software L,os objetos q ue los ao s 1988 a 1990 se centrabanen experiencias sobre el primitivo lenguaje C + + y Sinalltalk e incipientestrabajos en Eiffel, comenzaron a pa sar en los a os 1990 a 1992 al campoprofesional, y as nacieron las inetodologas de anlisis y diseo orientadas aobjetos de primera generacin y que han facilitado la transicin al nuevoparadigm a Las metodologas pioneras se deben a Shlaer y Mellor, que, juntocon Rebeca WirkBrocks, se consideran como creadores del modelado de ob-jetos; Yourdon/Coad, autores consolidados de metodologas estrnctuiadas quese pasaion a metodologas de objetos, y lanzan en esos aos dos excelenteslibros sobre anlisis diseo 0 0 ; Grady Booch, uno de los pioneros delmundo de ingeniera de software en tiempo real con Ada, que aprovecha suexperiencia para lanzar una metodologa de diseo que se ha hecho muypopular y cuya ltima edicin se public en 1993; Rumbaugh et al, autoresde la metodologa OMT, seguramente la metodologa ms utilizada en elmundo del software en estos ltimos aosLa siguiente frontera se produce en 1995, cuand o se publica el borrado1 0.8del mtodo unificado diseado por la unin en una misma empresa (Rational),de Grady Booch y James Rumbaugh, que han contado tambin con la cola-boracin de Ivar Jacobson, creador del use case -caso de uso-, con ceptoterico fundamental que se ha impuesto en todos los buenos desarrollos dede los ltimos aos Desde el punto de vista del lenguaje se est estanda-rizando C ++ con la versin 0 de AT T y se ha estandarizado Ada con la

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    12/95

    xxiv rlogo rlogo XX

    versin Ada-95, y se han lanzado al mercado otros lenguajes de objetoshbridos: Object Pascal, Object CO BOL , Delphi, Visual BASIC -con cier-tas caractersticas de objetos-, Visual Object, etc Los lenguajes puros clsicoscomo Eiffel y Smalltalk luchan por hacerse un hueco en el mercado profesio-nal, saliendo de los laboratorios de investigacin y universitarios hacia elmund o profesional Internet, el fenmeno social y tecnolgico de la dcada delos noventa y del futuro siglo XXI, ha trado el advenimiento de Java unlenguaje evolucionado de C + + que la empresa Sum lanz el ao pasadoy que promete conveitirse en un duro competidor de C ++Teniendo presente el estado del arte de la ingeniera de software orientadaa objetos y nuestra experiencia peisonal en el Departamento de Lenguajes ySistemas Inf ormticos e Ingeniera de Software de la Universidad Pontificiade Salamanca en M adrid, donde hemos impartido numerosos cursos de pro-giamacin, anlisis y diseo orientados a objetos, as como otros cursos,seminarios y conferencias en otras universidades espaolas y latinoamericanasy en empresas informticas inultinacionales y escuelas de la administracinpblica espaola, hemos considerado los numerosos consejos, sugerencias ycrticas de alumnos y colegas, y como resultado hemos escrito un contenidopara esta obra que contiene los conceptos vitales de las tecnologas de objetosque confiamos permitan una progresin y aprendizaje rpido y eficiente porparte del lector en el inundo de la programacin orientada a objetos Paracumplir estos objetivos, pensamos que sera muy interesante mezclar con elmximo de prudencia conceptos fundamentales tales como:Tipos abstractos de datosClases objetos

    e Relaciones de objetos: generalizaci6n/especializacin,HerenciaModelado de objetos,Diseo orientado a objetosFundamentos de reutilizacin de software con objetosBibliotecas de clases,As pues, la obra considera los conceptos terico-prcticos importantesde la programacin orientada a objetos, junto con los mtodos correspondien-tes de codificacin en C+ + El contenido del libro se ha diseado de modoque pueda permitir al lectoi ya iniciado en objetos y/o C + + , y al no iniciadoadentrarse en el mundo de los objetos de un modo gradual y con la mayoreficacia posible, Para ello se ha pensado que el mejor mtodo podra serensear al lectoi las tcnicas de modelado del mundo real mediante objetos,de modo que cuando se tuviera el modelo idneo se pudiera pasar fcilmentea la codificacin de un programa que resolviera el problema en cuestinPara conseguir estos objetivos hemos credo conveniente hacer uso no slode los conceptos tericos ya mencionados, sino recurrir a una herram ientagrfica que facilite al lector realizar el anlisis diseo previo a la progra-macin que redunde en el mayor grado de eficiencia por parte del pro-gr ama dor

    CONTENIDO DEL LI ROEste libro se apoya fundamentalmente en el emergente paradigma de la orien-tacin a objetos y trata de ensearle sus conceptos bsicos, as como lastcnicas de programacin de dicho paradigma. Supone que el lector tieneexperiencia anterior en programacin en algn lenguaje, tal como BASIC, Co Pascal; tambin supone que el lector tiene experiencia en editar, compilar,enlazar y ejecutar programas en su comp utador a De cualquier forma, pen-sando en los lectores que no conocen C ni C ++ , hemos incluido un apndiceque contiene una gua de referencia del lenguaje C+ + , junto con una partecompleta (P aite IV) que incluye tres captulos que pretenden ensear al lectorla transicin de C a C + , o simplemente el lenguaje C+ + , caso de no conocerC/C ++ , as como reglas picticas para poner a punto programas en C+ + ,con una amplia relacin de errores tpicos cometidos en piogramas,El libro consta de cua tro partes qu e contienen quince captulos, todos elloscon una estructura muy similar: teora y ejeilzplos prcticos desarrollados en laversin 1 de C ++ de ANSI, de modo que prcticainente podr utilizar concualquier compilador de los coinercializados en la actualidad de las empresasBorland, Microsoft, Watcom, etc; un reyuiizeiz del capitulo y eje~ cicio s ropuestos al lector, de modo que pueda practicar los conceptos aprendidos en elcaptulo correspondienteLa Par te 1 El mundo de la orientacin a objetos, describe los conceptosfundamentales de objetos, relaciones, modelado y lenguajes de programacinorientada a objetos LPOO) El Capitulo 1 ofrece una visin general deldesarrollo del software, con una revisin de los conceptos clave del mismo,que abarcan desde los factores de calidad del software a la reutilizaciiz desoftware, pasando poi conceptos clave, como abstraccin de datos, encapsu-lamiento, jerarqua y polimorfismo, entre otros El Captulo 2 es una revisindel iinportante concepto de modularidad y su pieza clave los tipos abstractosde datos Se han utilizado como herramie ntas de programac in los lenguajesModula-2, Ada, Turbo Pascal, C y C+ + El Captulo 3 es una descripcinexhaustiva de los conceptos fundame i~talesde la programacin orientada aobjetos (clases, objetos, lenguajes, herencia, sobrecarga, ligadura , objeto s com-puestos y reutilizaciii) El Capitulo 4 describe los lenguajes de POO, losclasifica y realiza una sntesis de las propiedades orientadas a objetos de loslenguajes seleccionados, en este caso Ada, Eiff el y S malltalk El Cap tulo 5trata el importante concepto de ruodelado El proceso de desarrollo de unsistema de software comienza con la construcciil de un modelo del mundoreal Este modelo captura norm almente las caractersticas m s significativasdel problema, y para ello se apoya en el concepto de relaciones entre clasesLas diferentes relaciones junto con la importante propiedad de la herenciasus tipos, se describen tambin en el Captulo 5L.a Parte II incluye los Captulos 6 al 11 y explica los fundamentos de laprogramacin orientada a objetos POO) con C + + El Capitulo 6 describecmo declarar y construir clases, diseos y reglas prcticas para la construc-cin de clases El Captulo 7 examina las clases abstractas y la propiedad dela herencia, junto con la sintaxis para su implementacin y el problema de la

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    13/95

    xxvi ro logoIierencia repetida; el captu lo se termina con una aplicacin prctica ElCaptulo 8 presenta la propiedad de polimorfismo, junto con el concepto deligadura El Capitulo 9 describe las plantillas (te~nplater) muestra el conceptode genericidad; examina la sintaxis para declarar plantillas de funciones y declases, as como la definicin de sus funciones miembro y el modo de instanciailas clases El Captulo 10 presenta el concepto de excepcin, junto con sumanejo o manipulacin (eirores en tiempo de ejecucin), y examina el mtodoempleado por C++ para lanzar y capturar excepciones; se describe la sintaxisde C+ + para implementar estas operaciones y muestra cmo manejar excep-ciones El Captulo 11 describe la reutilizacin de software con C+ + y losdiferentes mtodos einpleados pa ra ello Asimismo, se describen las bibliotecasy contenedores de clasesLa Parte incluye el transcendental Capitulo 12 que describe los prin-cipios para el desarrollo orientado a objetos y especialmente su diseo Sedescriben las notaciones grficas de las metodologas Booch, YourdonJCoady Ruinbaugh (O MT), junto con las reglas prcticas para la implementacincon C++ de las diferentes relaciones entre clases; se incluye una pequeaaplicacin orientada a objetos L.a Parte IV El lenguaje C++: Sintaxis,construccin y puesta apunto de programas contiene los Captulos 13 a 15El Captulo 13 describe las caractersticas ms sobresalientes de C + + que lodiferencian de C en el sentido de mejorarlo y ampliarlo. El Captulo 14 explicaun sistema pictico para construir programas en C/ C++ junto con el con-cepto de programas multiarchivos y el sistema para construir arcliivos proyec-to La puesta a punto de programas en C+ + se explica en el Captulo 14; eneste captulo se dan reglas picticas para depurar programas con una extensaenumeracin de errores tpicos en el desarrollo de programasAunque el lenguaje base del texto es C ++ se pretende que el lector puedacodificar fcilmente los conceptos fundamentales de objetos y comenzar elaprendizaje de la P O 0 con otros lenguajes P or esta causa los Apndices A aE incluyen guas de referencias de sintaxis de los lenguajes C+ + , Delphi,TuiboJBorland Pascal, Ada-95 y lava -el nuevo lenguaje orientado a objetosde Interrzet- El Apndice F explica un concepto importante y especfico deC + i : la sobrecaiga de operadores L.a serie de apndices se coinpleta con elApndice G, que contiene sntesis de las notaciones grficas de las metodo-lo g a~ e anlisis diseo oiieiitadas a objetos ms populares y usadas en ellibro Estas iiotacioiies se han extrado de las fuentes originales de las meto-dol og a~ tilizadas: Booch 93, OM T (Rumbaugh et al) y Coad/Yourdon Porltimo, se incluye un glosario de trminos de objetos que facilitan la compren-sin del lector La bibliografa contiene los libros consultados por el autor enla escritura de la obra, incluyendo los libros base de las metodologas de A 0 0y D O 0 utilizadas en el libio,

    GR DECIMIENTOSMuchas son las peisonas que me han prestado ayuda de una u otra forma enla elaboracin de esta obia y a las que debo mi agradecimiento ms sincero

    rlogo xxviE n particular, deseo expresa1 ini reconocimiento a mis colegas del Departainento de Lenguajes y Sistemas Informticos de la Facultad y Escuela Uni-versitaria de Informtica de la Universidad Pontificia de Salamanca, en ecuiiipus de Madrid, que han impartido e imparten conmigo Prvgramaciitrieittaa bjetos dentio de la asigiiatuia Metodologa de la Programacinas coino Anlisis y Diseo Orientados a Objetos, cuyas sugerencias, consejos ycrticas han permitido los apuntes originales de la asignatura en este libro quehoy ve la luz Estos profesores son: Ignacio Zahonero , Antonio Reus, PaloinaCenteiiera, Rosa Hernndez, Rafael Ojeda, Ferna ndo Davara, M.TL.uisaDezDaniel Gaica y L.uis Doieste De un modo especial han contribuido a estobra las profesoras Paloma Centenera, Mara Luisa Dez y Rosa Hernndezque han volcado su experiencia docente personal en la revisin de las galeiadasde esta obra; tras su lectura han detectado erratas y sobre todo me han dadoconsejos, sugerencias y aportaciones personales que han permitido mejoiar laversin original de esta obra Gracias, amigas y colegas, por vnestia ayudaTambin el piofesor Ignacio Zahoneio ha leido par te de las galeradas y mha sugerido ideas de mejora Aunque no han intervenido d irectamente en laobra hay nunierossiinas peisonas que han contribuido eficientemeiite en laredaccin final de esta obra, sin su colaboiacin esta obra no estara ahoraen la calle Son todos mis alumnos de los ltimos cinco aos a los que heimpaitido cursos, seminarios y conferencias sobre tecnologas oiientadas aobjetos (anlisis, diseo, programacin y bases de datos) en universidadesespaolas y latinoamericanas, as coino en centros de formacin de empresasmultinacionales y de la administracin espaola Ellos me haii alentado eitodo momento a difundir las teciiologas de objetos y de ellos he recibido todotipo de citicas, consejos y sugerencias que he volcado en muchos casos en ellibro Por ltimo, deseo expiesar de modo muy especial mi agiadecimiento aJoige Piernavieja, mi antiguo editor -y, sin embargo , anzigo- que inici laedicin de esta obra y que por sus nuevas iespousabilidades profesionales iiola ha podido terminar, pero su coiisejo y aliento al igual que tantas otras vecenunca me faltaron. A mi nuevo editor tambin amigo Pepe Doinnguez queha teii iiinado la obra ; mi agradecimiento por su paciencia y comprensin Allector que ha confiado en esta obra en la esperanza de que le sea lo ms tily eficaz posible en su formacin en programacin orientada a objetos

    En Ca~ chelej o Andaluciu-Espaiia), verano de 1996El autor

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    14/95

    P RTE

    EL MU N D O DE LA ORlENTAClONA OBJETOS: CONCEPTOSRELACIONES MODELADOY LENGUAJESDE PROGRAMACION

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    15/95

    La dcada de los noventa ser, sin lugar a dudas, la dcada dela programaci n orientada a objetos Como Rentsch predijo,la programacin orientada a objetos ser en los ochenta loque la prog ramacin estructurada fue e n la dcada de l os se-tenta. En la actualidad la programacin orientada a objetosse ha hecho enormemente popu lar Escritores y diseadoresde software, junto a compaas importantes en el campo delsoftware, se dedican de modo continuo a producir compilado-res de lenguajes, sistemas operativos, bases de datos, etc,orientados a objetosQu es la programacin orientada a objetos? Por qu estan po pular? La programacin orientada a objetos es algo msque una coleccin de lenguajes de programacin, tales comoSmalltalk, Object Pascal, C , etc Se podra decir que estetipo de programacin es un nuevo medio de pensar sobre loque significa computar computadorizar), es decir, cmo sepuede estructurar informacin en un computador

    EL DES RROLLO DE SOFTW RE

    CONTENIDO1 1 La complejidad inherente al software1 2 La crisis del software1 3 Factores en la calidad del software1 , 4 Programacin y abstraccin1 , 5 El papel el rol) de la abstraccin1 6 Un nuevo paradigma de programacin1 7 Orientacin a objetos1 8 Reutilizacin de software19. Lenguajes de programacin orientados a objetos1, 10 Desarrollo tradicional versus orientado a objetos111. Beneficios de las tecnologas de objetos TO)RESUMEN

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    16/95

    4 rogramacin orientada a o jetos1 1 LA COMPLEJIDAD INHERENTE AL SOFTWAREComo Brooks sugiere, la coinplejidad del software es una propiedad esencial,no accidental Esta complejidad inhe rente al software, como dice Booch, sederiva de cuatro elementos: la complejidad del dominio del problema, la dificul-tad de gestionar el proceso de desarrollo, la posible flexibilidad a travs delsoftware y los problemas de caracterizacin del comportamiento de sistemasdiscretos

    1 1 1 La complejidad del dominio del problemaLos pioblemas que se intentan resolver con software implican normalmenteelementos de ineludible coinplejidad, en los que se encueiitran una gran cauti-dad de requisitos, en muchas ocasiones contiadictorio s Esta complejidad seproduce por las dificiles interacciones entre los usuarios de un sistema y susdesarrolladores: los usuarios encuentran generalmente muy difcil dar precisinsobre sus necesidades de forma que los desarrol ladores puedan comprender Encasos extremos, los usuarios pueden tener slo ideas vagas de lo que se desea enun sistema softwarePor otra parte, los usuarios y desarrolladores tienen diferentes perspectivasde la naturaleza del problema y hacen suposiciones diferentes sobre la natnrale-za de la solucin El medio comn de expresar los requisitos hoy da es utilizarun giaii volumen de textos, en ocasiones acompaados por esquemas y dibujosTales documentos son difciles de comprender, estn abiertos a diferentes inter-pretaciones y con frecuencia contienen elementos que son diseos en lugar derequisitos esencialesOtra complicacin frecuente es que los requisitos de un sistema softwarecambian durante su desariollo Esto supone que un sistema grande tiende aevolucionar con el tiempo el mantenimieiito del software en ocasiones es untrmino que no siempre est bien acuiadoPara ser ms preciso, existen diferentes trminos a definii: el mantenimientobusca errores; la evolucin responde a cambios de requisitos, y la conservacin,cuando se utilizan medios para mantener piezas de software en funcionamientoDesgraciadamente, la realidad sugiere que un porcentaje alto de los recursos dedesarrollo de software se gastan en la conservacin del software

    1 1 2 La dificultad de gestionar el proceso de desarrolloEl tamao de un piograma no es una gran virtud en un sistema de software Sinembargo, la esciitura de un gran programa requiere la escritura de grandescantidades de nuevo software y la rentilizaciu del software existente Recorde-mas que hace dos o tres dcadas los progiamas en lenguaje emsamblador seconstruan a base de centenares de lneas Sin embargo, hoy es usual encontrarsistemas en funcionamiento cuyo tamao se mide en centenares de millares, o

    incluso millones de lneas de cdigo Esta caracterstica se facilita descompo-niendo nuestia implementacin en centenales y a veces millones de mdulosindependientes Esta cant idad de trabaj o exige el uso de un equipo de desarro-Iladores, aunque se trata por todos los medios de que este equipo sea lo mspequeo posible Ahora bien, a medida que haya ms desarrolladores, se pro-ducen comunicaciones entre ellos ms complejas, e incluso con coordinacindifcil entre ellos, particularmente si el equipo est disperso geogrflcamente,como suele ser el caso de proyectos grandesLa rotura de una aplicacin en entidades y relaciones que son significativasa los usuarios es un anlisis convencional y tcnicas de diseo Con la progra-macin orientada a objetos, este pioceso de descomposicin se extiende a lafase de implementacin. Es ms fcil disear e implementar aplicaciones orien-tadas a objetos, ya que los objetos en el dominio de la aplicacin se correspon-den directamente con los objetos en el dominio del software

    1.1. 3.. La flexibilidad a travs de l softwareEl software ofrece flexibilidad, de modo que es posible para un desarrolladorexpresar prcticamente cualquier clase de abstraccin.Los sistemas orientados a objetos proporcionan el rendimiento, la flexibi-lidad y funcioualidad requerida para implementaciones prcticas La progra-macin se puede hacer con extensiones de lenguajes comerciales, tales comoObject-Pascal Turbo Pascal, Borland Pascal, Mac Pascal, et c) y C + + , queincorporan a sus tpicas propiedades las propiedades oiientadas a objetos, ylenguajes puros, como Smalltalk y Eiffel Por otr a parte, las ayudas deprogramacin actual mejoran la capacidad del programador para administrary modificar sistemas mientras se desarrollanLa programacin o rientada a objetos expande tambin la variedad d e apli-caciones que se pueden programar, debido a que se Iiberan las restricciones delos tipos de datos predefinidosL.aprogr m cin orientada a objetos acomoda estructuras de datos hetero-gneo~ complejos Se pueden aadir nuevos tipos de datos sin modificarcdigo existente

    1. 2..A CRISIS DEL SOFTWAREEn 968 una conferencia sobre software, patrocinada por la OT AN, asumi lostrminos iizgenieii del roftw re y ciisis del softw re Con estos trminos sequera expresar que el software era caro, poco fiable y escasoLas metodologas y tcnicas estructurales que han reinado en la dc ada delos setenta y ochenta no han eliminado el problema, de hecho la crisis delsoftware contina hoy en da Pese a las muchas herramien tas y mtodos utili-zados, los problemas del diseo descendentes permanecen igual, posiblementedebido a que la complejidad del problema ha crecido considerablemente

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    17/95

    rogramaoon orientada a objetos

    Entre las diferentes fases del ciclo de vida del software (Fig 1 l ,el mante-nimiento, aunque en tiempos fue despreciada su importancia, se considera ac-tualmente como u110 de los problemas ms rigurosos en el desarrollo del soft-ware

    Anlisis

    Diseo

    Implementacin

    Figura 1 1 Ciclo de vida del software,Muchos investigadores sugiere11 que los costes de software requieren ms de

    la mitad de los costes y recursos globales en el desarrollo de softwareImplernentacin Depuracin

    Anlisis 15

    Mantenimiento67Figura 1 2 Costes de las diferentes fas es del ciclo de vida

    de un proyecto software.

    l desarrollo de soitware

    Los cambios iealizados en la evolucin de un progi ama son el punto dbde los mtodos tradicionales de desarrollo de software, siendo paradjicamentuno de los puntos fuertes de los mtodos de desarrollo de software orientado objetos

    En 1986 Fredrick P Brooks , en un famoso artculo, apuntaba qu e en loltimos diez aos no se haba pioducido ningn progreso significativo en edesarrollo de software, y analizaba ciiticamente todas las tecnologas ms piometedoras Aunque l confesaba que tena ms confianza en la prograiilacinorientada a objetos qu e en cualquiei otra tecnologa, mantena dudas sobre suventajas efectivas

    Recientemente, las propuestas de reusubilidud o i eulilizacin reusability dcoinponeilles soJtiva~e e considera11 como bloques iniciales para la construccin del prograina, de modo siinilar a la conslruccin de cualquier objetcomplejo (tal como un automvil) que se construye ensamblando sus partes

    En respuesta al art culo de Brooks, Brad Cox2, el inventor de Objective-Cpublic un artculo en el que esencialmente rebata las tesis de Biooks:

    Existe una bala de plata Es un arma tremendaineiite potente, impulsada povastas fueizas ecouniicas a la aue nuevos obstculos tcnicos slo pueden resistbrevementeLa bala de plata es uii cambio culru~ul n lugar de un cambio tecnolgico Eun nuevo paiadigma; una revoluciii industrial basada en partes ieutilizables intercambiables que modificain el universo del software, de igual modo que lrevolucin industrial cambi la fabricacinPor consiguiente, la P O 0 (Prograinacin Orientada a Objetos) no slo so

    nuevos Ieilguajes de piogramacin, sino un nuevo modo de pensar y diseilaaplicaciones que puede11 ayudar a resolver pioblemas que afectan al desaiiolldel software Sin embargo, el lenguaje debe ser capaz de soportar el nuevparadigma, siendo por consiguiente uiia parte esencial de esta ievolucin

    1 3 FACTORES E N LA CALIDAD DEL SOFTWARELa constiuccin de software requiere el cumplimiento de iiumeiosas caiacteristicas Entre ellas se destacan las siguientes:

    f icienciaLa eficiencia del software es su capacidad pala hacer u11buen uso de los recuisos que manipula

    Bnoo~s, redeiik P li N o Silvei B u l l e t ~ oiiipurei 10-19, abril 1986Cox, Biad J Thei-e is a Silver Bulleta Bi te 209-218 octubre 1987

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    18/95

    8 Prograrnacion orientada a objetos

    Transportabilidad portabilidadlLa transportabilidad o portabilidad es la facilidad con la que un softwarepuede ser tiansportado sobre diferentes sistemas fsicos o lgicosVerificabilidadL.a verificabilidad es facilidad de verificacin de un softwaie; es su capacidadpara soportar los procedimientos de validacin y de aceptar juegos de test oensayo de programasIntegridadLa integridad es la capacidad de un softw aie para proteger s us propios compo-nentes contia los procesos que no tengan derecho de accesoFcil de utilizarUn software es fcil de utilizar si se puede com unicar con de manera cmoda

    orreccinCapacidad de los productos software de realiza1 exactamente las tareas defini-das por su especificacinRobustezCapac idad de los productos soflwaie de funcionar incluso en situaciones anor -malesExtensibilidadFacilidad que tienen los productos de adaptarse a cambios en su especificacinExisten dos principios fundamentales para conseguir esto:

    diseo simple;descentralizacinReutilizacinCapac idad de los productos pat a ser reutilizados, en su totalidad o en parte, ennuevas aplicaciones

    ompatibilidadFacilidad de los productos para ser combinados con otros

    l desarrolio de software

    1 3 1 Razones fundamentales que estn influyendoen la importancia de la POAlgunas de las causas que estn influyendo consideiablemente en el notabledesarrollo de las tcnicas orientadas a objetos son:

    L.a (Orientaciii a Objetos) es especialmente adecuad a para iealizadeterminadas aplicaciones, sobre todo realizacin de prototipos y simulacin de programasLos mecanismos de encapsulacin de P O 0 soportan un alto gradde reutilizacin de cdigo, que se incrementa por sus mecanismos dherenciaEn el entorno de las bases de datos, la se adjunta bien a los n~ode lsemnticos de datos p ara solucionar las limitaciones de los modelos tradicionales, incluido el modelo relaciona1Aumento espectacular de L.POO (Lenguajes de Programacin Orieiltados a O bjetos)Interfaces de usuario grficos (por iconos) y visuales Los interfaces dusuario de una aplicacin manipulan la entrad a y salida del usuaiio Poconsiguiente, su funcin principal es la comunicacin co n el usuario finaL.a entrada al sistema se puede controlas a travs de lneas de rdene(enfoque utilizado por DOS y UNIX), o alternativamente el usuario puede interactuar con el sistema, con construccioiies de programac in visuales, tales como iconos de mens, Windows, Macintosh, etcEstas razones hacen fundamentalmente que dentro de las tendencias actuales de la ingeniera de software, el marco de P O 0 se revela com o el madecuado para la elaboracin del diseo y desarrollo de aplicacionesEste marco se caracteriza por la utilizacin del diseo modular y lreutilizacin del software Los T AD (Tipo Abstracto de Da to) ha11 aume ntadola capacidad para definir nuevos tipos (clases) de objetos, cuyo significado sdefinir abstra ctame nte, sin necesidad de especificar los detalles de implem entacin, tales como la estructura de datos a utilizar para la representacin de losobjetos delinidosLos objetos pasan a ser los elementos fundamentales en este nuevo marcoen detriment o de los subprograinas que lo han sido en los marcos tradicionales

    1 4 PROGRAMACION ABSTRACCIONPa ra comprender mejor el significado de la revolucin que suponen las tecnologas orientas a objetos, se va a exam inar un o de los elementos fundamentalesp~oyiam acin ol abst~accinEn general, un programa no es ms que uiia descripcin abstracta de unprocedimiento o fenmeno que existe o sucede en el mundo real Frecuentemente, un programa imita un comportamiento o accin humana; otras vecesimula (es decir, lo reproduce) un fenmeno fsico

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    19/95

    1 roqrarnacin orientada a objetos

    Sin embargo, la relacin entre abstraccin y lenguaje de programacin esdoble: poi un lado se utiliza el lenguaje de programacin par a escribir unprograma que es una abstraccin del mundo leal; por otro lado se utiliza ellenguaje de progiamacin para desciibir de un modo abstracto el comporta-miento fsico de la computadora que se est utilizando (por ejemplo utilizandonmeros decimales en lugar de nmeros binarios, variables en lugar de celdasde memoria direccionadas explcitamente, etc)En la dcada de los cincuenta, el nico mecanismo de abstraccin era ellenguaje eiisan~blado r de mquina, que ofreca la posibilidad de utilizar nom-bres simblicos para representar celdas de memoi ia Posteriormente, los len-guajes de alto nivel ofrecieion un nuevo nivel de abstraccinEl arte de la prograiilaciiz es el mtodo por el que se describir a unacomputadora (mediante un lenguaje de prograinacin) un fenmeno, una ac-cin, un comportamiento o una idea

    1.5.. EL PAPEL EL ROL) DE LA ABSTR ACCIONLos piograinadores han tenido que luchar con el problema de la complejidaddurante mucho tiempo desde el nacimiento de la informtica Para comprenderlo mejor posible la importancia de las tcnicas orientadas a objetos, reviseinoscules han sido los dif eientes mecanisinos utilizados por los programadorespara controlar l a complejidad Entre todos ellos destaca la abstracciiz Comodescribe Wulft: Los humanos hemos desarrollado una tcnica excepcional-iliente potente paia tratar la complejidad: abstraernos de ella. Incapaces dedomina r en su totalidad los objetos complejos, se igiioia los detalles no esencia-les, trata ndo en su lugar con el modelo ideal del objeto centrndonos en elestudio de sus aspectos esencialesEn esencia, lu abstracciiz es la capacidad para encaprulai y aislar la iizforina-ciiz del direizo y ejecucin En o tro sentido, las tcnicas orientadas a objetos seve como iesultado de una larga progiesin histrica q ue comienza en los pro-cedimientos y sigue en los mdulos, tipos abstractos de datos objetos,

    1 .5.1.. La abstraccin como proceso natural mentalLas personas noiinalmente comprenden el mundo construyendo modelos men-tales de partes del mismo; tratan de comprender cosas con las que puedeninteractuar: un modelo mental es una vista siinplificada de cmo funciona demodo que se pueda inteiac tuar cont ra ella En esencia, este proceso de cons-truccin de modelos es lo mismo que el diseo de software, aunque el desarro-llo de software es nico: el diseo de software produce el modelo que puede sermanipulado poi una computadoraSin embargo, los modelos mentales deben ser ms sencillos que el sistema alcual imitan, o en caso contrario sern intiles. Por ejemplo, consideremos unmap a como un modelo de su territorio fin de ser til, el map a debe ser mssencillo que el territorio que modela Un mapa nos ayuda, ya que abstrae slo

    l desarrollo de software 1

    aquellas caracteisticas del territorio que deseamos modelar Un mapa de crreteras modela cmo conducir mejor de una posicin a otra Un map a topgrfico modela el contorno de un territorio, quiz pa ra planear un sistema dlargos paseos o caminatasDe igual forma que uii mapa debe ser ms pequeo significativamente qusu territorio e incluye slo informacin seleccionada cuidadosamente, as lomodelos mentales abstraen esas caractersticas de un sistema requerido parnuestra comprensin, mientias igno ian caractersticas irrelevantes Este procso de abstracciiz es psicolgicarneiite necesario y natural: la abstraccin ecrucial para comprender este complejo inundo,L.a abstraccin es esencial para el funcionamiento de una mente humannormal y es una herramienta muy potente para tratar la complejidad Considrar, por ejemplo, el ejercicio mental de memorizar nmeros. Un tota l de siedgitos se puede memorizar con ms o menos facilidad Sin embargo, si agrupan se deiioininan nmeios de telfono, los dgitos individuales se relgan en sus detalles de ms bajo nivel, crendose un nivel abstracto y ms altoen el que los siete nmeros se organizan en una nica e ntida d Utilizando esmecanismo se pueden memorizar algunos nmeros de telfonos, de modo qula agrupacin de diferentes entidades conceptuales es un mecanismo potente seivicio de la abstiaccin

    1..5.2.. Historia de la abstraccin del softwareL.a abstraccin es la clave para disear buen software En los primeros dias dla informtica, los programadores enviaban instrucciones binarias a una computadora, manipulando directamente interrupciones en sus paneles fiontales Loileinotcnicos del lenguaje ensamblados eran abstracciones diseadas para evtar que los programadores tuvieran que recordar las secuencias de bits qucomponen las instrucciones de un programa El siguiente nivel de abstraccise consigue agrupando instrucciones primitivas paia formar macroinstruccionePor ejemplo, un conjunto se puede definir por abstraccin como una colecin no ordenada de elementos en el que no existen duplicados Utili zando esdefinicin, se pueden especificar si sus elemen tos se almacenan en un array unlista enlazada o cualquier oti a estructura de datos Un c oi~ jun to e instrucciones realizadas por un usuario se pueden invocar por una macroinstiuccin; unmacioinstruccin instruye a la mquina par a que realice inuchas cosas Tras lolenguajes de prograiiiacin ensambladores aparecieron los lenguajes de pr og ~macin de alto nivel, que supusieron un nuevo nivel de abstraccin Los leguajes de programacin de alto nivel permitieron a los programadores distanciarse de las interioridades arquitectnicas especficas de una mquina dadCada 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 palpropsito genrico, sin preocuparse sobre que mquina corre el programaSecuencias de sentencias de lenguajes de alto nivel se pueden agrupar eprocedimientos y se invocan por una sentencia La programaci6n estructurad

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    20/95

    2 rogramacin orjentada objetos l desarrollo de sotwarealienta el uso de abstracciones de cont iol, tales como bucles o sentencias if-thenque se han incor porado en lenguajes de alto nivel Estas sentencias de controlpermitieron a los programadores abstraer las condiciones comunes para cam-biar la secuencia de ejecucin

    El proceso de abstraccin fue evolucionando desde la aparicin de los pri-meros lenguajes de programacin El mtodo ms idneo par a controlar lacomplejidad fue aumentar los niveles de abstraccin En esencia, la abstraccinsupone la capacidad de encapsular y aislar la informacin del diseo ejecu-cin En un determinado sentido, las tcnicas orientadas a objetos pueden versecomo un producto natural de una larga progresin histrica, que va desde lasestructuras de control, pasando por los procedimientos, los mdulos, los tiposabstractos de datos y los objetosEn las siguientes secciones describiremos los mecanismos de abstraccinque han conducido al desarrollo profundo de los objetos: procedimientos, m-dulos, tipos abstractos de datos objetos

    1.5..3. ProcedimientosLos procedimientos funciones fueron uno de los primeros mecanismos deabstracciu que se utilizaron ampliamente en lenguajes de programacin Losprocedimientos permitan tareas que se ejecutaban rpidamente, o eran ejecu-tadas slo con ligeras variaciones, que se reunan en una entidad y se reutiliza-ban, en lugar de duplica1 el cdigo varias veces Por otra parte, el procedimien-to proporcion la primera posibilidad de ocultacin de ilzfolmacin Unprogramador poda escribii un procedimiento o conjunto de procedimientosque se utilizaban por otro s programadores Estos otros programadores nonecesitaban conoce1 con exactitud los detalles de la implementacin; slo nece-sitaban el interfaz necesaiio. Sin embargo, los procedimientos no resolvantodos los problemas En particular, no era un inecanismo efectivo para ocultarla informacin pal a resolver el problema que se produca al trabajar mlti -ples piogramadores con nombres idnticosPara ilustra1 el problema, consideremos un programador que debe escribirun conjunto de rutinas para implementar una pila Siguiendo los criterios clsi-cos de diseno de software, nuestro programador establece en primer lugar elinterfaz visible a su trabajo, es decir cuatio rutinas: meter acar ilavacay pilallena A continuacin iinplementa los datos mediante arrays, listasenlazadas, etc Naturalmente, los datos contenidos en la pila no se puedenhacer locales a cualquiera de las cuatro rutinas, ya que se deben compartir portodos. Siil embargo, si las nicas elecciones posibles son variables locales oglobales, entonces la pila se debe mantener en variables globales: por el contra-rio, al se1 las variables globales, no existe un mtodo para limitar la accesibili-dad o visibilidad de dichas variables Por ejemplo, si la pila se representamediante un array denominado datospila ste dato debe ser conocido porotros programadores, que puedan desear crear variables utilizando el mismonombre pero relativo a las referidas rutinas De modo similar, las rutinas cita-das estn reservadas y no se pueden utilizar en otras pai tes del programa pa ra

    otros piopsitos En Pascal existe el mbito local y global Cualquier mbitque permite acceso a los cuatro procedimientos debe permitir tambin el accesa sus datos comunes Par a iesolver este problema se ha desarrollado un mecanismo de estructuracin diferente

    1 5..4. MdulosUn mdulo es una tcnica que proporciona la posibilidad de dividir sus datosprocedimientos en una parte privada -slo accesible dentro del mdulo- pai te pblica -accesible fuera del mdulo- Los tipos, dato s variables) procedimientos se pueden definir en cualquier parte,

    El criterio a seguii en la construccin de un indulo es que si iio se necesitalgn tipo de informacin, no se debe tener acceso a ella Este criterio es locultaciiz de infornzaciizLos mdulos resuelven algunos problemas, pero no todos los problemas de

    desarrollo de software Por ejemplo, los mdulos permitirn a nuestros programadores ocultar los detalles de la implementacin de su pila, pero qu sucedsi otros usuarios desean tener dos o ms pilas? Supongamos que un programador ha desarrollado un tipo de dato Complejo representacin de un nmercomplejo) y ha definido las operaciones aritmticas sobre nmeros complejo-suma, resta, multiplicacin y divisin; asimismo ha definido rutinas parconvertir nmeros convencionales a complejos Se presenta un problema: slpuede manipular un nmero complejo El sistema de nmeros complejos nser 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 hacemltiples copias de las zonas de datos

    1.5.5.. Tipos abstractos de datosUn t po 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 definidopor el sistema Al igual que los tipos definidos por el sistema, un tipo de databstr.acto corresponde a un conjunto puede ser de tamao indefinido) de valores legales de datos y un nmero de operaciones primitivas que se puedenrealizar sobre esos valores Los usuarios pueden crear variables con valores questn 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 spuede definir dicha pila como un tipo abstracto de datos y las operacionesobre la pila como las nicas operaciones legales que estn permitidas para serealizadas 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 conceptms terico Par a construir un tipo abstracto de datos se debe poder:

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    21/95

    14 Programacion orrentada a objetos El desarrollo de software

    1 Exponei una definicin del tipo2 Hacer disponible un conjunto de operaciones que se pueda n utilizarpara manipular instancias de ese tipoProtegei los datos asociados con el tipo de modo que slo se puedaactuar sobre ellas con las rutinas proporcionadasHacei instancias mltiples del tipoLos mdulos son mecanisinos de ocultacin de informacin y no cumplenbsicamente ms que los apartados 2 y 1 Los tipos abstractos de datos seimplementan con iiidulos en Modula-2 y paquetes en CL.U o Ada

    1 5..6. ObjetosUii objeto es sencillamente un tipo ab stracto de datos al que se aaden impor-tantes innovaciones en comparticin de cdigo y reutilizacin L.os mecanismosbsicos de orientacin a objetos son: objeto s, ineizsujes iiztodos, clases e iizs-taizcias y heieiiciu

    Conceptos claveAbstraccin ncapsulacin ersistencia

    Polimotiismo Genericidad

    Entidades bsicas

    Mtodos Instancias Jerarqua

    igura 1 . 3 Principios bsicos de la orientacin a objetosUna idea fundamental es la coinunicacin de los objetos a travs depaso deiizeizsajes Adems de esta idea, se aaden los mecanismos deheienciu. polimor-fisiizo L.a herencia peimite diferentes tipos de datos para compartir el mismocdigo, peimitiendo una reduccin en el tamao del cdigo y un incremento enla funcionalidad El polimorfismo permite que un mismo mensaje pueda actuarsobre objetos diferentes y comportarse de modo distinto

    L.a pei ti~teizcia e refiere a la permanencia de un objeto, esto es, la cantidde tiempo para el cual se asigna espacio y permanece accesible en la memodel computador

    1.6. U N NUE VO P R DIGM DE PROGR M CIONLa piogiaiizaciiz oiientada a objetos POO)* se suele conocer como un nueparadigiiza de programacin Otros paradigmas conocidos son: el paiadigiiza la prog~aiizaciiz iizpeiativa con lenguajes tales como Pascal o C),el paiadigiide la prograiilacin lgica PROLOG) y el paiadigiiza de la progiaiiiaciiz fuizciiza1 Lisp) El significado de paiadigiizu3 paradigiiza en latn; paradeigiizagriego) en su oiigen significaba un ejemplo ilustrativo, en particular enunciamodelo que mostraba todas las inflexiones de una palabra En el libro TSt ~u tu 1e j Scieiztzfic Revolutioizs, el historiador Thomas Kuh n4 describa paradigma como un conjunto de teoras, estndar y mtodos que juntos reprsentan un medio de organizacin del conocimiento: es decir, u11 medio visualizar el mundo En este sentido, la piogramacin orientada a objetos esnuevo paradigma La orientacin a objetos berza a reconsideiar nuestro pesamiento sobre la computacin, sobre lo q ue significa realizar computacinsobre cmo se estructura la informacin dentio del computador5Jenkins y Glasgow observan que la mayoia de los programadores trabjan en un lenguaje y utilizan slo un estilo de programacin Ellos programen un paradigma forzado por el lenguaje que utilizan Con frecuencia, noenfrentan a mtodos alternativos de resolucin de un problema, y por conguiente tienen dificultad en ver la ventaja de elegir un estilo ms apropiado problema a manejai Bobrow y Stefik definen un estilo de programacin comun medio de organizacin de piogramas sobre la base de algn modelococeptual de programacin y un lenguaje apiopiado pala hacer p rogramas en estilo claro Sugieren que existen cuatro clases de estilos de programaci

    Orientados a procedimientos AlgoritmosOrientados a objetos Clases 11objetosOiientados a lgica Exp re~ ado iz clculo de piedicadf~rOrientados a reglas Reglas if thenNo existe ningn estilo de progiainacin idneo para todas las clases programacin La orientacin a objetos se acopla a la simulacin de situacnes del mundo realEn PO O, las entidades centrales son losobjetos,que son tipos de datos qencapsulan con el mismo nombie estructuras de datos y las opeiaciones algoritmos que maiiipulan esos datosUn ejemplo que sirve como modelo o patrn: Dicrioiiai.)i o S Acadei

    Press, 1992KUHIV,Thomas S he St i ucfure o S

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    22/95

    6 Programacion orientada a objetos

    1 7 ORlENTAClON A OBJETOSL.a orientacin a objetos puede describiise como el conjun to de dircipliizas in-geizielia) que derari,ollail y iizodelizaiz softivare que facilitan la construccin desisteiizay cori~ple jos pal tii de coinpoizeiztesEl atractivo intuitivo de la orientacin a objetos es que proporciona concep-tos y herramientas con las cuales se modela y representa el mundo real tan fiel-mente como sea posible Las ventajas de la orientacin a objetos son muchas enprogramacin y modelacin de datos Como apuntaban Ledbetter y o x 1985):

    La programacin orientada a objetos permite una representacin ms directadel modelo de inundo tea1 en el cdigo El resultado es que la transformacinradical noimal de los requisitos del sistema (definido en trminos de usuario) a laespecificacin del sistema (definido en trminos de coinputador) se reduce consi-deiablementeLa Figura 1 4 ilustra el problema Utilizando tcnicas convencionales, elcdigo generado para un problema de mundo real consta de una primeracodificacin del problema y a continuacin la transformacin del problema entrminos de un lenguaje de coinputador Von Newmann Las disciplinas y tcni-cas orientadas a objetos manipulan la transformacin autornticamente, deinodo que el volumeil de cdigo codifica el problema y la transformacin seminimiza. De hecho, cuando se compara con estilos de programacin conven-cionales plocediiizerztales por proc edin zie~ ztor) , as reducciones de cdigo vandesde un 40 por 100 hasta un orden d e magnitud elevado cuando se adopt a un

    estilo de piogiamacin orientado a objetos.Los conceptos y herramientas orientados a objetos son tecnologas quepermiten que los problemas del inundo real sean expresados de modo fcil y

    Transformacin e 017 Newrnan

    1 Codificacin del programaFigura 1 4 Construccin de software,

    l desarrollo de softw re 7

    natural L.as tcnicas orientadas a objetos proporcionan mejoras y metodo-loga~ ara construir sistemas de software complejos a partir de unidades desoftware modularizado y reutilizableSe necesita un nuevo enfoque para construir software en la actualidad Estenuevo enfoque debe ser capaz de manipular tanto sistemas grandes como pe-queos y debe crear sistemas fiables que sean flexibles, mantenibles y capacesde evolucionar para cumplir las necesidades de cambioL.a tecnologa or ientada a objetos puede cubrir estos cambios y algunosotros ms en el futuroLa orientacin a objetos trata de cumplir las necesidades de los usuariosfinales, as como las propias de los desarrolladores de pioductos software. Estastareas se iealizan mediante la modelizacin del mundo real El soporte funda-mental es el modelo objeto Los cuat ro elementos (propiedades) ms importan-tes de este modelo6 son:

    AbstraccinEncapsulacinModularidadJerarquaComo sugiere Booch, si alguno de estos elementos no existe, se dice que elmodelo no es orientado a objetos7 1 bstraccin

    La abstraccin es uno de los medios ms importantes, mediante el cual nosenfrentamos con la complejidad inherente al software La abstraccin es lapropiedad 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 quesirva para separar el comportamient o esencial de un objeto de su implementa-cin Definir una abstracc in significa describir una entidad del mundo real, noimporta lo compleja que pueda ser, y a continuacin utilizar esta descripcin enun programaEl elemento clave de la programacin orientada a objetos es la clase Unaclase se puede definir como una descripcin abstracta de un grupo de objetos,cada uno de los cuales se diferencia por su estado especificoy por la posibilidadde realizar una serie de operacioizer Por ejemplo, una pluma estilogrfica es unobieto que tiene un estado (llena de tinta o vacia) sobre la cual se vuedenrealizar algunas ~~ er aci on es (~ orjemplo escribir, piner o quitar el capuchn,llenar de tinta si est vaca)La idea de escribir programas definiendo una serie de abstracciones no esnueva, pero el uso de clases para gestionar dichas abstracciones en lenguajes deprogramacin ha facilitado consideiablemente su aplicacin

    Booc~; iady: Objert-Oiientcd Arzalysis and Dei i yn w i t h 4ppl i ca t ions Benjainin/Cumrnings,1994

  • 5/28/2018 Programacion Orientada a Objetos Luis Joyanes Aguilar

    23/95

    18 Programacion orientada a objetos1 7..2. EncapsulacinLa eiicapsulaciii o eiicap~ulaiizieiito s la propiedad que permite asegurar que elcontenido de la informacin de un objeto est oculta al mundo exterior: elobjeto A no conoce lo que hace el objeto B, y viceversa L.a encapsulacintambin se conoce conlo otultaciiz de la iifoii~zuciiz), n esencia, es el procesode ocultar todos los secretos de un objeto que no contribuyeri a sus carac-tersticas esencialesL.a encapsulacin permite la divisin de un prograina en mdulos Estosn~ dul os e implementan mediante clases, de foima que una clase representa laencapsulacin de una abstraccin En la prctica, esto significa que cada clasedebe tener dos partes: un interfaz y una implementaciii El iizterfaz de unaclase captura slo su vista externa y la iiizplei?zeizzacin contiene la representa-cin de la abstraccin, as como los iilecaiiismos que realizan el comportamien-to deseado

    1.7.3. ModularidadL,a modularidad es la propiedad que permite subdividii una aplicacinen partes ms pequeas llamadas nzdulos), cada una las cuales debe sertan independiente como sea posible de la aplicacin en s y de las restantespartes

    La modulaiizacin, como indica Liskov, consiste en dividir un programa enmdulos que se puedan compilar por separado, pero que tienen conexiones conotros mdulos Al igual que la encapsulacin, los lenguajes soportan la modu-laridad de diversas formas. Por ejemplo, en C + + los mdulos son archivoscompilados poi sepa rado L.a prctica usual se ver en el Captulo 2 es situarlos inteifaces de los mdulos en archivos con nombres con extensin h aiclzi-vos de cabecera) y las implementacioiies de los mdulos se sitan en archivoscon nombres con extensin ppEn Ada, el mdulo se define como paquete pa cka ge) Un paquete tiene dospartes: la espec@cacin del paquete y el cuerpo del paquete; tambin se puedencompilar por separadoComo se ver en el Captulo 2 la i~zodulaidod es la propiedad de un sistemaque peiinite su descomposicin en un conjunto de indulos cohesivos y dbil-mente acoplados

    1.7.4. JerarquaL.a jeiarqua es una propiedad que pei~nite na ordenacin de las abstraccio-nes L.as dos jerarquas ms importantes de un sistema complejo son: est ~uc tu rade clases je rarqua es un>> iy-a): genetalizaciii/especializacin) y estructurade objetos jerarqua parte de part-of): agiegacin)

    l desarrollo de soiware 19

    L,as e~arquas e generalizacin especializacin se conocen como herenciaBsicamente, la herencia define una relacin entre clases, en donde una clasecomparte la estructura o compoitamiento definido en una o ms clases hereiz-cia sii~zple hereizcia iizltiple, respectivamente).L.a agregacin es el concepto que permite el agrupamiento fsico de estruc-tura s relacionadas lgicamente As, un camin se compone de ruedas, rnotoi,sistema de transmisin y chasis; en consecuencia, camin es una agregacin, yruedas, motor, transmisin y chasis son agregados de camin1.7.5. PolimorfismoLa quinta propiedad significativa de los leiiguajes de programacin orientadosa objetos es el poliiizorfisino Esta propiedad no suele ser considerada comofundamental en los diferentes modelos de objetos propuestos, pero, dada suimportancia, no tiene sentido considera1 un objeto nzodelo que no soporte estapropiedad,Polimo~fismo s la propiedad que indica, literalmente, la posibilidad de queuna entidad tome rnuclzar foriizar En triiiinos prcti cos, el polimorfismo per-mite iefeiirse a objetos de clases diferentes mediante el mismo elemento deprograma y realizar la misma opeiacin de diferentes formas, segn sea elobjeto que se referencia en ese momentoPor ejemplo, cuando se desciibe la clase rilainjel.os se puede observar que laoperacin coiizer es una operacin fundamental en la vida de los mamferos, demodo que cada tipo de mamfero debe poder realizar la operacin o funciiicorizei Por ot ra parte, una vaca o una cabra que pastan en un campo, un nioque se come un bombn o caramelo y un len que devora a otro animal, sondiferentes formas que utilizan los distintos mamferos para realizar la mismafuncin conzel.).El polimorfismo implica la posibilidad de tomar un objeto de un tipomamfero, por ejemplo) e indicarle que ejecute conzer; esta accin se ejecutarde diferente foima, segn sea el objeto mamfero sobre el que se aplicaClases, herencia y polimorfismo son aspectos claves en la programacinorientada a objetos, y se reconocen a estos elementos como esenciales en laorientaciiz a objetos El polimorfismo adquiere su mxima expresin en ladel ivacin o exteizsiiz de clases, es decir, cuando se obtiene una clase a partii deuna clase ya existente, mediante la propiedad de derivacin de clases o heren-cia As, por ejempl