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

. 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 Facultad 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· AUCKLAND· HAMBURGO· LONDRES· MILAN· MONTREAL.

SANTIAGO· SAO PAULO NUEVA DELHI· PARIS

SAN FRANCISCO· SIDNEY· SINGAPUR • ST LOUIS· TOKIO. TORONTO

PROGRAMACION ORlENIADA A OBJEIOS

No esta permitida La reproducci6n total 0 parcial

inforrnatico ni la transmisi6n de ninguna forma

electr6nico: mecanico, por fotocopia, por registro u otros metodos, sin el permiso previo y por escrito de los titulares del Copyright

de este libro, ,ni su tr~tamiento 0 por cualquier medic, ya sea

DERECHOS RESERVADOS ©1996, respecto ala primera edici6n en espaiiol, por

McGRAW-HILL;iNTERAMERICANA

Edificio Valrealty, 1 a planta Basauri, 17 28023 Aravaca (Madrid)

ISBN: 84-481-0590-7 Deposito legal: M 30121-1996

DE ESPA'N"A, S A

Editor: Jose Dominguez Alconchel Disefio de cubierta: Juan Garcia Compuesto e impreso en Fernandez Ciudad, S L

IMPRESO EN ESPANA - PRINTED IN SPAIN

Prologo

Parte I

, .

!

i,

I,~f.""~,~,

'\"

~ -~;,.,;!

CONTENIDO

XVll

EL MUNDO DE LA ORIENTA CION A OBJEfOS:

CONCEPTOS,

RELACIONES,

MODELADO

DE PROGRAMACION

Y LENGUAJES

Capitulo L EI desarrollo de software

 

3

]

1.

La compJejidad inherente al software

4

 

1

lILa

complejidad del dominic del problema . , ,

4

1.1.2.

La

dificultad de gestionar el proceso de desarrollo

4

1

1 3

La flexibilidad a traves del software

5

1 2

La crisis del software

 

5

13

Factores en la calidad del software.

 

7

131

Razones fundamentales que estan influyendo en la importancia de

 

la POO

_

'"

.

,.

.

9

1.4

Programaci6n

y abstraccion

9

1

5.

EI papel (el rol) de la abstracci6n

 

10

 

1.5

1.

La abstracci6n como proceso natural mental

10

1.5. 2

Historia de la abstraccion del software

11

153

Procedimientos

 

12

1.5.4.

M6dulos",

13

 

1

5 5,

Tipos abstractos de datos

J3

1.5 6

Objetos

14

16.

Un nuevo paradigma de programacion

l5

17

Orientaci6n a objetos

 

16

1

7 1.

Abstraccion .

17

1.7.2. Encapsulacion

 

18

1

73

Modularidad

18

1'74.

Jerarquia

18

1.75

Polimorfismo

19

176

Otras propiedades

20

1

8 Reutilizaci6n de software

,

,

21

1. 9.

Lenguajes de programacion

orientados a objetos

22

1

9 1

Clasificaci6n de los lenguajes orientados a objetos

23

Contenido

vii

vi

Contenido

1 10 Desarrollo tradicional frente a orientad'(TaO)bjetos 1.11 Be nefici o s de l a s t ecnol o g fas d e o bjet o s Resumen

Capitulo 2, Modularidad: tipos abstractos de datos

21

Moduladdad

21 I

La estructura de un modulo,

2.12

Reglas de modularizacion

22 Diseno de modules

2,21

Acoplamiento de modules

2.22

Cohesion de modules .

2,3.

24 Abstraccion en Jenguajes de programacion

,

Tipos de datos

.'

.

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

, '

26 Tipos abstractcs

de datos en Turbo Pascal '

.-

2.6 1

Aplicacion del tipo abstracto de dato Pila

27

Tipos abstractos

de datos en Modula-2

 

'

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

,

29

210

Tipos abstractos

2.9 1.

Tipos abstractos de datos en c++

2,101

de datos en C

.'

. de datos en C

.

.

.

Un ejemplo de Ull tipo abstracto

Definicion de una clase Pila en c++

.

Resumen

Ejercicios

C apl u 0 , '

tt I

3

Conceptos fundamentales de programacion orientada a ob- jetos

31 Programacion

estructurada

"

:

.

"

'

.

3

1.1. Desventajas de la programacion

estructmada

32 l.Que es la programacion orientada a objetos?

33

321 EI objeto

3 22,

3.2,3. Metodos y mensajes

Clases

3 3 1. Implementacion

3,,32 Sintaxis

Ejemplos de objetos .'

,

.'

de clases en lenguajes

34 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

78

342

Identificacion de objetos

78

34.3

Duracion de los objetos

80

14.4.

Objetos frente aclases Representacion grafica (Notacion de Ege)

80

3 4 5

Datos internos

83

3.4.6

Ocultacion de datos

84

3 5

Herencia

84

 

3

5 1

Sintaxis

86

3.52.

Tipos de herencia

87

36.

Comunicaciones entre objetos: los mensajes .

89

3

6 1

Activacion de objetos

90

16.2.

Mensajes

90

16,3.

Paso de mensajes

92

37

Estructura

inter na de un objeto .

92

17.1.

Atributos

93

3.7,2. Metodos

93

38

Clases

.,

94

3,8.1. Una comparacion con tablas de datos

95

3.9

Herencia

 

y tipos .

96

391

Herencia simple iherencia jel'ul'quica)

98

19,2.

Herencia multiple therencia ell malla)

98

3.9

3

Clases abstr aetas

100

310 Anulacion/Sustitucion

]01

3 11. Sobrecarga

.,

102

312

Ligadura dinamica

