Está en la página 1de 10

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 17


3.1.1 El objeto 17
3.1.2 La clase 18
3.1.3 La referencia 19
3.2 La encapsulación 20
3.3 La herencia 20
3.4 El polimorfismo 22
3.5 La abstracción 23

4. El desarrollo orientado a objetos 24


4.1 Especificaciones del software 24
4.2 Modelización y representación UML 24
4.2.1 Diagramas de casos de uso 27
4.2.2 Diagramas de clases 28
4.2.3 Enumeraciones 34
4.2.4 Diagramas de secuencias 35
4.3 Redacción del código y pruebas unitarias 37

www.ediciones-eni.com © Ediciones ENI 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 56
2.2 Los tipos Referencia 60
2.3 Boxing - Unboxing 61
2.4 Utilización de los métodos de System.Object 62
2.4.1 Equals 63
2.4.2 GetHashCode 66
2.4.3 ToString 68
2.4.4 Finalize 69
2.4.5 Object.GetType y los operadores typeof e is 70
2.4.6 Object.ReferenceEquals 71
2.4.7 Object.MemberwiseClone 72

www.ediciones-eni.com © Ediciones ENI 2/10


Aprender la programación orientada a objetos con el
lenguaje C#

2.5 El tipo System.String y su alias string 75

3. Ejercicio corregido 79
3.1 Enunciado 79
3.2 Corrección 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 91


3.2 Atributos 92
3.2.1 Atributos constantes 93
3.2.2 Atributos en modo solo lectura 94
3.3 Propiedades 95
3.4 Constructor 103
3.4.1 Etapas en la construcción de un objeto 103
3.4.2 Sobrecarga de constructores 105
3.4.3 Constructores con valores de argumentos por defecto 105
3.4.4 Encadenamiento de constructores 106
3.4.5 Los constructores de tipo static 107
3.4.6 Los constructores de tipo private 108
3.4.7 Los inicializadores de objetos 110
3.5 Destructor 111
3.6 Otro uso de using 113
3.7 La palabra clave this 114
3.8 Métodos 117
3.8.1 Declaración 117
3.8.2 Paso de argumentos por valor y por referencia 121
3.9 Mecanismo de las excepciones 136
3.9.1 Presentación 136

www.ediciones-eni.com © Ediciones ENI 3/10


Aprender la programación orientada a objetos con el
lenguaje C#

3.9.2 Principio de funcionamiento de las excepciones 137


3.9.3 Soporte a varias excepciones 147
3.9.4 try ... catch ... finally y using 148
3.10 Sobrecarga de los métodos 152
3.11 Ejercicio 154
3.11.1 Enunciado 154
3.11.2 Consejos 155
3.11.3 Corrección 155

4. Las interfaces 158

4.1 Introducción 158


4.2 El contrato 159
4.3 Declaración de una interfaz 160
4.4 Implementación 161
4.5 Visual Studio y las interfaces 162
4.6 Representación UML de una interfaz 165
4.7 Interfaces y polimorfismo 166
4.8 Ejercicio 166
4.8.1 Enunciado 166
4.8.2 Consejos 167
4.8.3 Corrección 169
4.9 Las interfaces de .NET 173

5. Asociación, composición y agregación 176

5.1 Las tablas 182


5.2 Las colecciones 189
5.2.1 List<> y LinkedList<> 190
5.2.2 Queue<T> y Stack<T> 193
5.2.3 Dictionary<TKey, TValue> 193
5.2.4 Los enumeradores 194
5.2.5 La magia del yield 195
5.3 Ejercicio 197
5.3.1 Enunciado 197
5.3.2 Corrección 198

www.ediciones-eni.com © 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 203
7.2 Instanciación de una estructura 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 220
2.2 Definir miembros heredables 221
2.3 Codificación de la herencia 221
2.4 Explotación de una clase heredada 222

3. Comunicación entre clase de base y clase heredada 223

3.1 Los constructores 223


