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
202 lines
5.5 KiB
Markdown
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
|
|
|
|

|
|
|
|
---
|
|
|
|
## Ejercicio 02
|
|
|
|
|
|
|
|
---
|
|
|
|
## Fin :3
|