Ejercicios con objetos

Los objetos son estructuras de datos complejas que se caracterizan por sus propiedades y por que pueden realizar acciones sobre si mismo (métodos). Para empezar mira en detalle la sección dedicada a  los objetos en Javascript y luego resuelve estos ejercicios básicos sobre objetos.
Lo que se pide
Aclaraciones
Para comenzar vamos a crear un objeto sencillo que se usa para guardar información sobre las calificaciones de un alumno. El curso contiene tres materias: Ingles, programación y HTML, y el objeto contendrá el nombre del alumno y la calificación en cada una de ellas. El script imprimirá el nombre y la media de sus calificaciones
Por ejemplo, guardar las calificaciones de un alumno de nombre Juan, Inglés: 9, programacion: 8, HTML: 7. Sacará Nota media de Juan 8

var notas, media;

notas = {

    nombre: 'Juan',

    ingles: 10,

    programacion: 9,

    html: 8};

media = (notas.ingles + notas.programacion+notas.html)/3;

console.log("Media de "+notas.nombre+" es "+media)

Define un objeto, mediante una expresión, que tenga dos propiedades: precio y descuento y un método neto. El método calculará el precio con el descuento aplicado. Los valores se pedirán por teclado
Por ejemplo objeto vestido, precio 400 y descuento 10. El método devolverá como resultado 360 (400 - 10*400/100).

var vestido, dato;

vestido = {

   precio: 0,

   descuento: 0,

   neto: function(){

         return this.precio*(1 - this.descuento/100)

    }

}

vestido.precio = parseInt(prompt("Precio bruto "));

vestido.descuento = parseInt(prompt("Precio bruto "));

console.log("El precio neto es "+vestido.neto()+"€");

En esta propuesta debes crear una clase de nombre piedra (con class o con function) con dos propiedades: masa, volumen y un método densidad que calcule este valor (masa/volumen). Luego instancia al menos un objeto de esta clase, dale un valor a su masa y a su volumen y ejecuta el método densidad.
Por ejemplo objeto oro, masa de la muestra 194 gr y volumen 10 cc. Densidad deberá devolver 19,4.

class piedra {

    constructor(m,v){

       this.masa = m;

       this.volumen = v;

    }

   densidad = function(){return this.masa/this.volumen}

}

var oro = new piedra(194,10);

console.log("densidad "+oro.densidad());

Construye una clase usando function para implementar una cuenta de efectivo. Poseerá dos propiedades: nombre del titular y saldo. Además debe tener dos métodos: ingresar() y retirar(). El primero incrementa el saldo en la cantidad indicada en el argumento y el segundo lo reduce. No se puede sacar más de lo que exista en el saldo. .
A los métodos los invocaremos con las llamadas ingresar(1000) o retirar(100) Tras ingresar el saldo será 1000 y trs retirar el saldo será 900..

Cuenta = function(nombre, saldo){

    this.titular = nombre;

    this.saldo = saldo;

    this.ingresar= function(cantidad){

        this.saldo += cantidad

    }

   this.retirar = function(cantidad){
        if(cantidad <= this.saldo){

               this.saldo -= cantidad

             }

      }

}

var micuenta = new Cuenta('Juan', 0);

micuenta.ingresar(1000);

console.log("El saldo actual es "+micuenta.saldo);

micuenta.retirar(100);

console.log("El saldo actual es "+micuenta.saldo);

Crea una clase Ficha, con su constructor, que se usará para almacenar el número de kilómetros recorridos por una persona en cada sesión de ejercicios. Las propiedades de la clase serán
  • nombre
  • sesiones
  • numsesioens

El nombre es el de la persona, en los sesiones se almacenará el número de kilometros recorridos en cada sesión y numsesiones contiene el número de sesiones anotadas.

Tiene dos métodos:

  • anotar: anota los kilómetros
  • media: calcula la media de kilómetros recorridos

Cada persona tendrá su ficha construída con esta clase.