104

3 121 Funciones 0 metodos virtuales

3.122

Objetos compuestos.

3 13 1 Un ejemplo

313.2

Reutilizaci6n con orientaci6n a objetos .

3 14.1 Objetos y reutilizacion

Polimorfismo

Polimorfismo

313

3.14

de objetos compuestos.

Niveles de proiundidad

315.

Resumen

Capitulo 4

Lenguajes de programacion orientados a objetos

104

105

105

107

107

109

110

110

111

113

4.]

Evoluci6n de los LPOOS

 

114

4

11

Estado actual de los Jenguajes orientados a objetos en la decada de

 

los noventa

117

4.2.

Clasificacion de lenguajes orientados a objetos

118

 

421

Taxonomia de lenguajes orientados a objetos

119

 

422

Caractensticas de los Ienguajes orientados a objetos

120

4.2.3

PUlOS frente a

hibridos ,

121

4

2 4

Tipificacion estatica frente a dinamica

122

42.5

Ligadura estatica frente a dinamica

124

4.2.6.

Revision de lenguajes orientados a objetos

125

43.

Ada

43 1.

'

126

Abstracci6n de datos en Ada.

126

4.3.2

Genericidad en Ada.

 

127

4,33

Soporte

de herencia en Ada-83

128

 

4.3

4. Soporte

Ada para orientaci6n a objetos

128

viii

Contenido

44

Eiffel

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

L a j e rarquia

de cl ases Smalltal k .

4.6 OtTOS lenguajes de

Resumen

Ejercicios

programacion orientados a objetos .

Capitulo 5. Modelado de objetos: relaciones

5 1

52 R el a ci6n de ge n e r a li z acionjespeci a l i z aci o n

Relaciones entre clases.

.

(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. O tI OS e jemp l os d e ca rdi n a li d a d

5.5 Herencia: jerarquia de c1ases

5.5.1

5 52

Herencia simple .

H ere n c i a

5.521

5 5 2 2

5 5 2

mu l t i ple . Ventajas de la herencia multiple. Inconvenientes de la herencia multiple. Disefio de clases con herencia multiple.

3

56 H e r en ci a re p e tida

Resumen

Bjercicios

Parte II

129

130

130

131

132

133

134

134

135

136

137

138

138

141

143

145

146

149

150

151

152

155

155

156

157

160

160

PROGRAMACION ORIENTADA A OBJEIOS CON C++

Capitulo 6

6. L

62

Clases y objetos en C++

Clases y objetos Objet os

6.2

1

Identificaci6n de objetos

63.

6.4

Clases

Creaci6n de clases .

65

Diagramas

de clases y objetos .

66

Construcci6n de clases en c++

6 6 1 Declaracion de clases

6.6.2. Definicio n de un a cl ase .

Constructores y destructores Usal las clases .

665 Especificaci6njimplementaci6n

6. 64

6.63

de clases

666 Compilaci6n separada de c1ases

6.

6. 7

Reutilizaci6n de clases .

6.

6 8

Estilos de declaracion de clases

167

168

169

170

171

172

173

176

177

179

180

181

181

183

184

184

 

Contenido

ix

6.7.

Disefios practices de clases

185

6.71

Clases Reloj y Presentar

188

68

Tecnicasde cr e a c i6 n e in i c i al i z ac i 6 n de o b je t o s .

190

6.8.1. O b j etos d in amic o s n ew y delete .

 

192

69. I n ici aliz acion

y limpi e z a d e objetos .

193

 

69

1

Uso d e una cl a se .

 

201

610

Reglas practicas para construccion de clases

204

6101 Funciones miembro .

 

207

6.102

Una apl i c ac i 6 n s e nci ll a

208

6.10.3. Control de acceso a los miembros de una clase

213

6.10.4. Creaci6n, inicializacion y destrucci6n de objetos

216

6

1]

El puntero

this

221

Resumen

 

222

Ejercicios

223

Capitulo 7. Clases abstractas y herencia

229

71

Abstraccion de la generalizacion y especializacion de clases

230

7.2

Clases abstractas

 

232

73

H eren c i a e n C + + : cl ases d e ri vad a s

233

7.3. L

Sin taxis

de la herencia simple

233

73.2.

Sintaxis de la herencia multiple

237

7.33.

Ambiguedad y resoluci6n de ambito

240

7.4.

Herencia repetida y clases base virtuales

242

7.5

Funciones virtuales puras

243

7.51. Ot r o ej e m p l o d e cl as e a b st r a cta

247

76

Diseno de cl ases abstractas .

247

77

Una aplicacion practica: jerarqufa de figuras

251

7 7. 1. La clase F iqur a

251

Resumen

 

252

Ejercicios

252

Capitulo 8

Polimorfismo

255

81 Ligadura

 

256

 

8.1.1. Ligadura en C++

 

256

82 F uncio n e s

virt ual e s

.

.

257

 

82.1

L i g ad ura dinamica m e di a nt e funcionesv irtua l e s .

258

8.3.

Polimorfismo

260

83 1 EI p o li mo r fi s m o sin ligaduradinamica

261

 

8.3 2 El polirnorfismo con ligadura dinamica

262

84

Uso del polirnorfismo .

263

84.1

U so d el polirnorfiosmoe n C + +

263

8

5

Ligadura dinamica frente a ligadura estatica

264

8.6. Ventajasdel p o l i m or fi smo

265

Resumen

 

265

Ejercicios

266

Capitulo 9 Genericidad: plantillas (templates)

268

9

1

Genericidad :

269

92

Co n c e p t os f u nd a men t a l es de p l a nt i ll as en C+ +

270