Académique Documents
Professionnel Documents
Culture Documents
GUIA D DE LABORATORIO
RELACIONES ENTRE CLASES
COMPOSICION AGREGACION - ASOCIACION
Objetivo:
Aplicar los conceptos de la Programacin Orientada a Objetos.
Aplicar las definiciones de Relaciones entre clases.
Descripcin:
A continuacin se presentan varias clases. Cada clase contiene mtodos de tipo SET
y GET, y mtodos operacionales. Los mtodos operacionales son mtodos que
implementan las operaciones FUNCIONALIDADES del objeto.
En esta gua de Laboratorio se va a trabajar con las clases Alumno, Profesor,
ArregloDeAlumno, ArregloDeProfesor, Matricula. El objetivo es comprender como se
relacionan estas clases. El alumno debe encontrar el mecanismo que utilizan las
clases para el envi de datos; as como las referencias entre objetos. Al finalizar
esta gua, cada alumno comprender cuando, donde, como y por que se
instancian objetos.
Recordar que nos encontramos en un entorno Orientado a Objetos. Eso quiere decir
que cada clase tiene atributos y mtodos PROPIOS de su correspondiente objeto
real. Se pide analizar el cdigo desarrollado, e implementar todas las
funcionalidades.
Clase Alumno
A continuacin se presenta la clase Alumno, que define los atributos y mtodos ms
importantes de un objeto real Alumno, obtenidos mediante el proceso de la
ABSTRACCIN.
Por ejemplo: el Alumno Juan Perez Perez
Cdigo
Nombre
ALU100
JUAN PEREZ PEREZ
Pasos a seguir 1:
Algortmica II
Nota:
Las clases utilizan los mtodos de la clase Base.java, que se encuentra en el
paquete ClasesBase
La clase Alumno
package Matricula;
import javax.swing.JOptionPane;
public class Alumno {
private String codigo;
private String nombre;
private Profesor P[];
private int indiceProfesor;
public Alumno() {
this.codigo = "A1234";
this.nombre = "Perez Lopez, Juan";
this.P = new Profesor[5];
this.indiceProfesor = 0;
}
public Alumno(Alumno other) {
if(this != other) {
this.codigo = other.codigo;
this.nombre = other.nombre;
this.P = other.P;
this.indiceProfesor = other.indiceProfesor;
}
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setProfesores(Profesor[] P) {
this.P = P;
}
public void setIndiceProfesor(int indiceProfesor) {
this.indiceProfesor = indiceProfesor;
}
public String getCodigo() {
return (this.codigo);
}
Prof. Arn Elas Herrera Ponte
Pg. 2
Algortmica II
Clase Profesor
A continuacin se presenta la clase Profesor, que define los atributos y mtodos
ms importantes de un objeto real Profesor, obtenidos mediante el proceso de la
ABSTRACCIN.
Por ejemplo: el Profesor Johnny Reyes Reyes
Prof. Arn Elas Herrera Ponte
Pg. 3
Algortmica II
Cdigo
Nombre
PRO510
JOHNNY REYES REYES
Pasos a seguir 2:
3. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
4. Generar el archivo Profesor.class (Proceso de Compilacin)
La clase Profesor
package Matricula;
import javax.swing.JOptionPane;
public class Profesor {
private String codigo;
private String nombre;
private Alumno A[];
private int indiceAlumno;
public Profesor() {
this.codigo = "P1000";
this.nombre = "Ramos Reyes, Jose";
this.A = new Alumno[5];
this.indiceAlumno = 0;
}
public Profesor(Profesor other) {
if(this != other) {
this.codigo = other.codigo;
this.nombre = other.nombre;
this.A = other.A;
this.indiceAlumno = other.indiceAlumno;
}
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setAlumnos(Alumno[] A) {
Prof. Arn Elas Herrera Ponte
Pg. 4
Algortmica II
this.A = A;
}
public void setIndiceAlumno(int indiceAlumno) {
this.indiceAlumno = indiceAlumno;
}
public String getCodigo() {
return (this.codigo);
}
public String getNombre() {
return (this.nombre);
}
public Alumno[] getAlumnos() {
return (this.A);
}
public int getIndiceAlumno() {
return (this.indiceAlumno);
}
public String toString() {
String sep = System.getProperty("line.separator");
StringBuffer buffer = new StringBuffer();
buffer.append(sep);
buffer.append("codigo = ");
buffer.append(codigo);
buffer.append(sep);
buffer.append("nombre = ");
buffer.append(nombre);
buffer.append(sep);
return buffer.toString();
}
public String devolverDatosProfesor(){
return codigo + " - " + nombre;
}
public void setAlumno(Alumno alu){
if(indiceAlumno < A.length){
this.A[indiceAlumno] = alu;
indiceAlumno++;
JOptionPane.showMessageDialog(null,"Ingreso del Alumno con xito",
"Asociando al Profesor con un Alumno",
JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"No se puede ingresar mas Alumnos\n"+
"Se ha alcanzado el lmite mximo de alumnos por profesor",
"Ttulo",
JOptionPane.INFORMATION_MESSAGE);
}
}
public Alumno getAlumno(int indice){
return A[indice];
}
Prof. Arn Elas Herrera Ponte
Pg. 5
Algortmica II
}
Clase ArregloDeAlumno
A continuacin se presenta la clase ArregloDeAlumno, que define los atributos y
mtodos ms importantes de un arreglo de objetos real Alumno, obtenidos
mediante el proceso de la ABSTRACCIN. Los mtodos del auto son:
public ArregloDeAlumno(ArregloDeProfesor profesores){ }
Este es un mtodo Constructor por parmetros. Recibe por parmetro a una
referencia de la clase ArregloDeProfesor.
public int getCantidadDeAlumnos(){ }
Este mtodo devuelve la cantidad de objetos de tipo Alumno que se han
almacenado en el ArrayList.
public boolean verificarSiYaExisteElCodigo(String codigo){ }
PARA IMPLEMENTAR
Este mtodo verifica si ya existe un Alumno con dicho codigo.
Este mtodo es IMPORTANTISIMO.
Siempre se deber usar este mtodo para VERIFICAR la existencia de un Alumno.
public Alumno registrarDatosDelNuevoAlumno(String codigo){ }
Este mtodo instancia a un objeto de tipo Alumno, luego se van ingresan por
teclado el valor de sus atributos, para finalmente RETORNAR la referencia a dicho
objeto.
public void aadirNuevoAlumno(){ .. }
Este mtodo aade un nuevo objeto de tipo Alumno al ArrayList llamado
arregloAlumno.
public int devolverIndiceDelAlumnoEnElArreglo(String codigo){ .. }
Este mtodo recibe por parmetro una variable de tipo String y recorre el ArrayList
para verificar si existe el valor de dicha variable. Si lo encuentra, entonces
RETORNAR el indice (posicion) de dicho objeto. Si NO lo encuentra, entonces
RETORNA el valor de -1.
public Alumno getAlumnoPorIndice(int indice){ .. }
Este mtodo devuelve un objeto de tipo Alumno.
RETORNA una copia del objeto que se encuentra en el ArrayList llamado
arregloAlumno. Antes de devolver se hace un CASTING de tipo Alumno.
public void mostrarDatosDelAlumno(int indice){ }
Este mtodo muestra el valor de los atributos de un objeto de tipo Alumno.
Obtenemos un objeto de tipo Alumno que se encuentra en 'indice' del ArrayList
'arregloAlumno'. Luego verificamos si dicho Alumno esta ASOCIADO a algun
Profesor, si la respuesta es positiva entonces mostramos los datos de sus
Profesores (Siempre y cuando TENGA PROFESORES).
public void mostrarDatosDeLosAlumnos(){ ... }
Este mtodo se recorre el ArrayList llamado 'arregloAlumno' para mostrar los datos
de cada objeto de tipo Alumno.
public void mostrarListadoDeProfesores(){ }
Este mtodo recorre el arreglo de Profesores. Se muestra en una lnea los datos de
cada objeto de tipo Profesor.
public int pedirSeleccionarAUnProfesor(){ }
Prof. Arn Elas Herrera Ponte
Pg. 6
Algortmica II
Este mtodo devuelve la posicin del Profesor SELECCIONADO. Al final del mtodo
se tiene que RESTAR 1, porque el ndice del arreglo empieza en CERO.
public void asociarAlumnoConSuProfesor(){ }
Este mtodo permite ASOCIAR (asignar) UN Alumno y UNO o Varios profesores.
Para ello ingresamos el cdigo del Alumno.
Validamos SI existe el cdigo del Alumno. Si el cdigo SI EXISTE, obtenemos el
ndice del Profesor que ha sido seleccionado para la asociacin.
Obtenemos el ndice del Alumno que se encuentra en el ArrayList.
Obtenemos una COPIA del objeto de tipo Alumno que se encuentra en el ArrayList.
ASOCIAMOS un nuevo PROFESOR con el Alumno, es decir, hacemos guardar la
REFERENCIA del objeto dentro del arreglo de objetos de tipo Profesor que se
encuentra dentro de la clase Alumno.
REEMPLAZAMOS (CHANCAMOS) en el mismo ndice con el objeto de tipo Alumno
llamado 'auxiliar' YA MODIFICADO
public void menu(){ }
Este mtodo muestra un MENU de opciones relacionadas a la clase.
Permite interactuar con el USUARIO.
Pasos a seguir 3:
5. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
6. Generar el archivo ArregloDeAlumno.class (Proceso de Compilacin)
La clase ArregloDeAlumno
package Matricula;
import javax.swing.JOptionPane;
import java.util.ArrayList;
import ClasesBase.Base;
public class ArregloDeAlumno {
//Declaracion de Atributos
private ArrayList arregloAlumno;
private ArregloDeProfesor arregloProfesor;
//Declaracion de Mtodos
//Mtodo Constructor por parmetros
public ArregloDeAlumno(ArregloDeProfesor profesores){
//Instanciamos un objeto de tipo ArrayList para
//almacenar a objetos de tipo Alumno
arregloAlumno = new ArrayList();
//Hacemos referencia al Arreglo de Profesores
//que se encuentra en la clase Matricula
arregloProfesor = profesores;
}
//Este mtodo devuelve la cantidad de objetos de tipo Alumno
//que se han almacenado en el ArrayList
public int getCantidadDeAlumnos(){
return arregloAlumno.size();
}
Prof. Arn Elas Herrera Ponte
Pg. 7
Algortmica II
Pg. 8
Algortmica II
return (Alumno)arregloAlumno.get(indice);
}
//Este mtodo muestra el valor de los atributos de un objeto de tipo Alumno
public void mostrarDatosDelAlumno(int indice){
//Obtenemos un objeto de tipo Alumno
//que se encuentra en 'indice' del ArrayList 'arregloAlumno'
Alumno aux = getAlumnoPorIndice(indice);
int cantidadProfesores = aux.getIndiceProfesor();
System.out.println("********************");
System.out.println("* DATOS DEL ALUMNO *");
System.out.println("********************");
System.out.println(aux.toString());
//Mostramos los datos de sus Profesores
//siempre y cuando TENGA PROFESORES
if(cantidadProfesores > 0){
System.out.println("***************************");
System.out.println("* DATOS DE SUS PROFESORES *");
System.out.println("***************************");
for(int i=0; i<cantidadProfesores; i++){
System.out.println("*************************");
System.out.println("* DATOS DEL PROFESOR "+(i+1)+" *");
System.out.println("*************************");
Profesor prof = aux.getProfesor(i);
System.out.println(prof.toString());
}
System.out.println("*************************\n");
}
}
//Este mtodo se recorre el ArrayList llamado 'arregloAlumno'
//para mostrar los datos de cada objeto de tipo Alumno
public void mostrarDatosDeLosAlumnos(){
if(arregloAlumno.size() > 0){
for (int i = 0; i<arregloAlumno.size(); i++){
mostrarDatosDelAlumno(i);
}
}else{
JOptionPane.showMessageDialog(null,"No existen Alumnos regsitrados.",
"Ttulo",
JOptionPane.INFORMATION_MESSAGE);
}
}
//Este mtodo recorre el arreglo de Profesores
//Se muestra en una linea los datos de cada objeto de tipo Profesor
public void mostrarListadoDeProfesores(){
Profesor prof = null;
for(int i=0; i<arregloProfesor.getCantidadDeProfesores(); i++){
prof = arregloProfesor.getProfesorPorIndice(i);
System.out.println((i+1) + ".- " + prof.devolverDatosProfesor());
}
}
//Este mtodo devuelve la posicion del Profesor SELECCIONADO
public int pedirSeleccionarAUnProfesor(){
Prof. Arn Elas Herrera Ponte
Pg. 9
Algortmica II
String dato;
int opcion;
do{
System.out.println("Lista de Profesores Activos");
mostrarListadoDeProfesores();
dato = JOptionPane.showInputDialog("Ingrese el nmero del Profesor:");
opcion = Integer.parseInt(dato);
}while(opcion<1||opcion>arregloProfesor.getCantidadDeProfesores());
//A 'opcion' le RESTAMOS 1, porque el indice del arreglo empieza en CERO
return (opcion-1);
}
//Este mtodo permite ASOCIAR (asignar) UN Alumno y UNO o Varios profesores
public void asociarAlumnoConSuProfesor(){
//Ingresamos el cdigo del Alumno
String dato = Base.ingresarDato("Ingrese el codigo del Alumno:");
int indice, opcion;
//Validamos SI existe el cdigo del Alumno
if(verificarSiYaExisteElCodigo( dato )){
//Obtenemos el indice del Profesor
opcion = pedirSeleccionarAUnProfesor();
//Obtenemos el indice del Alumno que se encuentra en el ArrayList
indice = devolverIndiceDelAlumnoEnElArreglo(dato);
//Obtenemos una COPIA del objeto de tipo Alumno
//que se encuentra en el ArrayList
Alumno auxiliar = (Alumno)arregloAlumno.get(indice);
//ASOCIAMOS un nuevo PROFESOR con el Alumno
//es decir, hacemos guardar la REFERENCIA del objeto
//dentro del arreglo de objetos de tipo Profesor
//que se encuentra dentro de la clase Alumno
auxiliar.setProfesor(arregloProfesor.getProfesorPorIndice(opcion));
//REEMPLAZAMOS (CHANCAMOS) en el mismo indice
//con el objeto de tipo Alumno llamado 'auxiliar' YA MODIFICADO
arregloAlumno.set(indice,auxiliar);
JOptionPane.showMessageDialog(null,"Se ha ASOCIADO Un Alumno y Un Profesor",
"Asociar",
JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"No existe el cdigo del Alumno.",
"Ingreso de datos",
JOptionPane.WARNING_MESSAGE);
}
}
//Este mtodo muestra un MENU de opciones relacionadas a la clase
//Permite interactuar con el USUARIO
public void menu(){
int opcion;
String arregloOpciones[] = {"1.- Aadir Nuevo Alumno",
"2.- Mostrar Datos de los Alumnos",
"3.- Salir"};
do{
opcion = Base.pintarMenu(arregloOpciones);
switch(opcion){
case 1: aadirNuevoAlumno();
break;
case 2: mostrarDatosDeLosAlumnos();
break;
Prof. Arn Elas Herrera Ponte
Pg. 10
Algortmica II
}while(opcion!=arregloOpciones.length);
}
}
Clase ArregloDeProfesor
A continuacin se presenta la clase ArregloDeProfesor, que define los atributos y
mtodos ms importantes de un arreglo de objetos real Profesor, obtenidos
mediante el proceso de la ABSTRACCIN. Los mtodos del auto son:
public ArregloDeProfesor(){ }
Este es un mtodo Constructor por defecto. Instanciamos un objeto de tipo
ArrayList para almacenar a objetos de tipo Profesor.
public void hacerReferenciaAlArregloDeAlumnos(ArregloDeAlumno alumnos){ }
Hacemos referencia al Arreglo de Alumnos que se encuentra en la clase Matricula.
public int getCantidadDeProfesores(){ }
Este mtodo devuelve la cantidad de objetos de tipo Profesor que se han
almacenado en el ArrayList.
public boolean verificarSiYaExisteElCodigo(String codigo){ }
PARA IMPLEMENTAR
Este mtodo verifica si ya existe un Profesor con dicho cdigo.
Este mtodo es IMPORTANTISIMO.
Siempre se deber usar este mtodo para VERIFICAR la existencia de un Profesor.
public Profesor registrarDatosDelNuevoProfesor(String codigo){ }
Este mtodo instancia a un objeto de tipo Profesor, luego se van ingresan por
teclado el valor de sus atributos, para finalmente RETORNAR la referencia a dicho
objeto.
public void aadirNuevoProfesor(){ .. }
Este mtodo aade un nuevo objeto de tipo Profesor al ArrayList llamado
arregloProfesor.
public int devolverIndiceDelProfesorEnElArreglo (String codigo){ .. }
Este mtodo recibe por parmetro una variable de tipo String y recorre el ArrayList
para verificar si existe el valor de dicha variable. Si lo encuentra, entonces
RETORNAR el indice (posicion) de dicho objeto. Si NO lo encuentra, entonces
RETORNA el valor de -1.
public Profesor getProfesorPorIndice(int indice){ .. }
Este mtodo devuelve un objeto de tipo Profesor.
RETORNA una copia del objeto que se encuentra en el ArrayList llamado
arregloProfesor. Antes de devolver se hace un CASTING de tipo Profesor.
public void mostrarDatosDelProfesor(int indice){ }
Este mtodo muestra el valor de los atributos de un objeto de tipo Profesor.
Obtenemos un objeto de tipo Profesor que se encuentra en 'indice' del ArrayList
'arregloProfesor'. Luego verificamos si dicho Profesor esta ASOCIADO a algn
Alumno, si la respuesta es positiva entonces mostramos los datos de sus Alumnos
(Siempre y cuando TENGA ALUMNOS).
public void mostrarDatosDeLosProfesores(){ ... }
Prof. Arn Elas Herrera Ponte
Pg. 11
Algortmica II
Este mtodo se recorre el ArrayList llamado 'arregloProfesor' para mostrar los datos
de cada objeto de tipo Profesor.
public void asociarProfesorConSuAlumno(){ }
PARA IMPLEMENTAR
Este mtodo debe permitir asociar un Profesor con CERO o MUCHOS Alumnos. Para
ello es importante contar con Alumnos registrados.
public void menu(){ }
Este mtodo muestra un MENU de opciones relacionadas a la clase.
Permite interactuar con el USUARIO.
Pasos a seguir 4:
7. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
8. Generar el archivo ArregloDeProfesor.class (Proceso de Compilacin)
La clase ArregloDeProfesor
package Matricula;
import javax.swing.JOptionPane;
import java.util.ArrayList;
import ClasesBase.Base;
public class ArregloDeProfesor {
//Declaracion de Atributos
private ArrayList arregloProfesor;
private ArregloDeAlumno arregloAlumno;
//Declaracion de Mtodos
//Mtodo Constructor por defecto
public ArregloDeProfesor(){
//Instanciamos un objeto de tipo ArrayList para
//almacenar a objetos de tipo Profesor
arregloProfesor = new ArrayList();
}
public void hacerReferenciaAlArregloDeAlumnos(ArregloDeAlumno alumnos){
//Hacemos referencia al Arreglo de Alumnos
//que se encuentra en la clase Matricula
arregloAlumno = alumnos;
}
//Este mtodo devuelve la cantidad de objetos de tipo Profesor
//que se han almacenado en el ArrayList
public int getCantidadDeProfesores(){
return arregloProfesor.size();
}
//Este mtodo verifica si ya existe un Profesor con dicho codigo
public boolean verificarSiYaExisteElCodigo(String codigo){
//Para implementar...
return true;
}
Pg. 12
Algortmica II
Pg. 13
Algortmica II
Pg. 14
Algortmica II
}while(opcion!=arregloOpciones.length);
}
}
Clase Matricula
Esta clase declara dos atributos: (1) ArregloDeProfesor profesores y (2)
ArregloDeAlumno alumnos. Los cuales almacenarn los datos del programa. Esta
clase implementa los siguientes mtodos.
public Matricula(){ }
Est es el mtodo constructor por defecto.
Instancia los objetos profesores y alumnos, cada uno de los cuales almacenaran un
conjunto de objetos Profesor y Alumno respectivamente.
public void menu(){ }
PARA IMPLEMENTAR
Este mtodo muestra un MENU de opciones relacionadas a la clase.
Permite interactuar con el USUARIO.
Pasos a seguir 5:
9. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
10. Generar el archivo Matricula.class (Proceso de Compilacin)
La clase Matricula
package Matricula;
import javax.swing.JOptionPane;
import ClasesBase.Base;
public class Matricula {
private ArregloDeProfesor profesores;
private ArregloDeAlumno alumnos;
public Matricula(){
profesores = new ArregloDeProfesor();
alumnos = new ArregloDeAlumno(profesores);
profesores.hacerReferenciaAlArregloDeAlumnos(alumnos);
}
public void menu(){
int opcion;
String arregloOpciones[] = {"1.- Mantenimiento del Profesor",
"2.- Mantenimiento del Alumno",
"3.- Asociar Alumno con su Profesor",
"4.- Asociar Profesor con su Alumno",
"5.- Salir"};
Prof. Arn Elas Herrera Ponte
Pg. 15
Algortmica II
do{
opcion = Base.pintarMenu(arregloOpciones);
switch(opcion){
case 1:
profesores.menu();
break;
case 2:
alumnos.menu();
break;
case 3:
alumnos.asociarAlumnoConSuProfesor();
break;
case 4:
//PARA IMPLEMENTAR
break;
}
}while(opcion != arregloOpciones.length);
}
}
Pg. 16
Algortmica II
Pg. 17
Algortmica II
Pg. 18
Algortmica II
Pg. 19
Algortmica II
Pg. 20
Algortmica II
Pg. 21
Algortmica II
codigo = PRO511
nombre = MARIA FLORES FLORES
*************************
Se muestra de nuevo men de opciones
1.- Aadir Nuevo Alumno
2.- Mostrar Datos de los Alumnos
3.- Salir
Ingrese su opcion:
Se ingresa la opcin
3
Se muestra el men de opciones INICIAL
1.- Mantenimiento del Profesor
2.- Mantenimiento del Alumno
3.- Asociar Alumno con su Profesor
4.- Asociar Profesor con su Alumno
5.- Salir
Ingrese su opcion:
Se ingresa la opcin
5
Process completed.
Pg. 22