Conceptos de lenguajes de programación.

Anuncio
COLECCIÓN: MANUALES DOCENTES
UNIVERSITARIOS
CONCEPTOS DE LENGUAJES DE PROGRAMACIÓN,
N° 13
© de! texto:
Francisco Javier Carreras Riudavets
Antonio Carlos González Cabrera
Zenón Hernández Figueroa
Juan Carlos Rodríguez del Pino
© de la edición:
VICERRECTORADO
UNIVERSIDAD
DE PLANIrICi\CIÓN
y CALIDAD DE
DE LAS PALMAS DE GRAN CANARIA,
1.1\
2006
Maquetación y diseño:
Servicio de Publicaciones de la ULPGC
ISBN: 84-96502-51-1
Depósito Legal: GC 8-2006
Impresión:
Servicio de Reprografía, Encuadernación y Autoedición de la ULPGC
Queda rigurosamente prohibida, sin la autorización escrita de los titulares de! «Copyright»,
bajo las sanciones establecidas por las leyes, la reproducción parcial o total de esta obra por
cualquier medio o procedimiento, comprendidos la reprografía y e! tratamiento informático
/
Indice
PRESENTACIÓN
15
INTRODUCCIÓN
17
CAPÍTULO 1. CONCEPTOS
GENERALES
.21
INTRODUCCIÓN
23
OBJETIVOS
24
1. Definición
24
2. Clasificación según el área de aplicación
.26
3. Clasificación según el modelo computacional
27
4. Características y aspectos de diseño
29
4.1. Características
de los lenguajes de programación
29
4.2.1. Factores que influyen en el diseño de un lenguaje
32
4.2.2. El dominio de la aplicación
32
4.2.3. Arquitectura
33
del hardware
4.2.4. Las metodologías
de programación
5. Alfabeto, léxico y constructores
sintácticos
33
34
5.1. Alfabeto
34
5.2. Léxico
35
5.3. Constructores
sin tácticos
37
5.3.1. Representación
BNF
38
5.3.2. Representación
EBNF
38
5.3.3. Diagramas sintácticos
5.3.4. Árboles sin tácticos
6. Semántica de los lenguajes de programación
CONCEPTOS
DE LENGUAJES
DE PROGRAMACIÓN
39
39
.40
5
F j. Carreras Ivudavets, A. C. González Cabrera, Z. H ernández Figueroay j. C. Rodriguez del Pino
6.1. Semántica operacional
6.2. Semántica axiomática
.41
.41
6.3. Semántica denotacional
.42
6.4. Semántica de especificación
.43
7. Métodos de implementación
.43
7.1. Interpretación
.44
7.2. Compilación
.45
7.2.1. Introducción
al proceso de compilación
.45
8. Breve historia de los lenguajes de programación
.47
8.1. El primer lenguaje de alto nivel: Fortran. (1957)
.49
8.2. Hacia la sofisticación:
50
Algol
8.3. Simplicidad y tiempo compartido:
8.4. La familia Wirth
Basic (1964)
51
52
8.5. Un lenguaje para los negocios: Cobol (1960)
52
8.6. Lenguaje de usos múltiples: PL/I
53
(1965)
8.7. Lenguajes dinámicos primitivos
54
8.8. Un esfuerzo histórico: Ada (1983)
54
8.9. Un lenguaje portable de sistemas: C (1972)
55
8.10. La orientación
55
a objetos enla práctica: C++ (1986)
8.11. Un lenguaje para World Wide Web: Java (1995)
56
8.12. Eiffel (1992)
56
8.13. Un lenguaje funcional: Lisp (1960)
56
8.14. Programación
ACTIVID1\DES
57
58
BIBLIOGRAFÍA
59
CAPÍTULO
2.
basada en lógica: Prolog (1972)
ELEMENTOS
BÁSICOS DE LOS LENGUAJESIMPERATIVOS
1
61
INTRODUCCIÓN
63
OBJETIVOS
64
1. Variables
64
1.1. Ligamiento
(binding)
1.2. Tipos de datos
66
67
6
CONCEPTOS DE LENGUAJES DE PROGRAMACIÓN
Índice
1.2.1. Ligadura estática de tipos
67
1.2.2. Ligadura dinámica de tipos
68
1.2.3. Inferencia de tipos
69
1.2.4. Chequeo de tipos
69
1.3. Ámbito
71
1.4. Tiempo de vida
73
1.4.1. Variables estáticas
74
1.4.2. Variables dinámicas de pila
74
1.4.3. Variables de heap explícitas
75
1.4.4. Variables de heap implícitas
75
1.4.5. Tiempo de vida vs. ámbito
75
1.5. Inicialización
1.6. Constantes
2.
EXPRESIONES
y
de variables
77
con nombre
77
ASIGNACIONES
79
2.1. Clases de expresiones
80
2.1.1. Expresiones
aritméticas
80
2.1.2. Expresiones
relaciones
80
2.1.3. Expresiones
booleanas
80
2.2. Precedencia
yasociatividad
2.3. Orden de evaluación de los operandos
2.3.1. Evaluación uniforme
81
82
83
2.3.2. Efectos colaterales
83
2.3.3. Errores en expresiones
84
2.3.4. Expresiones
84
booleanas en cortocircuito
2.4. Sobrecarga de operadores
85
2.5. Conversión
86
de tipos
2.6. Asignación
86
2.6.1. Asignación
simple
87
2.6.2. Asignación con múltiples destinos
87
2.6.3. Asignación condicional
87
2.6.4. Operadores
de asignación compuestos
87
2.6.5. Operadores
de asignación unarios
88
CONCEPTOS
DE LENGUAJES
DE PROGRAMACIÓN
7
F.].
Carreras fuudavets,
A.
C. González Cabrera, Z. Hernández Figueroa]j.
C. Rodtiguez del Pino
2.6.6. La asignación como una expresión
88
3. Tipos de datos
3.1. Equivalencia
88
de tipos
89
3.1.1. Subtipos y tipos derivados
90
3.1.2. Clasificación de tipos de datos
91
3.2. Tipos primitivos
91
3.2.1. Tipos numéricos
3.2.1.1. Enteros
92
92
3.2.1.2. Coma flotante
93
3.2.1.3. Decimales
93
3.2.1. Tipos lógicos
93
3.2.2. Tipos carácter
94
3.3. Tipos ordinales definidos por el usuario
96
3.4. Tipos estructurados
97
3.4.1. Arrays
98
3.4.1.1. Tipo y rango de los subíndices
99
3.4.1.2. Operaciones
100
3.4.2. Registros
3.4.3. Uniones
100
102
3.4.4. Punteros
104
3.4.4.1. Problemas
con el uso de punteros
105
3.4.4.2. Soluciones a los problemas
de punteros
colgantes
3.4.4.3. Soluciones a los problemas
de los objetos perdidos
ACTIVIDADES
107
.. 108
110
111
BIBLIOGRAFÍA
CAPÍTULO 3. ELEMENTOS
BÁSICOS DE LOS LENGUAJES IMPERATIVOS 11 ..
113
INTRODUCCIÓN
115
OBJETIVOS
116
1. Sentencias de control del flujo de ejecución
116
1.1. Sentencias compuestas
1.2. Sentencias de selección
117
117
8
CONCEPTOS
DE LENGUAJES
DE PROGRAMACIÓN
Índice
1.3. Selección unaria/binaria
'
118
1.3.1. Selección múltiple
119
1.3.2. Sentencias de repetición
122
1.3.3. Bucles controlados
122
por contadores
1.3.4. Bucles con control lógico
124
1.3.5. Bucles con localización de control definida por el usuario
1.4. Sentencias de salto incondicional
125
125
1.4.1. Sentencia GOTO
125
1.4.2. Sentencias de control de bucle
126
1.5. Guardas
127
2. Subpropramas
128
2.1. Conceptos
básicos
129
2.1.1. Parámetros
129
2.1.2. Temas de diseño
130
2.1.3. Métodos de paso de parámetros
131
2.1.4. Paso de parámetros
por valor
132
2.1.5. Paso de parámetros
por resultado
132
2.1.6. Paso de parámetros
por valor-resultado
133
2.1.7. Paso de parámetros
por referencia
133
2.1.8. Paso de parámetros
por nombre
134
2.1.9. Ejemplo de paso de parámetros
135
2.1.10. Métodos de paso de parámetros en los principales lenguajes .. 136
2.1.11. Comprobación
del tipo de los parámetros
137
2.1.12. Paso de matrices como parámetros
137
2.1.13. Nombres
140
de subprogramas
2.1.14. Comprobación
2.1.15. Entorno
como parámetros
de parámetros
referencial
140
.141
2.1.16. Sobrecarga de subprogramas
142
2.1.17. Sobrecarga
.143
de operadores
2.1.18. Subprogramas
2.1.19. Compilación
genéricos
separada vs. independiente
2.1.20. Acceso a entornos
CONCEPTOS
DE LENGUAJES
por el usuario
no locales
DE PROGRAMACIÓN
144
.145
146
9
F]. Carreras Riudavets, A. C. González Cabrera, Z. Hernández Figueroay]. C. Rodriguez del Pino
2.1.21. Corrutinas
.147
3. Manejo de excepciones
147
3.1. Conceptos básicos
3.2. Consideraciones de diseño
148
149
3.3. Manejo de excepciones en Ada
149
3.4. Enlace de la excepción al manejador
3.5. Continuación
150
150
3.6. Excepciones predefinidas enAda
151
3.7. Manejo de excepciones en C++
152
3.8. Manejo de excepciones en Java
ACTIVIDADES
154
156
BIBLIOGRAFÍA
159
CAPÍTULO
4.
TIPOS
ABSTRACTOS
DE DATOS Y PROGRAMACIÓN
161
163
ORIENTADAAOB]ETOS
INTRODUCCIÓN
1. Abstracción
164
164
2. Encapsulación
165
3. Diseño de lenguajes con soporte para tipos abstractos
3.1. Ejemplo de un tipo abstracto de dato: PILA
3.2. Decisiones de diseño
167
169
170
OBJETIVOS
3.3. Ejemplos de lenguajes con soporte de tipos abstractos de datos .. 170
4.
3.4. Tipos abstractos de datos en Ada
171
3.5. Tipos abstractos de datos en C+ +
174
3.6. Tipos abstractos de datos en Java
178
3.7. Tipos abstractos de datos parametrizados .. :
3.8. Tipos abstractos de datos parametrizados en Ada
180
180
3.9. Tipos abstractos de datos parametrizados en C++
181
3.10. Tipos abstractos de datos parametrizados en Java
183
Introducción a la programación orientada a objetos
4.1. Herencia
183
184
10
CONCEPTOS
DE LENGUAJES
DE PROGRAMACIÓN
Índice
4.2. Polimorfismo
y ligadura dinámica
4.3. Diseño de lenguajes orientados
186
a objetos
187
4.4. ¿Todos objetos?
187
4.5. ¿Son las subclases subtipos?
187
4.6. Herencia de interfaz y de implementación
188
4.7. Comprobación
189
de tipos
y
polimorfismo
4.8. Herencia simple o múltiple
189
4.9. Creación y destrucción
190
de objetos
4.10. Enlace estático y dinámico
5. Ejemplos de lenguajes con orientación
190
a objetos
191
5.1. Programación
orientada a objetos en C++
.191
5.2. Características
5.3. Herencia
generales
191
192
5.4. Ligadura dinámica
5.5. Evaluación
195
196
5.6. Programación
197
5.7. Conceptos
5.8. Herencia
orientada a objetos en Java
generales
y ligadura dinámica
5.9. Polimorfismo
5.10. Evaluación
5.11. Programación
5.12. Conceptos
5.13. Herencia
orientada a objetos en Ada 95
generales
.201
201
202
202
203
ACTIVIDADES
203
206
BIBLIOGRAFÍA
208
5.14. Polimorfismo
CAPÍTULO
5.
y ligadura dinámica
197
200
CONCURRENCIA
209
INTRODUCCIÓN
211
OBJETIVOS
212
1. Conceptos
2. Semáforos
fundamentales
212
216
11
CONCEPTOS
DE LENGUAJES DE PROGRAMACiÓN
F j. Carreras Riudavets, A. C. González Cabrera, Z. Hernández Figueroay j. C. Rodríguez del Pino
3. Monitores
219
4. Paso de mensajes
223
4.1. Modelo de paso de mensajes en Ada83
223
4.2. Creación y activación de tareas
4.3. Terminación de tareas
225
226
4.4. Rendezvous
.226
4.5. Sincroruzación
cooperativa
228
4.6. Sincronización competitiva
4.7. Semáforo binario
.228
.230
5. Concurrencia
en Ada95
231
5.1. Objetos protegidos
231
6. Concurrencia
en Java
6.1. Sincronización
6.2. Notifj;
y
233
en Java
236
wait
237
6.3. Ejemplo tareas: productor-consumidor
ACTIVIDADES
238
.241
BIBLIOGRAFÍA
.244
CAPÍTULO
6.
FUNCIONAL
INTRODUCCIÓN
A LOS LENGUAJES DE PROGRAMACIÓN
.245
Y LÓGICA
INTRODUCCIÓN
.247
OBJETIVOS
249
1. Funciones
matemáticas
249
1.1. Funciones
simples
250
1.2. Funciones
de orden superior
.251
2. Fundamentos
de la programación
funcional
251
3. Lisp
252
3.1. Tipos de datos y estructuras
3.2. Primer intérprete
4. Scheme
4.1. Funciones
4.2. Eval
253
de Lisp
254
255
primitivas
256
257
12
CONCEPTOS
DE LENGUAJES
DE PROGRAMACIÓN
Índice
4.3. Quote
258
4.4. Funciones para manipular listas
258
4.5. Expresiones
4.6. Funciones
condicionales:
de comparación
eq?, null? y list?
260
aritméticas
261
4.7. Salida
261
4.8. Funciones
para construir
funciones
262
4.9. Definir funciones
.262
4.10. Control del flujo
264
4.11. Ejemplos
en lenguaje Scheme
265
4.12. Funciones
de orden superior
266
4.13. Función "aplica-a-todo"
.266
4.14. Funciones
267
que crean código
5. Otros lenguajes funcionales
5.1. Common
268
Lisp
268
5.2. ML
268
5.3. Tipos de datos primitivos
269
5.4. Tipos de datos estructurados
270
5.5. Definición
de tipos
.271
5.6. Funciones
primitivas
272
5.7. Val
272
5.8. Funciones
para manipular listas
272
5.9. Funciones
para construir
273
funciones
5.10. Control de flujo
274
5.11. Ejemplos en ML
274
5.12. Haskell
275
5.13. Aplicaciones
6. Introducción
de los lenguajes funcionales
al cálculo de predicados
6.1. Proposiciones
6.2. Proposiciones
compuestas
280
281
de teoremas
8. Prolog
CONCEPTOS
279
279
6.3. Cláusulas
7. Demostración
278
282
284
DE LENGUAJES
DE PROGRAMACIÓN
13
F. J. Carreras Riudavets, A. C. González Cabrera, Z. H ernández fzgueroa y J. C. Rodríguez del Pino
8.1. Elementos básicos de Prolog
8.1.1. Términos
.285
.285
8.1.2. Declaración
de hechos
286
8.1.3. Declaración
8.1.4. Declaración
de reglas
de meta
286
.287
8.1.5. El proceso de inferencia en Prolog
288
8.1.6. Aritmética
290
simple
8.1. 7. Comparación
8.1.8. Depurado
aritmética
291
en Prolog
292
8.1. 9. Tipos de datos estructurados
.292
8.2. Deficiencias de Prolog
8.2.1. Control del orden de resolución
294
294
8.2.2. El operador "cut"
8.2.3. Un mundo cerrado
295
297
8.2.4. El problema de la negación
8.2.5. Limitaciones intrínsecas
297
.298
i\CTIVIDADES
300
BIBLIOGRAFÍA
308
GLOSARIO
309
CONCEPTOS DE LENGUAJES DE PROGRAMACIÓN
Descargar