Bienvenida e Introducción

1

¿Por qué aprender Programación Orientada a Objetos?

2

¿Qué resuelve la Programación Orientada a Objetos?

3

Paradigma Orientado a Objetos

4

Lenguajes Orientados a Objetos

5

Instalando Visual Studio Code

6

Diagramas de Modelado

7

Qué es UML

Orientación a Objetos

8

Objetos

9

Abstracción y Clases

10

Modularidad

11

Analizando Uber en Objetos

12

Reto 1: identificando objetos

Programación Orientada a Objetos. Análisis

13

Clases en UML y su sintaxis en código

14

Modelando nuestros objetos Uber

15

¿Qué es la herencia?

16

Aplicando Herencia a nuestro proyecto Uber

17

Reto 2: analicemos un problema

Clases, Objetos y Método Constructor

18

Creando nuestras carpetas iniciales para el curso

19

Definiendo clases en Java y Python

20

Definiendo Clases en JavaScript

21

Objetos, método constructor y su sintaxis en código

22

Objetos. Dando vida a nuestras clases en Java y Python

23

Declarando un Método Constructor en Java y JavaScript

24

JavaScript orientado a objetos, lo más nuevo

25

Declarando un método constructor en Python

Herencia

26

Aplicando herencia en lenguaje Java y PHP

27

Solución del reto de herencia en PHP

28

Aplicando herencia en lenguaje Python y JavaScript

29

Otros tipos de Herencia

30

Reto 4

Encapsulamiento

31

Encapsulamiento

32

Encapsulando atributos en Java

Polimorfismo

33

Generando polimorfismo en Java

34

Generando polimorfismo en PHP

Cierre del curso

35

El Diagrama UML de Uber

36

Conclusiones

37

Bonus: Qué es la Programación Orientada a Objetos

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Programación Orientada a Objetos: POO

Curso de Programación Orientada a Objetos: POO

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Aplicando Herencia a nuestro proyecto Uber

16/37
Recursos

Aportes 194

Preguntas 56

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Una pregunta y no se deberia crear otra dos clase una que CarBasic y tenga los atributos de brand y model, y otra que sea CarAdvanced que tenga typeCarAceppeted y seatsMaterail, estas dos clases heredarian de Car y las clases Uber* heredarian de CarBasic y CarAdvanced

Estupenda clase instructora Anahí, por medio de estos diagramas se puede apreciar los atributos que compartirán las superclases con las subclases y, además servirán como base para la documentación de la aplicación que estemos creando.
 
Acá realice unos con Draw.io, los compartirlo por si le es útil a alguno de los compañeros

  1. Clase Account
  2. Clase Payments
  3. Clase Car
  4. Diagrama Uber

