Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Porque permite programar más rápido, esto se debe a que se hace un análisis
previo de lo que se esta realizando.
Al saber analizar problemas y entender la programación orientada a objetos se
puede avanzar y dejar de ser un programador Junior. Esto se debe a que varias
de las preguntas más frecuentes de los reclutadores son ¿Qué es
encapsulamiento, abstracción, herencia, polimorfismo?
Saber POO permite dejar ala mala práctica de copiar y pegar código y tomar el
control del proyecto y el código.
Analizar:
o Observación
o Entendimiento
o Lectura: "leer" muy bien la situación del problema
Plasmar:
o Diagramas: plasmar el análisis de una forma gráfica
Programar:
o Desarrollar lo que se acaba de diagramar usando algún lenguaje de
programación.
Permite resolver muchos de los "huecos" que tiene la programación estructurada. Entre
los problemas que resuelve están:
En dicho análisis se observan los problemas en forma de objetos para después llevar
todo a una solución en código.
Clases
Propiedades
Métodos
Objetos
Encapsulamiento
Abstracción
Herencia
Polimorfismo
Diagramas de Modelado
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.
StarUML
ArgoUML
Lucidchart
Objetos
Cuando hay un problema que se quiere resolver con Software lo primero que hay que
hacer es identificar los Objetos.
¿Cómo identificar a los Objetos? Los objetos son aquellos que tienen
propiedades y comportamientos. Siempre son sustantivos. Pueden ser físicos (un
Usuario por ejemplo) o conceptuales, es decir, que no existen físicamente, son
simbologías de procesos que lleva a cabo el software que se esta construyendo
(una de Sesión de Usuario por ejemplo).
¿Qué son las Propiedades? También llamadas atributos. Son características o
propiedades que describen a un objeto (por ejemplo: nombre, tamaño, forma,
estado). Los tributos también son sustantivos.
¿Qué son los comportamientos? También se les conoce como métodos. Son
todas las operaciones/acciones del objeto (por ejemplo: login(), logout(),
makeReport()). Suelen ser verbos o sustantivo y verbo.
Abstracción y Clases
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.
Modularidad
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.
Ventajas de la modularidad:
Reutilizar código.
Se evitan colapsos.
Código más mantenible.
Mejor legibilidad en el código
Rápida resolución de problemas
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.
User
Route
Driver
UberX
UberPool
UberBlack
UberVan
Trip
Cash
Card
Paypal
📚 Módulo 3. Programación Orientada a Objetos.
Análisis
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).
Este es el diagrama de los diferentes Objetos vistos en clase junto con sus respectivos
atributos
¿Qué es la herencia?
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.
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.
person = Person()
o Java
o public Person(String name) { /* String name → Parámetro */
o this.name = name;
}
o JavaScript
o function Person (name) { /* name → Parámetro */
o this.name = name
}
o Python
o def __init__(self, name): # name → Parámetro
self.name = name
o PHP
o public function _construct($name) { # $name → Parámetro
o $this -> name = name;
}
o Java
o JavaScript
o Python
person = Person("Andrés")
o PHP
Java, entre otros lenguajes, provee un método constructor por defecto para los objetos
que se creen.
Una vez se ha instanciado el objeto se puede acceder a sus atributos usando notación de
punto.
car.license = "AMQ258";
También pueden crearse métodos dentro de la clase y acceder a ellos usando notación
de punto.
}
}
car.printDataCar();
En el caso de Python, primero hay que importar el módulo con la Clase
from car import Car # car → nombre de archivo sin la extención. Car →
Nombre de la clase
Luego se instancia el objeto, y una vez hecho eso ya se puede acceder a los atributos del
objeto usando la notación de punto.
car = car()
car.licese = "AMS286"
car.driver = "Felipe López"
car.passengers = 4
Los parámetros del método constructor pueden tener cualquier nombre pero es una
buena práctica nombrarlos igual que los atributos de la clase.
Los parámetros que se le pasan al método son variables locales, para que el valor que se
les pase se aplique a los atributos de la Clase hay que llamar al atributo con this.
Se pone el tipo de la Clase seguido del nombre de la instancia, y luego con new se crea
dicha instancia y se pasan los parámetros necesarios para crear el objeto deseado.
this.id;
this.license = license;
this.driver = driver;
this.passenger;
}
En el caso de JavaScript la función que define la Clase también sirve como método
constructor, por lo que sólo hay que pasarle a dicha función los parámetros necesarios
para crear el objeto.
El funcionamiento de this en JavaScript es igual que en Java, pues este también hace
referencia a la Clase para así poder acceder a sus atributos usando la notación de punto.
console.log(this.driver)
console.log(this.driver.name)
console.log(this.driver.document)
Se usa una variable donde se va crear el Objeto, y luego con new se crea el objeto y se
pasan los parámetros necesarios para su creación.
Desde EcmaScript 6 existen en JavaScript nuevas formas de trabajar con POO, entre
ellas una nueva forma de crear "Clases" y el Método Constructor, no obstante estos no
dejan de ser prototipos.
La nueva sintaxis para crear una "Clase" con su respectivo método constructor es:
this.id
this.license = license
this.driver = driver
this.passengers
console.log(this.driver)
console.log(this.driver.name)
console.log(this.driver.document)
}
}
class Account:
id = int
name = str
document = str
email = str
password = str
📚 Módulo 5. Herencia
super hace referencia a la Clase padre, de hecho con super se puede acceder a
los atributos/métodos de la Clase padre usando notación de punto.
Luego se usa this para pasar el valor de los parámetros a los atributos
class Student(Person):
Después de esto se puede usar $this para acceder a los atributos de la Clase y
asignarles el valor de los parámetros del método constructor.
<?php
?>
En el caso de Python para definir la herencia entre clases primero hay que importar la
súper clase.
from car import Car # car → el nombre del archivo que contiene la
Clase pero sin extención. Car → El nombre de la Clase que se quiere
importar.
Después se crea el método constructor con los parámetros requeridos para crear el
objeto, incluidos los parámetros de la súper Clase. Luego se usa super para acceder al
Método Constructor de la súper Clase y finalmente con self se acceden a los atributos
de sub Clase para asignarles el valor que se pase por parámetro en el método
constructor.
Para crear una instancia de un objeto hay que asegurarse de tener el archivo con la súper
Clase vinculado en el HTML, después se crea una instancia del objeto en JavaScript con
la siguiente sintaxis:
Se les puede llamar familias a las Clases que estén siendo heredadas. De hecho
una forma en la que durante el análisis del proyecto se pueden creen ciertas
Clases es por el hecho de hay Clases que lógicamente deben estar en una
familia, a pesar de que no compartan código ni existan entre ellas
atributos/métodos que se repitan.
📚 Módulo 6. Encapsulamiento
Encapsulamiento
Getters y Setters: son métodos que permiten acceder y modificar un dato que
esta protegido por un modificador de acceso.
o Creando un gettter:
o public Integer getPassenger() { // Integer → Tipo de
dato que va a retornar el método
o return passenger;
}
o Creando un setter:
o public void setPassenger(Integer passenger) { // void →
Indica que el método no va a retornar nada.
o this.passenger = passenger;
}
if (passenger == 4) {
this.passenger = passenger;
} else {
}
📚 Módulo 7. Polimorfismo
En el polimorfismo se tiene un método que se comparte entre varias Clases y cada una
de ellas le da el comportamiento que necesite.
Si se quiere una definición más especifica, se podría decir que el polimorfismo consiste
en construir métodos con el mismo nombre pero con un comportamiento diferente.
Para sobrescribir un método que se hereda de una Súper Clase se usa la siguiente
sintaxis: