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

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

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

Declarando un M茅todo Constructor en Java y JavaScript

23/37
Recursos

Aportes 234

Preguntas 75

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Hola 馃懆馃徑鈥嶐煔馃枑馃徑, les comparto la parte de JS donde ya se permite usar 鈥渃lass鈥 [ES6].



Si no te funcion贸 escribir html5, cambia la extensi贸n de tu archivo index por index.htm (sin la L final).

Recuerden respetar el orden de los documentos de js .
Forma Correcta.
Account.js
Car.js
index.js
Forma incorrecta
index.js
Car.js
Account.js

Nota: Javascript ahora soporta clases sin prototipos 馃槃

De lujo!, en lo personal creo que para aprovechar al m谩ximo este curso hay que tener nociones previas de los lenguajes que se usan aqu铆, m谩s que nada para no estar perdidos ya que aprender a hacer lo mismo en 4 lenguajes no es un trabajo f谩cil para alguien que va iniciando. Tener en cuenta eso.

La profe es excelente explicando y se entiende bien los conceptos pero, soy el 煤nico que por ah铆 se marea un poco con tantos lenguajes? jajaja como que quiero absorber todo y voy a explotar jaja

Clases en JavaScript con ES6:

// Account.js
class Account {
  id;
  name;
  document;
  email;
  password;

  constructor(name, document) {
    this.name = name;
    this.document = document;
  }
}

// Car.js
class Car {
  id;
  license;
  driver;
  passengers;

  constructor(license, driver) {
    this.license = license;
    this.driver = driver;
  }

  printDataCar() {
    console.log(this.license);
    console.log(this.driver);
    console.log(this.driver.name);
    console.log(this.driver.document);
  }
}

// index.js
var car = new Car("ZZZ999", new Account("Camila Morales", "CAM169"));
car.passengers = 4;
car.printDataCar();

Hice todo y funciono , pero no entendi mucho sinceramente

Para aplicar test a los archivos javascript tambien puedes utilizar la consola y con node ejemplo:

// Car.js
function Car(license, driver) {
  this.id;
  this.license = license;
  this.driver = driver;
  this.passenger;
}
Car.prototype.printDataCar = function() {
  console.log(this.driver);
  console.log(this.driver.name);
  console.log(this.driver.document);
}
module.exports = Car;

// Account.js
function Account(name, document) {
  this.id;
  this.name = name;
  this.document = document;
  this.email;
  this.password;
}

module.exports = Account;

// index.js
const Car = require('./Car');
const Account = require('./Account');

const car = new Car('AMD147', new Account('Nombre Apellido', '147852369'));

console.log(car.printDataCar());

Luego en la consola:

node index.js

y esto imprimir谩 en consola la informacion del metodo car.printDataCar()

[JS] Me paso que me segu铆a mostrando el error en la consola y por m谩s que correg铆 los errores segu铆a apareciendo:

Pasaba que se estaba ejecutando el index.js antes que las clases 馃槄

<script src="index.js"></script>
<script src="Car.js"></script>
<script src="Account.js"></script>

S贸lo basto con dejar el index.js al 煤ltimo

<script src="Car.js"></script>
<script src="Account.js"></script>
<script src="index.js"></script>

馃攩 Declarando un m茅todo constructor en el lenguaje Dart.

class Account {
  int id;
  String name;
  String document;
  String email;
  String password;

  Account({this.name, this.document});
}
import 'account.dart';

class Car {
    int id;
    String license;
    Account driver;
    int passenger;

    Car({this.license, this.driver});

    void printDataCar(){
      print('License: $license Driver: ${driver.name}');
    }
}
import 'account.dart';
import 'car.dart';

void main() {
	print('Hello World!');
  Car car = Car(license: 'AMQ123', driver: Account(name:  'Andres Herrera', document: '123'));
  car.passenger = 4;
  car.printDataCar();

  Car car2 = Car(license: 'QWE567', driver: Account(name: 'Andres Herrera', document: '123'));
  car2.passenger = 3;
  car2.printDataCar();
}

se volvio confuso鈥

Estoy s煤per perdido con este curso. Tendr茅 que dejarlo. No creo que est茅 chido que pongan este curso en la ruta de Data Analyst si no sabemos programar en otra cosa que no sea Python, y menos si vamos empezando como es el caso de un servidor. He aprendido m谩s de mi libro de OOP en Python que de este curso. Al final de la ruta lo completar茅 solo para tener todo al 100% pero le he invertido much铆simo tiempo y no logro captarle. OJO, no digo que sea malo, solo digo que si vengo trabajando con Python, ser铆a mejor que hicieran un curso de OOP exclusivamente para Python. IMHO 馃槂

Me parece un curso demasiado confuso y mas cuando es ofrecido para alguien que est谩 iniciando desde cero

a los que no les sirve en .html coloquenlo en .htm como que cambio la forma de colocar la extension

Este curso era lo que necesitaba antes de haber iniciado la escuela de javascript :v

excelente!!




No comprendo como funciona la parte en la cual driver pasa a ser de tipo account y en el metodo printDataCar() esta misma variable es driver.name?

En PHP

Class Account en otro archivo .php

<?php 
class Account{
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct($valorName, $valorEmail){
        $this->name=$valorName;
        $this->email=$valorEmail;
    }
}

