Princípios de Clean Code y SOLID
37 Questions
0 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

¿Qué significa que una clase esté "abierta para extensión" según los principios SOLID?

  • Significa que la clase no puede ser modificada en absoluto.
  • Indica que la funcionalidad debe ser añadida a la clase original sin nuevas clases.
  • Requiere que se eliminen métodos innecesarios de la clase original.
  • Permite agregar nueva funcionalidad extendiendo la clase a través de herencia o composición. (correct)
  • ¿Cuál es la importancia de que las subclases puedan sustituir a las clases base sin alterar el funcionamiento del programa?

  • Asegura que el principio de sustitución de Liskov se cumpla, manteniendo la funcionalidad. (correct)
  • Facilita la comprensión del código por parte de los nuevos desarrolladores.
  • Permite el uso de múltiples implementaciones de una misma clase.
  • Evita la necesidad de crear nuevas clases base en cada modificación.
  • En el contexto de SOLID, ¿cuál es una recomendación relacionada con el diseño de interfaces?

  • Descomponer las interfaces en métodos específicos para distintos tipos de pago. (correct)
  • Evitar el uso de interfaces en favor de clases abstractas.
  • Crear una interfaz que incluya todos los métodos posibles para evitar la creación de más interfaces.
  • Incluir solo métodos generales que sirvan para todos los tipos de pagos.
  • ¿Qué busca lograr el principio de "cerradas para modificación" dentro de SOLID?

    <p>Se pretende minimizar el riesgo de introducir errores al añadir nuevas características.</p> Signup and view all the answers

    ¿Cuál es un beneficio de que las clases cambien o se extiendan sin afectar a otras partes del sistema?

    <p>Facilita la implementación de nuevas funcionalidades sin romper el código existente.</p> Signup and view all the answers

    ¿Cuál es la principal característica de las APIs RESTful en relación con el estado?

    <p>Cada solicitud es independiente.</p> Signup and view all the answers

    ¿Qué comando se utiliza en Django para crear migraciones automáticamente?

    <p>makemigrations</p> Signup and view all the answers

    ¿Qué función se utiliza para evitar el problema N+1 en las consultas de Django ORM?

    <p>prefetch_related()</p> Signup and view all the answers

    ¿Qué método de Django ORM se usa para realizar cálculos sobre el conjunto de datos completo?

    <p>aggregate()</p> Signup and view all the answers

    ¿Cuál de las siguientes opciones ayuda a reducir la cantidad de datos recuperados de la base de datos?

    <p>only()</p> Signup and view all the answers

    ¿Qué se debe hacer con el método 'process_payment' en la clase PaymentServiceInterface?

    <p>Debe ser implementado en todas las subclases.</p> Signup and view all the answers

    ¿Cuál de los siguientes patrones de diseño permite crear nuevos objetos a partir de una instancia existente?

    <p>Prototype</p> Signup and view all the answers

    ¿Cómo se puede revertir una migración en caso de errores en Django?

    <p>migrate</p> Signup and view all the answers

    ¿Qué implica la práctica de TDD (Desarrollo Guiado por Pruebas)?

    <p>Crear primero las pruebas y luego el código.</p> Signup and view all the answers

    ¿Qué característica distingue a las tuplas de las listas en Python?

    <p>Las tuplas son inmutables.</p> Signup and view all the answers

    ¿Cuál es la principal función de un deque en Python?

    <p>Decidir desde qué lado eliminar elementos.</p> Signup and view all the answers

    ¿Para qué se utiliza la función annotate() en Django ORM?

    <p>Para agregar cálculos a cada objeto en un queryset.</p> Signup and view all the answers

    ¿Qué definición corresponde al patrón de diseño 'Factory Method'?

    <p>Define una interfaz para crear objetos, permitiendo alteraciones en la subclase.</p> Signup and view all the answers

    ¿Qué atributo de los diccionarios en Python es crucial para su funcionamiento?

    <p>Claves únicas.</p> Signup and view all the answers

    ¿Qué se entiende por 'List Comprehension' en Python?

    <p>Una forma eficiente de crear listas con poco código.</p> Signup and view all the answers

    ¿Cuál es una característica de las pilas en Python?

    <p>Siguen la regla de último en entrar, primero en salir (LIFO).</p> Signup and view all the answers

    ¿Cuál es la característica principal de las colas en Python?

    <p>Son eficientes para operaciones de inserción y eliminación en ambos extremos.</p> Signup and view all the answers

    ¿Qué hace un decorador en Django?

    <p>Mejora la lógica del negocio sin modificar el código de la función.</p> Signup and view all the answers

    ¿Cuál es la función de un serializador en Django Rest Framework?

    <p>Convertir objetos complejos a formatos legibles y validar datos.</p> Signup and view all the answers

    ¿Cuál de las siguientes opciones describe correctamente una lista basada en clases?

    <p>Facilitan la creación de listas con funciones y propiedades asociadas.</p> Signup and view all the answers

    ¿Qué se entiende por 'middleware' en Django?

    <p>Funciones intermedias que procesan las solicitudes y respuestas.</p> Signup and view all the answers

    ¿Qué es un ViewSet en Django Rest Framework?

    <p>Una abstracción para manejar operaciones CRUD en vistas.</p> Signup and view all the answers

    ¿Cómo se inicializa un defaultdict en Python?

    <p>defaultdict(list)</p> Signup and view all the answers

    ¿Qué representan los valores booleanos en Python?

    <p>Son esencialmente una subclase de int, donde 1 es verdadero y 0 es falso.</p> Signup and view all the answers

    ¿Cuál es la función principal de Amazon SageMaker?

    <p>Facilitar el desarrollo y despliegue de modelos de ML.</p> Signup and view all the answers

    AWS Inferentia es diseñado para...

    <p>Ejecución eficiente de inferencias de modelos de IA.</p> Signup and view all the answers

    ¿Qué función cumple AWS Lambda en el contexto de inferencias de modelos?

    <p>Ejecución serverless para inferencias ligeras.</p> Signup and view all the answers

    ¿Cuál de las siguientes afirmaciones sobre Amazon EMR es correcta?

    <p>Facilita el procesamiento de grandes volúmenes de datos.</p> Signup and view all the answers

    ¿Qué ventaja ofrece Elastic Inference?

    <p>Añadir capacidad de GPU elástica a instancias bajo demanda.</p> Signup and view all the answers

    ¿Cuál es la principal función de Celery en un entorno de procesamiento de datos?

    <p>Ejecutar tareas asíncronas en segundo plano.</p> Signup and view all the answers

    ¿Cómo facilita Docker la ejecución de aplicaciones?

    <p>Embalando aplicaciones y sus dependencias en contenedores.</p> Signup and view all the answers

    AWS Fargate es particularmente útil para...

    <p>Gestión de servidor sin la necesidad de infraestructura compleja.</p> Signup and view all the answers

    Study Notes

    CleanCode

    • El código limpio es un concepto que busca escribir código fácil de leer, entender y mantener.
    • Se basa en principios como la legibilidad, simplicidad y consistencia.
    • Facilita la colaboración en equipo y reduce errores.

    SOLID

    • Un conjunto de cinco principios de diseño orientado a objetos para crear sistemas más flexibles, mantenibles y escalables.
    • Principio de responsabilidad única (SRP): Cada clase debe tener una única responsabilidad.
    • Principio de abierto/cerrado (OCP): Las entidades deberían estar abiertas para extensión, pero cerradas para modificación.
    • Principio de sustitución de Liskov (LSP): Las subclases deben poder sustituir a las clases base sin alterar el funcionamiento del programa.
    • Principio de segregación de interfaz (ISP): no debería existir dependencia de interfaces que no vayan a ser usadas para evitar una dependencia.
    • Principio de inversión de dependencias (DIP): Las dependencias deberían depender de abstracciones en lugar de implementaciones concretas.

    Scrum

    • Un marco de trabajo para la gestión de proyectos ágiles.
    • Se basa en ciclos de trabajo cortos llamados sprints.
    • El equipo se autoorganiza y toma decisiones en conjunto.

    Roles en Scrum

    • Product Owner: responsable del producto y de la visión del proyecto.
    • Scrum Master: Facilita el proceso de Scrum y elimina impedimentos.
    • Desarrolladores: Equipo que se encarga de la construcción del producto.

    Programación Orientada a Objetos (POO)

    • Define objetos como entidades que encapsulan datos y comportamiento.
    • Herramientas de POO en python: Clases, instancias, atributos, métodos.

    Patrones de Diseño

    • Singleton: Garantiza que una clase tenga solo una instancia y proporciona un punto de acceso global a ella.
    • Factory Method: Define una interfaz para crear objetos en una clase, pero permite que las subclases alteren el tipo de objetos que se crearán.
    • Abstract Factory: Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.
    • Builder: Separa la construcción de un objeto complejo de su representación.
    • Prototype: Permite crear nuevos objetos copiando una instancia existente.

    Estructuras de Datos

    • Listas: Ordenadas y mutables.
    • Tuplas: Ordenadas pero inmutables.
    • Conjuntos: No ordenadas, mutables, elementos únicos.
    • Diccionarios: Colecciones no ordenadas y mutables, con claves únicas.
    • List Comprehension: Permite crear listas abstractas de manera eficiente.

    Estructuras Primitivas

    • Números enteros (int)
    • Números de punto flotante (float)
    • Cadenas de texto (str)
    • Booleanos (bool)
    • Tipos vacíos (None)
    • Números complejos (complex)

    Conceptos Django

    • Decoradores: Permiten modificar el comportamiento de funciones o métodos sin cambiar su código.
    • TemplateTag: Permite agregar lógica dinámica a las plantillas HTML.
    • Modelo: Clase que representa la estructura de los datos y define la forma en que se almacenan en la base de datos.
    • Vista: Función o clase que gestiona las solicitudes (requests) HTTP.
    • Serializador: Permite convertir objetos complejos en formatos de datos como JSON o XML.
    • Middlewares: Funciones intermedias que se ejecutan antes o después de que se procese una solicitud.

    Listas Basadas en Clases

    • ListView: Muestra una lista de objetos de un modelo.
    • DetailView: Muestra detalles de un objeto específico.
    • CreateView: Permite crear nuevos objetos.
    • UpdateView: Permite editar objetos existentes.
    • DeleteView: Permite eliminar objetos.

    ApiRest Con Django Rest Framework

    • Serializadores: Convertir objetos complejos a formatos legibles como JSON o XML, y validar datos entrantes.
    • Vistas: Funciones que gestionan las solicitudes HTTP.
    • ViewSets: Abstracción para manejar las operaciones CRUD en vistas (mejora la reutilización y simplificación).
    • Routers: Generan automáticamente las rutas para las APIs.
    • Permisos: Controlan el acceso a las vistas, definiendo quién puede acceder y modificar datos.
    • Autenticación: Mecanismos para gestionar la autenticación de usuarios en las APIs.

    Importante

    • Pruebas unitarias: Saber cómo escribir tests con módulos como unittest o pytest es esencial para el desarrollo de código de calidad.
    • TDD: El "Desarrollo Guiado por Pruebas" implica crear pruebas antes del código, lo que ayuda a garantizar una mejor cobertura de pruebas.
    • Bases de datos y ORM: Comprender las bases de datos y el sistema ORM de Django es crucial para trabajar con datos en un proyecto web.

    Migraciones de base de datos

    • Crear migraciones: Django genera archivos de migración que describen los cambios en los modelos.
    • Aplicar migraciones: Se aplican las migraciones a la base de datos para aplicar los cambios.
    • Migraciones inversas: Se pueden revertir migraciones en caso de errores o cambios en los requisitos.

    Optimización de Consultas con Django ORM

    • select_related() y prefetch_related(): Para evitar el problema del N+1 al consultar datos relacionados con ForeignKey y ManyToManyField.
    • Evitar consultas innecesarias: Considerar el uso de only() o defer() para limitar la cantidad de datos extraídos.
    • annotate() y aggregate(): Para cálculos de agregados (como sumas, conteos) sobre el conjunto de datos.
    • Paginar consulta: Evitar sobrecargar el servidor y la respuesta al usuario cuando se trabaja con conjuntos de datos grandes.
    • bulk_create(): Para insertar un conjunto de objetos de forma eficiente.
    • Cachear resultados: Almacenar resultados en un diccionario para consultas rápidas.
    • CELERY: Para ejecutar tareas asíncronas en segundo plano.

    AWS AI

    • Instancias EC2 para Machine Learning: Instancias con hardware optimizado para tareas de ML e IA (p.ej., p3, g4dn).
    • Amazon SageMaker: Servicio gestionado que simplifica el desarrollo de modelos de ML.
    • AWS Inferentia: Chip personalizado diseñado para inferencia de IA.
    • Elastic Inference: Añade potencia de GPU elástica a instancias EC2, SageMaker, o Amazon ECS para inferencias que no necesitan toda la potencia GPU.
    • AWS Lambda: Se puede utilizar para ejecutar inferencias de modelos pequeños o realizar predicciones de manera escalable.
    • Amazon EMR (Elastic MapReduce): Procesamiento de grandes volúmenes de datos.
    • AWS Fargate: Ejecutar contenedores sin administrar servidores.

    Docker

    • Plataforma de virtualización ligera que permite empaquetar aplicaciones y sus dependencias en contenedores.
    • Los contenedores Docker son portátiles y reproducibles, lo que facilita la ejecución de aplicaciones en cualquier entorno.

    Studying That Suits You

    Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

    Quiz Team

    Related Documents

    Preparación PDF

    Description

    Este quiz explora los conceptos de Clean Code y los cinco principios SOLID de diseño orientado a objetos. Aprenderás sobre la importancia de la legibilidad, simplicidad y responsabilidades únicas en el desarrollo de software. Además, se abordarán principios que ayudan a crear sistemas más flexibles y mantenibles.

    More Like This

    Use Quizgecko on...
    Browser
    Browser