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