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

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

Otros tipos de Herencia

29/37

Lectura

A partir de ahora las clases que estén siendo heredades las llamaremos familias.

Acabamos de aplicar herencia a la familia Car. Ahora apliquémosla a la familia Payment.

En clases anteriores te mencioné que otro punto de partida que puedes tomar para aplicar herencia es del hecho de que hay clases que lógicamente deberían estar en una familia, como es el caso de Payment.

Repasemos el diagrama de Payment

Captura de pantalla 2019-01-21 a la(s) 12.21.03.png

Notarás que a nivel de código parece inservible pero cuando estemos en el caso de uso Pagar un Viaje, probablemente en ese momento no sabremos cuál es el método de pago, y necesitemos ingresar un dato lo suficientemente genérico que conceptualmente nos dé la información que necesitamos, en este caso que es un Payment. Este es un tipo de Polimorfismo y uno de los principios SOLID del software que obedece a la Inyección de Dependencias. Lo veremos más adelante a detalle.

Ahora nos faltará crear las clases y aplicar su herencia.

Aportes 222

Preguntas 3

Ordenar por:

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

En este curso comprendí que PHP es un lenguaje de odio y python es amor puro

Los principios SOLID están muy bien explicados en el curso de buenas prácticas de escritura de código, recomiendo mucho tomar ese curso después de este:D!

Aquí mis clases de la familia payment en Java:

JavaScript

Java

Python

He pasado de odiar a PHP a decir “Me gustaría aprenderlo correctamente y no como me lo enseñaron”.
De amar a Python a decir “Es simplemente bellisimo”.
De tener temor a Java a decir “Realmente me gustaría aprenderlo”.
Y de JavaScript que es un lenguaje loco y muy cool.

🤔 Vamos aprendiendo buenas prácticas de programación, conforme avanzamos en la adquisición de nuevos conocimientos.

tomando apuntes
(url)

Python 🤠

class Payment:
    id = int
    amount = int
    kind = str

    def __init__(self, amount, kind):
        self.amount = amount
        self.kind = kind
from payment import Payment

class Cash(Payment):
    entry = int
    exchange = int

    def __init__(self, amount, kind, entry, exchange):
        super().__init__(amount, kind)
        self.entry = entry
        self.exchange = exchange
from payment import Payment

class Card(Payment):
    number = int
    cvv = int
    date = str

    def __init__(self, amount, kind, number, cvv, date):
        super().__init__(amount, kind)
        self.number = number
        self.cvv = cvv
        self.date = date
from payment import Payment

class paypal(Payment):
    email = str

    def __init__(self, amount, kind, email):
        super().__init__(amount, kind)
        self.email = email

I’m Tired pffff

Deberia haber algun curso exclusivamente para UML donde expliquen amplianmente los casos de uso y demás relacionado con el tema.

Necesitamos un curso de UML, es muy necesario para aprender a como crear las diagramas, y como estructurarlo de mejor manera

En Python

Reto muy interesante. Lo chistoso es que tanto como Python como PHP tienen algunas similitudes como el nombre de la carpeta es en minúscula.

Java

Payment

Card

PayPal

Cash

JavaScript

Payment

Card

PayPal

Cash

PHP

Payment

Card

PayPal

Cash

Python

Payment

Card

PayPal

Cash

se deberia poner la cantidad a pagar en la clase payment y las otras clases deberian heredar la cantidad a pagar y el id estaria bien esto ?

JavaScript:

//index.js
var car = new Car("AW456", new Account("Andres Herrera", "QWE234"))
car.passenger = 4;
car.printDataCar();

var uberX = new UberX("ADE131", new Account("Juancho", "JFN213"), "Chevi", "Spark")
uberX.passenger = 4;
uberX.printDataCar();

var paypal = new Paypal("SHAKD", "[email protected]");
paypal.printDataPayment();


//Payment.js

class Payment {
    constructor(id) {
        this.id = id;
    }

    printDataPayment() {
        console.log(this.id, this.email);
        
    }
    
}

//Cash.js

class Cash extends Payment {
    constructor(id) {
        super(id);
    }
}

//Paypal.js

class Paypal extends Payment {
    constructor(id, email) {
        super(id);
        this.email = email;
    }
}

//Card.js

class Card extends Payment {
    constructor(id, number, cvv, date) {
        super(id);
        this.number = number;
        this.cvv = cvv;
        this.date = date;
    }
}

JavaScript (index.html)

