Cancerología == oncología
Entender la Programación orientada a objetos
Programación orientada a objetos en Java
¿Qué es un Objeto?
Abstracción: ¿Qué es una Clase?
Modularidad
Definir Clases y sus componentes
Creando nuestra primera Clase
Método constructor
Static: Variables y Métodos Estáticos
Creando elementos estáticos
Final: Variables Constantes
Sobrecarga de métodos y constructores
¡Reto!
Encapsulamiento: Modificadores de acceso
Getters y Setters
Variable vs. Objeto
Variable vs. Objeto: Un vistazo a la memoria
Clases Anidadas
Clases Internas y Locales a un método
Enumerations
Reutilizar Código
¿Qué es la Herencia? Don't repeat Yourself
Super y This
Polimorfismo: Sobreescritura de Métodos
Polimorfismo: Sobreescribiendo el método toString
Interfaces
Creando una interfaz para definir si una fecha es agendable
Collections
Aplicar Abstracción
Clases Abstractas
Miembros abstractos
Clases Anónimas
Diferencias entre las Interfaces y las Clases Abstractas
Interfaces en Java 8 y 9
Herencia en interfaces
Ensamblando Objetos el proyecto
Simulando autenticación de usuarios
Modularizando la UI de Doctores
Definiendo las citas disponibles
Modularizando la UI de Pacientes
Recorriendo estructuras de árbol en Java
Agendando Citas
Cierre del curso: Continúa con Programación Funcional en Java
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Anahí Salgado Díaz de la Vega
Los Métodos Abstractos son los métodos que debemos implementar obligatoriamente cada vez que usemos nuestras clases abstractas, mientras que los métodos que no sean abstractos van a ser opcionales.
public abstract class Figura {
abstract void dibujar(); // obligatorio
void dibujar3D(); // no es obligatorio
}
class Triangulo extends Figura {
void dibujar() {
// Instrucciones para dibujar el triángulo...
}
}
Recuerda los métodos abstractos solo se pueden implementar en clases abstractas. Y las clases abstractas no necesitan ser instanciadas para ser implementadas.
Aportes 53
Preguntas 18
Cancerología == oncología
La diferencia entre una clase abstracta y una interface, es que al crear un método abstracto en la clase abstracta (super_clase), se obliga heredar este método a las clases hijas (sub_clases), en cambio al implementar una interface en una clase ya sea abstracta o concreta, debemos implementar TODOS los métodos que tenga dicha interface
Métodos Abstractos: es obligatorio de implementación
Cual es la diferencia entre
Doctor doctor = new Doctor();
y
User user = new Doctor();
No podría quedarme mas claro la programación orientada a objetos con tremenda profesora
se torna interesante el proyecto
En resumen, las clases abstractas son útiles cuando quieres definir un comportamiento común para varias clases relacionadas, pero no quieres crear una clase concreta para ese comportamiento.
Lo que entendí:
Las Clases abstractas, son como clases normales (puedes hacer todo lo de una clase normal, como Heredar de ella, definir atributos y métodos.) pero con habilidades de Interfaces (como definir comportamientos únicamente).
Pero entonces, si esto es cierto. puedo emular lo que hace una Interface, con una clase abstracta no? xD
Clase Abstracta =
*No se pueden generar instancias
*Tiene métodos abstractos que son obligatorios de sobrescribir.
*Tiene métodos no abstracto que no son obligatorios de sobrescribir
Interface =
*Tiene métodos que son obligatorios de sobrescribir
Woow, hace bastante tiempo me aleje de la programación precisamente por que las clases abstractas me volaron la cabeza. Ahora quiero agradecer a Anahí por que en solo 12 minutos me explico lo que en 1 semestre no pudieron. ❤️
Los metodos abstractos pueden tener una implementacion por defecto?, que en dado caso de ser necesario pueda ser sobrescrito en otra clase, digo porque veo que con las clases abstractas puediera definir comportamientos habituales del proyecto y si es necesario cambiarlo para una clase en particular, lo malo es que me limita las clases que puedo heredar que en ese caso serian mejor las interfaces.
¿Si Userr es abstracto ya no son necesarios los gettes and setters?
Estupenda clase, ahora sabemos que para establecer restricciones en una clase abstracta podemos hacer los métodos abstractos, de esta forma es obligatorio implementarlos en las clases que la usen. Además, también descubrimos que podemos hacer clases abstractas a partir de otras clases abstractas como es el ejemplo de la clase triangulo.
Porque crear un objeto user y no un objeto doctor? no seria lo mismo?
Los métodos abstractos son obligatorios declararlos en las clases hijas, las clases hijas son las que definirán el comportamiento del método abstracto.
Las clases abstractas se apropian de la herencia, yo podria tener una clase hija que al mismo tiempo este heredando a otra clase por lo tanto esta clase va a tener una nueva clase hija, y esta nueva clase hija tambien puede ser abstracta.
📰 Los métodos abstractos solo se pueden implementar en clases abstractas.
Cuando un método es Abstracto obligatoriamente la clase es abstracta
No se puede instanciar la clase abstracta pero si las clases hijas
Excelente explicación
Gracias, excelente contenido 😃
Creo yo que lo correcto o al menos para que fuera mas fácil de implementarlo, es no dejar las salidas de texto hardcodeadas, sino que tomaran esos datos como atributos de la misma clase
Me gusto mucho la clase 😃
:0
Genial!! Se va poniendo mas interesante!
De acuerdo a las reglas de negocios, Las clases abstractas sin métodos abstractos. Lo único que nos van a resolver es la posibilidad de nunca más estar instanciando objetos de las clases padres. Las Clases abstractas por defecto siempre serán clases padres y no podremos instanciar objetos de ella; pero si de sus hijos.
Cual es el atajo de teclado para comentar varias lineas en intellij no me da el Ctrl + /
Quedo claro
Instanciar de user es correcto? o lo correcto seria instanciar de su clase correspondiente?
entendido 😃 gracias
se pone interesante la cosa
Interfaces definen pero no implementan comportamientos de un una familia de clases.
Composition, Herencia, clases hijas comparten metodos y atributos, los metodos pueden ser sobreescritos.
Abstact, estas clases no pueden ser implementadas directamente pero pueden definir propiedades y comportamientos opcionales para las hijas. Admeas estan pueden obligar la implementacion de un comportamiento creando metodos abstractos.
Me quedo muy claro lo de las clases abstractas, no lo había entendido pero con el ejemplo fue muy sencillo entenderlo. muchas gracias
User user1 = new Doctor("Anais", "[email protected]", "pediatria");
User user2 = new Nurse("Pepe", "[email protected]");
mostrar(user1);
mostrar(user2);
}
public static void mostrar (User user) {
user.showDataUser();
}
Diría que el verdadero uso del polimorfismo seria un método “universal” que reciba como parámetro un objeto tipo “User” y dependiendo de la implementación de ese objeto “Doctor o Nurse” aplicaría el método .showDataUser que obligatoriamente esta implementado en ambas clases.
Por lo tanto si al método “universal” mostrar le pasamos como parámetro un objeto tipo User con implementación Doctor y el user.showDataUser(); se aplicaría como si fuera doctor.showDataUser();
Por tanto mostrar(user1); se aplicaría como Doctor
Y mostrar(user2); se aplicaría como Nurse
ok una cosa es hacer una clase abstracta pero que su composición sea solo para este modelado ejemplo CRUD o en este caso comportamiento
los métodos abstractos solo se declaran pero no se pone nada en su cuerpo, ya que no hay instancias que necesiten esa declaración
en intelliJ IDEA se puede correr el programa con Ctrl + Shift + F10
Esto es muy útil cuando hay inyección de dependencias y no se quiere usar una declaración de una clase específica, si no de una clase abstracta más genérica.
jajaj ¿soy el único que no entiende nada de la teoría, pero que cuando empieza con la parte del código le entiende al instante? xD
Los métodos abstractos nos reflejan que necesitamos que cada clase cumpla con ciertos métodos obligatorios.
Para quienes decidan investigar más, este tipo de polimorfismo se llama; polimorfimos de subtipos
en las interfaces todos son obligatorios.
y en las clases abstractas solo las funciones abstractas son obligatorias.
¿Si la clase user es abstracta, de que me sirve colocar un metodo que no es abstracto si no puedo llamarlo. ya que no puedo crear instancias de la clase user?
Metodos abstractos => metodos obligatorios.
Entonces los métodos abstractos. los empleamos cuando en nuestro análisis vemos que tenemos un método común pero con comportamiento totalmente diferente ?
Notas de la Clase:
Miembros abstractos
Definir un método abstracto:
public abstract class Figurar {
... abstract void dibujate(); // Convierte al método en obligatorio
}
Los métodos abstractos son obligatorios, a diferencia de los demás métodos que tenga una Clase abstracta y que no estén declarados con la palabra reservada abstract
los cuales serán opcionales.
Se pueden tener Clases abstractas que tengan subclases que a su vez tengan métodos abstractos:
// Superclase
public abstract class Figura {
// Implementación
}
// Subclase
abstract class Triangulo extends Figura {
abstract void dibujate();
// Para tener un método abstracto la clase también debe ser abstracta
}
// Clase hija de la subclase anterior
class TrianguloIsosceles extends Triangulo {
void dibujate() {
// Dibujar triángulo isosceles
}
}
Ejemplo de Polimorfismo en las Clases abstractas
// Superclase
public abstract class User {
public abstract void showDataUser();
}
// Main.java
User user = new Doctor("Anahí", "anahí@santaclara.health");
user.showDataUser();
A pesar de que User
es una Clase abstracta por lo que no puede ser instanciada, gracias al polimorfismo “puede tomar la forma” de la clase Doctor
, pudiendo convertirse en una instancia de dicha Clase.
Miembros abstractos
Las clases abstractas sin métodos abstractos lo único que van a resolver, de acuerdo a las reglas del negocio, es no tener objetos o instancias creados a partir de esa clase.
Las clases abstractas siempre serán clases padre y de estas nunca se podrán crear objetos.
public abstract class Figura{
abstract void dibujate();
}
class Triangulo extends Figura{
void dibujate(){
// Dibujar triangulo
}
}
Este método abstracto deberá ser implementado en todas las clases que hereden de la clase Figura. Los métodos que no sean abstractos serán opcionales de implementar o sobrescribir.
También es posible tener una clase hija que al mismo tiempo herede a otra clase, y esta clase puede ser a su vez una clase abstracta con métodos abstractos, por ejemplo:
abstract class Triangulo extends Figura{
abstract void dibujate();
}
Es posible que la clase Triangulo, que hereda de Figura, sea también una clase abstracta y deje abstracto también el método dibújate para que sea implementado por las clases que van a heredar de Triangulo. Por ejemplo:
class TrianguloIsosceles extends Triangulo{
void dibujate(){
// Dibujar triangulo isosceles
}
}
Recuerda los métodos abstractos solo se pueden implementar en clases abstractas. Y las clases abstractas no necesitan ser instanciadas para ser implementadas.
osea que los métodos de las interfaces son abstractos
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?