Saludos. Anexo versión modificada de ejercicio de aula virtual con modificaciones para evitar código boilerplate. El ejercicio se realiza usando lombok y maven para gestión de dependencias.
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>FirstProgram</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
clase abstracta título
package Models;
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@Data
@RequiredArgsConstructor
public abstract class Titulo {
@NonNull
protected String nombre;
@NonNull
protected int fechaLanzamiento;
protected int duracionMinutos;
protected boolean incluidoEnPlan;
protected double sumaEvaluaciones;
protected int totalEvaluaciones;
protected double mediaEvaluaciones;
public void evalua(double nota){
sumaEvaluaciones += nota;
totalEvaluaciones ++;
mediaEvaluaciones = sumaEvaluaciones / totalEvaluaciones;
}
}
entidad película
package Models;
import Implementations.Clasificacion;
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@Data
@ToString (callSuper = true)
public final class Pelicula extends Titulo implements Clasificacion {
private String director;
public Pelicula(@NonNull String nombre, @NonNull int fechaLanzamiento) {
super(nombre, fechaLanzamiento);
}
@Override
public void evalua(double nota) {
super.evalua(nota);
}
@Override
public int getClasificacion() {
return (int) getMediaEvaluaciones();
}
}
entidad serie
package Models;
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@Data
@ToString(callSuper = true)
public final class Serie extends Titulo{
private int temporada, episodiosPorTemporada, minutosPorEpisodio;
public Serie(@NonNull String nombre, @NonNull int fechaLanzamiento) {
super(nombre, fechaLanzamiento);
}
@Override
public void evalua(double nota) {
super.evalua(nota);
}
@Override
public int getDuracionMinutos() {
return temporada * episodiosPorTemporada * minutosPorEpisodio;
}
}