Programación JAVA

C

Hola, me encuentro realizando un curso de java y en uno de los ejercicios uno de los puntos me pide generar un método abstracto el cual no entiendo muy bien, adjunto parte del enunciado a ver si me podéis ayudar.

Se sabe que los libros tienen un identificador llamado ISBN entero de tipo long, un título, un número de páginas, un precio, los libros Infantil tiene un rango de edad (mínimo y máximo) y los libros técnicos cuentan con un indicador para saber si trae incorporado un CD o DVD con material extra.

La clase Libro debe tener un método abstracto que retorne la clasificación del libro (INFANTIL o TÉCNICO), el título y precio. Si es un libro infantil debe agregar el rango de edad.

Por el momento sé que existe una clase Libro y dos subclases (infantil y técnico), lo que no sé es como generar ese método abstracto en la clase Libro.

Gracias y espero que puedan ayudarme.

B

Hola, es un método sin cuerpo que crearás en la clase principal, abstracto significa que debe ser implementado en las clases hijas.

En java no sé cómo se hace exactamente, pero supongo que será igual que cualquier método pero con un abstract delante

EDITT: aquí tienes un ejemplo https://tecnologico.info/java/conceptos-poo/metodo-abstracto-en-java-con-ejemplos/

Lo que no sé ya en java si una clase no abstracta puede tener métodos abstractos, igual sería buena idea crear un trait y tener campos y métodos abstractos que se implementarán en la de libro infantil o libro técnico.

4 1 respuesta
C

#2 Gracias, miraré el ejemplo.
Quisiera preguntar tambien que a continuación el enunciado tiene estos dos puntos:
constructores, sobrecargando el método.
accesadores mutadores considerando las reglas de negocio.

En primer lugar lo de los constructores ¿se refiere a crear constructores normales y corrientes?
Y en segundo lugar los accesadores mutadores ¿qué son? ¿los getters y setters?

Gracias nuevamente.

1 respuesta
4ases

#3 sobrecargar es cuando creas un metodo igual que otro pero le pasas diferentes parametros.

en cuanto a los mutadores y accesadores parece ser que se refiere a setters y getters como bien dices.

https://javadesdecero.es/poo/sobrecarga-de-metodos/

https://www.greelane.com/es/ciencia-tecnolog%c3%ada-matem%c3%a1ticas/ciencias-de-la-computaci%c3%b3n/accessors-and-mutators-2034335/

por otro lado respondiendo a #1 como entiendo que no te dice nada el enunciado de que la clase libro sea abstracta lo dejaria tal cual y crearia el metodo abstracto en la clase padre y en las hijas lo creas de nuevo y hay es donde metes la funcionalidad.

como ya te han dicho los metodos abstractos no pueden tener un cuerpo, solamente lo declaras.

1 respuesta
B

Lo que no entiendo es por qué el ISBN es un long... al ser un identificador no sería más correcto que fuera un string? Ya sé que son sólo números pero no vamos a operar con ellos.

1 respuesta
Lafayette

#5 Creeme que a nivel ya no de FP's, si no de empresa bien asentada en el sector, para almacenar numeros tan simples como 4, 12, 133 se usa Long, porque? No fucking clue xDDD

1 respuesta
B

#6 yo estoy empezando en esto y me pregunto esas cosas. No entiendo para qué guardar en un long un identificador, podrías tener problemas de casteo e historias, además. Si un identificador es numérico se sabe ya, pero el ISDN es un código no un identificador iterado. No sé, deberé seguir aprendiendo de los gigantes :)

1 respuesta
SilentMike

Debes tener claro el concepto de abstracción y herencia.

¿Vas a instanciar en algún momento el objeto Libro o por el contrario vas a tener solo LibroInfantil y LibroTecnico?
¿Esos objetos LibroInfantil y LibroTécnico van a tener métodos comunes (pista: por ejemplo uno que devuelva el identificador, el método es el mismo para ambos) o por el contrario todos los métodos van a tener distinta implementación?

En Java declarar algo como abstracto se hace añadiendo el modificador "abstract".

Una clase abstracta no puede instanciarse.
Una clase que herede de una clase abstracta que a su vez tiene métodos abstractos debe implementar dichos métodos, los no abstractos los hereda directamente del padre.
Una clase que implemente una interfaz debe implementar todos los métodos definidos en la interfaz, en Java8 introdujeron el modificador default que permite implementar en la interfaz el comportamiento por defecto del método declarado.

Dependiendo de lo que necesites podras usar herencia de una clase abstracta o bien implementar una interfaz, aunque como he dicho, en Java 8 las diferencias entre clases abstractas e interfaces ha quedado algo difusas.

#7 En cuanto a lo de que los identificadores sean long, suele ser porque en la base de datos ese campo es numerico y al hacer ingenieria inversa para obtener los POJOs del modelo automaticamente los guarda como long, para guardar una relación directa de tipos de datos en la capa de modelo con los tipos de datos de la base de datos.

1 1 respuesta
B

.

1 respuesta
C

#4 La clase libro es la clase padre, puesto que si creo ahí el método abstracto me exige declarar la clase libro como clase abstracta, no se si hay alguna forma de declarar un método abstracto sin que la clase sea abstracta.

1 respuesta
Lafayette

#10 Empieza por entender la herencia y no tendras esos quebraderos de cabeza, y haz uso de interfaces para implementar metodos comines a las clases, asi iras cogiendo buena practica.

richmonde

#9

#9vago_21:

me veo todo el rato buscando cómo se hace X en java xdd

Bienvenido a la vida de la profesion de los 30k-40k-50k-60k

Esto te resume la vida de la programación xD

1 1 respuesta
Hordeo

#12 stackoverflow intensifies

Usuarios habituales