---
width: 1366
height: 768
date_created: Sunday, May 12th 2024, 12:25:15 pm
date_modified: Tuesday, May 14th 2024, 6:43:12 pm
---

# Programación Orientada a Objetos

---

## ¿Qué Es?

La programación orientada a objeto es una **forma de programar**. En otras palabras, es un
**paradigma de la programación**.

---

## ¿Para Qué Sirve Un Paradigma De Programación?

- Nos provee una manera de trabajar.
- Nos da una manera de estructurar el código.
- Nos facilita la representación de cosas y situaciones del mundo real.
- Ayuda a encontrar y prevenir errores.

note: mencionar otros paradigmas:

- [imperativo](https://es.wikipedia.org/wiki/Programaci%C3%B3n_imperativa "Programación imperativa"): Darle las instrucciones sobre como hacer lo que queremos,
    - [procedimental](https://es.wikipedia.org/wiki/Programaci%C3%B3n_por_procedimientos "Programación por procedimientos") que agrupa las instrucciones en procedimientos,
    - [orientado a objetos](https://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos "Programación orientada a objetos") que agrupa las instrucciones con la parte del estado en el que operan,
- [declarativo](https://es.wikipedia.org/wiki/Programaci%C3%B3n_declarativa "Programación declarativa") solicitar el resultado deseado
    - [funcional](https://es.wikipedia.org/wiki/Programaci%C3%B3n_funcional "Programación funcional") en el que el resultado deseado se declara como el valor de una series de aplicaciones de función,
    - [lógico](https://es.wikipedia.org/wiki/Programaci%C3%B3n_l%C3%B3gica "Programación lógica") en la que el resultado deseado se declara como la respuesta a una pregunta sobre un sistema de hechos y reglas,
    - matemático en el que el resultado deseado se declara como la solución de un problema de optimización
    - reactivo en el que se declara el resultado deseado con flujos de datos y la propagación del cambio

---

## Características De POO

- Abstracción
- Encapsulación
- Herencia
- Polimorfismo

note: no entrar en detalle, es irrelevante mientras no se entiendan las bases.

---

## Principios SOLID

- The **S**ingle Responsibility Principle
- The **O**pen-Closed Principle
- The **L**iskov Substitution Principle
- The **I**nterface Segregation Principle
- The **D**ependency Inversion Principle

note: nuevamente no entrar en detalle, es irrelevante mientras no se entiendan las bases. [referencia](https://www.freecodecamp.org/news/solid-principles-explained-in-plain-english/)

---

## ¿Qué Es Un Objeto?

Un objeto es una **representación** de una cosa, persona o elemento de la vida real, junto con sus características y comportamientos.

---

## Components De Un Objeto

| Término Común   | Término Informático |
| --------------- | ------------------- |
| Características | Atributos           |
| Comportamientos | Métodos             |

---

## Ejemplos

![[01.%20Projects%2FCoding%20Mentorship%2FTemas%2Fejemplo_OOP.png|700]]

note: _"La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de manera que la forma de hacer las cosas puede set diferente según el programador."_

---

## Clases Vs Objetos

Las clases son los _"moldes"_ o nuestra _"plantilla"_ para generar objetos.

Aquí se definen los atributos y métodos que utilizaremos.

note: se puede hacer el símil que una clase es un _"tipo de dato"_.

---

## Clases Vs Objetos

Los objetos son las **instancias creadas a partir de una clase**.

Aquí crearemos un nuevo objeto rellenando la información que nos pide la clase.

note: dar ejemplo de una ficha clínica.

---

## Constructores

Son un método especial que se llama al memento de crear una nueva instancia de una clase. Su objetivo es **inicializar los atributos de la clase**.

note:

- _"abstraer el como un objeto se crea"_
- _"es responsabilidad de un objeto como se crea"_

---

## Constructores

- Tienen el mismo nombre de la clase.
- No tienen tipo de retorno.
- Deben ser públicos.
- Pueden existir múltiples constructores para una misma clase.

note: esto es el general y no siempre es así, un singleton tiene un constructor privado.

---

### Ejemplos

```python
class Perro:
    def __init__(self, nombre, color_pelo, edad):
        self.nombre = nombre
        self.color_pelo = color_pelo
        self.edad = edad

    def parrandear(self):
        print("Cuando Mario Hugo no está…")

instancia_de_perro_1 = Perro("Duque", "negro y café", 3)
instancia_de_perro_1.parrandear()
```

---

## Ejemplos

```java
class Perro {
	String nombre;
	String color_pelo;
	int edad;

	public Perro(String nombre, String color_pelo, int edad) {
		this.nombre = nombre;
		this.color_pelo = color_pelo;
		this.edad = edad;
	}

	public void parrandear() {
		System.out.println("Cuando Mario Hugo no está…");
	}
}

public class Ejemplo_java {
    public static void main(String[] args) {
		Perro instancia_de_perro_1 = new Perro("Duque", "negro y café", 3);
		instancia_de_perro_1.parrandear();
    }
}
```

---

## Ejercicio 01

Se debe definir una clase Bombero considerando los siguientes atributos de clase:

- nombre (String).
- apellidos (String).
- edad (int).
- casado (boolean).
- especialista (boolean).

Luego, se debe definir un constructor que reciba los parámetros necesarios para la inicialización y los métodos para poder establecer y obtener los valores de los atributos.

Posteriormente, se debe crear un objeto y comprobar que se inicializa correctamente, consultando el valor de sus atributos después de haber creado el objeto.

---

## Ahora te toca a ti

![](Pasted%20image%2020240515122605.png)

---

## Ejercicio 02



---

## Fin :3