Si ejecuto anotar(8), anotar(10), anotar(6), en las sesiones se anotarán 8, 10, 6.

Si escribo media() devolverá 8 ((8+10+6)/3).

En la solución se usa el camino má primitivo posible: arrays y bucles básicos

class Ficha{

    constructor(n){

        this.nombre = n;

        this.sesiones = [];

        this.numsesiones = 0

    }

    anotar= function(km){

         this.sesiones[this.numsesiones] = km;

         this.numsesiones++;

        }

    media = function(){

         var media = 0;
         for(let i=0; i< this.sesiones.length;i++){

              media += this.sesiones[i];

             }

         return media/this.numsesiones

       }

}

var fichaJuan = new Ficha('Juan');

fichaJuan.anotar(10);

fichaJuan.anotar(8);

fichaJuan.anotar(6);

console.log("Media de kilómetros "+fichaJuan.media());

Crea una clase que lamaremos Bus. Sus atributos serán:

  • capacidad: número máximo de pasajeros
  • pasajeros: número de pasajeros (inicialmente 0)
  • conductor: objeto conductor.

Sus métodos

  • subir(pasajeros): aumenta el numero de pasajeros
  • bajar(pasajaeros): disminuye el número de pasajeros
  • conductor: asigna un objeto conductor.

El ojeto conductor es de una clase (Conductor) cuyos atributos son:

  • nombre: nombre del conductor
  • licencia: un número que identifica al condcutor.

Al crear el objeto se asigna también el conductor

No pueden subir más pasajeros que los máximos admitidos y no pueden bajar más de los que hay.

El autobús linea1 puede llevar 40 pasajeros y su conductor se llama José su licencia es la 1234.

Si se pide subir(25) , el atributo pasajeros valdrá 25.

Si a continuación se pide subir(35) solo subirán 15, (2 + 15 son los 40 de máximo)

Si pedimos bajar 45, el autobús se queda vacío.

Si teniendo 35 pasajeros se pide que bajen 40 el autobús se queda vacío.

class Bus{

    constructor( conductor, cap){

        this.conductor = conductor;

        this.capacidad = cap;

        this.pasajeros = 0;

    }

    subir = function(num){

        if (this.pasajeros+num < this.capacidad){

             this.pasajeros += num;

             }

         else{

            this.pasajeros = this.capacidad

             }

      }

    bajar = function(num){

        if (num <= this.pasajeros){

             this.pasajeros -= num;

             }

         else{

            this.pasajeros = 0

             }

      }

  

}

class Conductor{

         constructor(nb, lic){

              this.nombre = nb;

              this.licencia = lic;

              }

}

var cond1 = new Conductor("Juan", 1234);

var linea1 = new Bus(cond1, 40);

console.log("conductor es "+linea1.conductor.nombre);

linea1.subir(30);

console.log("Pasajeros al subir 30:  " + linea1.pasajeros);

linea1.subir(20);

console.log("Pasajeros al subir 20:  "+linea1.pasajeros);

linea1.bajar(30);

console.log("Pasajeros al bajar 30:  "+linea1.pasajeros);

Un artículo tiene un nombre, un proveedor y un precio. Y un proveedor tiene un nombre, email y telefono. Se pide definir una clase (Proveedor) para implementar el objeto proveedor y otra (Articulo) para el obejto artículo. Este objeto tiene los siguientes atributos o propiedades:

  • proveedor: un objeto proveedor, a quien se compra el artículo
  • nombre: una cadena, nombre del artículo
  • precio: un número, precio del artículo

Y métodos:

  • telefono(): devuelve un objeto con el nombre y teléfono del proveedor

Por su parte el objeto proveedor tiene como propiedades

  • nombre: cadena de texto, nombre del proveedor
  • email: un email, correo del proveedor
  • teléfono: una cadena de dígitos, teléfono del proveedor

Puedes implementarlo con create, function o con class

Por ejemplo podríamos tener un artículo monitor que vale 200€ y el proveedor es TecnoShop, con email: tcn@tecno.com y telefono 1234567.

