0% encontró este documento útil (0 votos)
17 vistas12 páginas

Programación en Java: Netflix 2

El documento presenta el código Java para modelar películas y series en Netflix, incluyendo clases, métodos y un programa principal para probar el código. Se generan datos de ejemplo, se marcan elementos como vistos de forma aleatoria y se imprimen resultados.

Cargado por

Marlon Figueroa
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
17 vistas12 páginas

Programación en Java: Netflix 2

El documento presenta el código Java para modelar películas y series en Netflix, incluyendo clases, métodos y un programa principal para probar el código. Se generan datos de ejemplo, se marcan elementos como vistos de forma aleatoria y se imprimen resultados.

Cargado por

Marlon Figueroa
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

Se han eliminado las denominaciones de los paquetes (package), porque depende del package
que cada uno cree al implementar las clases.

Si se comprueba a través de la consola, pegando cada clase en un archivo de notas diferente,


recuerda:

- Todos los archivos deben estar en la misma carpeta pues pertenecen al mismo
paquete.
- Todos los archivos deben llamarse exactamente como el nombre de su [Link]. Es
decir, para el primero el archivo se llamaría [Link]. Hay que respetar las
mayúsculas y minúsculas (cuidado con el archivo [Link], la primera letra es
mayúscula).
- Se compila solamente el archivo ejecutable [Link] con el comando “Javac
[Link]” (sin comillas).
- Se ejecuta el programa llamando al archivo compilado con el comando “Java Principal”
(sin comillas y, como ves, sin extensión).

Si se comprueba a través de Eclipse, pegando cada clase en una clase dentro de un paquete
creado, recuerda:

- Debes crear un paquete dentro de un nuevo proyecto (nómbralo como quieras).


- Las clases que crees deben llamarse exactamente igual que las he nombrado yo,
respetando mayúsculas y minúsculas.
- Asegúrate de que todas las clases se encuentran dentro del mismo package y que al
crearlas aparece el package en la primera línea de cada una de ellas.

Copia y pega el código en el bloc de notas o en Eclipse tal cual se presenta. Si modificas algún
carácter puedes desestabilizarlo.
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

[Link]

import [Link];

