master-wiki/01. Projects/Coding Mentorship/Temas/Programación orientada a objetos.md
Alexander Navarro 9dae37d858 Update from obsidian - thinkpad
Affected files:
.obsidian/plugins/obsidian-omnivore/data.json
01. Projects/Coding Mentorship/Temas/Fundamentos de la programación.md
01. Projects/Coding Mentorship/Temas/Programación orientada a objetos.md
2024-05-15 21:27:41 -04:00

202 lines
5.5 KiB
Markdown

---
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