Técnicas Avanzadas de Programación - Clase 1

Técnicas Avanzadas de Programación

Clase 1 - Introducción

  • ​Gabriel Rode
  • Licenciado en Sistemas de Información (CAECE)
  • Desarrollador Web (+8 años)

Normas de convivencia

Metodología de la cursada

Ahora sí... arrancamos

C#

  • ​Lenguaje de programación de propósito general
  • Tiene seguridad de tipos (type-safe)
  • Es mayormente orientado a objetos
  • No está atado a ninguna plataforma particular

Orientación a Objetos

Encapsulación, Herencia, Polimorfismo

1. Sistema de tipos unificado (gobernado por tipos)
  - Un tipo base para todos los tipos

2. Clases e interfaces como tipos principales (first-citizen)

3. No posee enfoque puro
  - Los miembros de una clase pueden ser métodos, propiedades o eventos

No orientación a objetos

  • "Delegates" (Funciones como valores)
  • Expresiones lambda
  • Expresiones de consulta,
  • Campos de solo lectura (inmutabilidad) 

Seguridad de Tipos

  • ​No puedo "mezclar" tipos libremente ("a"+3)
  • Tipeo estático (verifica tipos en tiempo de compilación)
  • También acompaña verificando tipos en tiempo de ejecución 
  • Robustez
  • Lenguaje fuertemente tipado (tiene reglas estrictas respecto a los tipos)
  • Tipeo dinámico

Manejo de Memoria

  1. Es manejada por el runtime
  2. Uso de punteros

¿El run.. qué?

El runtime, o máquina virtual del entorno .NET (CLR), es el software que ejecuta las instrucciones que componen el programa escrito en C#, junto con las instrucciones "extra", necesarias para ejecutar el programa 

Funciones del CLR

  • Recolección de "basura"
  • ​Manejo de memoria
  • Control de tipos 
  • Manejo de excepciones
  • Seguridad
  • Manejo de hilos/threads

Funcionamiento del CLR

Funcionamiento del CLR

Auuun hay más!

Estándares e Implementaciones

ECMA-334 o ISO/IEC 23270:2018 (Lenguaje C#)

Define el lenguaje de programación en sí mismo











ECMA-335 o ISO/IEC 23271:2012 (CLI)

Es el entorno virtual en el que los programas escritos en C# (y otros) corren

Se definen: 
- El comportamiento del runtime
- Formato de archivo de ejecutable, etc
- Sistema de Tipos Comunes (CTS)
  - Common Language Specification (CLS) -> interop

La implementación de Microsoft del CLI es .NET (framework)

Implementaciones

  • Mono/Xamarin (Móvil)
  • ​.NET Framework (Solo Windows)
  • .NET Core (Multiplataforma)

Implementaciones (2)

  • Mono, C# para Linux => Celulares
  • La idea es unificar .NET Framework y .NET Core
  • Se deprecará "Framework" y quedará "Core", pasándose a llamar simplemente .NET
  • Framework = CLR + BCL

Implementaciones (3)

.NET Framework

Base Class Library (BCL)

  1. ​Operaciones de Red
  2. Operaciones de Entrada/Salida
  3. Seguridad
  4. Globalización/Traducción
  5. Manipulación de Texto
  6. Base de Datos
  7. XML
  8. Logueo/Diagnóstico
  9. Código Manejado
  10. Reflexión

Otros framework

  • ​Universal Windows Platform: Aplicaciones que van a ejecutar sobre Windows 10
  • .NET Core + ASP.NET Core: Aplicaciones Web
  • Mono/Xamarin: Aplicaciones Móviles

¿A qué framework apuntamos?

  • Si sólo voy a escribir código para un proyecto propio, me conviene usar .NET Core
  • Si requiero alguna funcionalidad específica de Windows, requeriré .NET Framework
  • Si voy a escribir una librería, es decir, código que usarán otros desarrolladores, usar .NET Standard

¿y ahora?