Parte 2 -Tema 3 Flashcards

Programación orientada a objetos

1
Q

¿Qué es la Programación Orientada a Objetos (POO)?

A

Es un paradigma de programación que organiza el software alrededor de datos, o “objetos”, que contienen tanto datos como el comportamiento que opera sobre esos datos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Cuáles son los pilares fundamentales de la POO?

A
  • Abstracción: Modelar el mundo real en términos de objetos.
  • Encapsulación: Ocultar los detalles internos de un objeto y exponer solo lo necesario.
  • Herencia: Crear nuevas clases a partir de clases existentes, heredando sus atributos y métodos.
  • Polimorfismo: La capacidad de que objetos de diferentes clases respondan de manera diferente al mismo mensaje.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Qué es una clase?

A

Es un plano o plantilla que define las características (atributos) y comportamientos (métodos) de un objeto.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Qué es un objeto?

A

Es una instancia de una clase, una representación concreta de esa clase.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Cuál es la diferencia entre una clase y un objeto?

A

Una clase es abstracta, mientras que un objeto es concreto.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

¿Qué es la encapsulación?

A

Es el mecanismo de ocultar los detalles internos de un objeto y exponer solo una interfaz para interactuar con él.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Por qué es importante la encapsulación?

A

Aumenta la seguridad del código, facilita el mantenimiento y reduce la dependencia entre las diferentes partes del programa.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

¿Qué es la herencia?

A

Es un mecanismo que permite crear nuevas clases (subclases) a partir de clases existentes (superclases), heredando sus atributos y métodos

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

¿Cuáles son los tipos de herencia?

A

Simple, múltiple (no soportada en todos los lenguajes) y jerárquica.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿Qué es el polimorfismo?

A

Es la capacidad de que objetos de diferentes clases respondan de manera diferente al mismo mensaje.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

¿Cuáles son los tipos de polimorfismo?

A
  • Polimorfismo de sustitución: Un objeto de una subclase puede ser utilizado donde se espera un objeto de la superclase.
  • Sobrecarga: Múltiples métodos con el mismo nombre pero diferentes parámetros.
  • Sobreescritura: Redefinición de un método en una subclase.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Abstracción

A

La capacidad de focalizarse en las características esenciales de un objeto, ignorando los detalles de implementación.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Interfaz

A

Define un contrato que una clase debe cumplir, especificando los métodos que debe implementar.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Asociación

A

Una relación entre dos clases.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Agregación

A

Una relación “tiene un” entre dos clases, donde un objeto es parte de otro.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Composición

A

Una relación “está compuesto por” más fuerte que la agregación, donde un objeto no puede existir sin otro.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

¿Qué es una clase en POO?

A
  • Es un plano o plantilla que define las características (atributos) y comportamientos (métodos) de un objeto.
  • Ejemplo: La clase “Perro” podría tener atributos como “raza”, “nombre”, “edad” y métodos como “ladrar()”, “comer()”, “jugar()”.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

¿Qué es un objeto en POO?

A

Es una instancia de una clase, una representación concreta de esa clase.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

¿Qué es un atributo en POO?

A

Es una característica o propiedad de un objeto, que representa un dato asociado a ese objeto.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

¿Qué es un método en POO?

A

Es una acción o comportamiento que un objeto puede realizar.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

¿Qué es la encapsulación y cómo se relaciona con los atributos y métodos?

A

Es el mecanismo de ocultar los detalles internos de un objeto (atributos) y exponer solo una interfaz para interactuar con él (métodos).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

¿Cuáles son los principales modificadores de acceso en POO?

A
  • Público: Accesible desde cualquier parte del programa.
  • Privado: Accesible solo desde dentro de la clase.
  • Protegido: Accesible desde dentro de la clase y sus subclases.
  • Paquete: Accesible desde cualquier clase dentro del mismo paquete.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

¿Qué es un constructor?

A

Es un método especial que se utiliza para inicializar los objetos de una clase.

24
Q

¿Qué es un destructor?

A

Es un método especial que se utiliza para liberar los recursos asociados a un objeto cuando este es destruido.

25
Q

¿Qué es una clase abstracta?

A

Es una clase que no puede ser instanciada directamente. Sirve como plantilla para otras clases, definiendo un conjunto de atributos y métodos comunes.

26
Q

¿Qué es una interfaz?

A

Es un contrato que define un conjunto de métodos que una clase debe implementar. No contiene implementación alguna.

27
Q

¿Qué son los Patrones de Diseño?

A

Son soluciones típicas a problemas de diseño recurrentes en la programación orientada a objetos. Son como recetas que describen cómo resolver un problema específico de una manera flexible y reutilizable.

28
Q

¿Cuál es el objetivo de los Patrones de Diseño?

A

Promover la reutilización de código, mejorar la legibilidad, facilitar el mantenimiento y fomentar mejores prácticas de diseño.

29
Q

¿Cuáles son las principales categorías de patrones de diseño?