public class Principal {

public static void main(String[] args) {

// Creación de los arrays.

ArrayList<Pelicula> peliculas = new ArrayList<Pelicula>();


ArrayList<Serie> series = new ArrayList<Serie>();

// Datos para cada posición del array. 5 películas y 5 series.

[Link](new Pelicula("El Padrino", "Crime, Drama", "Francis


Ford Coppola", 1972, 175));
[Link](new Pelicula("Pulp Fiction", "Crime, Drama",
"Quentin Tarantino", 1994, 164));
[Link](new Pelicula("Origen", "Sci-Fi", "Christopher
Nolan", 2010, 148));
[Link](new Pelicula("El viaje de Chihiro", "Animation",
"Hayao Miyazaki", 2002, 125));
[Link](new Pelicula("El indomable Will Hunting", "Drama",
"Gus Van Sant", 1998, 126));

[Link](new Serie("Breaking Bad", 5, "Thriller", "Vince


Gilligan", 49));
[Link](new Serie("Sherlock", 4, "Mystery", "Mark Gatiss,
Steven Moffat", 88));
[Link](new Serie("Los Soprano", 6, "Crime, Drama", "David
Chase", 55));
[Link](new Serie("Arrested Development", 5, "Comedy",
"Mitchell Hurwitz", 22));
[Link](new Serie("Friends", 10, "Comedy", "David Crane, Marta
Kauffman", 22));

// Comando try, catch, finally para probar parte del código.


// Declaramos una variable global para recoger el valor del
error.

boolean error1 = false;

try{

/* Código generado para seleccionar la posición de dos


películas y dos series distintas de forma
* aleatoria.
* [Link] genera un número aleatorio dentro del tamaño
del Arraylist. Los valores que toma
* se encuentran entre 0 y el valor dado. En este caso,
como las posiciones del Arraylist comienzan
* en 0, el mayor valor que puede tomar es el tamaño -1.
* Con el comando while le decimos que elija un número
aleatorio para el segundo siempre que sea
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

* igual al primero. De esta forma nos aseguramos de que


las dos películas y las dos series elegidas
* sean distintas. */

int paleatorio_a = (int)([Link]()*[Link]()-1);


int paleatorio_b = (int)([Link]()*[Link]()-1);
int saleatorio_a = (int)([Link]()*[Link]()-1);
int saleatorio_b = (int)([Link]()*[Link]()-1);

while (paleatorio_a == paleatorio_b) {

paleatorio_b = (int)([Link]()*[Link]()-
0);
}

while (saleatorio_a == saleatorio_b){


saleatorio_a = (int) ([Link]()*[Link]()-
1);
}

/* Marcamos como Visto las posiciones generadas


aleatoriamente con el método marcarVisto de la clase
correspondiente. En cada ejecución del programa serán
diferentes.*/

[Link](paleatorio_a).marcarVisto();
[Link](paleatorio_b).marcarVisto();
[Link](saleatorio_a).marcarVisto();
[Link](saleatorio_b).marcarVisto();

// Si parte del código anterior genera una excepción de tamaño en


el Array la variable se marca como true

}catch(IndexOutOfBoundsException arraEx){

error1 = true;

/* Si el error se ha producido (marcado como true) el programa


muestra un mensaje de acuerdo al
* comportamiento esperado. Si no se ha producido muestra que todo
es correcto y nos indica como
* producir el error para comprobarlo. En este caso podemos
comprobar fácilmente el comportamiento
* colocando un +50 en lugar de cualquier -1 de las lineas 48 a
51. */

}finally {

if (error1 == true) {

[Link]("* Nota de comprobación del


comando try.");
[Link]("* La posición elegida para
marcar las visualizadas está fuera del\n* tamaño del Array.");
[Link]("* Las peliculas y series vistas
que contengan el error no serán\n* marcadas y no se mostrarán como tal.");

} else {
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

[Link]("* Nota de comprobación del


comando try.");
[Link]("* De momento el programa
funciona correctamente");
[Link]("* Para comprobar el
comportamiento cambia un '-1' de las lineas\n* 48 a 51 en la clase Principal
por el valor '+50'. El código\n* generará una excepción y otro resultado será
mostrado.");;
}
}

/* Impresión de todas las películas y series llamando al método


mostrarDatos(), que a su vez llama
* al método toString() pero conteniendo el dato extra que lleva
cada clase.
* Los sysout imprimen títulos.*/

[Link]("\n\n - TODAS LAS PELICULAS -\n");

for (Pelicula pelicula : peliculas) {

[Link]();
}

[Link]("\n - TODAS LAS SERIES -\n");

for (Serie serie : series) {


[Link]();
}

/* Impresión de películas y series marcadas como vistas.


* El primer sysout imprime un titulo.
* Con el blucle for recorremos el array, comparando cada
resultado con el método getVisto.
* En caso de que sea distinto de false se muestra el resultado
en lista, con el título y los
* minutos vistos. Los minutos están calculados en el método
tiempoVisto de la clase correspondiente,
* con un operador aleatorio. Más información ampliada alli.
* Se muestra también la duración total en minutos del elemento,
para que pueda compararse el resultado.
* El comando \t devuelve una tabulación. El comando \n devuelve
un salto de linea. */

[Link]("\n - DETALLE DE PELICULAS VISTAS -\n");

for (Pelicula pelicula : peliculas) {


boolean pvisto = [Link]();
if (pvisto!=false){
[Link](" Titulo:
"+[Link]());
[Link](" Duración:
"+[Link]()+" minutos");
[Link](" Minutos vistos:
"+[Link]()+"\n");
}

}
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

[Link]("\n - DETALLE DE SERIES VISTAS -\n");

for (Serie serie : series) {


boolean svisto = [Link]();
if (svisto!=false){
[Link](" Titulo: "+[Link]());
[Link](" Duración: "+[Link]()
+" minutos");
[Link](" Minutos vistos:
"+[Link]()+"\n");
}

/* Impresión de la serie con mas temporadas.


* El primer sysout es un titulo.
* Recorremos con un bucle for el array correspondiente,
guardando en las variables cada vez
* el valor mayor para el número de temporadas y la posición en
la que se encuentra.*/

[Link]("\n - SERIE CON MAS TEMPORADAS -\n");

int mayor = 0;
int sposicion = 0;

for (int a = 0; a<[Link](); a++) {


int actual = [Link](a).getTemporadas();
if (actual>mayor){
mayor=actual;
sposicion = a;

}
}

/* Se imprimen los datos con el método mostrarDatos para la


posición elegida, el método toString está
* implementando en la clase padre CommonData e incluido en el
método mostrarDatos de cada subclase, para
* poder añadirle los datos extra (las temporadas en este caso).
*/

[Link](sposicion).mostrarDatos();

/* Impresión de la película de año más reciente.


* El primer sysout es un titulo.
* Recorremos con un for el array correspondiente, guardando en
las variables cada vez el valor
* mayor para el año y la posición en la que se encuentra. */

[Link]("\n - PELICULA DE AÑO MÁS RECIENTE -\n");

int reciente = 0;
int pposicion = 0;

for (int a = 0; a<[Link](); a++) {


int actual = [Link](a).getYear();
if (actual>reciente){
reciente=actual;
pposicion = a;
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

}
}

/* Se imprimen los datos con el método mostrarDatos para la


posición elegida, el método toString está
* implementando en la clase padre CommonData e incluido en el
método mostrarDatos de cada subclase, para
* poder añadirle los datos extra (el año en este caso). */

[Link](pposicion).mostrarDatos();

}
}

[Link]

public class Pelicula extends CommonData implements IVisualizable {

// Atributos que no figuran en la clase padre Commondata

private int year;

// Metodo constructor default

public Pelicula(){

/* Metodo constructor para titulo y creador, no se incluye el valor


visto en false porque ya es su valor
* por default. */

public Pelicula (String titulo, String creador){


[Link](titulo);
[Link](creador);

// Metodo constructor para todos los atributos excepto visto

public Pelicula (String titulo, String genero, String creador, int year,
int duracion) {
[Link](titulo);
[Link](genero);
[Link](creador);
[Link](duracion);
[Link] = year;

}
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

// Getters y setters para las variables de esta clase (no incluidas en


Commondata)

public int getYear() {


return year;
}

public void setYear(int year) {


[Link] = year;
}

// Método marcarVisto declarado en la interface. Marca el atributo Visto


de la clase padre como true.

@Override
public void marcarVisto() {
[Link](true);

// Método esVisto declarado en la interface. Devuelve el valor de Visto


en la clase padre.
@Override
public void esVisto() {
[Link]();

/* Método tiempoVisto declarado en la interface. Para que no quedasen a


cero ni fueran iguales,
* se ha utilizado la variable [Link] de la clase Object, que
genera un número aleatorio entre
* los argumentados. Los valores de la duración están dados en minutos,
en este caso se genera un numero
* aleatorio hasta el total de segundos de la pelicula o serie elegida,
para poder disgregar después el
* resultado en minutos y segundos.
* Devuelve una cadena con el resultado de la operación.*/

@Override
public String tiempoVisto() {
int tiempovisto = (int)
([Link]()*([Link]()*60)+1);
String operacion = tiempovisto/60+" minutos "+tiempovisto
%60+" segundos";
return operacion;

/* Mostramos los datos llamando al método toString de la clase padre


Commondata. Se ha implementado éste
* método mostrarDatos a mayores para poder incluir para esta clase el
atributo year(año).
* El comando \n devuelve un salto de linea */

public void mostrarDatos(){

[Link]([Link]());
[Link](" Año: "+year+"\n");
}
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

[Link]

public class Serie extends CommonData implements IVisualizable{

// Atributos que no figuran en la clase padre Commondata

private int temporadas = 1;

// Método constructor default

public Serie(){

/* Metodo constructor para titulo y creador, no se incluye el valor


visto en false porque ya es su valor
* por default. */

public Serie (String titulo, String creador){


[Link](titulo);
[Link](creador);

// Metodo constructor para todos los atributos excepto visto

public Serie (String titulo, int temporadas, String genero, String


creador, int duracion){
[Link](titulo);
[Link] = temporadas;
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

[Link](genero);
[Link](creador);
[Link](duracion);

// Getters y setters para las variables de esta clase (no incluidas en


Commondata)

public int getTemporadas() {


return temporadas;
}

public void setTemporadas(int temporadas) {


[Link] = temporadas;
}

// Método marcarVisto declarado en la interface. Marca el atributo Visto


de la clase padre como true.

@Override
public void marcarVisto() {
[Link](true);

// Método esVisto declarado en la interface. Devuelve el valor de Visto


en la clase padre.

@Override
public void esVisto() {
[Link]();

/* Método tiempoVisto declarado en la interface. Para que no quedasen a


cero ni fueran iguales,
* se ha utilizado la variable [Link] de la clase Object, que
genera un número aleatorio entre
* los argumentados. Los valores de la duración están dados en minutos,
en este caso se genera un numero
* aleatorio hasta el total de segundos de la pelicula o serie elegida,
para poder disgregar después el
* resultado en minutos y segundos.
* Devuelve una cadena con el resultado de la operación.*/

@Override
public String tiempoVisto() {
int tiempovisto = (int)
([Link]()*([Link]()*60)+1);
String operacion = tiempovisto/60+" minutos "+tiempovisto%60+"
segundos";
return operacion;

/* Mostramos los datos llamando al método toString de la clase padre


Commondata. Se ha implementado éste
* método mostrarDatos a mayores para poder incluir para esta clase el
atributo temporadas. */

public void mostrarDatos(){


[Link]([Link]());
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

[Link](" Temporadas: "+temporadas+"\n");

[Link]

public class CommonData {

// Atributos comunes de las clases Pelicula y Serie.

private String titulo;


private String genero;
private String creador;
private int duracion;
private boolean visto;

/* Getters y setters de los atributos declarados. Se incluyen los del


atributo visto para poder trabajar
* después con ellos en los métodos declarados en la interface. */

public String getTitulo() {


return titulo;
}
public void setTitulo(String titulo) {
[Link] = titulo;
}
public String getGenero() {
return genero;
}
public void setGenero(String genero) {
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

[Link] = genero;
}
public String getCreador() {
return creador;
}
public void setCreador(String creador) {
[Link] = creador;
}
public int getDuracion() {
return duracion;
}
public void setDuracion(int duracion) {
[Link] = duracion;
}
public boolean getVisto() {
return visto;
}
public void setVisto(boolean visto) {
[Link] = visto;
}

/* Método toString de la clase Object. Devuelve una cadena de texto


combinada con los atributos generados .
* El símbolo \n provoca un salto de linea*/

public String toString(){


String datos = " Titulo: "+titulo+"\n"+" Género: "+genero+"\n"+"
Creador: "+creador+"\n"+" Duración: "+duracion+" minutos"+"\n"+" Visto:
"+visto;
return datos;
}

[Link]

public interface IVisualizable {

// Declaración de los métodos de la interface.

public void marcarVisto();


public void esVisto();
public String tiempoVisto();

DIAGRAMA DE CLASES
NETFLIX 2 PROGRAMANDO EN JAVA SEMANA 4

También podría gustarte