Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Programación Orientada a Objetos

Tabla de Contenido

Introducción

  • Analizar
    • Observación
    • Entendimiento
    • Lectura
  • Plasmar
    • Diagramas
  • Programar
    • Lenguajes de programación

Qué resuelve la programación orientada a objetos

La programación Orientada a Objetos nace de los problemas creados por la programación estructurada y nos ayuda a resolver cierto problemas como:

  • Código muy largo: A medida que un sistema va creciendo y se hace más robusta el código generado se vuelve muy extenso haciéndose difícil de leer, depurar, mantener.
  • Si algo falla, todo se rompe: Ya que con la programación estructurada el código se ejecuta secuencialmente al momento de que una de esas líneas fallara todo lo demás deja de funcionar.

Difícil de mantener.

Ejemplos de código espaguetti

Paradigama Orientado a Objetos

La Programación Orientada a Objetos viene de una filosofía o forma de pensar que es la Orientación a Objetos y esto surge a partir de los problemas que necesitamos plasmar en código.

Es analizar un problema en forma de objetos para después llevarlo a código, eso es la Orientación a Objetos.

Un paradigma es una teoría que suministra la base y modelo para resolver problemas. La paradigma de Programación Orientada a Objetos se compone de 4 elementos:

  • Clases
  • Propiedades
  • Métodos
  • Objetos

Y 4 Pilares:

  • Encapsulamiento
  • Abstracción
  • Herencia
  • Polimorfismo

Paradigma Teoría que suministra la base y modelo para resolver problemas

Lenguajes orientados a objetos

Java

  • Orientado a objetos naturalmente
  • Android
  • Server side

PHP

  • Lenguaje interpretado
  • Pensado para la web

Python

  • Diseñado para ser fácil de usar
  • Múltiples usos: Web, Server Side, Anállisis de Datos, Machine Leaning

Javascript

  • Lenguaje interpretado
  • Orientado a objetos pero basado en prototipos
  • Pensado para la web

Entorno de desarrollo

  • Visual Studio Code

https://code.visualstudio.com/

Diagramas de modelado

  • OMT: Object Modeling Techniques. Es una metodología para el análisis orientado a objetos.
  • UML: Unified Modeling Language o Lenguaje de Modelado Unificado. Tomó las bases y técnicas de OMT unificándolas. Tenemos más opciones de diagramas como lo son Clases, Casos de Uso, Objetos, Actividades, Iteración, Estados, Implementación.

UML

Como ya viste UML significa Unified Modeling Language el cual es un lenguaje estándar de modelado de sistemas orientados a objetos.

Las clases

En la parte superior se colocan los atributos o propiedades, y debajo las operaciones de la clase. Notarás que el primer caracter con el que empiezan es un símbolo. Este denotará la visibilidad del atributo o método, esto es un término que tiene que ver con Encapsulamiento y veremos más adelante a detalle.

Estos son los niveles de visibilidad que puedes tener:

- private
+ public
# protected
~ default

Una forma de representar las relaciones que tendrá un elemento con otro es a través de las flechas en UML, y aquí tenemos varios tipos, estos son los más comunes:

Asociación

Como su nombre lo dice, notarás que cada vez que esté referenciada este tipo de flecha significará que ese elemento contiene al otro en su definición. La flecha apuntará hacia la dependencia.

Con esto vemos que la ClaseA está asociada y depende de la ClaseB.

Herencia

Siempre que veamos este tipo de flecha se estará expresando la herencia. La dirección de la flecha irá desde el hijo hasta el padre.

Con esto vemos que la ClaseB hereda de la ClaseA

Agregación

Este se parece a la asociación en que un elemento dependerá del otro, pero en este caso será: Un elemento dependerá de muchos otros. Aquí tomamos como referencia la multiplicidad del elemento. Lo que comúnmente conocerías en Bases de Datos como Relaciones uno a muchos.

Con esto decimos que la ClaseA contiene varios elementos de la ClaseB. Estos últimos son comúnmente representados con listas o colecciones de datos.

Composición

Este es similar al anterior solo que su relación es totalmente compenetrada de tal modo que conceptualmente una de estas clases no podría vivir si no existiera la otra.

Orientación a objetos

Objetos

Los Objetos son aquellos que tienen propiedades y comportamientos, también serán sustantivos.

  • Pueden ser Físicos o Conceptuales

