Loading repository data…
Loading repository data…
bl00p1ng / repository
Apuntes y Archivos del Curso de Programación Orientada a Objetos de Platzi
Apuntes y código del Curso de Programación Orientada a Objetos de Platzi
En el curso se abordan 3 aspectos fundamentales:
Permite resolver muchos de los "huecos" que tiene la programación estructurada. Entre los problemas que resuelve están:
La filosofía de Orientación a Objetos surge a partir de la necesitad de los programadores de plasmar soluciones a problemas en el código. Se basa en un análisis del problema que se quiere abordar para posteriormente empezar a programar basándose a las conclusiones llegadas en dicho análisis. Esto ahorra el problema de no saber por donde empezar a resolver un problema con software.
En dicho análisis se observan los problemas en forma de objetos para después llevar todo a una solución en código.
Paradigma: teoría que suministra la base y modelo para resolver problemas.
El Paradigma de Programación Orientada a Objetos se compone de 4 elementos:
Además de esos 4 elementos , la POO también tiene 4 "Pilares":
Algunos lenguajes orientados a objetos son:
Los diagramas de modelado son una especie de gráficos que sirven de intermediarios entre el análisis que se hace del problema que se quiere solucionar y el código que se va a generar para solucionar dicho problema.
Hay 2 opciones de diagramas de modelado disponibles:
OMT: (Object Modeling Techniques). Creado en 1991. Es una metodología para el análisis orientado a objetos. Lo que propone es que una vez se hace el análisis y se tienen identificados los objetos, atributos, métodos, etc; se pasa a plasmar cada objeto en un recuadro, se ponen todos los atributos y métodos dentro de dicho recuadro y luego se usa una serie de conectores para establecer las relaciones entre los diferentes objetos.

Actualmente esta en desuso y no se recomienda emplearlo en ningún proyecto.
UML: (Unified Modeling Language - Lenguaje de modelado unificado). Creado en 1997. Se podría resumir como la versión moderna de OMT, pues unifica las bases y técnicas de este y las mejora. Es el método para crear diagramas de modelado que se usa en la actualidad. Tiene muchas más capacidades que OMT, entre las cuáles están:

Aprender UML es importante pues permite plasmar de forma gráfica lo que se va a implementar en el código y como esta construido el proyecto.
Algunas herramientas para trabajar con UML:
Cuando hay un problema que se quiere resolver con Software lo primero que hay que hacer es identificar los Objetos.
Una Clase es el modelo sobre el cuál se construye un objeto. Para definirlo de una forma más sencilla de entender, se puede pensar en un una clase como un molde que se usa para crear objetos.
En este punto se analizan Objetos, se establecen todos sus atributos y métodos y en base a eso se crean Clases. Este proceso de abstraer los datos de un objeto para generar una clase (molde) se le conoce como Abstracción. En resumidas cuentas, la abstracción es ese proceso de analizar los objetos para identificar sus atributos y métodos comunes para en base a eso crear un molde llamando Clase.
Consiste en dividir un sistema en partes más pequeñas, cada una de esas partes se llaman módulos. Cada uno de esos módulos funciona de manera independiente, pero juntos conforman el sistema completo.
La modularidad permite hacer más fácil el mantenimiento y la escalabilidad de un proyecto, pues mientras en las programación estructurada se tiene un sólo archivo muy grande en el que esta toda la lógica del sistema y en el que un error puede detener la ejecución de todo el programa, en la programación orientada a objetos las diferentes funciones de un sistema se dividen en módulos independientes, por lo que a la hora de solucionar bugs sólo hay que ubicar el módulo que esta fallando y repararlo sin tener que afectar al resto del código; y si se quieren añadir más funcionalidades al proyecto solo hay que crear nuevos módulos e integrarlos dentro del sistema.
Ventajas de la modularidad:
Las clases en UML son representadas por un rectángulo. En la parte superior se pone el nombre de la clase (verde), después los atributos (morado) y por último los comportamientos/métodos (azul).

Definir Clases en Java:
class Person {
String name = ""; /* Atributo */
void walk() {} /* Comportamiento / método */
}
Definir Clases en Python:
class Person:
name = ""; # Atributo
def walk(): # Comportamiento / método
Definir Clases en JavaScript:
function Person() {} /* "Clase" */
Person.prototype.walk = function() {
/* Comportamiento / método */
}
Definir Clases en PHP:
class Person {
$name = ""; # Atributo
function walk() {} # Comportamiento / método
}
Este es el diagrama de los diferentes Objetos vistos en clase junto con sus respectivos atributos

"Don´t repeat yourself"
Es una filosofía que promueve la reducción de la duplicación en programación.
Toda pieza de información nunca debería ser duplicada pues esto incrementa la dificultad en los cambios y la evolución del proyecto. En cambio se debe procurar reutilizar código.
La herencia es una pieza fundamental para la reutilización de código, permite crear nuevas clases a partir de otras. Cuando se detecten elementos duplicados, se hace una abstracción para generar una Clase mas general de la que otras clases hereden todas esas características duplicadas.
"Cuando se detectan características y comportamientos iguales se debe realizar una abstracción."
En la herencia se establece una relación padre e hijo. A la clase padre se le conoce como súper clase y a sus clases hijas se les llama subclases.

En el siguiente ejemplo hay varios atributos(rojo) y comportamientos(verde) que se están repitiendo en varias clases.
Las clases son el elemento que permite la modularidad en la POO, pues permiten dividir el problema en distintas clases/módulos y a su vez separar dichas clases en diferentes archivos.
Análisis del problema:

Análisis de los Objetos:
| User |
|---|
| Route |
| Driver |
| UberX |
| UberPool |
| UberBlack |
| UberVan |
| Trip |
| Cash |
| Card |
| Paypal |

A partir de esto se puede crear una súperclase(SeleccionFutbol) que agrupe esos atributos y comportamientos que se repiten y hacer que las clases Futbolista, Entrenador y Masajista los hereden.

De esta forma todos los atributos y métodos de la clase padre serán heredados a las clases hijas, lo que ahorra el tener que escribir en código cada uno de esos atributos y comportamientos para cada Clase.
Otra razón por la que se puede aplicar herencia es por lógica de negocio, es decir clases que si bien no comparten elementos, debido a la forma en la que funcione el software se crea un Clase padre que herede a un grupo de Clases hijas que están relacionadas entre si.
