Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Java SE Orientado a Objetos

Curso de Java SE Orientado a Objetos

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Creando una interfaz para definir si una fecha es agendable

24/38
Recursos

Composición de Interfaces en Clases: abstraer todos los métodos/comportamientos de una clase para modularizarlos (comprimirlos, encapsularlos) en una interfaz y reutilizar su código en diferentes clases.

Las interfaces se crean utilizando la palabra reservada interface y se implementan en nuestras clases con implements.

Recuerda que podemos heredar (implementar) más de una interfaz, pero no podemos hacerlo de las clases padres o superclases.

public interface ISchedulabe {
  void schedule(Date date, String Time);
}

public class AppointmentDoctor implements ISchedulable {
  @Override
  public void schedule(Date date, String Time) {
    // ...
  }
}

Aportes 52

Preguntas 16

Ordenar por:

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

Mas o menos así se vería un poco mas organizado

las clases con getter and setter se conocen POJO (Plain Old Java Object)

¿No era mejor crear una clase Appointment como super clase de AppointmentDoctor y AppointmentNurse?

No he pasado este video porque de verdad antes de seguir quise practicar a fondo, hice un complejo ejercicio, una mini Api con todos los Stands y usuarios de Jojo bizarre adventure usando Implements, y de verdad que así se aprende bastante, si te pones a practicar cosas bastante jodidas y vale muchísimo la pena hacer esto, excelente clase, esta clase me había dejado las 2 neuronas faltantes fritas pero ya voy encaminado.

POJO: Plain Old Java Object

Esto se pone cada vez más interesante y complejo! jaja

Tengo una duda las clases appointmentDoctor y appointmentNurse podian derivar de un super clase Appointment y ahí incluir el método schedule para que lo herederan, ¿como seria mejor herendando de un super clase o implementando una interfaz ?

Hay una manera muy sencilla de ordenar arrays implementando una interfaz llamada Comparable en este caso la implementé para que ordenara un array de Doctores de mayor a menor según la cantidad de citas que tuviera.
Este es el método que tiene la interfaz Comparable por dentro y que Doctor implementa

 @Override
    public int compareTo(Object o) {
        int a =  ((Doctor) o).availableAppointments.size();
        int b = this.availableAppointments.size();
      
        if(b == a){
            return 0;
        }else if(b > a){
            return -1;
        }else {
            return 1;
        }
    }

Existe una clase muy util llamada Arrays que tiene un metodo static sort()
Ejemplo de su uso:

public class Main {
    public static void main(String[] args) {

        Doctor a = new Doctor("a","@");
        Doctor b = new Doctor("b","@");
        Doctor c = new Doctor("c","@");

        Doctor[] arrayDoctores = {a,b,c};

        a.addAvailableAppointment(new Date(),"");

        b.addAvailableAppointment(new Date(),"");
        b.addAvailableAppointment(new Date(),"");

        c.addAvailableAppointment(new Date(),"");

        for (Doctor e: arrayDoctores) {
            System.out.println(e.getName());
        }
	//imprimirá
	// a ,b, c  porque este fue el orden en que se agregaron 

        Arrays.sort(arrayDoctores); //aquí usamos la clase Arrays
        System.out.println();

        for (Doctor e: arrayDoctores) {
            System.out.println(e.getName());
        }
	//imprimirá
	//b, a, c  ya que b es el que tiene mas citas "2"; a y c al ser iguales
	//no hace el cambio de posición 
    }
}

Interesante que se esté dejando a un lado la aplicabilidad de la herencia para adoptar aún más el de interfaces.




Apuntes de esta Clase:

Creando una interfaz para definir si una fecha es agendable

Composición de interfaces en Clases

Es el proceso de añadirle comportamientos a una Clase mediante interfaces. Consiste en abstraer todos los métodos de una Clase y modularizarlos en una interfaz para poder reutilizarlos todas las veces que sean necesarias. Muchos desarrolladores hoy en día aconsejan usar la composición en lugar de la herencia pues en esta última la reutilización de código es lineal mientras que la composición se puede efectuar a cualquier Clase.

POJOS (Plain Old Java Object)

Es el nombre con el que se conocen las Clases con getters y setters.

Nota: una de las peculiaridades de las interfaces es que se pueden implementar múltiples Interfaces a una Clase.

public class AppointmentNurse implements ISchedulable, Runable {
	...
}

No lo entiendo, si de todos modos definió ambos métodos y su comportamiento aparte, que hace la interfaz ahí, que desventaja trae no usarla?

