Post on 19-Sep-2018
COLECCIÓN: MANUALES DOCENTES UNIVERSITARIOS
CONCEPTOS DE LENGUAJES DE PROGRAMACIÓN, N° 13
© de! texto:
Francisco Javier Carreras RiudavetsAntonio Carlos González Cabrera
Zenón Hernández FigueroaJuan Carlos Rodríguez del Pino
© de la edición:VICERRECTORADO DE PLANIrICi\CIÓN y CALIDAD DE 1.1\
UNIVERSIDAD DE LAS PALMAS DE GRAN CANARIA, 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 porcualquier 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 del hardware 33
4.2.4. Las metodologías de programación 33
5. Alfabeto, léxico y constructores sintácticos 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 39
5.3.4. Árboles sin tácticos 39
6. Semántica de los lenguajes de programación .40
CONCEPTOS DE LENGUAJES DE PROGRAMACIÓN5
F j. Carreras Ivudavets, A. C. González Cabrera, Z. H ernández Figueroay j. C. Rodriguez del Pino
6.1. Semántica operacional .41
6.2. Semántica axiomática .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: Algol 50
8.3. Simplicidad y tiempo compartido: Basic (1964) 51
8.4. La familia Wirth 52
8.5. Un lenguaje para los negocios: Cobol (1960) 52
8.6. Lenguaje de usos múltiples: PL/I (1965) 53
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 a objetos enla práctica: C++ (1986) 55
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 basada en lógica: Prolog (1972) 57
ACTIVID1\DES 58
BIBLIOGRAFÍA 59
CAPÍTULO 2. ELEMENTOS BÁSICOS DE LOS LENGUAJESIMPERATIVOS 1 61
INTRODUCCIÓN 63
OBJETIVOS 64
1. Variables 64
1.1. Ligamiento (binding) 66
1.2. Tipos de datos 67
6CONCEPTOS 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 de variables 77
1.6. Constantes con nombre 77
2. EXPRESIONES y 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 81
2.3. Orden de evaluación de los operandos 82
2.3.1. Evaluación uniforme 83
2.3.2. Efectos colaterales 83
2.3.3. Errores en expresiones 84
2.3.4. Expresiones booleanas en cortocircuito 84
2.4. Sobrecarga de operadores 85
2.5. Conversión de tipos 86
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ÓN7
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 88
3.1. Equivalencia 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 92
3.2.1.1. Enteros 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 100
3.4.3. Uniones 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 107
3.4.4.3. Soluciones a los problemas de los objetos perdidos .. 108
ACTIVIDADES 110
BIBLIOGRAFÍA 111
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 117
1.2. Sentencias de selección 117
8CONCEPTOS 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 por contadores 122
1.3.4. Bucles con control lógico 124
1.3.5. Bucles con localización de control definida por el usuario 125
1.4. Sentencias de salto incondicional 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 de subprogramas como parámetros 140
2.1.14. Comprobación de parámetros 140
2.1.15. Entorno referencial .141
2.1.16. Sobrecarga de subprogramas 142
2.1.17. Sobrecarga de operadores por el usuario .143
2.1.18. Subprogramas genéricos 144
2.1.19. Compilación separada vs. independiente .145
2.1.20. Acceso a entornos no locales 146
CONCEPTOS DE LENGUAJES DE PROGRAMACIÓN9
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 1483.2. Consideraciones de diseño 149
3.3. Manejo de excepciones en Ada 149
3.4. Enlace de la excepción al manejador 1503.5. Continuación 150
3.6. Excepciones predefinidas enAda 151
3.7. Manejo de excepciones en C++ 152
3.8. Manejo de excepciones en Java 154ACTIVIDADES 156
BIBLIOGRAFÍA 159
CAPÍTULO 4. TIPOS ABSTRACTOS DE DATOS Y PROGRAMACIÓN
ORIENTADAAOB]ETOS 161
INTRODUCCIÓN 163
OBJETIVOS 164
1. Abstracción 164
2. Encapsulación 165
3. Diseño de lenguajes con soporte para tipos abstractos 167
3.1. Ejemplo de un tipo abstracto de dato: PILA 1693.2. Decisiones de diseño 170
3.3. Ejemplos de lenguajes con soporte de tipos abstractos de datos .. 170
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 .. : 180
3.8. Tipos abstractos de datos parametrizados en Ada 180
3.9. Tipos abstractos de datos parametrizados en C++ 181
3.10. Tipos abstractos de datos parametrizados en Java 183
4. Introducción a la programación orientada a objetos 1834.1. Herencia 184
10CONCEPTOS DE LENGUAJES DE PROGRAMACIÓN
Índice
4.2. Polimorfismo y ligadura dinámica 186
4.3. Diseño de lenguajes orientados 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 de tipos y polimorfismo 189
4.8. Herencia simple o múltiple 189
4.9. Creación y destrucción de objetos 190
4.10. Enlace estático y dinámico 190
5. Ejemplos de lenguajes con orientación a objetos 191
5.1. Programación orientada a objetos en C++ .191
5.2. Características generales 1915.3. Herencia 192
5.4. Ligadura dinámica 1955.5. Evaluación 196
5.6. Programación orientada a objetos en Java 197
5.7. Conceptos generales 197
5.8. Herencia 200
5.9. Polimorfismo y ligadura dinámica .2015.10. Evaluación 201
5.11. Programación orientada a objetos en Ada 95 202
5.12. Conceptos generales 2025.13. Herencia 203
5.14. Polimorfismo y ligadura dinámica 203
ACTIVIDADES 206
BIBLIOGRAFÍA 208
CAPÍTULO 5. CONCURRENCIA 209
INTRODUCCIÓN 211
OBJETIVOS 212
1. Conceptos fundamentales 212
2. Semáforos 216
CONCEPTOS DE LENGUAJES DE PROGRAMACiÓN11
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 225
4.3. Terminación de tareas 226
4.4. Rendezvous .226
4.5. Sincroruzación cooperativa 228
4.6. Sincronización competitiva .228
4.7. Semáforo binario .230
5. Concurrencia en Ada95 231
5.1. Objetos protegidos 231
6. Concurrencia en Java 233
6.1. Sincronización en Java 236
6.2. Notifj; y wait 237
6.3. Ejemplo tareas: productor-consumidor 238
ACTIVIDADES .241
BIBLIOGRAFÍA .244
CAPÍTULO 6. INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN
FUNCIONAL Y LÓGICA .245
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 253
3.2. Primer intérprete de Lisp 254
4. Scheme 255
4.1. Funciones primitivas 256
4.2. Eval 257
12CONCEPTOS DE LENGUAJES DE PROGRAMACIÓN
Índice
4.3. Quote 258
4.4. Funciones para manipular listas 258
4.5. Expresiones condicionales: eq?, null? y list? 260
4.6. Funciones de comparación 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 que crean código 267
5. Otros lenguajes funcionales 268
5.1. Common 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 funciones 273
5.10. Control de flujo 274
5.11. Ejemplos en ML 274
5.12. Haskell 275
5.13. Aplicaciones de los lenguajes funcionales 278
6. Introducción al cálculo de predicados 279
6.1. Proposiciones 279
6.2. Proposiciones compuestas 280
6.3. Cláusulas 281
7. Demostración de teoremas 282
8. Prolog 284
CONCEPTOS DE LENGUAJES DE PROGRAMACIÓN13
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 .285
8.1.1. Términos .285
8.1.2. Declaración de hechos 286
8.1.3. Declaración de reglas 286
8.1.4. Declaración de meta .287
8.1.5. El proceso de inferencia en Prolog 288
8.1.6. Aritmética simple 290
8.1. 7. Comparación aritmética 291
8.1.8. Depurado en Prolog 292
8.1. 9. Tipos de datos estructurados .292
8.2. Deficiencias de Prolog 294
8.2.1. Control del orden de resolución 294
8.2.2. El operador "cut" 295
8.2.3. Un mundo cerrado 297
8.2.4. El problema de la negación 297
8.2.5. Limitaciones intrínsecas .298
i\CTIVIDADES 300
BIBLIOGRAFÍA 308
GLOSARIO 309
CONCEPTOS DE LENGUAJES DE PROGRAMACIÓN