Class Car en otro archivo .php

<?php
class Car{
    public $id;
    public $license;
    public $driver;
    public $passengers;

    public function __construct($addLicense, $addDriver){
        $this->license= $addLicense;
        $this->driver= $addDriver;
    }

    public function echo_License_Driver_Email(){
        echo 'La licencia es: '
        . $this->license .'<br>'
        .'El conductor es: '. $this->driver->name .'<br>'
        . 'El correo de contacto es: ' . $this->driver->email;
    }
}

Traemos las clases al index.php y las usamos
Debemos traer las clases antes de usarlas o nos dar谩 error

<?php 
        require_once 'Account.php'; 
        require_once 'Car.php';
?>
<?php
        $bochito = new Car('LEMM-180300', new Account('Marco Antonio', '[email protected]'));
        
$bochito->echo_License_Driver_Email();
?>

//Resultado en el navegador:
/*
La licencia es: LEMM-180300
El conductor es: Marco Antonio
El correo de contacto es: [email protected]
*/

En c#
Clase Account

using System;

namespace Uber.Clases
{
    public class Account
    {
        public int id;
        public String name;
        public String document;
        public String email;
        public String password;

        public Account(String name, String document)
        {
            this.name = name;
            this.document = document;
        }
    }
}

Clase Car

using System;


namespace Uber.Clases
{
    public class Car
    {
        public int id;
        public String license;
        public Account driver;
        public int passanger;

       
    public Car(String license, Account driver)
     {
         this.license = license;
         this.driver = driver;

     }


      public  void printDataCar()
        {
            Console.WriteLine("Licence: "+ license + "Driver "+ driver.name);
        }
    }
}

Metodo Main (program.cs)

using System;
using Uber.Clases;

namespace Uber
{
    class Program
    { 
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Car car = new Car("UTF-18", new Account(" Leandro Santiago ", "UTF-158"));
            car.passanger= 4;
            car.printDataCar();

            Console.WriteLine("Mi licencia es: "+car.license);
        }
    }
}

Es relativamente similar a java

Parece tan f谩cil pero no lo es 馃槮

Es importante el orden de los script src, de 煤ltimo debe ser invocado el index.js

Demasiada informaci贸n! Me hierve la cabeza 馃槂

Una variable local 煤nicamente vive dentro del m茅todo en donde se esta declarando.
Las variables globales , generalmente se declaran al principio del programa y cualquier m茅todo o funci贸n puede acceder a ella.

le falta explicar mas detalladamente lo que se va haciendo

Detallo un error que me dio por las dudas que ha alguien se le replique.

Al momento de ejecutar java mediante run, aparec铆an dos errores en la compilaci贸n y no pod铆a ejecutarlo.
El error es que en el archivo Route.java falto de agregar cuando explican la siguiente l铆nea:
import java.util.ArrayList;
Nunca use Java y el error me costo encontrarlo, revisando los archivos en la secci贸n de archivos encuentro esa diferencia, agregue la l铆nea y todo empez贸 a funcionar.

Espero ayudar a alguien.
Saludos

En JavaScript se mira mucho mejor usando la palabra reservada class de ES6 con su m茅todo constructor

se deberia poder utilizar calidades mas bajas de 720p en el reproductor para cuando no tenemos la mejor conexion!!

Mi resumen #23

En mi opni贸n, este curso deber铆a de estar en una etapa m谩s tard铆a para los que inicionamos cursos de Data desde cero. A煤n no conocemos al detalle los comandos, metodos, entre otros. Adem谩s, no deber铆an de haberlo mezclado con todos los lenguajes de programaci贸n. Si adquir铆 ciertos conocimientos pero me hubiera gustado aprender m谩s. Sin embargo, volver茅 en un futuro.

Es mi parecer o las calase resulta un poco entreveradas ya que a mi entender deberiamos primero ir po un legujae y despues ir al otro, eso de estar de uno a otro me marea un poco bastatne

Tengo que admitir que el curso me parece excelente, sin embargo, al estar haciendo rutas de data science, me siento extraviado y desconectado de los conocimientos que he logrado adquirir previamente, en el momento que domine m谩s los temas de programaci贸n podr茅 retomar este curso con m谩s agrado.

Cada que avanzas m谩s en el curso, definitivamente vas teniendo una mejor claridad sobre la forma en que debes codificar, es decir, cambia tu forma de pensar y de ver las cosas. Sobre todo cuando solo has trabajado en programaci贸n estructurada.

1. Como hacer un m茅todo constructor en Java en JavaScript:
1.1 Como crear un m茅todo constructor en Java:

class Car {
    Integer id;
    String license;
    Account Driver;
    Integer passenger;
}

public Nombre_de_clase(los parametros que son indispensables, ejemplo "String license"){
    this.license = license

}
  • Tu en los par谩metros del constructor puedes poner lo que te de la gana, pero en realidad es una buena pr谩ctica que pongas el mismo nombre de los atributos de la clase para mantener la consistencia en la informaci贸n del c贸digo, volviendo al ejemplo del c贸digo si t煤 pones en el c贸digo 鈥淪tring lcnse鈥, pero no lo hagas.
  • Los par谩metros del m茅todo constructor son variables locales, mientras que las variables de la clase car son variables p煤blicas.
  • Ahora para inicializar el atributo que est谩 en la clase car, dentro del m茅todo constructor vamos a llamas al tributo dentro del m茅todo, pero como distinguimos del m茅todo y de los atributos sin ambos se llaman igual?, as铆 de simple, por ejemplo en el atributo license lo llamamos: this.license. Como puedes ver en la clase ponemos el
    .
    C贸mo declara inicializar objetos en java:
	
