Indice - dis.ulpgc.esfcarreras/libros/Lenguajesdeprog.pdf · Constantes con nombre 77 2....

12

Transcript of Indice - dis.ulpgc.esfcarreras/libros/Lenguajesdeprog.pdf · Constantes con nombre 77 2....

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