Las Propiedades también pueden llamarse atributos y estos también serán sustantivos. Algunos atributos o propiedades son nombre, tamaño, forma, estado, etc. Son todas las características del objeto.

Los Comportamientos serán todas las operaciones que el objeto puede hacer, suelen ser verbos o sustantivos y verbo. Algunos ejemplos pueden ser que el usuario pueda hacer login y logout.

Identificar los objetos

  • Tienen propiedades y comportamientos
  • Físicos o Conceptuales
  • Sustantivos

Abstracción y clases

Una Clase es el modelo por el cual nuestros objetos se van a construir y nos van a permitir generar más objetos.

Analizamos Objetos para crear Clases. Las Clases son los modelos sobres los cuales construiremos nuestros objetos.

Abstracción es cuando separamos los datos de un objeto para generar un molde.

Modularidad

La modularidad va muy relacionada con las clases y es un principio de la Programación Orientado a Objetos y va de la mano con el Diseño Modular que significa dividir un sistema en partes pequeñas y estas serán nuestros módulos pudiendo funcionar de manera independiente.

La modularidad de nuestro código nos va a permitir

Beneficios de modularizar

  • Reutilizar
  • Evitar colapsos
  • Hacer nuestro código más mantenible
  • Legibilidad
  • Resolución rápida de problemas

Una buena práctica es separando las clases en archivos diferentes.

Tener una clase promueve

  • Modularidad
  • Divide el programa en diferentes partes o módulos / clases
  • Separar las clases en archivos

Analizando Uber en Objetos

Conceptos POO

POO: Análisis

UML


Declaración de una clase en varios lenguajes

Javascript usa prototipos

Modelando objetos de Uber

¿Qué es la herencia?

Don’t repeat yourself es una filosofía que promueve la reducción de duplicación en programación, esto nos va a inculcar que no tengamos líneas de código duplicadas.

Toda pieza de información nunca debería ser duplicada debido a que incrementa la dificultad en los cambios y evolución

La herencia nos permite crear nuevas clases a partir de otras, se basa en modelos y conceptos de la vida real. También tenemos una jerarquía de padre e hijo.

Herencia en modelo Uber

Objetos

Los objetos nos ayudan a crear instancia de una clase, el objeto es el resultado de lo que modelamos, de los parámetros declarados y usaremos los objetos para que nuestras clases cobren vida.

Los métodos constructores dan un estado inicial al objeto y podemos añadirle algunos datos al objeto mediante estos métodos. Los atributos o elementos que pasemos a través del constructor serán los datos mínimos que necesita el objeto para que pueda vivir.

Aplicando herencia con los lenguejes

Encapsulamiento

El Encapsulamiento es hacer que un dato sea inviolable, inalterable cuando se le asigne un modificador de acceso.

Para python

_ Protegido __Privado

Setters y getters

Polimorfismo

Polimorfismo: Muchas formas. Poli = muchas, morfismo = formas. NO es Poliformismo

Es construir métodos con el mismo nombre pero con comportamiento diferente

Hay 3 conceptos

Sobrecarga -> Principalmente con los métodos Sobre-escritura -> Debe haber herencia, Cuando le cambias el comportamiento a un método que definió la super-clase Polimorfismo de Subtipado -> Centrado en usar el mimos nombre de método en diferentes clases, cuando se llamen se ejecutara

Sobrecarga Según algunos autores se le llamaría polimorfismo de sobrecarga, algunos ni si quiera lo llaman polimorfismo así que lo dejare:

Como pueden ver puede ser productivo en algunos casos, pero empieza a ser contraproducente cuando se usa demasiado(en el segundo caso por ejemplo).

Sobre-Escritura Un caso puro de polimorfismo, busca alterar el método de la súper-clase, ya que el comportamiento es diferente

Realmente muy útil, es l a mejor practica ya que la herencia podrá extender el proceso y si se quiere generar una particularidad se hace una clase

Polimorfismo de sobrecarga

Mala prática

Este ultimo me parece algo innecesario pero que también se puede hacer sin necesidad de heredar.

Otra cosa que de pronto se me escapo pero es porque python al ser débilmente tipado puede hacer de forma natural y es el termino llamado Cohersion, algo que en Java puede compilarse un poco mas.

UML de Uber

Esta clase Trip poseerá la lógica más fuerte del negocio aquí será donde se concentrarán la mayor cantidad de clases.

Esto es todo nuestro diagrama de clases, que quedó totalmente expresado en nuestro proyecto.