3.2 Acceso a los miembros básicos desde la clase heredada 227
3.3 Ocultación o substitución de miembros heredados 229
3.3.1 Codificación de la ocultación 231
3.3.2 Codificación de la sustitución 233

www.ediciones-eni.com © Ediciones ENI 5/10


Aprender la programación orientada a objetos con el
lenguaje C#

4. Ejercicio 234
4.1 Enunciado 234
4.2 Corrección 235

5. Las clases abstractas 237

6. Los métodos de extensión 238

7. El polimorfismo 241

7.1 Entender el polimorfismo 241


7.2 Explotación del polimorfismo 242
7.3 Los operadores is y as 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 253
3.2 Utilización de un evento 256
3.3 Cómo acompañar al evento de datos 260
3.4 Recursos genéricos para simplificar todavía más 261
3.5 Las expresiones lambda 262
3.6 Ejemplo de uso de event 268

4. Llamadas síncronas, llamadas asíncronas 277

4.1 Enfoque 1 280


4.2 Enfoque 2 281
4.3 Enfoque 3 281

www.ediciones-eni.com © Ediciones ENI 6/10


Aprender la programación orientada a objetos con el
lenguaje C#

4.4 Enfoque 3 con una expresión lambda 284

5. Ejercicio 286
5.1 Enunciado 286
5.2 Consejos para la realización 287
5.3 Corrección 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 298


4.1.1 Comunicación del thread principal con el thread secundario 301
4.1.2 Abandono desde el thread principal 302
4.1.3 Comunicación del thread secundario con el thread principal 302
4.1.4 Comunicación al final de la operación del thread secundario 302
4.1.5 Ejemplo de código 303
4.2 Utilización del pool de threads creado por .NET 305
4.3 Gestión «manual» con Thread/ParameterizedThreadStart 308

5. Sincronización entre threads 313

5.1 Necesidad de la sincronización 313


5.2 La simulación de la sincronización 316
5.3 La palabra clave lock 317
5.4 La clase Monitor 319
5.5 La clase Mutex 320
5.6 La clase Semaphore 321

www.ediciones-eni.com © Ediciones ENI 7/10


Aprender la programación orientada a objetos con el
lenguaje C#

6. Comunicación entre threads 322


6.1 Join 322
6.2 Las sincronización de eventos 324
6.3 Comunicación entre threads secundarios e IHM 331
6.4 Ejercicio 335
6.4.1 Enunciado 335
6.4.2 Corrección 335

7. La programación asíncrona 340

7.1 La palabra clave async 340


7.2 Contenido de un método async 340
7.3 Evidencias 341
7.4 Resultados posibles de un método async 342

P-Invoke

1. Introducción 345
1.1 Recordatorio sobre las DLL no gestionadas 346
1.2 P-Invoke y su Marshal 346

2. El caso sencillo 347

2.1 Declaración y llamada 348


2.2 Ajuste de Visual Studio para la puesta a punto 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 354


4.2 Codificación de las cadenas 355
4.3 Transmisión de las cadenas 356

5. Intercambio de tablas 359

www.ediciones-eni.com © Ediciones ENI 8/10


Aprender la programación orientada a objetos con el
lenguaje C#

5.1 De C# a C/C++ 359


5.2 De C# a C/C++ y después vuelta a C# 361

6. Compartición de estructuras 363


6.1 Declaración de las estructuras 363
6.2 Utilización de las estructuras 365

7. Las directivas [In] y [Out] 369

8. Realización de un "wrapper" 373

8.1 Una región "NativeMethods" 374


8.2 Almacenamiento de la información de la DLL nativa 375
8.3 Instanciación de DLL nativa 376
8.4 Métodos de uso de la DLL gestionada desde el wrapper 379
8.5 Uso del wrapper 379

9. Ejercicio 381

9.1 Enunciado 381


9.2 Corrección 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 405


11.2 Corrección 405

índice 407

www.ediciones-eni.com © Ediciones ENI 10/10