Programación II - Introducción a C# y LINQ PDF
Document Details
Tags
Summary
Este documento proporciona una introducción a la programación C# y a LINQ, cubriendo temas como \"Where\", \"Select\", \"OrderBy\", y otros métodos. También se explora la orientación a objetos y los principios SOLID. El contenido está organizado para ser comprensible y fácil de seguir, ideal para estudiantes de programación.
Full Transcript
**Programación II** **Introducción a C\# y LINQ:** LINQ es una herramienta de C\# que simplifica la consulta, manipulación y transformación de datos en colecciones y bases de datos. Proporciona una sintaxis unificada para trabajar con diferentes tipos de datos. **IEnumerable:** representa una col...
**Programación II** **Introducción a C\# y LINQ:** LINQ es una herramienta de C\# que simplifica la consulta, manipulación y transformación de datos en colecciones y bases de datos. Proporciona una sintaxis unificada para trabajar con diferentes tipos de datos. **IEnumerable:** representa una colección de elementos que se pueden iterar. Los métodos LINQ que funcionan con IEnumerable ejecutan consultas de forma diferida. La consulta no se ejecuta hasta que se itera sobre los resultados. **IQueryable:** representa una colección de elementos que se pueden consultar en una base de datos. Los métodos que funcionan con esto traducen la consulta a lenguaje SQL y la ejecutan en la base de datos. **Métodos** **Where:** filtra una colección de elementos basándose en un predicado que devuelve un valor booleano, solo los elementos que cumplen con el predicado se incluyen en la colección filtrada. **Select:** transforma cada elemento de una colección en un nuevo tipo de objeto, proyectando los daros de acuerdo con una función de proyección, la función de proyección especifica como se transformará cada elemento. **OrderBy:** ordena una colección en orden ascendente. La función de ordenamiento especifica el criterio por el cual se ordenará la colección. **OrderByDescending:** ordena una colección en orden descendente, la función da según que se ordenara la colección. **GroupBy:** agrupa los elementos de una colección basándose en un selector de clave. La clave del grupo se calcula aplicando el selector de clave a cada elemento. **Join:** combina elementos de dos colecciones basándose en una coincidencia clave. Los selectores clave dan el criterio por el cual se unirán los elementos de las colecciones. **FirstOrDefault:** devuelve el primer elemento de la colección que satisface el predicado especificado, o el valor predeterminado del tipo si la colección está vacía. **SingleOrDefault:** devuelve el único elemento que satisface el predicado, o el valor predeterminado del tipo si la colección está vacía o si hay más de un elemento que cumple el predicado. **Introducción a la Orientación a Objetos** La POO es un paradigma que se base en el concepto de objetos como entidades que encapsulan datos y comportamiento. Capacidad para modelar sistemas complejos de manera más organizada y eficiente. Una clase es una plantilla que define las características y el comportamiento de un objeto. Los objetos son instancias concretas de una clase. **Objetos:** cada uno representa una instancia de una clase que define un conjunto de atributos y métodos. **Abstracción:** permite centrarse en las características esenciales de un objeto, ocultando los detalles de implementación. - Simplificación, Flexibilidad y Reutilización. **Encapsulamiento:** protege los datos internos de un objeto y controla el acceso a ellos a través de métodos. - Protección de Datos - Control de Acceso - Mayor Mantenimiento **Herencia:** permite crear subclases que heredan atributos y métodos de clases existentes, superclases. - Reutilización de código, mayor organización y estructura - Acoplamiento entre clases, posible complejidad en sistemas grandes. **Polimorfismo:** permite que un mismo método se comporte de forma diferente en distintas clases, dependiendo del tipo de objeto que lo invoque. - Redefinición de métodos, uso flexible. **Interfaces** Definen contratos que deben cumplir las clases que las implementan. No contienen implementaciones concretas, solo firmas de métodos. Definición, implementación y polimorfismo. **Beneficios de POO:** mejor manejo de complejidad, mayor mantenimiento y reutilización de código. **Modularidad:** el sistema se divide en objetos independientes, lo que facilita el desarrollo y mantenimiento. **Reutilización:** los objetos se pueden reutilizar en diferentes partes del sistema o en proyectos futuros. Aplicaciones: SO, apps webs, videojuegos, aplicaciones móviles. **Principios SOLID** Son un conjunto de directrices para el diseño de software oo que promueven la creación de código flexible, mantenible y extensible. Son fundamentales para la construcción de sistemas robustos y adaptables. **Principio de Responsabilidad Única (SRP)** Establece que cada clase o modulo debe tener una única responsabilidad. Esto ayuda a mantener el código limpio, modular y fácil de entender. - Facilita el mantenimiento y actualización de código. - Reduce la probabilidad de errores al limitar el alcance de los cambios - Mejora la reutilización de código al crear clases más especializadas. **Principio de Abierto/Cerrado (OCP)** Establece que las entidades de software deben estar abiertas para la extensión, pero cerradas para la modificación. Esto permite agregar nuevas funcionalidades sin modificar el código existente. - Extensibilidad: agregar nuevas funcionalidades sin alterar el código base. - Mantenimiento - Reutilización: al mantener las clases separadas. **Principio de Sustitución de Liskov (LSP)** Establece que las subclases deben ser sustituibles por sus clases base sin afectar el comportamiento del programa. - Clase base: define un comportamiento general. - Subclase: implementa el comportamiento especifico. - Sustitución: la subclase se puede utilizar en lugar de la clase base. **Principio de Segregación de Interfaces (ISP)** Establece que las interfaces deben ser pequeñas y específicas, porque las grandes pueden ser difíciles de implementar y dificultan la reutilización de código. A screenshot of a phone Description automatically generated **Principio de Inversión de Dependencias (DIP)** Establece que las clases de alto nivel no deben depender de clases de bajo nivel, ambas deben depender de abstracciones. - **Abstracciones:** interfaces o clases abstractas que definen el comportamiento general. - **Dependencias:** relaciones entre clases que definen como se interactúan. - **Implementaciones:** clases concretas que implementan las abstracciones. **Aplicación de los principios SOLID** Se pueden aplicar durante todo el ciclo de vida del desarrollo de software, desde el diseño incial hasta la implementación y mantenimiento. **Diseño:** identificar las responsabilidades y dependencias en el sistema. **Implementación:** utilizar interfaces y abstracciones para desacoplar las clases. **Pruebas:** verificar que las subclases cumplen con el LSP. **Mantenimiento:** facilitar la edición de nuevas funcionalidades sin afectar el código existente. **Beneficios de SOLID** Al seguir los principios se crea código de alta calidad que es más fácil de mantener, actualizar y ampliar. **Flexibilidad:** facilita la adaptación del código a nuevos requisitos. **Reutilización:** permite reutilizar componentes de código de forma eficiente. **Mantenimiento:** reduce el tiempo y el esfuerzo necesarios para corregir errores. **Api-Rest** API (interfaz de programación de aplicaciones) que sigue los principios REST (Transferencia de Estado Representacional). **Características:** Stateless: no guarda estado entre las solicitudes. Formatos comunes: JSON o XML. Verbos HTTP: utiliza métodos como GET, POST, PUT, DELETE. ¿Que implica? - Comunicación entre sistemas (frontend y backen, o entre servicios). - Permite crear servicios escalables y reutilizables. **Códigos HTTP:** Son respuestas estándar proporcionadas por servidores web a solicitudes realizadas por un cliente (navegador o servicio). Clasificación: 1XX Informativos: la solicitud fue recibida y el proceso continua. 2XX Éxito: la solicitud se ha procesado correctamente. 3XX Redirección: el cliente necesita tomar más acciones para completar la solicitud. 4XX Errores del cliente: hubo un problema con la solicitud. 5XX Errores del servidor: el servidor fallo en procesar una solicitud valida. **\#\# 4. Códigos HTTP Comunes en un CRUD** **\#\#\# Códigos de Éxito:** \- **\*\*200 OK\*\***: Solicitud exitosa. \- **\*\*201 Created\*\***: Recurso creado. **\#\#\# Códigos de Error:** \- **\*\*400 Bad Request\*\***: Datos inválidos. \- **\*\*404 Not Found\*\***: Recurso no encontrado. \- **\*\*500 Internal Server Error\*\***: Error en el servidor. **\#\#\# Ejemplos en CRUD:** \- **\*\*GET\*\***: 200 OK (recuperación de recursos). \- **\*\*POST\*\***: 201 Created (nuevo recurso). \- **\*\*PUT/PATCH\*\***: 200 OK o 204 No Content (actualización exitosa). \- **\*\*DELETE\*\***: 204 No Content (recurso eliminado). **\#\# 5. Middleware en.NET** **- \*\*Definición\*\*:** Middleware es un componente de software que se ejecuta entre el servidor y las solicitudes del cliente. \- **\*\*Función\*\***: Procesa solicitudes HTTP, maneja la autenticación, registro de errores, etc. - Ejemplos: autentificación, registro y manejo de excepciones. **Inyección de Dependencia (DI)** Técnica que permite que los objetos reciban sus dependencias (otros objetos) desde el exterior en lugar de crearlas ellos mismos. Beneficios: - Desacoplamiento de clases. - Facilita el testeo y mantenimiento. **Interfaces en.NET** Contratos que definen que métodos debe implementar una clase, pero no como. **\#\# Beneficios:** \- **\*\*Abstracción\*\***: Oculta los detalles de implementación. \- **\*\*Flexibilidad\*\***: Permite cambiar la implementación sin afectar el código que usa la interfaz. \- **\*\*Testeo\*\***: Facilita la creación de mocks para pruebas. **Entity Framework 8** **ES** un ORM (Object-Relational Mapper) que facilita la interacción con bases de datos relacionales desde aplicaciones.NET. Simplifica el acceso a los datos, liberando a los desarrolladores de escribir consultas SQL complejas. Características Ofrece un conjunto completo de funciones para trabajar con datos, mapeo de objeto a tablas, ejecución de consultas y la gestión de transacciones. **1 Mapping de Objetos:** permite definir modelos de objetos que se mapean a las tablas de la base de datos, simplificando la interacción con esta. **2 Consultas:** proporciona un lenguaje de consulta LINQ para recuperar y manipular datos de forma eficiente y legible. **3 Transacciones:** ofrece un mecanismo para agrupar operaciones de datos, garantizando la integridad de la bd. **4 Convenciones:** incorpora convenciones de nomenclatura y configuración que simplifican el proceso de desarrollo. **Configuración del contexto de base de datos (DbContext)** Es DbContext es el punto de entrada para interactuar con la base de datos en EF8. Define la conexión a la bd y los conjuntos de entidades. **Conexión a la bd:** se configura con la cadena de conexión a la bd, nombre del servidor, bd y credenciales. **Definición de Entidades:** cada entidad del modelo de dominio se representa como una clase en el DbContext, que define las propiedades y las relaciones con otras entidades. **Configuración de la bd:** permite configurar el comportamiento de EF8, estrategia de generación de claves y la gestión de cambios. **Consultas y manipulación de datos con EF8** LINQ permite realizar operaciones de consulta y manipulación de datos. Consultas: select, where, etc. Operaciones de Manipulación: permite realizar inserciones, actualización y eliminación de datos en la bd a través de DbContext. Gestión de Transacciones: ofrece soporte para estas, lo que permite agrupar operaciones de datos para garantizar la integridad de la bd. BeginTran, Commit. **Integración de Entity Framework 8 con Web API** ![A screenshot of a white background Description automatically generated](media/image2.png) **Ventajas y desafíos de EF8:** A screenshot of a computer Description automatically generated **Buenas prácticas y patrones de diseño con EF8** **Diseño de entidades:** definir las entidades correctamente con sus propiedades y relaciones. **Repositorios:** usar un patrón de repositorio para encapsular las operaciones de acceso a datos. **Pruebas unitarias:** garantiza la corrección de código y detección de errores. **Seguridad:** inyección de SQL y autorización para proteger la bd de accesos no autorizados. **Introducción al desarrollo backend** Construcción de la lógica interna y la infraestructura de una app web. **Arquitectura de aplicaciones web:** **Capa de presentación:** interfaz visible del usuario. **Capa lógica de negocio:** donde se procesan las solicitudes del usuario, se manipulan los datos y se ejecutan las reglas de negocio. **Capa de datos:** responsable de almacenar y recuperar info de forma persistente, bd y otros. **Fundamentos de APIs RESTful:** **Recursos:** datos o entidades que la API expone, usuarios, productos. **Verbos HTTP:** acciones permitidas sobre los recursos. GET, POST. **Códigos de estado:** señales que indican el éxito o fracaso de una solicitud. **Formatos de datos:** la forma en que se transmiten los datos, JSON XML. **Diseño de endpoints y recursos** [Endpoints:] punto de acceso a los recursos, utilizando URLs que identifican a cada uno de ellos. **Arquitectura:** **Modelos:** representan las entidades de negocio y se usan para mapear las tablas en la bd. **Servicios:** contienen la lógica de negocio y gestionan la persistencia de los datos. **Controladores:** exponen los endpoints de la API y manejan las solicitudes HTTP, delegando la lógica a los servicios.