C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio...

30
Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

Transcript of C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio...

Page 1: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

Ediciones ENI

C# 7 y Visual Studio 2017 Los fundamentos del lenguaje

Colección Recursos Informáticos

Contenido

Page 2: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

1Contenido

Prólogo

Capítulo 1

La plataforma .NET

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2. Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3. El Common Language Runtime (CLR) . . . . . . . . . . . . . . . . . . . . . . . . 23

4. La Base Class Library (BCL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5. El Dynamic Language Runtime (DLR) . . . . . . . . . . . . . . . . . . . . . . . . 27

6. Evolución de la plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286.1 .NET Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286.2 .NET Compiler Platform: Roslyn . . . . . . . . . . . . . . . . . . . . . . . . 296.3 .NET en el mundo open source . . . . . . . . . . . . . . . . . . . . . . . . . . 30

7. Una primera aplicación con Visual C# . . . . . . . . . . . . . . . . . . . . . . . . 317.1 Creación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317.2 Compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337.3 Análisis del ensamblado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

7.3.1 Estructura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357.3.2 Exploración con ILDASM . . . . . . . . . . . . . . . . . . . . . . . . . 36

Podrá descargar algunos elementos de este libro en la página web de Ediciones ENI: http://www.ediciones-eni.com.

Escriba la referencia ENI del libro RIT17CSHA en la zona de búsqueda y valide. Haga clic en el título y después en el botón de descarga.

Page 3: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

2Los fundamentos del lenguaje

C# 7 y Visual Studio 2017

Capítulo 2

Visual Studio 2017

1. Instalación y primera ejecución. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.1 Requisitos previos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.2 Ediciones de Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

1.2.1 Visual Studio Community . . . . . . . . . . . . . . . . . . . . . . . . 421.2.2 Ediciones comerciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

1.3 Instalación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441.4 Primera ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

2. Descripción de las herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542.1 Barras de herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592.2 Explorador de soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602.3 Examinador de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612.4 Explorador de servidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622.5 Ventana de propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662.6 Ventana de edición de código . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

2.6.1 Navegación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692.6.2 Seguimiento de las modificaciones. . . . . . . . . . . . . . . . . . 692.6.3 Resaltar referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.6.4 Refactorización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712.6.5 IntelliSense. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732.6.6 Snippets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Capítulo 3

La organización de una aplicación

1. Las soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751.2 Creación de una solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761.3 Organización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771.4 Acciones disponibles para una solución . . . . . . . . . . . . . . . . . . . 78

1.4.1 Agregar y eliminar un proyecto . . . . . . . . . . . . . . . . . . . . 781.4.2 Creación de una carpeta de soluciones. . . . . . . . . . . . . . . 79

Page 4: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

3Contenido

1.4.3 Carga y descarga de un proyecto . . . . . . . . . . . . . . . . . . . 801.4.4 Creación de un archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 801.4.5 Compilar la solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

1.5 Configuración de la solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821.5.1 Establecer proyectos de inicio . . . . . . . . . . . . . . . . . . . . . . 821.5.2 Dependencias del proyecto . . . . . . . . . . . . . . . . . . . . . . . . 841.5.3 Configuración de análisis de código . . . . . . . . . . . . . . . . . 851.5.4 Depurar archivos de código fuente . . . . . . . . . . . . . . . . . . 861.5.5 Configuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

2. Los proyectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882.1 Creación de un proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882.2 Propiedades de un proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

2.2.1 Aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962.2.2 Compilación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992.2.3 Eventos de compilación. . . . . . . . . . . . . . . . . . . . . . . . . . 1022.2.4 Depurar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042.2.5 Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052.2.6 Parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

Capítulo 4

Las bases del lenguaje

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

2. Las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092.1 Nomenclatura de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . 1102.2 Tipo de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

2.2.1 Tipos valor y tipos referencia . . . . . . . . . . . . . . . . . . . . . 1112.2.2 Tipos integrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

2.3 Declaración de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162.4 Ámbito de las variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172.5 Modificadores de acceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182.6 La palabra clave var y la inferencia de tipo . . . . . . . . . . . . . . . . 118

Page 5: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

4Los fundamentos del lenguaje

C# 7 y Visual Studio 2017

3. Las constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

4. Los operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204.1 Los operadores de acceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

4.1.1 Acceso simple: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.1.2 Acceso indexado: [ ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.1.3 Acceso con nulidad condicional: ? . . . . . . . . . . . . . . . . . 121

4.2 Los operadores aritméticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224.3 Los operadores de comparación . . . . . . . . . . . . . . . . . . . . . . . . . 1224.4 Los operadores condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

4.4.1 Operador ternario: ? ... : . . . . . . . . . . . . . . . . . . . . . . . . . 1234.4.2 Operador de fusión de valor nulo: ?? . . . . . . . . . . . . . . . 124

4.5 Los operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.5.1 Negación: ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.5.2 Y lógico: & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254.5.3 O lógico: | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254.5.4 O exclusivo: ^. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254.5.5 Y condicional: &&. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1264.5.6 O condicional: ||. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

4.6 Los operadores binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.6.1 Y binario: & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.6.2 O binario: | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.6.3 O exclusivo: ^. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1284.6.4 Negación: ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1284.6.5 Desplazar a la derecha: >> . . . . . . . . . . . . . . . . . . . . . . 1284.6.6 Desplazar a la izquierda: << . . . . . . . . . . . . . . . . . . . . . 129

5. Las estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1295.1 Las estructuras condicionales. . . . . . . . . . . . . . . . . . . . . . . . . . . 129

5.1.1 if ... else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1295.1.2 switch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315.1.3 El pattern matching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

5.2 Las estructuras de iteración . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1345.2.1 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355.2.2 while. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

Page 6: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

5Contenido

5.2.3 do ... while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365.2.4 foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365.2.5 Controlar la ejecución de un bucle . . . . . . . . . . . . . . . . . 137

5.3 Otras estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385.3.1 using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385.3.2 goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

6. Las funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396.1 Escritura de una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406.2 Parámetros de función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416.3 Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1466.4 Sobrecargas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1476.5 Funciones locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

7. Las tuplas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

8. Los atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

Capítulo 5

Programación orientada a objetos con C#

1. Principios de la programación orientada a objetos . . . . . . . . . . . . . . 155

2. Clases y estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1582.1 Clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

2.1.1 Declaración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592.1.2 Constructor y destructor . . . . . . . . . . . . . . . . . . . . . . . . 1612.1.3 Clases parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

2.2 Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662.3 Creación de un método . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

2.3.1 Creación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1672.3.2 Métodos parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692.3.3 Métodos de extensión . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702.3.4 Métodos operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

Page 7: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

6Los fundamentos del lenguaje

C# 7 y Visual Studio 2017

2.4 Creación de propiedades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1732.4.1 Lectura y escritura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1742.4.2 Solo lectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752.4.3 Solo escritura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752.4.4 Propiedades automáticas. . . . . . . . . . . . . . . . . . . . . . . . . 1762.4.5 Inicialización de propiedades automáticas . . . . . . . . . . 1772.4.6 Propiedades automáticas de solo lectura . . . . . . . . . . . . 1772.4.7 Propiedades indexadas. . . . . . . . . . . . . . . . . . . . . . . . . . . 178

2.5 Miembros estáticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1792.6 Uso de clases y estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

2.6.1 Instanciación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1802.6.2 Inicialización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1812.6.3 Tipos anónimos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

3. Los espacios de nombres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1843.1 Nomenclatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1853.2 using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

4. La herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1874.1 Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1884.2 Las palabras clave this y base. . . . . . . . . . . . . . . . . . . . . . . . . . . 1894.3 Sobrecarga y ocultación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

4.3.1 Sobrecarga de métodos . . . . . . . . . . . . . . . . . . . . . . . . . . 1914.3.2 Ocultación de métodos . . . . . . . . . . . . . . . . . . . . . . . . . . 1924.3.3 Diferencias entre sobrecarga y ocultación . . . . . . . . . . . 192

4.4 Imponer o prohibir la herencia . . . . . . . . . . . . . . . . . . . . . . . . . 1954.5 La conversión de tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

5. Las interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1995.1 Creación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1995.2 Uso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

5.2.1 Implementación implícita. . . . . . . . . . . . . . . . . . . . . . . . 2015.2.2 Implementación explícita . . . . . . . . . . . . . . . . . . . . . . . . 203

6. Las enumeraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

Page 8: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

7Contenido

7. Los delegados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2057.1 Creación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2067.2 Uso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2067.3 Expresiones lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

8. Los eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2088.1 Declaración y producción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2088.2 Gestión de los eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

9. Los genéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2129.1 Clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212

9.1.1 Definición de una clase genérica. . . . . . . . . . . . . . . . . . . 2139.1.2 Uso de una clase genérica . . . . . . . . . . . . . . . . . . . . . . . . 213

9.2 Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2149.2.1 Definición de una interfaz genérica . . . . . . . . . . . . . . . . 2149.2.2 Uso de una interfaz genérica. . . . . . . . . . . . . . . . . . . . . . 215

9.3 Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2169.4 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

9.4.1 Definición de un método genérico . . . . . . . . . . . . . . . . . 2199.4.2 Uso de un método genérico . . . . . . . . . . . . . . . . . . . . . . 221

9.5 Eventos y delegados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

10. Las colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22310.1 Tipos existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

10.1.1 Array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22310.1.2 ArrayList y List<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22410.1.3 Hashtable y Dictionary<TKey, TValue> . . . . . . . . . . . 22810.1.4 Stack y Stack<T>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23010.1.5 Queue y Queue<T>. . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

10.2 Seleccionar un tipo de colección . . . . . . . . . . . . . . . . . . . . . . . . 232

11. Programación dinámica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

12. Programación asíncrona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23512.1 Los objetos Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23512.2 Escribir código asíncrono con async y await . . . . . . . . . . . . . . 238

Page 9: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

8Los fundamentos del lenguaje

C# 7 y Visual Studio 2017

Capítulo 6

Depuración y gestión de errores

1. Los distintos tipos de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2391.1 Errores de compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2391.2 Errores de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

2. Uso de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2422.1 Creación y generación de excepciones . . . . . . . . . . . . . . . . . . . 242

2.1.1 La clase Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2422.1.2 La palabra clave throw . . . . . . . . . . . . . . . . . . . . . . . . . . 2432.1.3 Excepciones especializadas . . . . . . . . . . . . . . . . . . . . . . . 243

2.2 Gestionar las excepciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2442.2.1 La estructura try ... catch . . . . . . . . . . . . . . . . . . . . . . . . 2452.2.2 Los filtros de excepción . . . . . . . . . . . . . . . . . . . . . . . . . . 2472.2.3 El bloque finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

3. Las herramientas proporcionadas por Visual Studio . . . . . . . . . . . . 2503.1 Control de la ejecución. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

3.1.1 Arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2513.1.2 Detención. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2523.1.3 Pausa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2523.1.4 Reanudar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

3.2 Puntos de interrupción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2533.3 Visualizar el contenido de las variables . . . . . . . . . . . . . . . . . . . 260

3.3.1 DataTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2603.3.2 Ventanas de inspección. . . . . . . . . . . . . . . . . . . . . . . . . . 2613.3.3 Ventana de inspección rápida . . . . . . . . . . . . . . . . . . . . . 2623.3.4 Ventana Automático. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2633.3.5 Ventana de variables locales . . . . . . . . . . . . . . . . . . . . . . 263

3.4 Compilación condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

Page 10: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

9Contenido

Capítulo 7

Desarrollo de aplicaciones Windows

1. Presentación de WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2671.1 Estructura de una aplicación WPF. . . . . . . . . . . . . . . . . . . . . . . 2681.2 XAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

1.2.1 Plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2701.2.2 Espacios de nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

1.3 Contexto de datos y binding . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

2. Uso de controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2762.1 Agregar controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2772.2 Posición y dimensionamiento de controles. . . . . . . . . . . . . . . . 2802.3 Agregar un controlador de eventos a un control . . . . . . . . . . . 283

3. Los principales controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2853.1 Controles de ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

3.1.1 Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2863.1.2 NavigationWindow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

3.2 Controles de diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2903.2.1 Grid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2903.2.2 StackPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2943.2.3 DockPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2943.2.4 WrapPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963.2.5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

3.3 Controles de representación de datos . . . . . . . . . . . . . . . . . . . . 2983.3.1 TextBlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2993.3.2 Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3003.3.3 Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3013.3.4 ScrollViewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3023.3.5 ItemsControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3023.3.6 StatusBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3063.3.7 ToolTip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

Page 11: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

10Los fundamentos del lenguaje

C# 7 y Visual Studio 2017

3.4 Controles de edición de texto . . . . . . . . . . . . . . . . . . . . . . . . . . 3073.4.1 TextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3073.4.2 RichTextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3083.4.3 PasswordBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

3.5 Controles de selección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3103.5.1 RadioButton. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3103.5.2 CheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3113.5.3 ComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3113.5.4 ListBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3123.5.5 ListView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3143.5.6 TreeView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3163.5.7 Slider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3213.5.8 Calendar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3213.5.9 DatePicker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

3.6 Controles de acción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3233.6.1 Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3233.6.2 Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3233.6.3 ContextMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3263.6.4 ToolBar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

4. Interacciones de teclado y de ratón . . . . . . . . . . . . . . . . . . . . . . . . . . 3284.1 Eventos de teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3284.2 Eventos de ratón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3314.3 Arrastrar y colocar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

5. Ir más allá con WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3365.1 Introducción al uso de Blend . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

5.1.1 La interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3375.1.2 Agregar y modificar controles visuales. . . . . . . . . . . . . . 347

5.2 Introducción a MVVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3505.2.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3505.2.2 Las interfaces INotifyPropertyChanged

e INotifyCollectionChanged. . . . . . . . . . . . . . . . . . . . . . 3515.2.3 Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3525.2.4 Implementación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

Page 12: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

11Contenido

Capítulo 8

El acceso a datos

1. Principios de una base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3691.1 Terminología. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3691.2 El lenguaje SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

1.2.1 Búsqueda de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . 3711.2.2 Agregar registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3731.2.3 Actualización de información. . . . . . . . . . . . . . . . . . . . . 3731.2.4 Eliminar información . . . . . . . . . . . . . . . . . . . . . . . . . . . 374

2. ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.2 Los proveedores de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

2.2.1 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3762.2.2 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3762.2.3 OLE DB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3772.2.4 ODBC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

3. Utilizar ADO.NET en modo conectado . . . . . . . . . . . . . . . . . . . . . . 3783.1 Conexión a una base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 378

3.1.1 Cadenas de conexión . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3783.1.2 Pool de conexiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3813.1.3 Gestión de la conexión . . . . . . . . . . . . . . . . . . . . . . . . . . 383

3.2 Creación y ejecución de comandos . . . . . . . . . . . . . . . . . . . . . . 3853.2.1 Definición y creación de un comando . . . . . . . . . . . . . . 3853.2.2 Selección de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3863.2.3 Acciones sobre los datos . . . . . . . . . . . . . . . . . . . . . . . . . 3873.2.4 Parametrización de un comando . . . . . . . . . . . . . . . . . . 3883.2.5 Ejecución de procedimientos almacenados . . . . . . . . . . 391

4. Utilizar ADO.NET en modo desconectado . . . . . . . . . . . . . . . . . . . 3934.1 DataSet y DataTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

4.1.1 Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3934.1.2 Llenar un DataSet a partir de una base de datos . . . . . . 3944.1.3 Llenar un DataSet sin base de datos. . . . . . . . . . . . . . . . 397

Page 13: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

12Los fundamentos del lenguaje

C# 7 y Visual Studio 2017

4.2 Manipulación de datos sin conexión. . . . . . . . . . . . . . . . . . . . . 4004.2.1 Lectura de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4014.2.2 Creación de restricciones. . . . . . . . . . . . . . . . . . . . . . . . . 4014.2.3 Relaciones entre DataTables. . . . . . . . . . . . . . . . . . . . . . 4054.2.4 Estado y versiones de un DataRow . . . . . . . . . . . . . . . . 4074.2.5 Modificación de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . 4084.2.6 Eliminación de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4104.2.7 Validar o anular las modificaciones . . . . . . . . . . . . . . . . 4104.2.8 Filtrado y ordenación mediante un DataView . . . . . . . 4114.2.9 Búsqueda de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414

4.3 Validar las modificaciones en la base de datos . . . . . . . . . . . . . 4164.3.1 Generar los comandos de actualización

automáticamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4174.3.2 Comandos de actualización personalizados . . . . . . . . . 4194.3.3 Gestión de los accesos concurrentes. . . . . . . . . . . . . . . . 420

5. Utilizar las transacciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

Capítulo 9

LINQ

1. Presentación de LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

2. Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4262.1 Una primera consulta LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 4292.2 Los operadores de consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431

2.2.1 Proyección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4322.2.2 Filtrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4342.2.3 Ordenación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4352.2.4 Particionado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4372.2.5 Unión y agrupación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4382.2.6 Agregación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440

Page 14: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

13Contenido

3. Entity Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4423.1 El mapeo objeto-relacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443

3.1.1 Database First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4443.1.2 Model First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4443.1.3 Code First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444

3.2 Utilización del diseñador objeto/relacional . . . . . . . . . . . . . . . 4453.3 Uso de LINQ con Entity Framework . . . . . . . . . . . . . . . . . . . . 464

3.3.1 Recuperación de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . 4653.3.2 Actualización de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 4683.3.3 Gestión de conflictos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470

Capítulo 10

XML

1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

2. Estructura de un archivo XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4742.1 Componentes de un documento XML . . . . . . . . . . . . . . . . . . . 4742.2 Documento bien formado y documento válido . . . . . . . . . . . . 478

3. Manipular un documento XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4793.1 Uso de DOM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4803.2 Uso de XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4853.3 Uso de LINQ to XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488

Capítulo 11

Despliegue

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493

2. Windows Installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4942.1 Creación de un proyecto de instalación . . . . . . . . . . . . . . . . . . 495

2.1.1 Operaciones sobre el sistema de archivos . . . . . . . . . . . 4972.1.2 Operaciones en el registro de la máquina

donde se hace la instalación . . . . . . . . . . . . . . . . . . . . . . 5012.1.3 Configuración de la instalación para el usuario. . . . . . . 502

Page 15: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

14Los fundamentos del lenguaje

C# 7 y Visual Studio 2017

2.1.4 Ejecución de acciones personalizadas. . . . . . . . . . . . . . . 5042.1.5 Condiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505

3. ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5073.1 La tecnología ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507

3.1.1 Principios de funcionamiento . . . . . . . . . . . . . . . . . . . . . 5083.1.2 Métodos de despliegue disponibles. . . . . . . . . . . . . . . . . 5093.1.3 Actualización de aplicaciones con ClickOnce . . . . . . . . 510

3.2 La publicación ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512

Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521

Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541

Page 16: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

Ediciones ENI

Inteligencia Artificial para desarrolladores

Conceptos e implementación en C# (2ª edición)

Colección Expert IT

Contenido

Page 17: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

1Contenido

Prólogo

1. Objetivos de este libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2. Público objetivo y requisitos previos . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3. Estructura del libro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4. Código para descargar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Introducción

1. Presentación del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2. Definir la inteligencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3. La inteligencia de los seres vivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4. La inteligencia artificial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5. Dominios de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

6. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Capítulo 1

Sistemas expertos

1. Presentación del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2. Ejemplo: un sistema experto en polígonos . . . . . . . . . . . . . . . . . . . . . 302.1 Triángulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.2 Cuadriláteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322.3 Otros polígonos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Podrá descargar algunos elementos de este libro en la página web de Ediciones ENI: http://www.ediciones-eni.com.

Escriba la referencia ENI del libro DPT2INT en la zona de búsqueda y valide. Haga clic en el título y después en el botón de descarga.

Page 18: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

2para desarrolladores - Conceptos e implementación en C#

Inteligencia Artificial

3. Contenido de un sistema experto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.1 Base de reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2 Base de hechos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.3 Motor de inferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.4 Interfaz de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4. Tipos de inferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.1 Razonamiento deductivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4.1.1 Principio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.1.2 Aplicación a un ejemplo. . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.2 Razonamiento inductivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.2.1 Principio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.2.2 Aplicación a un ejemplo. . . . . . . . . . . . . . . . . . . . . . . . . . . 43

4.3 Razonamiento mixto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

5. Etapas de construcción de un sistema. . . . . . . . . . . . . . . . . . . . . . . . . 455.1 Extracción del conocimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465.2 Creación del motor de inferencia . . . . . . . . . . . . . . . . . . . . . . . . 465.3 Escritura de las reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.4 Creación de la interfaz de usuario . . . . . . . . . . . . . . . . . . . . . . . . 47

6. Rendimiento y mejoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486.1 Criterios de rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486.2 Mejorar el rendimiento mediante la escritura de reglas . . . . . . . 496.3 Importancia de la representación del problema . . . . . . . . . . . . . 50

7. Agregar incertidumbre y probabilidades . . . . . . . . . . . . . . . . . . . . . . . 527.1 Agregar incertidumbre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527.2 Hechos inciertos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537.3 Reglas inciertas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

8. Campos de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558.1 Ayuda al diagnóstico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558.2 Evaluación de riesgos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568.3 Planificación y logística . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568.4 Transferencia de competencias y conocimiento. . . . . . . . . . . . . 578.5 Otras aplicaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Page 19: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

3Contenido

9. Creación de un sistema experto en C#. . . . . . . . . . . . . . . . . . . . . . . . 589.1 Definición de requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599.2 Implementación de los hechos. . . . . . . . . . . . . . . . . . . . . . . . . . . 609.3 Base de hechos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649.4 Reglas y base de reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659.5 Interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679.6 Motor de inferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699.7 Escritura de reglas y uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

10. Uso de Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7910.1 Presentación del lenguaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7910.2 Sintaxis del lenguaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

10.2.1Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8010.2.2Predicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8010.2.3Plantear preguntas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8110.2.4Escritura de las reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8210.2.5Otros predicados útiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

10.3 Codificación del problema de las formas geométricas . . . . . . . . 8410.4 Codificación del problema de las ocho reinas . . . . . . . . . . . . . . 88

10.4.1Interés del razonamiento inductivo . . . . . . . . . . . . . . . . . 8810.4.2Estudio del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8810.4.3Reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8910.4.4Reglas de conflicto entre reinas . . . . . . . . . . . . . . . . . . . . . 9010.4.5Objetivo del programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9210.4.6Ejemplos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

11. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Page 20: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

4para desarrolladores - Conceptos e implementación en C#

Inteligencia Artificial

Capítulo 2

Lógica difusa

1. Presentación del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

2. Incertidumbre e imprecisión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962.1 Incertidumbre y probabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . 962.2 Imprecisión y subjetividad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962.3 Necesidad de tratar la imprecisión . . . . . . . . . . . . . . . . . . . . . . . 97

3. Conjuntos difusos y grados de pertenencia . . . . . . . . . . . . . . . . . . . . 983.1 Lógica booleana y lógica difusa . . . . . . . . . . . . . . . . . . . . . . . . . . 983.2 Funciones de pertenencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993.3 Características de una función de pertenencia . . . . . . . . . . . . . 1023.4 Valores y variables lingüísticas . . . . . . . . . . . . . . . . . . . . . . . . . 103

4. Operadores sobre los conjuntos difusos . . . . . . . . . . . . . . . . . . . . . . 1044.1 Operadores booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044.2 Operadores difusos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

4.2.1 Negación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064.2.2 Unión e intersección . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

5. Creación de reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105.1 Reglas en lógica booleana. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105.2 Reglas difusas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

6. Fuzzificación y defuzzificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136.1 Valor de verdad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136.2 Fuzzificación y aplicación de las reglas . . . . . . . . . . . . . . . . . . . 1156.3 Defuzzificación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

7. Dominios de aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217.1 Primer uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217.2 En los productos electrónicos . . . . . . . . . . . . . . . . . . . . . . . . . . 1227.3 En el mundo del automóvil . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227.4 Otros dominios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Page 21: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

5Contenido

8. Implementación de un motor de lógica difusa . . . . . . . . . . . . . . . . 1248.1 El núcleo del código: los conjuntos difusos. . . . . . . . . . . . . . . . 124

8.1.1 Point2D: un punto de una función de pertenencia . . . . 1248.1.2 FuzzySet: un conjunto difuso . . . . . . . . . . . . . . . . . . . . . 1258.1.3 Operadores de comparación y de multiplicación . . . . . . 1278.1.4 Operadores sobre conjuntos . . . . . . . . . . . . . . . . . . . . . . 1278.1.5 Cálculo del baricentro . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

8.2 Conjuntos difusos particulares . . . . . . . . . . . . . . . . . . . . . . . . . 1418.3 Variables y valores lingüísticos . . . . . . . . . . . . . . . . . . . . . . . . . 143

8.3.1 LinguisticValue: valor lingüístico . . . . . . . . . . . . . . . . . . 1438.3.2 LinguisticVariable: variable lingüística . . . . . . . . . . . . . . 144

8.4 Reglas difusas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1468.4.1 FuzzyExpression: expresión difusa . . . . . . . . . . . . . . . . . 1468.4.2 FuzzyValue: valor difuso . . . . . . . . . . . . . . . . . . . . . . . . . 1468.4.3 FuzzyRule: regla difusa . . . . . . . . . . . . . . . . . . . . . . . . . . 147

8.5 Sistema de control difuso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1508.6 Resumen del código creado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

9. Implementación de un caso práctico. . . . . . . . . . . . . . . . . . . . . . . . . 154

10. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

Capítulo 3

Búsqueda de rutas

1. Presentación del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

2. Rutas y grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1622.1 Definición y conceptos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1622.2 Representaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

2.2.1 Representación gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . 1632.2.2 Matriz de adyacencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

2.3 Coste de una ruta y matriz de distancias . . . . . . . . . . . . . . . . . 167

3. Ejemplo en cartografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

Page 22: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

6para desarrolladores - Conceptos e implementación en C#

Inteligencia Artificial

4. Algoritmos exhaustivos de búsqueda de rutas . . . . . . . . . . . . . . . . . 1704.1 Búsqueda en profundidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170

4.1.1 Principio y pseudo-código . . . . . . . . . . . . . . . . . . . . . . . . 1704.1.2 Aplicación al mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

4.2 Búsqueda en anchura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754.2.1 Principio y pseudo-código . . . . . . . . . . . . . . . . . . . . . . . . 1754.2.2 Aplicación al mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

5. Algoritmos "inteligentes" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1805.1 Algoritmo de Bellman-Ford . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

5.1.1 Principio y pseudo-código . . . . . . . . . . . . . . . . . . . . . . . . 1815.1.2 Aplicación al mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

5.2 Algoritmo de Dijkstra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1875.2.1 Principio y pseudo-código . . . . . . . . . . . . . . . . . . . . . . . . 1875.2.2 Aplicación al mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

5.3 Algoritmo A* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1915.3.1 Principio y pseudo-código . . . . . . . . . . . . . . . . . . . . . . . . 1915.3.2 Aplicación al mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

6. Dominios de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

7. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2027.1 Nodos, arcos y grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

7.1.1 Implementación de los nodos . . . . . . . . . . . . . . . . . . . . . 2037.1.2 Clase que representa los arcos . . . . . . . . . . . . . . . . . . . . . 2047.1.3 Interfaz de los grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

7.2 Fin del programa genérico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2067.2.1 IHM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2067.2.2 Algoritmo genérico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

7.3 Codificación de los diferentes algoritmos . . . . . . . . . . . . . . . . . 2077.3.1 Búsqueda en profundidad . . . . . . . . . . . . . . . . . . . . . . . . 2077.3.2 Búsqueda en anchura . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2097.3.3 Algoritmo de Bellman-Ford . . . . . . . . . . . . . . . . . . . . . . . 2117.3.4 Algoritmo de Dijkstra. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2127.3.5 Algoritmo A* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

Page 23: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

7Contenido

7.4 Aplicación al mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2167.4.1 Tile y Tiletype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2167.4.2 Implementación del mapa . . . . . . . . . . . . . . . . . . . . . . . . 2197.4.3 Programa principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

7.5 Comparación del rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . 229

8. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

Capítulo 4

Algoritmos genéticos

1. Presentación del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

2. Evolución biológica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2342.1 El concepto de evolución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2342.2 Las causas de las mutaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 2352.3 El soporte de esta información: los factores . . . . . . . . . . . . . . . 2362.4 De los factores al código genético . . . . . . . . . . . . . . . . . . . . . . . 2392.5 El "ciclo de la vida" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

3. Evolución artificial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2423.1 Los principios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2423.2 Convergencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2433.3 Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

3.3.1 Juego del Mastermind . . . . . . . . . . . . . . . . . . . . . . . . . . . 2433.3.2 Creación de la población inicial . . . . . . . . . . . . . . . . . . . . 2453.3.3 Función de evaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . 2453.3.4 Fase de reproducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2463.3.5 Supervivencia y encadenamiento de generaciones . . . . . 2483.3.6 Terminación del algoritmo . . . . . . . . . . . . . . . . . . . . . . . 249

4. Primeras fases del algoritmo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2494.1 Elección de la representación . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

4.1.1 Población e individuos . . . . . . . . . . . . . . . . . . . . . . . . . . . 2494.1.2 Genes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2504.1.3 Casos complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

Page 24: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

8para desarrolladores - Conceptos e implementación en C#

Inteligencia Artificial

4.2 Inicialización de la población inicial . . . . . . . . . . . . . . . . . . . . . 2534.3 Evaluación de individuos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

5. Creación de las siguientes generaciones . . . . . . . . . . . . . . . . . . . . . . 2545.1 Selección de los padres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2555.2 Reproducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

5.2.1 Crossover. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2565.2.2 Mutación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

5.3 Supervivencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2605.4 Parada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

6. Coevolución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

7. Dominios de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

8. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2648.1 Implementación genérica de un algoritmo . . . . . . . . . . . . . . . . 265

8.1.1 Especificaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2658.1.2 Parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2668.1.3 Individuos y genes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2678.1.4 IHM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2708.1.5 Proceso evolutivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

8.2 Uso para el hombre de negocios . . . . . . . . . . . . . . . . . . . . . . . . 2758.2.1 Presentación del problema . . . . . . . . . . . . . . . . . . . . . . . 2758.2.2 Entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2768.2.3 Genes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2798.2.4 Individuos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2808.2.5 Programa principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2848.2.6 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

8.3 Uso para la resolución de un laberinto . . . . . . . . . . . . . . . . . . . 2868.3.1 Presentación del problema . . . . . . . . . . . . . . . . . . . . . . . . 2868.3.2 Entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2888.3.3 Genes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2948.3.4 Individuos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2968.3.5 Programa principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3008.3.6 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

Page 25: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

9Contenido

9. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

Capítulo 5

Metaheurísticos de optimización

1. Presentación del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

2. Optimización y mínimos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3062.1 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3062.2 El problema de la mochila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3062.3 Formulación de los problemas . . . . . . . . . . . . . . . . . . . . . . . . . 3082.4 Resolución matemática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3092.5 Búsqueda exhaustiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3102.6 Metaheurísticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

3. Algoritmos voraces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

4. Descenso por gradiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

5. Búsqueda tabú. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

6. Recocido simulado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

7. Optimización por enjambre de partículas. . . . . . . . . . . . . . . . . . . . . 320

8. Meta-optimización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

9. Dominios de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

10. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32410.1 Clases genéricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32410.2 Implementación de los distintos algoritmos. . . . . . . . . . . . . . . 326

10.2.1Algoritmo voraz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32610.2.2Descenso por gradiente . . . . . . . . . . . . . . . . . . . . . . . . . . 32710.2.3Búsqueda tabú . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32810.2.4Recocido simulado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32910.2.5Optimización por enjambre de partículas . . . . . . . . . . . 331

10.3 Resolución del problema de la mochila . . . . . . . . . . . . . . . . . . . 33210.3.1Implementación del problema . . . . . . . . . . . . . . . . . . . . . 33210.3.2Algoritmo voraz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

Page 26: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

10para desarrolladores - Conceptos e implementación en C#

Inteligencia Artificial

10.3.3Descenso por gradiente . . . . . . . . . . . . . . . . . . . . . . . . . . 34110.3.4Búsqueda tabú . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34210.3.5Recocido simulado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34510.3.6Optimización por enjambre de partículas . . . . . . . . . . . 34710.3.7Programa principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

10.4 Resultados obtenidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

11. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

Capítulo 6

Sistemas multi-agentes

1. Presentación del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

2. Origen biológico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3602.1 Las abejas y la danza. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3602.2 Las termitas y la ingeniería civil . . . . . . . . . . . . . . . . . . . . . . . . 3622.3 Las hormigas y la optimización de caminos . . . . . . . . . . . . . . 3632.4 Inteligencia social . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

3. Sistemas multi-agentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3643.1 El entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3643.2 Los objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3653.3 Los agentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

4. Clasificación de los agentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3664.1 Percepción del mundo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3664.2 Toma de decisiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3664.3 Cooperación y comunicación. . . . . . . . . . . . . . . . . . . . . . . . . . . 3674.4 Capacidad del agente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

5. Principales algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3695.1 Algoritmos de manadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3695.2 Optimización por colonia de hormigas . . . . . . . . . . . . . . . . . . 3705.3 Sistemas inmunitarios artificiales . . . . . . . . . . . . . . . . . . . . . . 3725.4 Autómatas celulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

Page 27: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

11Contenido

6. Dominios de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3756.1 Simulación de multitudes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3756.2 Planificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3766.3 Fenómenos complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3766.4 Otros dominios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

7. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3777.1 Banco de peces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378

7.1.1 Los objetos del mundo y las zonas a evitar . . . . . . . . . . . 3787.1.2 Los agentes-peces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3807.1.3 El océano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3897.1.4 La aplicación gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3927.1.5 Resultados obtenidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396

7.2 Recogida selectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3987.2.1 Los residuos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3987.2.2 Los agentes limpiadores . . . . . . . . . . . . . . . . . . . . . . . . . . 4017.2.3 El entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4067.2.4 La aplicación gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4097.2.5 Resultados obtenidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

7.3 El juego de la vida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4157.3.1 La malla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4157.3.2 La aplicación gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4187.3.3 Resultados obtenidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

8. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

Capítulo 7

Redes neuronales

1. Presentación del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

2. Origen biológico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

3. Machine Learning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4283.1 Formas de aprendizaje y ejemplos . . . . . . . . . . . . . . . . . . . . . . . 428

3.1.1 Aprendizaje no supervisado . . . . . . . . . . . . . . . . . . . . . . . 4283.1.2 Aprendizaje supervisado . . . . . . . . . . . . . . . . . . . . . . . . . 430

Page 28: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

13Contenido

8. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4638.1 Puntos y conjuntos de puntos . . . . . . . . . . . . . . . . . . . . . . . . . . 4638.2 Neurona. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4678.3 Red neuronal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4708.4 Interfaz Hombre-Máquina. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4748.5 Sistema completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4758.6 Programa principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4798.7 Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480

8.7.1 Aplicación al XOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4808.7.2 Aplicación a Abalone . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4828.7.3 Posibles mejoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484

9. Resumen del capítulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

Webgrafía

1. ¿Por qué una webgrafía? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

2. Sistemas expertos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

3. Lógica difusa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

4. Búsqueda de rutas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492

5. Algoritmos genéticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494

6. Metaheurísticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496

7. Sistemas multi-agentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497

8. Redes neuronales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

Page 29: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

12para desarrolladores - Conceptos e implementación en C#

Inteligencia Artificial

3.1.3 Aprendizaje por refuerzo . . . . . . . . . . . . . . . . . . . . . . . . . 4323.2 Regresión y algoritmo de regresión lineal . . . . . . . . . . . . . . . . . 4323.3 Clasificación y algoritmo de regresión logística . . . . . . . . . . . . 436

4. Neurona formal y perceptrón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4374.1 Principio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4374.2 Red de tipo "perceptrón" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4384.3 Funciones de agregación y de activación. . . . . . . . . . . . . . . . . . 440

4.3.1 Función de agregación . . . . . . . . . . . . . . . . . . . . . . . . . . . 4404.3.2 Función de activación. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4414.3.3 Función gausiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443

4.4 Ejemplo de red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4454.5 Aprendizaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

5. Redes feed-forward. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4485.1 Redes con capa oculta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4495.2 Aprendizaje por retropropagación del gradiente . . . . . . . . . . . 4505.3 Sobreaprendizaje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4535.4 Mejoras del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

5.4.1 Batch, mini-batch y gradiente estocástico . . . . . . . . . . . 4555.4.2 Regularización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4565.4.3 Dropout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4565.4.4 Variación del algoritmo de descenso por gradiente . . . . 4575.4.5 Creación de nuevos datos. . . . . . . . . . . . . . . . . . . . . . . . . 457

6. Otras arquitecturas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4586.1 Redes neuronales de convolución . . . . . . . . . . . . . . . . . . . . . . . 4586.2 Mapas de Kohonen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4596.3 Redes neuronales recurrentes . . . . . . . . . . . . . . . . . . . . . . . . . . 4596.4 Redes de Hopfield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

7. Dominios de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4607.1 Reconocimiento de patrones . . . . . . . . . . . . . . . . . . . . . . . . . . . 4617.2 Estimación de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4617.3 Creación de componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4617.4 Aplicaciones actuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462

Page 30: C# 7 y Visual Studio 2017 - Ediciones ENI es editor de ... · Ediciones ENI C# 7 y Visual Studio 2017 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

14para desarrolladores - Conceptos e implementación en C#

Inteligencia Artificial

Anexo

1. Instalación de SWI-Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503

2. Uso de SWI-Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504

Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507