// Definir la Clase
public class Persona {
    private String nombre;
    private int edad;
    
    public Persona(String nombre, int edad) {
        this.nombre = nombre;
        this.edad = edad;
    }
    
    public void saludar() {
        System.out.println("Hola, mi nombre es " + nombre + " y tengo " + edad + " a帽os.");
    }
}


// Crear una instancia de la Clase Persona
Persona persona1 = new Persona("Juan", 25);

// Llamar a un M茅todo de la Clase
persona1.saludar();

.
Para declarar un objeto en Java, primero debe tener una clase que describa las propiedades y comportamientos del objeto. Luego, puede crear una instancia de esa clase utilizando la palabra clave 鈥渘ew鈥 seguida del nombre de la clase y par茅ntesis vac铆os o con argumentos de inicializaci贸n. Aqu铆 hay un ejemplo:

En este ejemplo 34, la clase 鈥淧ersona鈥 define dos propiedades (nombre y edad) y un m茅todo (saludar). Luego, se crea una instancia de la clase utilizando el constructor que toma un par de parametros y se asigna a la variable 鈥減ersona1鈥. Finalmente, se llama al m茅todo 鈥渟aludar鈥 en la instancia de la clase.

Nota: (esto fue escrito con IA, pero se entiende).

En caso que tengas en la clase que est谩s declarando un atributo que hereda de la clase, tienes que hacerlo as铆: "Car car1 = new Car(鈥渁tributos x鈥, new 鈥渘ombre de la clase de la cual hereda el atributo鈥(atributos de la clase original)),.
.