Si hacemos articulo.telefono() nos dará  nombre y teléfono del proveedor: Teléfono de TenoShop es 1234567

class Proveedor{

    constructor(nbr, email, tel){

        this.nombre = nbr;

        this.email = email;

        this.telefono = tel;

       }

}

class Articulo{

    constructor(nbr, precio, prov){

        this.nombre = nbr;

        this.precio = precio;

        this.proveedor = prov;

    }

    telefono(){

        return{

               nombre: this.proveedor.nombre,

               telefono: this.proveedor.telefono

            }

    }

}

/*probar*/

var prov1 = new Proveedor('TecnoSoft', 12345)

var monitor = new Articulo('Monitor Super', 250, prov1);

var quien;

console.log("Proveedor de "+ monitor.nombre);

quien = monitor.telefono()

console.log(quin.nombre);

console.log(quien.telefono);

Para implementar un grupo de alumnos de un curso se crea una lista de objetos alumno. Cada objeto alumno se caracteriza por el nombre del alumno, su número de matrícula y su calificacion.

El objeto tiene un método para poner la calificación: calificar(nota).

Crea el script para implementar  un grupo de 4 alumnos.

Por ejemplo un alumno de nombre "Juan", número de matrícula 124 y su nota la pondríamos como alumno.calificar(5) para ponerle un 5.

var grupo = new Array(4);

class Alumno{

   constructor(nbr, mat){

       this.nombre = nbr;

       this.matricula = mat;

       this.nota = 0; 

   }

   calificar(nota){

        this.nota = nota;

      }

}

grupo[0] = new Alumno("Juan", 124);

grupo[1] = new Alumno("Maria", 324);

grupo[2] = new Alumno("Alicia", 154);

grupo[3] = new Alumno("Pedro", 324);

grupo[0].calificar(5);

grupo[1].calificar(4);

grupo[2].calificar(8);

grupo[3].calificar(3);

console.log("El alumno "+grupo[0].nombre+" tiene un "+grupo[0].nota);

En esta ocasión tienes una lista de clientes, cada cliente es un objeto con atributos: nombre, email, telefono.

Se quiere crear una clase Factura para gestionar las facturas emitidas a los clientes. Las propiedades de esta clase son

  • idCliente: número de cliente (su lugar en la lista de clientes)
  • total: número con el imorte total de la factura
  • estado: pagada o pendiente

Los métodos serán

  • cobrar(): pone el estado en pagada.
  • imprimir(): imprime los datos de la factura

Para probar crea tres clieentes y al menos una factura.

Podemos tener los siguietnes clientes

  • Juan, juan#mail.com, 3456718
  • Marisa, marisa@mail.com, 5556123
  • Luis, luis@mail.com, 2354322

Emitimos una factura al cliente 1, o sea, a Juan. el importe es 300 euros. Si se imprime factura.estado saldrá "pendiente".

Depués de hacer factura.pagar() al imprimir factura.estado saldrá "pagada".

 

var clientes = new Array(3);

class Cliente{

    constructor(nombre, email, telefono){

        this.nombre = nombre;

        this.email = email;

        this.telefono = telefono;

    }

}

class Factura{

    constructor(id, total, listaCtes){

         this.cliente = listaCtes[id];

         this.total=total;

         this.estado = "pendiente";

    }

    imprimir = function(){

        console.log("Factura para "+this.cliente.nombre);

        console.log("Total "+this.total);

        console.log("Estado "+this.estado);

    }

    pagar = function(){

         this.estado = "pagada";

         }

}

clientes[0] = new Cliente('Juan', 'juan#mail.com', 3456718);

clientes[1] = new Cliente('Marisa', 'marisa@mail.com', 5556123);

clientes[2] = new Cliente('Luis', 'luis@mail.com', 2354322);

var factura = new Factura(1, 300, clientes);

factura.imprimir();

factura.pagar();

factura.imprimir();

scripts