Aprender la programación orientada a objetos con el lenguaje C# Introducción a la POO 1. Historia de la POO 11 2. Historia de C# 13 El diseño orientado a objetos 1. Enfoque procedural y descomposición funcional 15 2. La transición hacia el enfoque orientado a objetos 16 3. Las características de la POO 17 3.1 El objeto, la clase y la referencia 3.1.1 El objeto 3.1.2 La clase 3.1.3 La referencia 3.2 La encapsulación 3.3 La herencia 3.4 El polimorfismo 3.5 La abstracción 17 17 18 19 20 20 22 23 4. El desarrollo orientado a objetos 24 4.1 Especificaciones del software 4.2 Modelización y representación UML 4.2.1 Diagramas de casos de uso 4.2.2 Diagramas de clases 4.2.3 Enumeraciones 4.2.4 Diagramas de secuencias 4.3 Redacción del código y pruebas unitarias www.ediciones-eni.com © Ediciones ENI 24 24 27 28 34 35 37 1/10 Aprender la programación orientada a objetos con el lenguaje C# Introducción al framework .NET y a VS 1. Introducción 39 2. Entorno de ejecución 39 3. La elección de los lenguajes 40 4. Utilizar varios lenguajes 40 5. Una librería muy completa 41 6. Instalaciones simplificadas 42 7. Una herramienta de desarrollo completa 44 Los tipos de C# 1. "En C#, todo está tipado" 51 2. "Todo el mundo hereda de System.Object" 56 2.1 Los tipos Valores 2.2 Los tipos Referencia 2.3 Boxing - Unboxing 2.4 Utilización de los métodos de System.Object 2.4.1 Equals 2.4.2 GetHashCode 2.4.3 ToString 2.4.4 Finalize 2.4.5 Object.GetType y los operadores typeof e is 2.4.6 Object.ReferenceEquals 2.4.7 Object.MemberwiseClone www.ediciones-eni.com © Ediciones ENI 56 60 61 62 63 66 68 69 70 71 72 2/10 Aprender la programación orientada a objetos con el lenguaje C# 2.5 El tipo System.String y su alias string 3. Ejercicio corregido 75 79 3.1 Enunciado 3.2 Corrección 79 79 Creación de clases 1. Introducción 83 2. Los espacios de nombres 83 3. Declaración de una clase 90 3.1 Accesibilidad de los miembros 3.2 Atributos 3.2.1 Atributos constantes 3.2.2 Atributos en modo solo lectura 3.3 Propiedades 3.4 Constructor 3.4.1 Etapas en la construcción de un objeto 3.4.2 Sobrecarga de constructores 3.4.3 Constructores con valores de argumentos por defecto 3.4.4 Encadenamiento de constructores 3.4.5 Los constructores de tipo static 3.4.6 Los constructores de tipo private 3.4.7 Los inicializadores de objetos 3.5 Destructor 3.6 Otro uso de using 3.7 La palabra clave this 3.8 Métodos 3.8.1 Declaración 3.8.2 Paso de argumentos por valor y por referencia 3.9 Mecanismo de las excepciones 3.9.1 Presentación www.ediciones-eni.com © Ediciones ENI 91 92 93 94 95 103 103 105 105 106 107 108 110 111 113 114 117 117 121 136 136 3/10 Aprender la programación orientada a objetos con el lenguaje C# 3.9.2 Principio de funcionamiento de las excepciones 3.9.3 Soporte a varias excepciones 3.9.4 try ... catch ... finally y using 3.10 Sobrecarga de los métodos 3.11 Ejercicio 3.11.1 Enunciado 3.11.2 Consejos 3.11.3 Corrección 4. Las interfaces 158 4.1 Introducción 4.2 El contrato 4.3 Declaración de una interfaz 4.4 Implementación 4.5 Visual Studio y las interfaces 4.6 Representación UML de una interfaz 4.7 Interfaces y polimorfismo 4.8 Ejercicio 4.8.1 Enunciado 4.8.2 Consejos 4.8.3 Corrección 4.9 Las interfaces de .NET 5. Asociación, composición y agregación 5.1 Las tablas 5.2 Las colecciones 5.2.1 List<> y LinkedList<> 5.2.2 Queue<T> y Stack<T> 5.2.3 Dictionary<TKey, TValue> 5.2.4 Los enumeradores 5.2.5 La magia del yield 5.3 Ejercicio 5.3.1 Enunciado 5.3.2 Corrección www.ediciones-eni.com 137 147 148 152 154 154 155 155 158 159 160 161 162 165 166 166 166 167 169 173 176 182 189 190 193 193 194 195 197 197 198 © Ediciones ENI 4/10 Aprender la programación orientada a objetos con el lenguaje C# 6. Las clases anidadas 200 7. Las estructuras 203 7.1 Declaración de una estructura 7.2 Instanciación de una estructura 203 205 8. Las clases parciales 208 9. Los métodos parciales 209 10. Los indexadores 210 11. Sobrecarga de operadores 214 Herencia y polimorfismo 1. Entender la herencia 219 2. Codificación de la clase de base y su heredada 220 2.1 Prohibir la herencia 2.2 Definir miembros heredables 2.3 Codificación de la herencia 2.4 Explotación de una clase heredada 220 221 221 222 3. Comunicación entre clase de base y clase heredada 3.1 Los constructores 3.2 Acceso a los miembros básicos desde la clase heredada 3.3 Ocultación o substitución de miembros heredados 3.3.1 Codificación de la ocultación 3.3.2 Codificación de la sustitución www.ediciones-eni.com © Ediciones ENI 223 223 227 229 231 233 5/10 Aprender la programación orientada a objetos con el lenguaje C# 4. Ejercicio 234 4.1 Enunciado 4.2 Corrección 234 235 5. Las clases abstractas 237 6. Los métodos de extensión 238 7. El polimorfismo 241 7.1 Entender el polimorfismo 7.2 Explotación del polimorfismo 7.3 Los operadores is y as 241 242 243 Comunicación entre objetos 1. El evento: estar a la escucha 245 2. El pattern Observador 246 3. La solución C#: delegate y event 250 3.1 Utilización del delegate en el design pattern Observador 3.2 Utilización de un evento 3.3 Cómo acompañar al evento de datos 3.4 Recursos genéricos para simplificar todavía más 3.5 Las expresiones lambda 3.6 Ejemplo de uso de event 4. Llamadas síncronas, llamadas asíncronas 4.1 Enfoque 1 4.2 Enfoque 2 4.3 Enfoque 3 www.ediciones-eni.com 253 256 260 261 262 268 277 280 281 281 © Ediciones ENI 6/10 Aprender la programación orientada a objetos con el lenguaje C# 4.4 Enfoque 3 con una expresión lambda 5. Ejercicio 284 286 5.1 Enunciado 5.2 Consejos para la realización 5.3 Corrección 286 287 287 El multithreading 1. Introducción 293 2. Entender el multithreading 293 3. Multithreading y .NET 297 4. Implementación en C# 298 4.1 Uso de un BackgroundWorker 4.1.1 Comunicación del thread principal con el thread secundario 4.1.2 Abandono desde el thread principal 4.1.3 Comunicación del thread secundario con el thread principal 4.1.4 Comunicación al final de la operación del thread secundario 4.1.5 Ejemplo de código 4.2 Utilización del pool de threads creado por .NET 4.3 Gestión «manual» con Thread/ParameterizedThreadStart 5. Sincronización entre threads 313 5.1 Necesidad de la sincronización 5.2 La simulación de la sincronización 5.3 La palabra clave lock 5.4 La clase Monitor 5.5 La clase Mutex 5.6 La clase Semaphore www.ediciones-eni.com 298 301 302 302 302 303 305 308 © Ediciones ENI 313 316 317 319 320 321 7/10 Aprender la programación orientada a objetos con el lenguaje C# 6. Comunicación entre threads 322 6.1 Join 6.2 Las sincronización de eventos 6.3 Comunicación entre threads secundarios e IHM 6.4 Ejercicio 6.4.1 Enunciado 6.4.2 Corrección 7. La programación asíncrona 322 324 331 335 335 335 340 7.1 La palabra clave async 7.2 Contenido de un método async 7.3 Evidencias 7.4 Resultados posibles de un método async 340 340 341 342 P-Invoke 1. Introducción 345 1.1 Recordatorio sobre las DLL no gestionadas 1.2 P-Invoke y su Marshal 2. El caso sencillo 346 346 347 2.1 Declaración y llamada 2.2 Ajuste de Visual Studio para la puesta a punto 348 351 3. Llamada con argumentos y retorno de función 352 4. Tratamiento con las cadenas de caracteres 354 4.1 Codificación de los caracteres 4.2 Codificación de las cadenas 4.3 Transmisión de las cadenas 354 355 356 5. Intercambio de tablas www.ediciones-eni.com 359 © Ediciones ENI 8/10 Aprender la programación orientada a objetos con el lenguaje C# 5.1 De C# a C/C++ 5.2 De C# a C/C++ y después vuelta a C# 6. Compartición de estructuras 359 361 363 6.1 Declaración de las estructuras 6.2 Utilización de las estructuras 363 365 7. Las directivas [In] y [Out] 369 8. Realización de un "wrapper" 373 8.1 Una región "NativeMethods" 8.2 Almacenamiento de la información de la DLL nativa 8.3 Instanciación de DLL nativa 8.4 Métodos de uso de la DLL gestionada desde el wrapper 8.5 Uso del wrapper 9. Ejercicio 374 375 376 379 379 381 9.1 Enunciado 9.2 Corrección 381 382 Las pruebas 1. Introducción 385 2. Entorno de ejecución de las pruebas unitarias 387 3. El proyecto de pruebas unitarias 389 4. La clase de pruebas 390 5. Contenido de un método de prueba 391 www.ediciones-eni.com © Ediciones ENI 9/10 Aprender la programación orientada a objetos con el lenguaje C# 6. Tratamientos de preparación y limpieza 394 7. TestContext y fuente de datos 397 8. Automatización de las pruebas en la compilación 401 9. Automatización de las pruebas fuera de Visual Studio 402 10. CodedUI 404 11. Ejercicio 405 11.1 Enunciado 11.2 Corrección 405 405 índice www.ediciones-eni.com 407 © Ediciones ENI 10/10