Download programación en java - ISA-UMH

Document related concepts
no text concepts found
Transcript
Escuela Politécnica Superior de Elche
Ingeniería Industrial
SISTEMAS INFORMÁTICOS INDUSTRIALES
curso 2007-2008
PROGRAMACIÓN EN JAVA
PRÁCTICA 2: Jerarquía de clases en Java
Objetivos
•
•
•
Implementar una jerarquía de clases para crear una aplicación en Java
Comprender los mecanismos de herencia en Java
Comprobar la utilidad del polimorfismo
Descripción
Se va a diseñar un programa que permita almacenar datos relativos a libros y revistas de
una biblioteca y, a continuación, proporcionar un listado de los mismos.
Tanto los libros como las revistas comparten dos características comunes: el código de
referencia y el título. Los libros, además, poseen dos características adicionales: el
autor y la editorial. Por otra parte, las revistas también tienen dos características más: el
número de la revista y el año de publicación. Por último, hay que tener en cuenta que
existen libros que están compuestos por varios volúmenes, por lo que en este caso será
necesario saber también el número de volumen.
A continuación se muestra un ejemplo de fichas de una biblioteca conteniendo datos de
libros y revistas:
Referencia
Título
Autor
Editorial
Libro
I.062
Java 2
Ceballos
rama
Referencia
Título
Autor
Editorial
Nº Volumen
Referencia
Título
Número
Año
Revista
R.001
Linux
23
1999
Libro en volúmenes
F.135
Física aplicada
R.J.M.
Servicio Publicaciones
2
Página 1 de 6
Escuela Politécnica Superior de Elche
Ingeniería Industrial
Diseño
Una manera de diseñar el programa sería escribir una clase para cada tipo de objeto de
la biblioteca, definiendo para cada clase los datos asociados a cada ficha, así como los
métodos necesarios para manejar esos datos. Es decir, se definirían las tres clases
siguientes:
- FichaLibro: En esta clase se definirían como datos miembro la referencia, el título,
el autor y la editorial del libro; así como los métodos necesarios para manipular
estos datos.
- FichaRevista: En esta clase se definirían como datos miembro la referencia, el
título, el número y el año de publicación de la revista; así como los métodos
necesarios para manipular estos datos.
- FichaLibroVol: En esta clase se definirían como datos miembro la referencia, el
título, el autor, la editorial y el número de volumen del libro; así como los métodos
necesarios para manipular estos datos.
Como puede apreciarse, si se definieran las clases de la forma especificada, se estaría
derrochando tiempo y esfuerzo, ya que se duplica código.
Se sabe que una clase derivada hereda los datos y métodos de su clase base, por lo tanto,
lo más adecuado para diseñar el programa sería definir una clase base con los datos
comunes de los distintos objetos y los métodos para manipular dichos datos. A partir de
la clase base se definirían clases derivadas de esta clase, con los datos específicos de
cada objeto y los métodos para manipular esos datos.
Por lo tanto se definirán las siguientes clases:
-
-
Ficha. Es la clase base. Contiene los datos comunes de los distintos objetos: la
referencia y el título; así como los métodos para manipular estos datos.
FichaLibro. Clase derivada de la clase Ficha. Incluirá los datos específicos de un
libro: el autor y la editorial, así como los métodos necesarios para manipular estos
datos. Nótese que puesto la clase FichaLibro es una clase derivada de Ficha,
cualquier objeto de la clase FichaLibro heredará los datos y métodos de la clase
Ficha.
FichaLibroVol. Clase derivada de la clase FichaLibro. Aportará el número de
volumen y la funcionalidad necesaria para manipularlo.
FichaRevista. Clase derivada de la clase Ficha. Contendrá los datos específicos de
una revista: el número y el año; y los métodos necesarios para manipular estos
datos.
Como puede apreciarse, la clase FichaLibro es una clase derivada de Ficha, pero a su
vez es una clase base para la clase FichaLibroVol.
La jerarquía de las clases definidas es la siguiente:
Página 2 de 6
Escuela Politécnica Superior de Elche
Ingeniería Industrial
Ficha
FichaRevista
FichaLibro
FichaLibroVol
Además de las clases anteriores, se definirá una clase más: Biblioteca. Esta clase
contendrá un array de objetos de tipo Ficha (Ficha []volumenes), así como los métodos
necesarios para manipular dicho array. En el array se almacenará una referencia a los
datos de cada libro o revista. Ejemplo:
volumenes[0]
volumenes[1] volumenes[2]
Libro
Referencia
Título
Autor
Editorial
I.062
Java 2
Ceballos
rama
...
Revista
Referencia
Título
Número
Año
R.001
Linux
23
1999
Referencia
Título
Autor
Editorial
Nº Volumen
Libro en
volúmenes
F.135
Física aplicada
R.J.M.
S. Publicaciones
2
Detalles de implementación
Clase Ficha → clase abstract (fichero Ficha.java)
Datos miembro:
-
protected String referencia: Cadena para almacenar la referencia asociada
-
protected String titulo: Cadena para guardar el título asociado a la ficha
a la ficha.
Métodos:
-
public Ficha(): Constructor por defecto. Inicializará las variables miembro.
public Ficha(String ref, String tit): Constructor con argumentos. Se
encargará de asignar la referencia y el título pasados como argumentos a las
variables miembro referencia y titulo respectivamente.
Página 3 de 6
Escuela Politécnica Superior de Elche
Ingeniería Industrial
-
public void asignarReferencia(String ref): Asignará la referencia
-
public void asignarTitulo(String tit): Asignará el título pasado como
pasada como argumento a la variable miembro referencia.
argumento a la variable miembro titulo.
-
public abstract void mostrarFicha(): Esta método mostrará los datos
asociados a una ficha. Como se puede observar, se ha definido abstract, ya que sólo
tiene sentido invocarla desde objetos de clases derivadas. Este método no se definirá
en la clase base, sino que se definirá en las clases derivadas.
Clase FichaLibro → clase derivada de Ficha (fichero FichaLibro.java)
Datos miembro:
-
private String autor: Cadena para almacenar el autor asociado al libro.
private String editorial: Cadena para guardar la editorial asociada al libro.
Métodos miembro:
-
public
FichaLibro(): Constructor por defecto. Inicializará las variables
miembro autor y editorial.
-
-
public FichaLibro(String ref, String tit, String aut, String
edit): Constructor con argumentos. Se encargará de asignar la referencia y el
título pasados como argumentos a las variables miembro referencia y titulo
utilizando el constructor con argumentos de la clase Ficha. Además, asignará el
autor y la editorial pasados como argumentos a las variables miembro autor y
editorial.
public void asignarAutor(String aut): Asignará el autor pasado como
parámetro a la variable miembro autor.
public void asignarEditorial(String edit): Asignará la editorial
pasada como parámetro a la variable miembro editorial.
public void mostrarFicha(): Este método mostrará los datos asociados a la
ficha del libro.
Clase FichaLibroVol → clase derivada de FichaLibro (fichero FichaLibroVol.java)
Datos miembro:
-
private int numVolumen: Almacenará el número de volumen del libro.
Métodos miembro:
-
public FichaLibroVol(): Constructor por defecto.
public FichaLibroVol(String ref, String tit,String aut,
String edit, int nv): Constructor con argumentos. Se encargará de asignar
la referencia, el título, el autor y la editorial pasados como argumentos a las
Página 4 de 6
Escuela Politécnica Superior de Elche
Ingeniería Industrial
-
variables miembro referencia, titulo, autor y editorial utilizando el constructor con
argumentos de la clase FichaLibro. Además, asignará el número de volumen
pasado como argumento a la variable miembro numVolumen.
public void asignarNumVolumen(int nv): Asignará el número de volumen
pasado como parámetro a la variable miembro numVolumen.
public void mostrarFicha(): Este método mostrará los datos asociados a la
ficha de un libro con varios volúmenes. Usará el método mostrarFicha() de la clase
FichaLibro.
Clase FichaRevista → clase derivada de Ficha (fichero FichaRevista.java)
Datos miembro:
-
private int numRevista: Almacenará el número de la revista.
private int anyo: Guardará el año de publicación de la revista.
Métodos miembro:
-
public FichaRevista(): Constructor por defecto.
public FichaRevista(String ref, String tit, int nr, int an):
-
Constructor con argumentos. Se encargará de asignar la referencia y el título
pasados como argumentos a las variables miembro referencia y titulo utilizando el
constructor con argumentos de la clase Ficha. Además, asignará el número de
revista y el año de publicación pasados como argumentos a las variables miembro
numRevista y anyo.
public void asignarNumRevista(int nr): Asignará el número de revista
pasado como parámetro a la variable miembro numRevista.
public void asignarAnyo(int an): Asignará el año de publicación pasado
como parámetro a la variable miembro anyo.
public void mostrarFicha(): Este método mostrará los datos asociados a la
ficha de la revista.
-
Clase Biblioteca (fichero Biblioteca.java)
Datos miembro:
-
private int numMaxVols: Guardará el número máximo de volúmenes que se
pueden almacenar.
-
private int numVols: Guardará el número actual de volúmenes almacenados.
private Ficha []volumenes: Array de objetos de tipo Ficha para almacenar
las referencias a los libros y a las revistas.
Página 5 de 6
Escuela Politécnica Superior de Elche
Ingeniería Industrial
Métodos miembro:
-
public Biblioteca(int vm): Constructor. Asignará a numMaxVols el número
máximo de volúmenes pasado como parámetro e inicializará la variable miembro
numVols. Además reservará la memoria necesaria del array de objetos volumenes.
public void asignarVolumen(Ficha fich): Asignará la ficha pasada como
parámetro a una posición libre del array volumenes.
public void mostrarVolumenes(): Este método mostrará los datos asociados
a todos los volúmenes. Utilizará el método mostrarFicha() de la clase Ficha.
-
Clase Practica2 (fichero Practica2.java)
Esta clase contendrá el main() y debe permitir comprobar el funcionamiento de las
clases implementadas. Por ejemplo, una posible implementación de esta clase sería la
siguiente:
// fichero Practica2.java
public class Practica2
{
public static void main(String[] args)
{
Biblioteca biblio = new Biblioteca(3);
FichaLibro fl =
new FichaLibro("I.062","Java 2","Ceballos","rama");
FichaLibroVol flv =
new FichaLibroVol("F.135","Fisica aplicada","R.J.M.","S.
publicaciones",2);
FichaRevista fr = new FichaRevista("R.001","Linux",23,1999);
biblio.asignarVolumen(fl);
biblio.asignarVolumen(flv);
biblio.asignarVolumen(fr);
biblio.mostrarVolumenes();
}
}
Página 6 de 6