. CONSULIORES EDITORIALES AREA DE INFORMATICA Y COMPUIACION Antonio Vaquero Sanchez Catednitico de Lenguajes y Sistemas Informaticcs Escuela Superior de Informatica Universidad Complutense de Madrid ESPANA
Gerardo Quiroz Vieyra Ingeniero en Cornunicaciones y Electr6nica por la ESIME dellnstituto Politecnico Nacional Profesor de la Universidad Autonorna Metropolitana Unidad Xochimilco MEXICO Willy Vega Galvez Universidad Nacional de Ingenierta PERU
PROGRAMACION ORIENT ADA A OBJETOS Luis Joyanes Aguilar Director del Departamento de Lenguajes y Sistemas Informaticos e Ingenierfa de Software F acultad de Informatica Universidad Pontificia de Salamanca Campus Madrid
McGraw-Hill MADRID· BUENOS AIRES' CARACAS· GUATEMALA· LlSBOA· MEXICO NUEVA YORK· PANAMA' SAN JUAN· SANTAFE DE BOGOTA· SANTIAGO· SAO PAULO AUCKLAND· HAMBURGO· LONDRES· MILAN· MONTREAL. NUEVA DELHI· PARIS SAN FRANCISCO· SIDNEY· SINGAPUR • ST LOUIS· TOKIO. TORONTO
._ .... !,.
,--..
~-',.-,... _
i,..I,~f.""~,,~'\" ..
..•" - ~~ ..
~-~;,.,;!
CONTENIDO Prologo
XVll
Parte I EL MUNDO DE LA ORIENTA CION A OBJEfOS: CONCEPTOS, RELACIONES, MODELADO Y LENGUAJES DE PROGRAMACION Capitulo L ] 1.
12 13 PROGRAMACION ORlENIADA A OBJEIOS No esta permitida La reproducci6n total 0 parcial de este libro, ,ni su tr~tamiento inforrnatico ni la transmisi6n de ninguna forma 0 por cualquier medic, ya sea electr6nico: mecanico, por fotocopia, por registro u otros metodos, sin el permiso previo y por escrito de los titulares del Copyright
1.4 1 5.
DERECHOS RESERVADOS ©1996, respecto ala primera edici6n en espaiiol, por McGRAW-HILL;iNTERAMERICANA DE ESPA'N"A, S A
16. 17
Edificio Valrealty, 1 a planta Basauri, 17 28023 Aravaca (Madrid) ISBN: 84-481-0590-7 Deposito legal: M 30121-1996 Editor: Jose Dominguez Alconchel Disefio de cubierta: Juan Garcia Compuesto e impreso en Fernandez Ciudad, S L IMPRESO
EN ESPANA - PRINTED
IN SPAIN
18 1. 9.
EI desarrollo de software
La compJejidad inherente al software 1 lILa complejidad del dominic del problema . ,, 1.1.2. La dificultad de gestionar el proceso de desarrollo 1 1 3 La flexibilidad a traves del software La crisis del software ... ,. . . Factores en la calidad del software. 131 Razones fundamentales que estan influyendo en la importancia de la POO _ '" . ,. . Programaci6n y abstraccion EI papel (el rol) de la abstracci6n 1.5..1. La abstracci6n como proceso natural mental 1. 5. 2 Historia de la abstraccion del software 153 Procedimientos 1.5.4. M6dulos",.. 1 5 5, Tipos abstractos de datos 1.5 6 Objetos Un nuevo paradigma de programacion Orientaci6n a objetos 1 7 1. Abstraccion . 1.7.2. Encapsulacion 1 73 Modularidad 1'74. Jerarquia.. 1.75 Polimorfismo 176 Otras propiedades Reutilizaci6n de software , .. , Lenguajes de programacion orientados a objetos 1 9 1 Clasificaci6n de los lenguajes orientados a objetos
3 4 4 4 5
5 7 9 9 10 10 11 12 13
J3 14 l5 16 17 18 18 18 19 20 21 22 23
v
Contenido
vi
vii
Contenido
1 10 Desarrollo tradicional frente a orientad'(TaO)bjetos 1.11 Beneficios de las tecnologfas de objetos Resumen
Capitulo 2,
Modularidad: tipos abstractos de datos
Moduladdad 21 I La estructura de un modulo, 2.12 Reglas de modularizacion Diseno de modules 22 2,21 Acoplamiento de modules 2.22 Cohesion de modules . 2,3. Tipos de datos .' ., Abstraccion en Jenguajes de programacion 24 24 1 Abstracciones de control 2.4 2 Abstraccion de datos ' "" , 2,5 Tipos abstractos de. datos 2,5 1 Ventajas de los tipos abstractos de datos, 2.52 Implementacion de los TAD .. , ' Tipos abstractcs de datos en Turbo Pascal ' ... .26 2.6 1 Aplicacion del tipo abstracto de dato Pila Tipos abstractos de datos en Modula-2 ' 27 27 1. Modules 272 Modules locales 2 7 3 Tipos opacos 274. Tipos transparentes .. ' . ..' . . .. .. .. ..... ., " 27.5 Una version del tipo abstracto de dato Pila con datos opacos 2.76 Otra aplicacioii del TAD Pila 28. Tipos abstractos de datos en Ada 28,1 Tipos privados 2.82 Tipos privados limitados , Tipos abstractos de datos en C .. .. .. .' . . . 29 2.9 1. Un ejemplo de Ull tipo abstracto de datos en C .. 210 Tipos abstractos de datos en c++ 2,101 Definicion de una clase Pila en c++ Resumen Ejercicios
21
C apltt uI0 3, ' Conceptos fundamentales de programacion orientada a objetos 31 32
33
34
Programacion estructurada " :. " '. 3 1.1. Desventajas de la programacion estructmada l.Que es la programacion orientada a objetos? 321 EI objeto 3 22, Ejemplos de objetos .' 3.2,3. Metodos y mensajes Clases , .' 3 3 1. Implementacion de clases en lenguajes . 3,,32 Sintaxis Un mundo de objetos
25 27 29
30 31 31 32 35 35 35 36 38 38 39
40 42 42 43 45 46 46 47 47 48 49 51 53 55 56 57 58 60
61 64 65
66 67 69 69 70 71 73 75 75 76
77
3.4.1. Definicion de objetos 342 Identificacion de objetos 34.3 Duracion de los objetos .. 14.4. Objetos frente aclases Representacion 3 4 5 Datos internos 3.4.6 Ocultacion de datos 3..5 Herencia 3 5 1 Sintaxis 3.52. Tipos de herencia .. 36. Comunicaciones entre objetos: los mensajes . 3 6 1 Activacion de objetos 16.2. Mensajes 16,3. Paso de mensajes 37 Estructura inter na de un objeto . 17.1. Atributos 3.7,2. Metodos Clases ., 38 3,8.1. Una comparacion con tablas de datos 3.9 Herencia y tipos . 391 Herencia simple iherencia jel'ul'quica) 19,2. Herencia multiple therencia ell malla) 3.9 3 Clases abstr aetas 310 Anulacion/Sustitucion 3 11. Sobrecarga ., 312 Ligadura dinamica 3 121 Funciones 0 metodos virtuales 3.122 Polimorfismo 313 Objetos compuestos. 3 13 1 Un ejemplo de objetos compuestos. 313.2 Niveles de proiundidad 3.14 Reutilizaci6n con orientaci6n a objetos . 3 14.1 Objetos y reutilizacion 315. Polimorfismo Resumen
Capitulo 4.. Lenguajes de programacion 4.]
4.2.
43.
78 78 grafica (Notacion
de Ege)
orientados a objetos ..
Evoluci6n de los LPOOS 4 11 Estado actual de los Jenguajes orientados a objetos en la decada de los noventa Clasificacion de lenguajes orientados a objetos .... 421 Taxonomia de lenguajes orientados a objetos 422 Caractensticas de los Ienguajes orientados a objetos 4.2.3 PUlOS frente a hibridos , 4 2 4 Tipificacion estatica frente a dinamica 42.5 Ligadura estatica frente a dinamica 4.2.6. Revision de lenguajes orientados a objetos Ada ' 43 1. Abstracci6n de datos en Ada. 4.3.2 Genericidad en Ada. 4,33 Soporte de herencia en Ada-83 4.3 4. Soporte Ada para orientaci6n a objetos
80 80 83 84 84
86 87 89
90 90 92
92 93 93 94 95 96
98 98
100 ]01
102 104 104 105
105 107 107
109
110 110 111
113 114
117 118 119 120
121 122 124 125 126 126 127 128 128
viii
Contenido
Contenido
4 4 1 La biblioteca de clases Eiffel 4.4.2. EI entorno de programacion Eiffel . 4.4.3. EI Jenguaje Eiffel 4 5. Small talk . . . .. . . 451 El lenguaje Smalltalk ..... .... 4.5.2 La jerarquia de clases Smalltalk . 4.6 OtTOS lenguajes de programacion orientados a objetos . Resumen Ejercicios
129 130 130 131 132 133 134 134 135 136
Capitulo 5.
137
44
Eiffel
Modelado de objetos: relaciones
51
Relaciones entre clases. . Relaci6n de generalizacionjespecializacion (is-ales-un) 5.2.1 Ierarqufas de generalizaci6njespecializaci6n 53 Relaci6n de agregacion (has-altiene-un) ... 5 3.1 Agregacion frente a generalizacion 54. Relacion de asociaci6n 5.41. OtIOS ejemplos de cardinalidad .. 5.5 Herencia: jerarquia de c1ases 5.5.1 Herencia simple . 5 52 Herencia multiple . 5.521 Ventajas de la herencia multiple. 5 5 2 2 Inconvenientes de la herencia multiple. 5 5 2 3 Disefio de clases con herencia multiple. 56 Herencia repetida Resumen
52
Bjercicios
138 141 143
145 146
149 150 151
152 155 155 156 157 160 160
Parte II
Abstraccion de la generalizacion y especializacion Clases abstractas 73 Herencia en C++: clases derivadas 7.3. L Sin taxis de la herencia simple 73.2. Sintaxis de la herencia multiple 7.33. Ambiguedad y resoluci6n de ambito 7.4. Herencia repetida y clases base virtuales 7.5 Funciones virtuales puras 7.51. Otro ejemplo de clase abstracta 76 Diseno de clases abstractas . 77 Una aplicacion practica: jerarqufa de figuras 7 7. 1. La clase F iqur a Resumen Ejercicios 71 7.2
de clases
230 232 233 233 237 240 242 243 247 247 251 251 252 252
Ligadura 8.1.1. Ligadura en C++ 82 Funciones virtuales .. .. 82.1 Ligadura dinamica mediante funcionesvirtuales . 8.3. Polimorfismo .. 83 1 EI polimorfismo sin ligaduradinamica 8.3 2 El polirnorfismo con ligadura dinamica 84 Uso del polirnorfismo . 84.1 Uso del polirnorfiosmoen C++ .. 8 5 Ligadura dinamica frente a ligadura estatica 8.6. Ventajas del polimorfismo Resumen Ejercicios
256 256 257 258 260
Capitulo 9.. Genericidad: plantillas (templates)
268
184
91
184
92
269 270
168 169 170
65 66
229
81
6. L Clases
6.4
Clases abstractas y herencia
Capitulo 7.
255
167
63.
185 188 190 192 193 201 204 207 208 213 216 221 222 223
Capitulo 8.. Polimorfismo
Capitulo 6.. Clases y objetos en C++ y objetos Objetos 6.2..1 Identificaci6n de objetos Clases Creaci6n de clases . Diagramas de clases y objetos . Construcci6n de clases en c++ 6 6 1 Declaracion de clases 6.6.2. Definicion de una clase . 6.63 Constructores y destructores 6. 64 Usal las clases . 665 Especificaci6njimplementaci6n de clases 666 Compilaci6n separada de c1ases 6. 6. 7 Reutilizaci6n de clases . 6. 6 8 Estilos de declaracion de clases
Disefios practices de clases 6.71 Clases Reloj y Presentar 68 Tecnicasde creaci6n e inicializaci6n de objetos . 6.8.1. Objetos dinamicos new y delete . 69. Inicializacion y limpieza de objetos . 69 1 Uso de una clase . 610 Reglas practicas para construccion de clases 6101 Funciones miembro . 6.102 Una aplicaci6n sencilla 6.10.3. Control de acceso a los miembros de una clase 6.10.4. Creaci6n, inicializacion y destrucci6n de objetos 6 1] El puntero this Resumen Ejercicios
138
PROGRAMACION ORIENTADA A OBJEIOS CON C++
62
6.7.
ix
171 172 173 176
177 179 180 181 181 183
Genericidad : Conceptos fundamentales
de plantillas en C++
261
262 263 263 264 265 265 266