![](

De este curso he aprendido que odio PHP y realmente me gusta Java jajaja

Python

class Payment:
    id = int
from payment import Payment

class Cash(Payment):
    def __init__(self, id):
        super.__init__(id)
from payment import Payment

class Card(Payment):
    number = int
    cvv = int
    date = str

    def __init__(self, id, number, cvv, date):
        super.__init(id)
        self.number = number
        self.cvv = cvv
        self.date = date
from payment import Payment

class PayPal(Payment):
    email = str

    def __init__(self, id, email):
        super.__init(id)
        self.email = email

Python

payment. py

class Payment:
    id = int

PayPal. py

from payment import Payment

class PayPal(Payment):
    email = str
    password = str

    def __init__(self, email, password):
        self.email = email
        self.password = password

Card. py

from payment import Payment

class Card(Payment):
    numberCard = str
    dateCard = str
    cvv = str

    def __init__(self, numberCard, dateCard, cvv):
        self.numberCard = numberCard
        self.dateCard = dateCard
        self.cvv = cvv

Cash. py

from payment import Payment

class Cash(Payment):
    ammount = str

    def __init__(self, ammount):
        self.ammount = ammount

Mi intento de aplicar polimorfismo con Python

**Inyeccion de depenencias: **
De wiki: es un patrón de diseño orientado a objetos, en el que se suministran objetos a una clase en lugar de ser la propia clase la que cree dichos objetos. Esos objetos cumplen contratos que necesitan nuestras clases para poder funcionar

Clases en python

Card

from payment import Payment

class Card(Payment):
    number = int
    cvv = int
    date = str

    def __init__(self, id, number, cvv, date):
        super().__init__(id)
        self.number = number
        self.cvv = cvv
        self.date = date

    def print_data_card(self):
        print("Number card {} \nCVV: {}\nDate: {}".format(self.number, self.cvv, self.date))

Paypal

from payment import Payment

class Paypal(Payment):
    email = str

    def __init__(self, id, email):
        super().__init__(id)
        self.email = email

Cash

from payment import Payment

class Cash(Payment):

    def __init__(self, id):
        super().__init__(id)

El ejercicio resuelto , para Java seria asi:

y para python la verdad no se mucho del lenguaje pero investigando un poco creo que es asi, si alguien que conozca el lenguaje tiene un aporte bienvenido:

Java




Python




Javascript




Php




JAVA

PYTHON

JAVASCRIPT

PHP

PYTHON

Solución al warning “unresolved import” (https://www.it-swarm-es.tech/es/python/error-de-importacion-no-resuelta-de-pylint-en-el-codigo-de-visual-studio/807582791/)

  1. Crear un fichero con extensión .env en la workspacefolder (raíz donde están las carpetas Java, Php, JS y Python)
    en mi caso: CursoPOOUberPython.env
  2. Añadir la siguiente línea al fichero env
    PYTHONPATH=path completo a mi carpeta Python
  3. Ir al menú File => Preferences = Settings
    teclear: python.envFile
    cambiar la propiedad ${workspaceFolder}/.env por ${workspaceFolder}/CursoPOOUberPython.env
  4. Listo, ya funciona

Espero haber ayudado a otros compañeros con el mismo problema. Gracias.

Asi quedó el reto en los 4 lenguajes!!
Java

Javascrip

PHP

Python

java

javascript

php

python

Javascript

class Tarjeta extends Payments {
    constructor(id, number, cvv, date) {
        super(id);
        this,number = number;
        this.cvv = cvv;
        this.date = date;
    }}

Python

from payments import Payments

class Tarjeta(Payments):
    number = int
    date = int
    cvv = int
    def __init__(self, id, number, date, cvv):
        super.__init__(id)
        self.number = number
        self.date = date
        self.cvv = cvv

Java

public class Tarjeta extends Payments {
    Integer number;
    Integer date;
    Integer cvv;

    public Tarjeta (Integer id, Integer number, Integer date, Integer cvv) {
        super (id);
        this.number = number;
        this.date = date;
        this.cvv = cvv;
    }}

PHP

<?php
    class Tarjeta extends Payments {
        public $number;
        public $date;
        public $cvv;

        public function __construct($id, $number, $date, $cvv) {
            parent:: __construct($id);
            $this->number = $number;
            $this->date = $date;
            $this->cvv = $cvv;
        }
    }
?>

Que pasa con las participaciones y solución a las dudas en los nuevos curso?

Cual seria la diferencia en JAVA entre un tipo de dato int e Integer, la mayoria usaron Integer, pero yo use int, en JAVA siempre he usado int

JavaScript(Clase PayPal)
![](

JavaScript (index.js)
![](

JavaScript(Clase Card)
![](

JavaScript(Clase Cash)
![](

JavaScript(Clase Payment)
![](

<h3>Card.java
</h3> <h3>Card.js
</h3> <h3>Card.php
</h3> <h3>card. py
</h3>

JavaScript:

class Payment{
  constructor(amount) {
    this.id;
    this.amount = amount;
  }

  printDataPayment() {
    console.log(this.amount);
  }
}



class PaymentCard extends Payment{
  constructor(amount, email){
    super(amount)
    this.email = email
  }
}





class PaymentCash extends Payment{
  constructor(amount){
    super(amount)
  }
}




class PaymentPaypal extends Payment{
  constructor(amount, number_card, cvv_card, date_card){
    super(amount)
    this.number_card = number_card
    this.cvv_card = cvv_card
    this.date_card = date_card
  }
}

¡Vamos a ello!

#Payment

class Payment:
    id = int

    def __init__(self, id):
        self.id = id

#Cash / Card or PayPal (just change the name)

from payment import Payment

class Card(Payment):

    def __init__(self, id):
        super(Card, self).__init__(id);

Payment.php

<?php
class Payment
{
    public $id;

    public function __construct($id)
    {
        $this->id = $id;
    }
}
?>

PayPal.php

<?php
require_once("Payment.php");
class PayPal extends Payment
{
    public $email;

    public function __construct($id, $email)
    {
        parent::__construct($id);
        $this->email = $email;
    }
}
?>

Cash.php

<?php
require_once("Payment.php");
class Cash extends Payment
{

    public function __construct($id)
    {
        parent::__construct($id);
    }
}
?>

Card.php

<?php
require_once("Payment.php");
class Card extends Payment
{
    public $number;
    public $cvv;
    public $date;

    public function __construct($id, $number, $cvv, $date)
    {
        parent::__construct($id);
        $this->number = $number;
        $this->cvv = $cvv;
        $this->date = $date;
    }
}
?>

El Principio de Inyección de Dependencias
El Principio de inyección de dependencia no es más que poder pasar (inyectar) las dependencias cuando sea necesario en lugar de inicializar las dependencias dentro de la clase receptora.
Desacoplar la construcción de sus clases de la construcción de las dependencias de sus clase

Mi lenguaje favorito actualmente es PHP.

Clase Payment

<?php

class Payment
{
    public $id;
    public $amount;

    public function __construct($id, $amount)
    {
        $this->id = $id;
        $this->amount = $amount;
    }

    public function printPaymentMethod()
    {
        echo "Id: " . $this->id;
        echo "<br>";
        echo "Monto: " . $this->amount;
    }
}

Clase Cash

<?php
require_once('Payment.php');
class Cash extends Payment
{
    public function __construct($id, $amount)
    {
        parent::__construct($id, $amount);
        $this->id = $id;
        $this->amount = $amount;
    }
}

Clase Card

<?php
require_once('Payment.php');
class Card extends Payment
{
    public $cvv;
    public $date;
    public function __construct($id, $amount, $cvv, $date)
    {
        parent::__construct($id, $amount);
        $this->id = $id;
        $this->amount = $amount;
        $this->cvv = $cvv;
        $this->date = $date;
    }
}

Clase Paypal

<?php
require_once('Payment.php');
class Paypal extends Payment
{
    public $email;

    function __construct($id, $amount, $email)
    {
        parent::__construct($id, $amount);
        $this->id = $id;
        $this->amount = $amount;
        $this->email = $email;
    }
}

Clase Main

<?php
require_once('Payment.php');
require_once('Card.php');

echo "Método de Pagos";
echo "<hr>";

$card = new Card(1, 400.35, "106", "17/07/1998");
$card->printPaymentMethod();

Me parece que ahora que estoy aprendiendo, las versiones más actualizadas de los lenguajes de programación dan errores con respecto a las clases.

public class Pagos {
Integer id;

public Pagos (int id){
    this.id = id;
}

}

–

class Tarjeta extends Pagos{
int numTarjeta;
int cvv;
String fecha;

Tarjeta(Integer id, Integer numTarjeta, Integer cvv, String fecha){
    super (id);
    this.numTarjeta = numTarjeta;
    this.cvv = cvv;
    this.fecha = fecha;
}

}

–

public class PayPal extends Pagos{
String email;

PayPal(int id, String email){
    super(id);
    this.email = email;
}

}

public class Efectivo extends Pagos {
Efectivo(int id){
super(id);
}
}

en python:

from payment import Payment

class Efectivo(Payment):

def __init__(self, id):
    super.__init__(id)

from payment import Payment

class Tarjeta(Payment):

def __init__(self, id):
    super.__init__(id)

from payment import Payment

class PayPal(Payment):

def __init__(self, id):
    super.__init__(id)

en php:

<?php
require_once(‘payment.php’);

class Efectivo extends Payment {

public function __construct($id){
	parent::__construct($id);
}	

}
?>

<?php
require_once(‘payment.php’);

class Tarjeta extends Payment {

public function __construct($id){
	parent::__construct($id);
}	

}
?>

<?php
require_once(‘payment.php’);

class PayPal extends Payment {

public function __construct($id){
	parent::__construct($id);
}	

}
?>

Tengo realmente muchas dudas pero creo que esta es una solución para java. He compilado y ejecutado y la respuesta ha sido correcta.

PAYMENT

class payment{
  Integer id;

  public payment(Integer id)
  {
    this.id = id;
  }
  void printDataPayment()
  {
    System.out.println("Pago número : " + id);
  }
}

EFECTIVO

class efectivo extends payment{

  public efectivo(Integer id)
  {
    super(id);
  }
}

TARJETA

class tarjeta extends payment{
   String number;
   String cvv;
   Date fecha;

   public tarjeta(Integer id; String number, String cvv, Date fecha)
   {
     super(id);
     this.number = number;
     this.cvv = cvv;
     this.fecha = fecha;
    }
}

PAYPAL

class paypal extends payment{
   String email;

   public efectivo(Integer id; String email)
   {
     super(id);
     this.email = email;
    }
}

Los principios SOLID es el tema que más se me ha complicado dominar.

Clase Card o Tarjeta

from datetime import date
from payment import Payment

class Card(Payment):
    id = int
    number = int
    cvv = int
    date = date

    def __init__(self, id, number, cvv, date):
        super().__init__(id)
        self.number = number
        self.cvv = cvv
        self.date = date

Clase cash o Efectivo

from payment import Payment

class Cash(Payment):
    id = int

    def __init__(self, id):
        super().__init__(id)
        self.id = id

Clase PayPal

from payment import Payment

class PayPal(Payment):
    id = int
    email = str

    def __init__(self, id, email):
        super().__init__(id)
        self.email = email

Código en JavaScript (corrijanme si algo está mal)

Payment.js

class Payment{
    constructor(id){
        super(id)
        this.id;
    }
}

Card.js

class Card extends Payment {
    constructor(id, number, cvv, date){
        super(id)
        this.number = number;
        this.cvv = cvv;
        this.date = date;
    }
}

Cash.js

class Cash extends Payment {
    constructor(id){
        super(id)
    }
}

No me gusta PHP XD !!!

Excelente la inclusión de los principios SOLID, empiezan por lo basico y luego van explicando el contenido de ¿por qué? y ¿para qué? se hace cada cosa

Por aqui la solucion al reto usando Java

class Payment{
    int id;
    public Payment(int id){
        this.id = id;
    }
}
class Card extends Payment{

    int number;
    int cvv;
    String date;

    public Card(int id,int number,int cvv,String date){
        super(id);
        this.number = number;
        this.cvv = cvv;
        this.date = date;
    }
}
class PayPal extends Payment{

    String email;

    public PayPal(int id,String email){
        super(id);
        this.email = email;
    }
}
class Cash extends Payment{

    public Cash(int id){
        super(id);
    }
}

JAVA

Java Script

PHP

Phyton

Baia baia.

En programación orientada a objetos el polimorfismo se refiere a la posibilidad de definir clases diferentes que tienen métodos o atributos denominados de forma idéntica, pero que se comportan de manera distinta.

JAVA
Solución al error “debe actualizar la versión del JDK a 11 o superior”, cada vez que se intenta ejecutar Java
1) Bajar la última versión de JDK (yo he bajado la versión 14, 64 bits para Windows)
2) Ir al explorador de Windows
en algún lugar de MiOrdenador (del espacio en blanco inferior), presionar con el botón derecho del ordenador
3) En el menú contextual emergente
presionar sobre la opción "propiedades"
4) Hacer clic sobre "Configuración avanzada del sistema"
en la parte inferior presionar el botón "Variables de entorno"
5) Ir a las variables del Sistema (parte inferior de la pantalla)
seleccionar la variable JAVA_HOME
6) Presionar el botón "Editar"
Cambiar el path que ponga por el del JDK que hemos instalado, en mi caso: C:\Program Files\Java\jdk-14.0.2
7) Aceptar y cerrar la ventana de “Varibles de entorno” y el Explorador de Windows
8) Si hace falta, cerrar y volver a abrir VSCode
9) Listo, ya funciona Java