📑 Al momento de implementar una interfaz, debemos utilizar todos sus métodos.

Al mover los archivos a la carpeta model, hay que agregar “package model;” para evitar errores

Utilizamos interfaces cuando detectamos comportamientos que se pueden reutilizar en diferentes familias, en diferentes clases. La ventaja de las interfaces es que no importa en que familia o nivel de herencia se encuentre, podemos reutilizar su comportamiento e implementar a cualquier clase.

Creando una interfaz para definir si una fecha es agendable

El concepto de añadirle comportamientos a una clase se llama composición, composición de interfaces en clases. Lo que se hace es abstraer los métodos de una clase y comprimirlas en una interfaz para después reutilizarla en todas las clases que tengan esos comportamientos.


Las clases en las que están los getters y setters son conocidas como POJO’s (Plain Old Java Object).

Los métodos que pongamos en una interfaz tienen que ser implementados forzosamente en las clases que implementen la interfaz.
Una interfaz es como un contrato, donde tienes que cumplir con implementar todos los métodos de esta para que no existan errores.

Esta aplicando MVC? hay algun curso de eso?

Composición = dar poderes a las clases,
abstraer métodos acciones de una clase, comprimirlos o encapsularlos en una interfaz para posteriormente utilizarlo.

Super!!

Genial!

Excelente explicación de las interfaces como se implementan

genial 😃

Hola comparto mi repo con todos los ejercicios hasta el momento.
😉

https://es.m.wikipedia.org/wiki/Composici%C3%B3n_de_objetos

gracias 😃

Increíble. Gracias.

En una interfaz se define el método y sus parámetros y las clases lo implementan, podríamos decir que se define “qué” hacer, pero no el
"cómo" hacerlo, la ventaja sobre la herencia es que se pueden implementar tantas interfaces como necesitemos y cualquier nivel, haciendo el código más modular.

Lo gracioso es que ya había tenido un acercamiento y trabajado con interfaces, pero no entendía bien su funcionalidad, ahora veo… Que ese proyecto es un pequeño Frankenstein jajajajaj y que su arquitectura es pésima… Gracias Anahi. eres la mejor!!! Ahora entiendo cada vez mas a Java y como funciona y cuando y porque usar las cosas.

Un POJO es una clase modelo de un objeto de la vida real abstraído a código, que tiene atributos y comportamientos

Muchas gracias por la estupenda clase instructora Anahí, ahora tengo más claro cómo utilizar las interfaces y ciertos detalles como al momento de mover las clases a paquetes va ser necesario establecerlas public para que en otros lugares sean visibles.

Genial.

Excelente clase 😁

Excelente clase, desconocía totalmente las interfaces.

POJO son las iniciales de “Plain Old Java Object”, que puede interpretarse como “Un objeto Java Plano Antiguo”. Un POJO es una instancia de una clase que no extiende ni implementa nada en especial. Para los programadores Java sirve para enfatizar el uso de clases simples y que no dependen de un framework en especial. Este concepto surge en oposición al modelo planteado por los estándares EJB anteriores al 3.0, en los que los Enterprise JavaBeans (EJB) debían implementar interfaces especiales.

Favorece la composición antes que la herencia. Es un principio del Diseño.

La composición es la utilización de objetos dentro de otros objetos, se conoce como la relacion tiene un en lugar de es un como lo aplica la herencia.


gracias por el aporte

Los POJOS son objetos antiguos de java y el objetivo de estos es desacoplar cualquier framework de la lógica de negocio.

Una forma de optimizarlo aún más, a mi parecer, sería que tanto Doctor como Enfermera sean subclases de una clase llamada trabajador/empleado, (podría ser una clase abstracta, pero entiendo que aún no se ha dado)

Lo mismo para las clases de citas, porque así me parece que se repite bastante el código. Aunque claro, entiendo que esto es un ejemplo

geniaaal

Yo cambié la lógica para que sean los Doctores o Enfermeras las que implementen una interfaz para que atiendan, así que la Appointment solo requiere un objeto con una implementación ISchedulable

Se que a lo mejor a muchos les parece que la estética y el orden no importan, pero es que el diagrama de Anahí es un caos

En java SE 1.8 existe el API joda-time para manejar fechas y horas…!

No seria mejor hacer una clase Appointment que herede a la de AppointmentDoctor y AppointmentNurse y solo cambiar el objeto Doctor y el objeto Nurse?

Luego de ver el tema de composicion me puse a investigar y parecer ser la mejor opcion sobre POO ya que tu codigo puede ser mas escalable.

Wow, por fin entendí las interfaces