A
  • Creacionales: Se ocupan de la creación de objetos.
  • Estructurales: Se ocupan de la composición de clases o objetos.
  • De comportamiento: Se ocupan de la asignación de responsabilidades entre objetos y la comunicación entre ellos.
30
Q

¿Cuál es el objetivo de los patrones creacionales?

A

Abstraer el proceso de creación de objetos, permitiendo mayor flexibilidad y control sobre el proceso. Ejemplos: Factory Method, Abstract Factory, Builder, Singleton, Prototype.

31
Q

¿Cuál es el objetivo de los patrones estructurales?

A

Simplificar la estructura de un diseño al identificar formas simples de relacionar objetos. Ejemplos: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.

32
Q

¿Cuál es el objetivo de los patrones de comportamiento?

A

Identificar los patrones comunes de interacción entre objetos. Ejemplos: Observer, Strategy, Command, Template Method, Iterator, Mediator, State, Visitor.

33
Q

¿Qué son los principios SOLID?

A

Son cinco principios básicos de la programación orientada a objetos que promueven un diseño de software más robusto y fácil de mantener.

34
Q

El acrónimo SOLID representa

A
  • S: Single Responsibility Principle (Principio de Responsabilidad Única)
  • O: Open/Closed Principle (Principio de Abierto/Cerrado)
  • L: Liskov Substitution Principle (Principio de Sustitución de Liskov)
  • I: Interface Segregation Principle (Principio de Segregación de Interfaces)
  • D: Dependency Inversion Principle (Principio de Inversión de Dependencias)
35
Q

¿Qué dice el SRP?

A

Una clase debe tener una única razón para cambiar.

36
Q

¿Cuál es el objetivo del SRP?

A

Aumentar la cohesión y disminuir el acoplamiento.

37
Q

Ejemplo SRP

A

Una clase que gestiona la base de datos no debería encargarse también de la lógica de negocio.

38
Q

¿Qué dice el OCP?

A

Las entidades de software (clases, módulos, funciones, etc.) deberían estar abiertas para extensión, pero cerradas para modificación.

39
Q

¿Cuál es el objetivo del OCP?

A

Facilitar la evolución del software sin romper el código existente.

40
Q

Ejemplo OCP

A

Utilizar herencia y polimorfismo para añadir nuevas funcionalidades sin modificar el código original.

41
Q

¿Qué dice el LSP?

A

Los objetos de una subclase deben ser sustituibles por objetos de su superclase sin alterar la corrección de el programa.

42
Q

¿Cuál es el objetivo del LSP?

A

Garantizar que las subclases respeten el contrato de la superclase.

43
Q

Ejemplo LSP

A

Si una clase Cuadrado hereda de Rectángulo, debe ser posible usar un objeto Cuadrado donde se espera un Rectángulo

44
Q

¿Qué dice el ISP?

A

Muchos clientes específicos son mejores que un cliente de propósito general.

45
Q

¿Cuál es el objetivo del ISP?

A

Evitar que los clientes dependan de interfaces que no utilizan.

46
Q

Ejemplo ISP

A

En lugar de una interfaz grande con muchos métodos, crear interfaces más pequeñas y específicas.

47
Q

¿Qué dice el DIP?

A

Los módulos de alto nivel no deben depender de módulos de bajo nivel. Ambos deben depender de abstracciones.

48
Q

¿Cuál es el objetivo del DIP?

A

Aumentar la flexibilidad y la testabilidad del código.

49
Q

Ejemplo DIP

A

Utilizar interfaces para desacoplar módulos y permitir la inyección de dependencias.

50
Q

¿Qué es la inyección de dependencias?

A

Es un patrón de diseño que permite proporcionar a una clase las dependencias que necesita en tiempo de ejecución, en lugar de que la clase misma las instancie.

51
Q

¿Cuál es el objetivo principal de la inyección de dependencias?

A

Desacoplar las clases, aumentar la testabilidad, facilitar el mantenimiento y promover la reutilización del código.

52
Q

¿Cuáles son las principales ventajas de utilizar la inyección de dependencias?

A
  • Mayor testabilidad: Permite aislar las clases y facilitar la creación de pruebas unitarias.
  • Menor acoplamiento: Reduce la dependencia entre clases, lo que hace que el código sea más flexible y fácil de modificar.
  • Mayor reutilización: Facilita la reutilización de componentes al permitir cambiar las dependencias en tiempo de ejecución.
    Facilita la inyección de mocks: Permite sustituir componentes reales por simulacros (mocks) durante las pruebas.
53
Q

¿Cuáles son los principales tipos de inyección de dependencias?

A
  • Constructor: Las dependencias se inyectan a través del constructor de la clase.
  • Setter: Las dependencias se inyectan a través de métodos setter.
  • Interfaz: Las dependencias se inyectan a través de una interfaz.
54
Q

¿Qué es un contenedor de inyección de dependencias?

A

Es una herramienta que automatiza el proceso de creación y gestión de objetos, resolviendo las dependencias entre ellos.

55
Q
A