Jesús Enrique García
Mas o menos así se vería un poco mas organizado
Andres lopez Restrepo
las flechas estan al contrario
Ricardo Baez Mulia
En realidad las flechas están bien porque de esa manera se indica de quien esta heredando
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) { // ... } }
Jesús Enrique García
Mas o menos así se vería un poco mas organizado
Andres lopez Restrepo
las flechas estan al contrario
Ricardo Baez Mulia
En realidad las flechas están bien porque de esa manera se indica de quien esta heredando
jorge espinoza
las clases con getter and setter se conocen POJO (Plain Old Java Object)
Reinaldo Mendoza
No lo sabia
Kebyn Enrique Ajin Elías
Tampoco lo sabía, buen aporte. Gracias
Israel Yance
¿No era mejor crear una clase Appointment como super clase de AppointmentDoctor y AppointmentNurse?
Sebastian Ruiz Garcia
También era una opción pues las clases Appointments son más lineales como menciona de la herencia, pero el objetivo era aprender interfaces :p .
Damian Castellini
Adhiero...
LUIS CALDERON
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.
Andres López
Pasa el link del repo de GitHub, así todos podemos aprender más viendo el código de tu implementación
KEPLER GARCIA
Veo que eres un hombre de cultura
Paul Cortes
POJO: Plain Old Java Object
Oscar Rincón
Gracias, lo entendí como Play on Java Object y no encontraba nada xd
Camila Catalini
recuerden amiguitos, componer antes que heredar. Esto es porque la herencia es más estática ante el cambio, y te limita a una clase. El uso de interfaces favorece la escalabilidad del código
"programar contra la interfaz y no contra la implementacion"
Sebastián Pineda Duque
Interfaces
Definición: es un tipo de referencia similar a una clase, que tendrán solo constantes y definiciones de métodos
OBLIGAN a implementar métodos y atributos a las clases. Por lo tanto, fomenta el polimorfismo en los métodos.
Generalmente las interfaces indican el “PUEDE HACER” de un objeto.
Los métodos de las interfaces no llevan modificadores de acceso, al igual que las variables, ya que estos y estas los llevan implícitamente. Los métodos son public y las variables son public static final, haciéndolas constantes.
Sintaxis:
public interface ISchedulable { schedule(Date date, String Time); } public class AppointmentDoctor implements ISchedulable { }
Podemos instanciar un objeto de una clase, de una interfaz no**. Se puede crear un objeto de una clase y "asignarlo" a una interfaz que implemente la clase:**
public static void main(String[] args) { ISchedulable iShealudable = new AppointmentDoctor(); }
iShealudable solo tendrá acceso a los métodos que tengan en común la interfaz ISchedulable y la clase AppointmentDoctor.Son de gran ayuda para definir los comportamientos que son redundantes y queremos reutilizar más de una clase, incluso cuando tenemos muchas clases y no todas pertenecen a la misma “familia”.
Nos da la posibilidad de tener herencia múltiple en Java.
Habrán momentos en los que los métodos van a tener comportamientos radicalmente diferentes y ya no es tan conveniente declarar el comportamiento de estos en la clase padre. Partiendo de esto, podríamos usar las interfaces, que son solo la declaración y no el comportamiento de los métodos.
Fabio Flores
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 ?
Eduardo Rodríguez Prado
En este caso pienso que hubiera sido mejor una super clase, sin embargo la ventaja de una interfaz es que puede ser implementada por cualquier clase, es decir que no se limita a la estructura lineal de una clase padre que solo puede heredar a las clases hijas.
Francisco Torregrosa Ros
Para el caso se podría haber echo una superclase con los valores comunes de las clases appointmentDoctor y appointmentNurse y luego implementar la interface en appointmentDoctor y en appointmentNurse.
Gerald Zamora
Samuel Narciso
no entiendo, tu interfaz "Comparable" esta vinculada con tu forma de ordenar los arrays? Arrays.sort(arrayDoctores);
Gerald Zamora
@SamuelN sí, el método estático sort de la clase Arrays ordena cualquier array de objetos que implementen esta interfaz
Diego Osorio
Hinder Adrian Alvarez Perlaza
Interesante que se esté dejando a un lado la aplicabilidad de la herencia para adoptar aún más el de interfaces.
Usuario anónimo
User📑 Al momento de implementar una interfaz, debemos utilizar todos sus métodos.
Stiven Trujillo
No entendí la verdad que diferencia o ventaja hay de hacerlo con o sin la interfaz, porque pues igual vuelvo a reescribir código :(
Julio Cesar Estrada Marcial
La interfaz te sirve para que la clase que la implementa Si o Si implementa los métodos.
Lo puedes ver como un contrato.
Son bien importantes porque en muchos sitios se recomienda usar interfaces sobre la herencia de clases. Te dejo esta lectura que amplia este concepto.
Jorge Cruz Perez
Porque cumple con un aspecto fundamental que es hacer de forma genérica: separar la especificación de una clase (qué hace) de la implementación (cómo lo hace). Esto se ha comprobado que da lugar a programas más robustos y con menos errores. Saludos :)
Luis Garcia
Porque no creamos una clase Appointment y usar herencia para crear AppointmentNurse y AppointmentDoctor? Se puede usar una interfaz un una clase hija?
Antony Suica Cuartas
Exactamente estaba pensando lo mismo. El tener una clase appoitment hubiese "ahorrado" el código un poco el código. Puesto que podíamos sobre escribir los métodos que se requerían.
René Alexander Machic Morales
Porque se tendría que crear dos métodos por separado para poder agendar una cita, el método schunable que muestra en la clase cumple en reutilizar ese método para las dos clases. y no tener que declarar uno por clase, esto ayuda a tener buenas practicas de programación y que nuestro código sea mas sostenible. Saludos
Eliseo Geraldo González
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?
Andres López
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 { ... }
Carlos Esteban León Pinilla
Para crear una interfaz en tu IDE, asegúrate de seguir estos pasos:
Si sigues teniendo problemas, verifica si el IDE está actualizado o si hay algún error en el proyecto.
Alejandro Sebastian Dubon Estrada
¿Sería necesario crear una clase anidada dentro de la clase Nurse?
Dewin Fabián Acosta Jiménez
Me hago también la misma pregunta, revisando el código que estamos escribiendo en el curso, en la clase Doctor hace uso de una Nested Class para agregar médicos, pero para enfermero no figura por ninguna parte.
Luis Salas
Hola No he terminado el curso aún, pero en base a lo que he entendido, mas bien la clase anidada pasaría a ser redundante, por lo que esperaría que la misma sea removida en clases futuras. Ya que AppointmentDoctor y AppointmentNurse pasaría a ser clases externas que se encargarán de esa necesidad del software. Saludos
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 } }