![](

Me gusta como queda al final el diagrama, algo importante a resaltar es la parte de pagos, aunque las clases no comparten atributos, por buena práctica, es bueno que hereden de una clase Payments, porque sabemos que implicitamente esas 3 son pagos, ¿Pasa algo malo si no hacemos esto? No, pero a futuro podremos querer implementar algo que sea común entre esos 3 tipos de pagos, y lo mejor es hacerlo sobre una clase Payment ^^

Para los que no han hecho el curso de bases de datos, con esta herramienta se pueden crear este tipo de diagramas.
https://www.draw.io/

Hacer una clase por cada tipo de vehículo me parece poco eficiente porque tendría que crear una nueva clase si es que se agregara un nuevo tipo de carro. No seria mejor crea una clase llamada typeCar y relacionarla a la clase car?

Hice un diagrama UML integrando las propiedades de cada clase, si identifican un error por favor comenta. Les dejo el template y el sitio donde pueden crear el suyo y añadir nuevas clases, propiedades y comportamientos.
-Template
-Sitio para editar template (select open existing diagram)

Muy buena Clase!!!

El rombo negro implica una Composición (Relación totalmente compenetrada. Una no puede vivir sin la otra.)

Esta es mi version

con este archivo lo pueden modificar
es un archivo .drawio
en esta pagina se modifica; o pueden hacer el suyo




Por si la duda, en Trip hay composición, de ahí los rombos oscuros, que quiere decir que tiene una relación compenetrada, que dependen y que una de estas clases no podría vivir sin la otra. Car, route y Payment depende de trip, y trip depende de ellos.

Referencia: https://platzi.com/clases/1474-oop/17219-uml/

🤔 La abstracción es esencial para aplicar de forma correcta la herencia.

Una herramienta para hacer diagramas UML "StarUML"

Esta muy bien estructurado solo podría agregar que en el caso de la clase account falto el atributo typeaccount porque hace falta un atributo que pueda diferenciar una cuenta de otra, por otro lado en la clase payments faltaría la clase paymethod ya que se necesitaría especificar en la factura el método de pago para vincularlo a la transacción, si no es imposible tener una relación.

Muy resumido… Increible
.

Recuerden que en la sección de archivos y enlaces encontraran las imagenes adjuntas de esta clase 😉
Si quieren hacer un diagrama propio, puede ayudarse con Lucidchart

Hice el UML por si alguien quiere ver como se ve todo en conjunto,

La herramienta que ocupe es: https://app.diagrams.net/

Por fn entendí Herencia!

hacer todo esto se parece a normalizar una base de datos.

Odiaba la poo que casi la reprobaba, y este curso me esta haciendo amarla.

Acá les dejo este link para realizar sus diagramas UML de forma gratuita.
https://app.diagrams.net/

Tal vez sea mas practico que tanto **User **como Driver, sean solamente User. Y podríamos tener un **UserType **para indicar si el usuario es **Driver **o no.

Excelente manera de entender la herencia, si quieren hacer los diagramas UML hay una página que se llama lucidchart es bastante buena.

En en editor de código VSC se puede instalar una extensión que permite realizar los diagramas.

Instalar extensión Drawio Integration.

La extensión de este archivo se guarda con “.dio” para el entorno gráfico.

Comparto mi diagrama de clases:

También podemos crear una clase payments con dos atributos id y forma de pago (aqui escogemos si es por TDC, Paypal y/o efectivo)

Este es mi resumen del ejemplo del curso hasta este punto, tal vez le puede ser útil a alguien mas. Si observan algún error o tienen alguna sugerencia por favor brindar la info 😉
Resume ejemplo UBER

mi diagrama pretende tener en cuenta los minimos casos en que el cliente no paga por lo que sea.

Las herencias, para la normalización de una base de datos.

aplicando herencia a el modelo uber

tambien se podria generar una subclase con los vehiculos uber black y uber van

como sugerencia, veo que en la clase Payments es conveniente agregar también un atributo para definir el valor del pago realizado o de la transacción

Mi diagrama UML
![](


Si estas clases quedan vacias: User y Driver no es mejor dejar como general la de Account.
O en todo caso, se les añade el tipo de usuario especifico:

Tengo una pregunta…
Cuando se hace herencia las clases hijas pueden ser igual a otra hija? lo digo por el caso de conductor y usuario, ya que creia que no pueden ser iguales, siempre debe haber alguno más que otro.
Gracias

No encuentro en esta clase la sección enlaces para buscar el diagrama, alguien sabe donde está?

14. Mis apuntes sobre: “Aplicando Herencia a nuestro proyecto Uber”

Les comparto cómo me quedó el diagrama por el momento:

Y si analizaramos whats app, como quedaría ?.

clases :

  • User
  • Chats
  • Estados
    -Contactos
    -Llamadas

Y así es como algo que parecía muy complejo se vuelve súper entendible!

Hola chicos!!, mi pregunta es:
De acuerdo a lo ya visto hasta esta aplicacion, creen que sea bueno identitificar los atributos de cada objeto para posteriormente comenzar a pensar en una supeclase?

ESTO ES UNA SUPER CLASE!!! ANNCODE

La fiesta viene ahora al programar xD

Es importante destacar que las clases siempre se nombran en singular 😃.

Una pregunta. A pesar de que los tipos de auto heredan varios atributos de la superclase CAR, todavía hay redundancia entre las clases. Tanto UberX y UberPool, así como UberBlack y UberVan comparten los mismos atributos. ¿Esto es así? ¿Debería pensarse en una especie de clase intermedia? ¿o cómo se resuelve este problema de redundancia en POO?

Check a herencia.

Para la parte de la herencia, siempre es bueno que alcancemos un maximo numero de comportamientos dentro de una clase, o se prodrian hacer hasta con dos si uno quiciera?

Podría ser que la clase UberX y UberPool, se unieran en una clase llamada UberBasic y agregar una propiedad llamada type.
Ustedes que opinan?

Me ha encantado como esta quedando

![](

Yo lo hice con los aportes de una compañera en la comunidad:

Hola compañeros,
También agregué otra herencia a la clase de vehicluos, una de **EconomicVehicles **y otra de PremiumVehicles.
cualquier aporte u observación es bien recibida!
![](

La herencia es un pilar importante de OOP (Programación Orientada a Objetos). Es el mecanismo en Java por el cual una clase permite heredar las características (atributos y métodos) de otra clase. Aprenda más a continuación.

En el lenguaje de Java, una clase que se hereda se denomina superclase. La clase que hereda se llama subclase. Por lo tanto, una subclase es una versión especializada de una superclase. Hereda todas las variables y métodos definidos por la superclase y agrega sus propios elementos únicos.

Terminología importante

Superclase: la clase cuyas características se heredan se conoce como superclase (o una clase base o una clase principal).
Subclase: la clase que hereda la otra clase se conoce como subclase (o una clase derivada, clase extendida o clase hija). La subclase puede agregar sus propios campos y métodos además de los campos y métodos de la superclase.
Reutilización: la herencia respalda el concepto de «reutilización», es decir, cuando queremos crear una clase nueva y ya hay una clase que incluye parte del código que queremos, podemos derivar nuestra nueva clase de la clase existente. Al hacer esto, estamos reutilizando los campos/atributos y métodos de la clase existente.

Además de Drawio que varias personas han recomendado, yo quiero recomendarles también StarUML.

sin embargo recomiendo usar mas drawio porque puedes hacer cualqueir tipo de grafico y para empezar con el tema de bases de datos relacionales es magnifico

Encontré un detalle con respecto al análisis de los ubers para transformar a la superclase car: existe la posibilidad de armar una superclase secundaria de una subclase? a lo que me refiero es que entre uberx y uberpool tienen atributos sobrantes como brand y model, que se sacaría otra clase padre para ellos 2; mientras que en uberblack y ubervan derivan otra clase padre donde comparten los atributos typeCarAccepted y seatMaterial;

Herencia múltiple
• Si una clase se puede refinar en varias dimensiones distintas e independientes, se usan las generalizaciones múltiples.
– Las subclases de la generalización pueden ser o no disjuntas.
– Una clase puede heredar de forma múltiple desde distintas generalizaciones o desde distintas clases dentro de una relación de generalización solapada, pero nunca desde dos clases en la misma generalización disjunta.
– El término herencia múltiple se puede referir tanto a la relación conceptual entre clases (generalización) como al mecanismo del lenguaje que implementa esa relación (herencia).

La herencia no es mala, solo hay que saber cuando usarla y sin abusar de ella ya que estas creando un nivel de dependencia en tu proyecto fuerte, y a la larga puede ser dificil de actualizar o administrar, cuando tengas duda de si usarla o no en su defecto usa composicion. en fin, es el tema durante años. Herencia vs Composición!

#FREEFREDDY

Al analizar las clases, vi que los atributos brand, model, typeCarAccepted y seatsMaterial se repetian, por lo que decidí separarlos por interfaces; por lo de Interface Segregation, ya que las clases UberBlack o UberVan pueden implementar ambas interfaces en un futuro, al contrario de que si fueran clases abstractas:

Una duda: ¿no debería quitarse el atributo id de las clases hijas de la clase Payments?

Además de Draw.io que varias personas han recomendado, yo quiero recomendarles también StarUML.

Esta clase utilizó los tres tipos de herencia que se han visto. Los podemos llamar “completa”, “parcial”, “de lógica distinta”.

  1. La completa crea superclases que abarcan la totalidad de los atributos y comportamientos de las clases hijas, por lo que estas son solo variables de la superclase. El ejemplo de la clase es Account.

  2. La parcial crea superclases que cubren factores comunes entre varios objetos pero sin lograr reducirlos a su totalidad. El ejemplo de la clase es Car.

  3. La de lógica distinta crea super clases que, aunque no resumen muchas características, en el funcionamiento mismo del código, si tienen una razón de estar relacionadas. El ejemplo de la clase es Payment.

La extensión UMLet de VSCode para crear los diagramas de clases es simplemente👌👌👌

Comprendo los elementos que contiene y y hacia donde va, pero la pregunta en cuestión es, ¿porqué utiliza la palabra Trip? ¿Es una palabra ya estipulada con un significado?

Buena clase, esto es super importante para proyectos escalables.

Mi diagrama quedó asi:
![](

WOOWW EXCELENTE CLASE, A LO QUE ESTOY VIENDO ES QUE NO SE REPITE CODIGO, SI NO DIGAMOS QUE HAY QYE AGRUPARLO PARA QUE TODO ESTE JUNTO, ENTIENDO 😄

Este es el mapa que armé al final

Superclase: la clase cuyas características se heredan se conoce como superclase (o una clase base o una clase principal). Subclase: la clase que hereda la otra clase se conoce como subclase (o una clase derivada, clase extendida o clase hija).

En java una clase hija también puede ser padre de otras, esto serviría aún más para abstraer nuestro código, desconozco si este funcionamiento es para el resto de los lenguajes, pero supongo que también.

Para mi brand y model (marca y modelo) son propiedades de todos los car (automoviles). Que UberBlack y UberVan admintan ciertos tipos de modelos es una regla de negocio (metodo o validacion) pero modelo y marca son caracteristicas de todos los autos. La aplicacion puede una vez confirmado el viaje notificar al cliente (user) cual es el auto que debe esperar para identificarlo (marca, modelo, y puede ser patente y color)

Hasta que punto se puede usar la herencia, es claro que en la parte de la clase de los carros, podemos abstraer mucho más. Pero cuando se pase a código ¿No sería poco cómodo trabajar con tantos archivos de clases?

Una forma de detectar las herencias es ver si los atributos de las clases se repiten o no.
Otra forma menos evidente es cuando la regla de negocio nos dice que ciertas clases se relacionan ( aún cuando no comparten atributos)

¿Que es Trip?
Dicho de forma muy sencilla, es un monitoreo que te permite rastrear a una persona que usa el servicio de taxi UBER, en tiempo real. Con esta función, lograrás sentir la tranquilidad que buscas cuando algún miembro de tu familia viaja por la ciudad, o incluso en otro país que preste el servicio del que hablamos

Pagos

Comparto mi UML Model hasta el momento:

Aquí mi respuesta al reto de optimización.

Según tu lógica, se necesitaría abstraer más aún las clases Uber, con UberNormal y UberLuxury, pues igual comparten atributos.

Por medio de estos diagramas se puede apreciar los atributos que compartirán las superclases con las subclases y, además servirán como base para la documentación de la aplicación que estemos creando.

Para realizar este tipo de diagramas.
https://www.draw.io/

Extension de VSC para crear UML:

  • UMLet
    Solo debes crear un archivo con el siguiente nombre y extension:
    "-filename=someinputfile.uxf"

Ej:

-uber=someinputfile.uxf

La clase Payments no debería tener también un atributo tipo “valor” o “cantidad a pagar”?

Mi diagrama

Muchas gracias por el contenido de este curso muy bien explicado el tema de la Herencia con un caso de como funciona Uber

Aquí esta mi diagrama! Un poco complicado, y desorganizado pero voy a mejorar con UML.

Como puedes ver utilice un montón de herencia para minimizar el tamaño del código al final.

Muy buena clase profe!

Excelente, muy buen grafico.

La verdad muy buen ejemplo de aplicación no creo que se me olvide ahora si nunca.

(Marcador) Diagrama Car

que eficiente

Niceeeee

FELIZ HALLOWEEN

La herencia ayuda a evitar muchas quebraderas de cabeza posteriores.

Muy buena clase

Excelente programa starUML ⭐