Espero haber ayudado a otros compañeros con el mismo problema. Gracias.

Familia Payment en Python 🐍

class Payment:
    id = int

    def __init__(self, id):
       self.id = id

Clases hijas

from payment import Payment

class Card:
    number = int
    cvv = int
    date = str

    def __init__(self, id, number, cvv, date):
        super().__init__(id)
        self.number = number
        self.cvv = cvv
        self.date = date
from payment import Payment

class Paypal:
    email = str

    def __init__(self, id, email):
        super().__init__(id)
        self.email = email
from payment import Payment

class Cash:
    
    def __init__(self, id):
        super().__init__(id)

PHP

Python

JS

Python (Clase PayPal)
![](

Me surge la duda de si las clases hijas deben heredar el id de pago de la clase padre, y cómo generar este id consecutivo.

clase padre:

public class Payment {
    Integer id;
    Double amount;
    public Payment(Integer id, Double amount){
        this.id = id;
        this.amount = amount;
    }
    public void printDataPayment(){
        System.out.println("Id: "+id+" Monto: "+ amount);
    }
}```
    _++ Hijas:++_
**-Cash:**

public class Cash extends Payment {

public Cash(Integer id, Double amount){
    super(id, amount);
}
@Override
public void printDataPayment() {
    super.printDataPayment();
    System.out.println("Metodo de pago: Cash");
}

}
-Card

public class Card extends Payment{

    String number;
    String expiracy;
    
    public Card(Integer id, Double amount, String number, String expiracy){
        super(id, amount);
        this.number = number;
        this.expiracy = expiracy;
    }
    @Override
    public void printDataPayment() {
        super.printDataPayment();
        System.out.println("numero de tarjeta: "+number+" Expira: "+expiracy);
    }
}
**-Paypal**

public class Paypal extends Payment {
String email;

public Paypal(Integer id, Double amount, String email){
    super(id, amount);
    this.email = email;
}

@Override
public void printDataPayment() {
super.printDataPayment();
System.out.println("email: "+email);
}
}


  • Cash:
class Cash extends Payment{

    public Cash(Integer id, Double amount){
        super(id, amount);
    }

    public void printDataPayment(){
        System.out.println("Method of pay: Cash");
        super.printDataPayment();
    }
}
  • Card:
class Card extends Payment{
    String number;
    String expiracy;

    public Card(Integer id, Double amount, String number, String expiracy){
        super(id, amount);
        this.number = number;
        this.expiracy = expiracy;
    }

    public void printDataPayment(){
        System.out.println("Method of pay: Card");
        super.printDataPayment();
        System.out.println("Number: " + this.number + " Expiracy: " + this.expiracy);
    }
}
  • Paypal:
class Paypal extends Payment{
    String email;
    
    public Paypal(Integer id, Double amount, String email){
        super(id, amount);
        this.email = email;
    }     

    public void printDataPayment(){
        System.out.println("Method of pay: Paypal");
        super.printDataPayment();
        System.out.println("Email: " + this.email); 
    }
}
  • Payment:
public class Payment {
    Integer id;
    Double amount;
    
    public Payment(Integer id, Double amount){
        this.id = id;
        this.amount = amount;
    }

    public void printDataPayment(){
        System.out.println("Id: " + this.id + " Amount: " + this.amount);
    }
}
  • Main:
class Main{
    public static void main(String[] args) {
        System.out.println("Hola mundo");

        Car car = new Car("SMT435", new Account("Dilan Ariza", "1000133434"));
        car.passagenger = 4;
        car.printDataCar();

        Car car2 = new Car("SGT943", new Account("Santiago Cañon", "1000133555"));
        car2.passagenger = 3;
        car2.printDataCar();


        System.out.println("PAYMENTS \n");
        Payment payment = new Payment(1, 325.2);
        payment.printDataPayment();

        Cash cash = new Cash(2, 325.3);
        cash.printDataPayment();

        Card card = new Card(3, 400.0, "10008000", "20122020");
        card.printDataPayment();

        Paypal paypal = new Paypal(4, 540.0, "[email protected]");
        paypal.printDataPayment();

    }
}

Java


public class Card extends Payment {
    Integer number;
    Integer cvv;
    String date;
    
    public Card(Integer id, Integer number, Integer cvv, String date) {
        super(id);
        this.number = number;
        this.cvv = cvv;
        this.date = date;
    }
}
public class PayPal extends Payment {
    String email;

    public PayPal(Integer id, String email) {
        super(id);
        this.email = email;
    }
}
public class Cash extends Payment {
    
    public Cash(Integer id) {
        super(id);
    }
}

JS


class Card extends Payment {

    constructor(id, number, cvv, date) {
        super(id)
        this.number = number
        this.cvv = cvv
        this.date = date
    }
}
class PayPal extends Payment {

    constructor(id, email) {
        super(id)
        this.email = email
    }
}
class Cash extends Payment {

    constructor(id) {
        super(id)
    }
}

PHP


<?php

require_once('Payment.php');

class Card extends Payment {
    public $number;
    public $cvv;
    public $date;

    public function __construct($id, $number, $cvv, $date) {
        parent::__construct($id);
        $this -> number = $number;
        $this -> cvv = $cvv;
        $this -> date = $date;
    }
}
?>
<?php

require_once('Payment.php');

class PayPal extends Payment {
    public $email;

    public function __constrcut($id, $email) {
        parent::__constrcut($id);
        $this -> email = $email;
    }
}
?>
<?php

require_once('Payment.php');

class Cash extends Payment {

    public function __construct($id) {
        parent::__construct($id);
    }
}
?>

Python


from payment import Payment

class Card(Payment):
    number = int
    cvv = int
    date = str

    def __init__(self, id, number, cvv, date):
        super().__init__(id)
        self.number = number
        self.cvv = cvv
        self.date = date
import email
from payment import Payment

class PayPal(Payment):
    email = str

    def __init__(self, id, email):
        super().__init__(id)
        self.email = email
from payment import Payment

class Cash(Payment):

    def __init__(self, id):
        super().__init__(id)

CUARTO Y ULTIMO APORTE 4/4 Insisto solo me hace falta lo de las date que no sé como hacerlo (aún) 😃

PYTHON

#*********PAYMENT************
class Payment:
    id = int
    mount = int

    def __init__(self, mount):
        self.mount = mount


#*********CASH************
from payment import Payment

class Cash(Payment):
    def __init__(self, mount):
        super().__init__(mount)

#*********PAYPAL************
from payment import Payment

class PayPal(Payment):
    email = str
    
    def __init__(self, mount, email):
        super().__init__(mount)
        self.email = email

#*********CARD************
from datetime import datetime
from payment import Payment

class Card(Payment):
    number = float
    cvv = int
    date = datetime
    def __init__(self, mount, number, cvv, date):
        super().__init__(mount)
        self.number = number
        self.cvv = cvv
        self.date = date

#*********INSTANCIA************
from Card import Card
from UberX import UberX
from car import Car
from account import Account

if __name__ == "__main__":
    card = Card(199.99, 1234567890, 123, "03/25");
    print(vars(card))

TERCER APORTE 3/4

PHP

//*********PAYMENT************
<?php
    class Payment {
        public $id = integer;
        public $mount = float;

        public function __construct($mount){
            $this->mount = $mount;
        }

        public function printDataPayment(){
            echo "Mount: $this->mount";
        }
        
    }
?>

//*********CASH************
<?php
    require_once('payment.php');
    class Cash extends Payment {
    
        public function __construct($mount){
            parent::__construct($mount);
        }
    }
?>

//*********PAYPAL***********

<?php
    require_once('payment.php');
    class PayPal extends Payment {
        public $email;

        public function __construct($mount, $email){
            parent::__construct($mount);
            $this->email = $email;
        }
    }
?>

//*********CARD************

<?php
    require_once('payment.php');
    class Card extends Payment {
        public $number;
        public $cvv;
        public $date;

        public function __construct($mount, $number, $cvv, $date){
            parent::__construct($mount);
            $this->number = $number;
            $this->cvv = $cvv;
            $this->date = $date;
        }

        public function printDataCard(){
            echo "Number: $this->number , CVV:  $this->cvv , Date: $this->date";
        }
    }
?>

//*********INSTANCIA************

<?php
    require_once('car.php');
    require_once('account.php');
    require_once('uberX.php');
    require_once('payment.php');
    require_once('card.php');

    $card = new Card(199.99, 1234657890, 123, "08/25");
    $card->printDataPayment();
    $card->printDataCard();
?>

Segundo aporte 2/4

JAVASCRIPT

//*********PAYMENT************
class Payment{
    constructor(mount){
        this.id;
        this.mount = mount;
    }
    
    printDataPayment() {
        console.log(this.mount)
    }
}

//*********CASH************
class Cash extends Payment {
    constructor(mount){
        super(mount);
    }
}

//*********PAYPAL************
class PayPal extends Payment {
    constructor(mount, email){
        super(mount);
        this.email = email;
    }
}

//*********CARD************
class Card extends Payment {
    constructor(mount, number, cvv, date){
        super(mount);
        this.number = number;
        this.cvv = cvv;
        this.date = date;
    }
    printDataCard() {
        console.log(this.number)
        console.log(this.cvv)
        console.log(this.date)
    }
}

//*********INSTANCIA************
var card = new Card(199.99, 1234567890, 123, "25/10/2025")
card.printDataPayment();
card.printDataCard();

//*********HTML************
<script src="Account.js"></script>
<script src="Car.js"></script>
<script src="UberX.js"></script>
<script src="Payment.js"></script>
<script src="Card.js"></script>
<script src="index.js"></script>

Eso estuvo muy bueno. Así me quedó. Ya lo probé y hace lo que quiero. Solo me falta poner los tipo date para las fechas. Lo pondre en varios aportes para que sea mas entendible. 1/4

Java

//*******PAYMENT*********
public class Payment {
    Integer id;
    Double mount;

    public Payment(Double mount){
        this.mount = mount;
    }

    void printDataPayment(){
        System.out.println("Mount: " + mount);
    }
}

//*******CASH*********
public class Cash extends Payment {
    
    public Cash(Double mount){
        super(mount);
    }
    
}

//*******PAYPAL*********
public class PayPal extends Payment {
    String email;

    public PayPal(Double mount, String email){
        super(mount);
        this.email = email;
    }
}

//*******CARD*********
import java.util.Date;

public class Card extends Payment{
    Integer number;
    Integer cvv;
    Date date;

    public Card(Double mount, Integer number, Integer cvv, Date date){
        super(mount);
        this.number = number;
        this.cvv = cvv;
        this.date = date;
    }

    void printDataCard(){
        System.out.println("Number: " + number);
        System.out.println("CVV: " + cvv);
        System.out.println("Date: " + date);
    }
}

//*******INSTANCIA*********
	import java.util.Date;

class Main {
    public static void main(String[] args) {
        Card card = new Card(199.99, 1234567890, 123, new Date());
        card.printDataPayment();
        card.printDataCard();
    }
}

creo que odio java y php :’(

Así me quedó la familia Payment en Java:

public class Payments {

    int id;
 
    public Payments (int id){

        this.id = id;

    }

    void printDataPayment(){

        System.out.println("id: " + id);

    }

}


public class Cash extends Payments{

    public Cash(int id){

        super(id);

    }
    
}
public class Card extends Payments{
    
    int number;
    int cvv;
    String date;

    public Card(int id, int number, int cvv, String date){

        super(id);
        this.number = number;
        this.cvv = cvv;
        this.date = date;

    }
}

public class Paypal extends Payments{

    String email;

    public Paypal (int id, String email){

        super(id);
        this.email = email;

    }
    
}

class Main {

    public static void main(String[] args) {
        System.out.println("Hola mundo");

        Car car = new Car("AMQ123", new Account("Alan Ayala", "CAAO12"));
        car.id = 65;
        car.passegenger = 4;

        car.printDataCar();

        Car car2 = new Car("QWE657", new Account("Andrea Herrera", "AND123"));
        car2.passegenger = 3;

        car2.printDataCar();

        Payments payment = new Payments(123);

        payment.printDataPayment();

        Payments card = new Card(456, 789456, 489, "30/03/2023");
        card.printDataPayment();

        Payments payPal = new Paypal(473, "[email protected]"); 
        payPal.printDataPayment();

    }

}

Resultado:

Hola mundo
License: AMQ123Name Driver: Alan Ayala
License: QWE657Name Driver: Andrea Herrera
id: 123
id: 456
id: 473

Hola. Java y JavaScript, así queda mi herencia de la clase Payment:
— Java —

Payment.java

Card.java

Paypal.java

Cash.java

— JavaScript —

Payment.js

Card.js

Paypal.js

Cash.js

No he entendido nada de este curso con esa profesora

<code>
```from payment import Payment
from datetime import date

class Card(Payment):
    number = str
    cvv    = int
    date   = date

    def __init__(self,id,number,cvv,date):
        super.__init__(id)
        self.number = number
        self.cvv    = cvv
        self.date   = date

Te amo Python, excepto en clases, ahí es más chevere de usar JS en ECMA6

En python.

PYTHON

Mi aporte con python 😃

Mi Aporte en el lenguaje de Java
Payment


public class Payment {
    Integer id;
    
    public Payment(Integer id){
    this.id = id;
    }
}

Tarjeta

class CardC extends Payment{
    Integer cardNumber;
    Integer cvv;
    String fechaCad;
    public CardC(Integer id,Integer cardNumber,Integer cvv, String fechaCad){
        super(id);
        this.cardNumber= cardNumber;
        this.cvv = cvv;
        this.fechaCad = fechaCad;

    }
}

Efectivo

class Effective extends Payment{
    public Effective(Integer id){
        super(id);
    }
}

Paypal

class Paypal extends Payment {
    String email;
    String password;
    public Paypal(Integer id, String email, String password){
        super(id);
        this.email=email;
        this.password = password;
    }
}

En la clase payment, le agregue la variable amount, ya que todo viaje tiene una cantidad de dinero asociada. ¿Me adelante?

Agrego mis aportes en Python:

Las clase payment:

class Payment:
    id      = int
    amount  = float


    def __ini__(self,id,amount):
        self.id     = id
        self.amount = amount

Subclase Card

from payment import Payment


class Card(Payment):
    number  =   int
    cvv     =   int
    date    =   datetime


    def __init__(self, id, amount,number,cvv,date):
        super().__ini__(id, amount)
        self.number = number
        self.cvv    = cvv
        self.date   = date

subclase paypal

from payment import Payment


class Paypal(Payment):
    email   =   str


    def __init__(self, id, amount,email):
        super().__init__(id, amount)
        self.email  = email

subclase cash

from payment import Payment


class Cash(Payment):
    

    def __init__(self,id,amount):
        super().__init__(id,amount)

Saludos 😃

PHP está desarrollado mayormente para scripting del lado del servidor, desarrollo web y posiblemente lleve más ventaja en ese aspecto, sin embargo desde mi punto de vista ambos son muy flexibles para uso en POO y la documentación es vasta para ambos.

hola
para al generar el objeto genere el id aggrege un método en payment

class Payment:
    id :int 
    count:int = 0
    
    def next_id(self):
        self.__class__.count += 1
        return self.__class__.count
    
    def __init__(self) -> None:
        self.id = self.next_id()

PYTHON:
Payment

class Payment:
    id = str

    def __init__(self, id):
        self.id = id

Cash

from Payment import Payment

class Cash(Payment):
    def __init__(self, id):
        super().__init__(id)

Credit Card

from Payment import Payment

class Card(Payment):
    cvv = int
    card_number = int
    expiration_date = str #mm/yyyy

    def __init__(self, id, cvv, card_number, expiration_date):
        super().__init__(id)
        self.cvv = cvv
        self.card_number = card_number
        self.expiration_date = expiration_date

Paypal

from Payment import Payment

class Paypal(Payment):
    email = str
    password = str

    def __init__(self, id, email, password):
        super().__init__(id)
        self.email = email
        self.password = password

Mi respuesta para la familia Payment en python

PayPal:

from payment import Payment

class PayPal(Payment):
    email = str

    def __init__(self, value, email):
        super().__init__(value)
        self.email = email 

Card:

from payment import Payment

class Card(Payment):
    CardNumber = int
    cvv        = int

    def __init__(self, value, CardNumber, cvv):
        super().__init__(value)
        self.CardNumber = CardNumber
        self.cvv        = cvv

Cash:

from payment import Payment

class Cash(Payment):
    bills = int

    def __init__(self, value, bills):
        super().__init__(value)
        self.bills = bills

Payment:

class Payment:
    id    = int
    value = float

    def __init__(self, value):
        self.value = value

EJEMPLO DE CREDITCARD

from payment import payment

class creditCard(payment):
    numberCard = int
    password = str
    name = str

def __init__(self, name, numberCard, password):
    super.__init__(id)
    self.name = name
    self.numberCard = numberCard
    self.password = password

Detesto PHP.

A partir de ahora las clases que estén siendo heredades las llamaremos familias.

Recomiendo el curso de buenas prácticas de escritura de código.
🤖

a implementar la logica

Compañeros les dejo un video para entender mejor UML espero les sirva!

Lo unico que puedo decir es que amo javascript ❤️

Javascript

Java

Python

PHP

Aquí mi aporte en java:

Nota, JAVA lo trabajé en el IDE netbeans.

Tarjeta

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.cursopoo;

/**
 *
 * @author marco
 */
public class Tarjeta extends Payment{
    
    int numero_tarjeta;
    String nombre_propietario;
    int mes_vencimiento;
    int anio_vencimiento;
    int cvv;    

    public Tarjeta(int id, int numero_tarjeta, String nombre_propietario, int mes_vencimiento, int anio_vencimiento, int cvv) {
        super(id);
        
        this.numero_tarjeta = numero_tarjeta;
        this.nombre_propietario = nombre_propietario;
        this.mes_vencimiento = mes_vencimiento;
        this.anio_vencimiento = anio_vencimiento;
        this.cvv = cvv;
        
    }
    
}

Efectivo

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.cursopoo;

/**
 *
 * @author marco
 */
public class Efectivo extends Payment{
    
    public Efectivo(int id) {
        super(id);
    }
    
}

Paypal:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.cursopoo;

/**
 *
 * @author marco
 */
public class Paypal extends Payment{
    
    String email;
    
    public Paypal(int id, String email) {
        super(id);
        
        this.email = email;
    }
    
}

Clase main

/*Agregué estas líneas*/
Tarjeta tarjeta = new Tarjeta(1, 123456, "marco antonio", 11, 26, 654);
        
Paypal paypal = new Paypal(1, "[email protected]");
        
System.out.println("Tarjeta: " + tarjeta.numero_tarjeta + " del propietario " + tarjeta.nombre_propietario);
System.out.println("Paypal email: " + paypal.email);

JAVA



Solución:

Payment.java

class Payment {
    Integer id;

    public Payment(int id){
        this.id = id;
    }
}

Card.java

class Card extends Payment {
    Integer number;
    Integer CVV;
    String Date;

    public Card(Integer id, Integer number, Integer CVV, String Date){
        super(id);
        this.number = number;
        this.CVV = CVV;
        this.Date = Date;
    }

}

Paypal.java

class Paypal extends Payment {
    String email;

    public Paypal(Integer id, String email){
        super(id);
        this.email = email;
    }
}

Cash.java

class Cash extends Payment {

    public Cash(Integer id){
        super(id);
    }
    
}