Car car1 = new Car("atributos x", new "nombre de la clase de la cual hereda el atributo"(atributos de la clase original)

.
1.2. Como hacer un m茅todo constructor en JavaScript:
Para hacer una clase en JavaScript se utiliza la sintaxis de class, que se introdujo en ES6. Para definir un m茅todo constructor, el cual se llama autom谩ticamente cuando se crea un nuevo objeto a partir de la clase 1, utilizamos el m茅todo especial constructor(). Aqu铆 te muestro un ejemplo sencillo:

class Persona {
  // M茅todo constructor
  constructor(nombre, edad) {
    this.nombre = nombre;
    this.edad = edad;
  }

Para definir una clase en JavaScript que tenga atributos autom谩ticos, como la edad que es un par谩metro opcional en la creaci贸n de la instancia, puedes hacer lo siguiente usando 鈥渃lass鈥 y 鈥渇unction鈥:

		
function Persona(nombre, email, edad) {
  this.nombre = nombre;
  this.email = email;
  this.edad = edad || null;
}
class Persona {
  constructor(nombre, email, edad = null) {
    this.nombre = nombre;
    this.email = email;
    this.edad = edad;
  }
}

El par谩metro edad se define con un valor por defecto de null.

Inicializando las clases:

let persona1 = new Persona("Juan", "[email protected]");
let persona2 = new Persona("Pepe", "[email protected]", 25);

驴cu谩l es la diferencia entre usar function y class?
.
En JavaScript ES6, no es necesariamente una mala pr谩ctica utilizar la palabra clave function para definir una clase en lugar de class. De hecho, ambas formas son v谩lidas y permitidas en el est谩ndar ECMAScript 6. La principal diferencia radica en la sintaxis y el estilo de programaci贸n. El uso de class en lugar de function puede mejorar la legibilidad del c贸digo y simplificar la estructura de la clase.
.
Sin embargo, hay algunas diferencias importantes entre las clases definidas mediante class y las clases definidas mediante function. Por ejemplo, las clases definidas con class no son funciones para prop贸sitos de la sintaxis y deben usarse siempre con el operador new. Adem谩s, las clases definidas mediante class no pueden ser elevadas y no son alcanzables antes de su definici贸n, mientras que las clases definidas con function s铆.
.
En general, el uso de class puede mejorar la estructura y legibilidad de la clase y se considera una buena pr谩ctica, pero el uso de function para definir una clase tambi茅n sigue siendo v谩lido. La elecci贸n entre ambas depender谩 del problema espec铆fico que se desea resolver y del estilo de programaci贸n personal.

# **Declarando un M茅todo Constructor en Java y JavaScript**

El m茅todo constructor es una funci贸n especial que se llama autom谩ticamente cuando se crea un objeto a partir de una clase. Es el encargado de inicializar los valores iniciales de los atributos del objeto.

En Java

En Java, el m茅todo constructor tiene el mismo nombre que la clase y se declara sin tipo de retorno. Por ejemplo, si tenemos una clase Car, el m茅todo constructor se declarar铆a as铆:


public class Car {
    String make;
    String model;
    int year;

    public Car(String make, String model, int year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }
}


En este ejemplo, el constructor recibe tres par谩metros que corresponden a las propiedades de la clase. Estos valores son asignados a los atributos usando la palabra clave this.

En JavaScript

En JavaScript, el m茅todo constructor es una funci贸n especial que se declara con el nombre constructor. Por ejemplo, si tenemos una clase Car, el m茅todo constructor se declarar铆a as铆:


class Car {
    constructor(make, model, year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }
}


En este ejemplo, el constructor recibe tres par谩metros que corresponden a las propiedades de la clase. Estos valores son asignados a los atributos usando la palabra clave this.

Instanciando un objeto

Una vez que hemos definido la clase y el constructor, podemos crear un objeto a partir de ella usando la sintaxis new. Por ejemplo:

En Java


Car myCar = new Car("Honda", "Civic", 2022);


En JavaScript


let myCar = new Car("Honda", "Civic", 2022);


Imprimiendo los atributos del objeto

Para imprimir los atributos de un objeto en Java, podemos usar el m茅todo System.out.println() y concatenar los valores con el operador +. Por ejemplo:


System.out.println("Make: " + myCar.make);
System.out.println("Model: " + myCar.model);
System.out.println("Year: " + myCar.year);


En JavaScript, podemos imprimir los atributos de un objeto usando la funci贸n console.log(). Por ejemplo:


console.log("Make: " + myCar.make);
console.log("Model: " + myCar.model);
console.log("Year: " + myCar.year);

Estoy mareado con tantos lenguajes jajaja

Para que no tengan que refrescar su navegador con cada cambio que hagan, VS Code tiene una opci贸n que se llama Live Server, la pueden encontrar en la barra inferior del lado derecho, la van a encontrar como 鈥淕o Live鈥, as铆,c ada vez que guarden los cambios en VS Code, el navegador se refrescara por si solo.

https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer

20. Mis apuntes sobre: 鈥淒eclarando un M茅todo Constructor en Java y JavaScript鈥

Les comparto el c贸digo donde ya se permite el uso de 鈥淐lass鈥 en JavaScriptS desde [ES6]:

C贸digo Javascript

-1.Account.js

class Account{
    constructor(name, document){
        this.id;
        this.name = name;
        this.document = document;
        this.email;
        this.password;
    }
}



-2.Car.js

class Car{
    constructor(license, driver){
        this.id;
        this.license = license;
        this.driver = driver;
        this.passenger;
    }
   printDataCar(){
       console.log(this.license);
       console.log(this.driver);
       console.log(this.driver.name);
       console.log(this.driver.document);
   }
}



-3.index.js

var car = new Car("AW456", new Account("Andres Herrera", "KAD23"));
car.passenger = 4;
car.printDataCar();

'
'
Ahora el c贸digo HTML
-4.index.hmtl

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>OOP</title>
</head>
<body>
    <h1>Programaci贸n Orientada a Objetos en Javascript</h1>
    <script src="Car.js"></script>
    <script src="Account.js"></script>
    <script src="index.js"></script> 
</body>
</html>

Clases en JS

Car.js

class Car {
  constructor(license, driver) {
    this.license = license;
    this.driver = driver;
  }

  dataCard() {
    console.log(`License: ${this.license}`)
    console.log(`Driver name: ${this.driver.nameDriver}`)
    console.log(`Document: ${this.driver.document}`)
  }
}

export default Car

Account.js

class Account {
  constructor(nameDriver, document) {
    this.nameDriver = nameDriver
    this.document = document
  }
}

export default Account

Index.js

import Car from './Car.js'
import Account from './Account.js'

const car = new Car("HDL852", new Account("Jose", "ID654"))
car.dataCard()

const car2 = new Car("KWL852", new Account("Luis", "ID987"))
car2.dataCard()

Script en HTML

<script type="module" src="./index.js"></script>

En javascript si colocamos el archivo de type=鈥渕odule鈥 podemos import las class

main js

import Card from './Card.js'
import Account from './Account.js'

let auto = new Card('WERT345', new Account('Juan Manani', 3245499))
auto.passengenger = 34
auto.printData()

class Card

function Card(license, driver) {
    this.id = null;
    this.license = license;
    this.driver = driver;
    this.passengenger = null;
}

Card.prototype.printData = function() {
    console.log(`Card license: ${this.license}`)
    console.log('Card driver: ' + this.driver.name)
}

export default Card;

class Account

function Account(name, document) {
    this.id = null;
    this.name = name;
    this.document = document;
    this.email = null;
    this.password = null;
}

export default Account;

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h3>POO</h3>
    <script src="./main.js" type="module"></script>
</body>
</html>

Me quedo en Python solo porque mi visual studio no importa las clases T_T

Considero m谩s complicado Javascript porque se complica en muchas cosas.

No es necesario crear la estructura de HTML, para los que tengan Node.js lo pueden correr con el comando: node nombrearchivo.js. En Ubuntu me funcion贸 como nodejs nombrearchivo.js

de poquito en poquito, pero voy aprendiendo鈥

ya me agoteeee, dios que fastidio que las clases de este curso son un arroz con mango, est谩s viendo java, y python y JS y php todo al mismo tiempo, entonces pasa de un lenguaje a otro y uno ni cuenta se da, y empieza uno confundir conceptos y al final termina uno con desorden mental. QUE ES ESTO?, QUE ES ESTE DESASTRE DIOS MIO?. Y de repente la chama se saca cosas de la manga que no hab铆amos visto antes, hermana, explica que es lo que est谩s haciendo para que te sigamos. De paso el curso de verdad est谩 imcompleto a mi parecer, le faltan algunas cosas esenciales que deber铆an estar en este curso, como instalar JDK, como crear una variable de entorno para HOME_JAVA, como instalar php. ACTUALICEN EL CURSO POR FAVOR, hagan presi贸n a platzi para que actualicen el curso.

En el minuto 13:00 la profesora coloc贸:

console.log(this.driver.name)

lo cual me gener贸 mucha duda pero lo resolv铆 y aqu铆 se los dejo explicado de una vez junto al m茅todo de la clase"Car.prototype.printData()"
.
Car.prototype.printData()

class Account {
  constructor(id, name, age, experience) {
    this.name = name;
    this.id = id;
  }
}

class Car {
  constructor(brand, color, driver) { 
    this.id = driver; 
    this.brand = brand;
    this.model = model;
    this.color = color;
  }
}

var car = new Car("Aveo", "Anquerita", new Account("Andres Herrera", "QWE234"))

Car.prototype.printDataCar = function () {
    console.log(this.brand)
    console.log(this.driver)
    console.log(this.driver.name)
}

#Output: 
    "Aveo"
    "Account { name: 'Andres Herrera', id: 'QWE234' }"
    "Andres Herrera"

Cuando definimos un m茅todo como Car.prototype.printDataCar = function() {鈥, estamos agregando el m茅todo printDataCar al prototipo de la clase Car. Esto significa que cualquier instancia creada a partir de la clase Car tendr谩 acceso a este m茅todo.

En el ejemplo proporcionado, la funci贸n printDataCar() se define como un m茅todo en el prototipo de la clase Car. El m茅todo printDataCar() se utiliza para imprimir los valores de las propiedades brand, driver, y 鈥渄river. name鈥 (va pegado, no separado) de una instancia de Car. De esta forma podemos acceder a las variables de la instancia creada.

Ahora quiero explicar, 鈥渃onsole.log(this. driver. name鈥 (va pegado no separado", esta linea de c贸digo es posible porque le estamos dando como parametro a car otra clase como si fuese el parametro driver, por lo que tu puedes llamar a un atributo en especifico de la otra clase de esa manera, conserva el nombre del atributo de la clase a la que est谩s llamando en 鈥淐ar.prototype.printDataCar鈥, pero el atributo a su vez tiene subs atributos heredados de otra clase.

Me sali贸 este error al ejecutar el main:
鈥淎count cannot be resolved to a type鈥

Me di cuenta que el error era porque hab铆a escrito mal la clase Acount en vez de Account.

Sin embargo, al arreglar el problema, segu铆a mostrando el mismo mensaje. Entonces borre todo el objeto 鈥渃ar鈥 con su instancia y modelo constructor, lo volv铆 a construir y esta vez si funciono 馃槂

si en este punto sienten frustracion por que no estan entendiendo todo y solo estan replicando lo que hace la maestra, les recomiendo aprender POO enfocandose solo python (es la eleccion mas facil). yo aprendi bien en un canal llamado BitBoss.

Anah铆 debo confesar que tengo a帽os huyendole al c贸digo y a POO, porque nunca vi explicaciones tan sencillas y practicas, nisiquiera aqui en platzi, que buena clase, eres lo m谩ximo

Seguir茅 publicando mis avances haciendo el curso con C#, quiz谩s en un futuro los volver茅 a ver aqu铆 馃槃

Ya saben, cualquier critica para mejorar el c贸digo o algo que no sea del todo correcto aunque funcione por favor com茅ntenmelo.

class Account
{
    public int id;
    public string name;
    public string document;
    public string email;
    public string password;

    public Account(string name, string document) 
    { 
        this.name = name;
        this.document = document;  
    }
}

class Car
{
    public int id;
    public string license;
    Account driver;
    public int passengers;

    public Car(string license, Account driver, int passengers)
    {
        this.license = license;
        this.driver = driver;
        this.passengers = passengers;
    }

    public void printDataCar()
    {
        Console.WriteLine($"License: {license} \nDriver Name: {driver.name} \nDriver Document {driver.document}  \nPassengers: {passengers} \n");
    }
}

class Payment
{
    public int id;
}

class Route
{
    public int id;
    public double[] start;
    public double[] end;
}
 
internal class OOPUberCourse
{
    static void Main(string[] args)
    {
        Console.WriteLine("Let's fucking go");
        Car car = new Car("AMQ123", new Account("Andres Herrera", "1619-5168-12365"), 4);
        car.printDataCar();

        Car car1 = new Car("HGY849", new Account("Fredy Romero", "0501-2002-02314"), 2);
        car1.printDataCar();

    }
}

Hab铆a estado en otros cursos de Java, le铆do libros y nunca hab铆a entendido para que sirve el " this ", y Anah铆 me lo hizo entender en cuesti贸n de segundos

Demasiado bueno como ella nos ense帽a

Al principio cuando empeze con java me parecia pesado, despues me fui con PHP y javascript y ahora con el que mas le encuentrpo sentido es con java por su tipado fuerte.

Usando modulos.

// Account.js
class Account {

  constructor(name, document) {
    this.id;
    this.name = name;
    this.document = document;
    this.email;
    this.password;
  }

}

export default Account;

// Car.js
class Car {
  
  constructor(license, driver) {
    this.id;
    this.license = license;
    this.driver = driver;
    this.passenger;
  }

  printDataCar = () => {
    console.log(this.license);
    console.log(this.driver);
    console.log(this.driver.name);
    console.log(this.driver.document);
  }

}

export default Car;

// index.js
import Account from './Account.js'
import Car from './Car.js'

const car = new Car('Drop-123', new Account('Pepe', '77777'));
car.printDataCar()

// index.html
<script type="module" src="./index.js"></script>

JavaScript ha tenido muchas mejoras, ahora en la etiqueta script ponemos <script src="./index.html" type=鈥渕odule鈥></script>
Y ya solo importamos las clases cuando las ocupamos.
En los archivos de cada clase debe ir:
export default class Car { 鈥 } y en el index lo llamamos as铆

Buena clase as铆 se aprende haciendo

Declaraci贸n de contructor en Java

Para cualquiera que tenga problemas con la declaracion en Python, encontre la solucion despues de 20 minutos, y creo que es un error conceptual que se soluciona enumerando los carros:

from Car import Car

if name==鈥main鈥:
print("*Wellcome to the firt program UBER like")

car1 = Car()
car1.license = "MCU999"
car1.driver = "Andres Herrera"
print(vars(car1))

car2 = Car()
car2.license = "SZP736"
car2.driver = "Gustavo Lopez"
print(vars(car2))

#Por demas decir que con esta declaracion funciono perfecto!

Hola, tengo un problema con visual studio code y los archivos HTML, simplemente no reconoce la extensi贸n. 驴Como puedo solucionar este problema? Muchas gracias!

class Main {
public static void main(String[] args) {
Car car = new Car(鈥淎QR123鈥, new Account(鈥淎ntonio Matos鈥, 鈥淎DN123鈥));
car.passegenger = 4;
car.PrintDataCar();

    Car car2 = new Car("QTP456", new Account("Juan Mota", "PDE456"));
    car2.passegenger = 4;
    car2.PrintDataCar();

    
}

private static Account Account(String string, String string2) {
    return null;
}

}

License: AQR123 Name Driver: Antonio Matos
License: QTP456 Name Driver: Juan Mota

Me costo un poco entenderlo en java, pero listo, sigamos

Siguiendo los pasos de la clase 馃槂

notorio que el lenguaje favorito de la profesora es java 馃槄

Interesante. Aunque al inicio me cuesta: nunca he usado Java. 隆Pero se ve muy robusto!

Esto se esta complicando, espero estar entendiendo bien.

Tambien se puede hacer de la siguiente forma en JavaScript.
Primero en el archivo HTML solo llamamos al archivo index.js y le ponemos el atributo 鈥渢ype鈥 de la siguiente forma

( type=鈥渕odule鈥 ) sirve para poder exportar e importar archivos.

luego vamos a nuestro archivo index.js e importamos los archivos Car y Account de la siguiente forma.
Pero aun falta algo, y es que tenemos que exportar primero los archivos Car y Account.

y es simple, en la parte final del archivo Car.js ponemos " export default Car " y de esta forma exportamos con 茅xito la clase Car.
Hacemos lo mismo con el archivo account y ya podemos utilizarlos en el archivo Index.js

Me confund铆 con los atributos license, este esta para las clases Car y Account.

Pero ya le entend铆, license en Car hace referencia a la palca y en Account a la licencia de conducir.

Adem谩s, se invoca

 driver.name 

porque si se invoca solo driver este invocar谩 los dos atributos oblicatorios par que pueda existir el objeto Driver, es decir, en este caso solo queremos llamar el nombre del conductor por eso es

driver.name

En otros cursos lo aprend铆: En VS Code en vez de usar 鈥渉tml:5鈥 para el autocompletado del c贸digo b谩sico se puede colocar solo 鈥!鈥 (Emmet Abbreviation).

Una forma de importar clases desde otro archivo en JavaScript sin necesidad de crear tantas etiquetas <src> en HTML es aprovechando los m贸dulos de EcmaScript que usan la siguiente sint谩xis:

  • Para habilitar nuestro archivo para ser exportado y usado, debemos agregar esta linea al final del documento: export default nombreDeLaFuncion;. Ejemplo:
    proyecto/Car.js
function Car(name, driver){
[...]
}

export default Car;
  • Para importarlo debemos agregar esta l铆nea al inicio de nuestro archivo index.js (o cualquier archivo que vaya a usar la clase) import Car from "./Car.js. Ejemplo:
import Car from "./Car.js";

var car = new Car("AW456", new Account("Andr茅s Herrera", "QWE234"));
  • Por 煤ltimo vamos a agregar la etiqueta <script> en nuestro index.html que haga referencia a al index de Javascript, sin olvidar agregar el atributo type="module"; es com煤n que nos salga el error SyntaxError: Cannot use import statement outside a module si olvidamos este atributo.
<head>
</head>
<body>
	[...]
	<script src="./index.js" type="module"/>
</body>

Hola compa帽eros, aunque actualmente en JS se pueda usar 鈥渃lass鈥 creo que es importante aprender esta forma tambi茅n, ya que en nuestro camino encontraremos mucho c贸digo antiguo(o no) escrito de esta forma y tenemos que ser capaces de interpretarlo. No descarten conocimiento.
Saludos.

yo no lo puedo hacer en Visual Studio, lo estoy haciendo en NeatBeans.

Si alguien me pude ayudar a correrlo en vidual studio se los agradeceria mucho

Java asi explicado no es tan doloroso como en la universidad : D

Para no estar importando cada javascript en el index.html, se puede usar la propiedad type=鈥渕odule鈥 e importar en el javascript principal, que para este caso index.js, las diferentes clases de javascript.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>Document</title>
</head>
<body>
    <h1>POO en JS</h1>
</body>
<script src="index.js" type="module"></script>
</html>
import Car from './Car.js';
import Account from './Account.js'

let car = new Car("AWS123", new Account("Andress Herrera", "ID34"));
car.printDataCar();

Y en cada clase de javascript se puede hacer un export default de la funci贸n.

function Car(lisence, driver){
    this.id;
    this.license = lisence;
    this.driver = driver;
    this.passenger;
}

Car.prototype.printDataCar = function() {
    console.log(this.license);
    console.log(this.driver.name);
    console.log(this.driver.document)
}

export default Car;
function Account(name, document) {
    this.id;
    this.name = name;
    this.document = document;
    this.email;
    this.password;
}

export default Account;

Si quieren correr el c贸digo JS, en la propia salida de consola del Visual Studio,
pueden instalar la extensi贸n de Code Runner.

Nombre: Code Runner
ID: formulahendry.code-runner
Descripci贸n: Run C, C++, Java, JS, PHP, Python, Perl, Ruby, Go, Lua, Groovy, PowerShell, CMD, BASH, F#, C#, VBScript, TypeScript, CoffeeScript, Scala, Swift, Julia, Crystal, OCaml, R, AppleScript, Elixir, VB.NET, Clojure, Haxe, Obj-C, Rust, Racket, Scheme, AutoHotkey, AutoIt, Kotlin, Dart, Pascal, Haskell, Nim,
Versi贸n: 0.9.17
Editor: Jun Han
V铆nculo de VS Marketplace: https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner

A continuaci贸n comparto mi versi贸n en C#

<
using PooEjemplo;

Car car = new Car(new Account("Juan David Forero","123456789"),"AD1234", 4);
car.imprimir();
Car car2 = new Car(new Account("Andres Camilo Parra","987654321"), "AD2456", 4);
car2.imprimir();    

namespace PooEjemplo
{
    internal class Car
    {
        public int id;
        public String licence;
        public Account driver;
        public int passengenger;

        public Car(Account driver, String licence, int passengenger)
        {
            this.driver = driver;
            this.licence = licence;
            this.passengenger = passengenger;
        }

        public void imprimir()
        {
            Console.WriteLine("Condctor: " + driver + " Matricula: " + licence + " Pasajeros: " + passengenger);
            Console.ReadKey();
        }
    }
}

namespace PooEjemplo
{
    internal class Account
    {
        public String id;
        public String document;
        public String name;
        public String email;
        public String password;

        public Account(String name, String document)
        {
            this.name = name;   
            this.document = document;
        }
    }
}
> 

Python

main .py

from car import Car
from account import Account

if __name__ == "__main__":
    print("Hola mundo")

    car1 = Car("AE628EA", Account("Peter33", "3456812", "[email protected]", "123456"))
    car1.printDataCar()

    car2 = Car("DF458KN", Account("Ann", "4135687", "[email protected]", "654321"))
    car2.printDataCar()

account .py

class Account:
    ID = int
    name = str
    document = str
    email = str
    password = str

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

car .py

from account import Account

class Car:
    ID = int
    licenses = str
    driver = Account
    passegenger = str
    
    def __init__(self, licenses, driver):
        self.licenses = licenses
        self.driver = driver

    def printDataCar(self):
        print("Car license: ", self.licenses, " Driver: ", self.driver.name)    

Al principio vi engorroso el tema de 4 lenguajes al tiempo, pero al ver la estructura OOP de diferentes maneras queda m谩s claro.

Hola, si cuando le dan clic a console en el inspector no les sale la info, debe dar clic en la opci贸n de todos los niveles y ponerle el check a informaci贸n.

Me volv铆 a ver toda la clase pensando que algo estaba haciendo mal XD

Me encatar铆a ver una actualizaci贸n de este curso. AnnCode

Explica bien, se entiende bien, maneja de forma excelente lo que esta explicando y encima es hermosa, me enamore v:

Uncaught TypeError: Car.prototype is not a function
at index.js:4:5 me sale este error cuando quiero ver mi proyecto en la web alguien me podria ayudar

una forma tambi茅n de sacar el html5 es ! tab

estoy corriendo el index.html pero al revisar en consol茅 me sale indefinido en las lineas del console.log,
pero las estoy llamando en estas l铆neas en el archivo
<script src=鈥淎ccount.js鈥></script>
<script src=鈥淐ar.js鈥></script>
<script src=鈥渋ndex.js鈥></script>

no puedo imprimir los datos alguna idea?

una pregunta, 驴para que sirve o cu谩l es el beneficio de un constructor y como funciona ? algo que no entend铆 en esto que soy nuevo

TA POTENTE

Creia que el metodo constructor solo se usaba en la clase Main.

Otra opci贸n para el atajo de HTML 5 es colocar el signo de admiraci贸n ! y presionar la tecla tabulador (tab),

No entend铆 en que momento se realiza la herencia de los atributos de Accounts en Cars cuando se trabaja en JavaScripts. Es en el momento de crear el nuevo objeto con el m茅todo constructor en index? o en que momento? es que me perd铆 que en cars a la hora de imprimir tengamos el 鈥渢his driver name鈥

Si alguien se pregunta como hacerlo en Kotlin
https://www.geeksforgeeks.org/kotlin-class-and-objects/
pueden hacer las clases en diferentes archivos y no pasa nada, sin embargo el metodo Main, no se deja guardar en un class, yo lo hice asi

main file

fun main(args: Array<String>) {

        val car = Car(1, "ASD123", "Lalo Cota", 4)

        println(car.driver)

    }

Car class

class Car{
    var id: Int
    var license: String
    var driver: String
    var passenger: Int


    constructor(id: Int, license: String, driver: String,passenger: Int){
        this.id = id
        this. license = license
        this.driver = driver
        this.passenger = passenger
    }


}

algo curioso es q al crear los parametros si lo haces con un var va a requerir valores iniciales o deberas crear un constructor con parametros, como en el ejemplo

Mmmm鈥 Creo que no fue muy buena idea dictar un curso de OOPs utilizando 4 lenguajes diferentes. Entiendo que lo que se quiere transmitir es el concepto del paradigma. Pero en un punto influye mucho el lenguaje que se utiliza. Esto lo digo a modo de critica constructiva, no esta en mi, el deseo de atacar. Considero que se puede aprovechar mucho mejor este curso si se ense帽a con un solo lenguaje.
Espero que este curso, en su momento, se pueda mejorar, creo que se puede disfrutar mucho mas.

Si se tiene node.js instalado, se podr铆a realizar de esta otra forma para JS con [ES6];
Car.js:

export default class Car {
  constructor(id, license, driver, passengers) {
    this.id = id;
    this.license = license;
    this.driver = driver;
    this.passengers = passengers;
  }

  // Imprimir por consola usando template string
  printData() {
    console.log(
      `Car license: ${this.license}\nCar driver: ${this.driver.name}\nCar passengers: ${this.passengers}`
    );
  }
}

Account.js

export default class Account {
  constructor(id, name, document, email, password = "") {
    this.id = id;
    this.name = name;
    this.document = document;
    this.email = email;
    this.password = password;
  }
}

index.js

import Account from "./Account.js";
import Car from "./Car.js";

const driver1 = new Account(1, "John Doe", "JON689", "[email protected]");
const car1 = new Car(1, "AMQ123", driver1, 4);

car1.printData();

y para ver los resultados, en consola estando en la ruta de la carpeta JS simplemente se ejecuta el siguiente comando:

node index.js

Si desean solo incluir el index.js en el index.html, pueden utilizar:

  • Import para incluir las clases car y la clase account.
  • Export para exportar cada clase y poder importarla.
function Account(name,document) {
    this.id;
    this.name = name;
    this.document =  document;
    this.email;
    this.password;
}

export {Account}
import {Account} from './Account.js'
function Car(licence,Account) {
    this.id;
    this.license = licence;
    this.driver = Account;
    this.passenger;
    
}
export {Car};

import {Car} from './Car.js'
import {Account} from './Account.js'
var car = new Car("ABVC123", new Account("Hector Cabrera","BCA987"))
car.PrintData();

En typescript primero se iniciatizan las variables:

class Car {
    id;
    driver;
    passenger;
    license;

    constructor(license, driver) {
        this.id;
        this.driver = driver;
        this.passenger;
        this.license = license;
    }
    metodVisualizadorCar = () => {
        console.log(this.driver)
        console.log(this.driver.name)
        console.log(this.driver.document)
    }
}

![](

Ahora en VSCode no necesitan poner html5 para que les llene todo como lo hizo la profe. Si ponen el signo de admiraci贸n (!) y hacen click en la primera opci贸n de una se llena todo.

Aqu铆 comienza la explicaci贸n de JS

Informaci贸n resumida de esta clase
#EstudiantesDePlatzi

  • Los archivos de JavaScript necesitan un navegador para ser visualizados

  • En programaci贸n buscamos escribir poco c贸digo y as铆 ser eficiente

  • Es importante ir escribiendo el c贸digo a medida que va pasando la clase

Me pasaba que mi navegador por defecto es opera pero voy a la carpeta raiz del proyecto en JS y le digo abrir con chrome y abre. listo

Buenas, despues de ver la clase tenia el mismo error en el que Car no estaba definido, sin emabrgo ya habia asigando en index.html ya habia llamado a Car.js, sin embargo, lo hice despues de index.js y debe ser ANTES les dejo el orden que usa la profe y que esta en los recursos de la clase por si acaso 馃槃

<script src="Account.js"></script>
<script src="Car.js"></script>
<script src="index.js"></script>
</html>