Download Memorando profesional

Document related concepts
no text concepts found
Transcript
SEGUNDO TALLER
DE OBJETOS
LENGUAJES DE
PROGRAMACIÓN
Elaborado por: Esmeide Leal
A continuación se describirá un modelo en UML, el cual consta de varias clases y se
implementará en Java, para mostrar la interacción entre objetos y como es el
comportamiento de estos, cuando se realiza e implementa un programa orientado a
objetos.
Al terminar el taller el alumno estará en capacidad de saber cuando utilizar métodos y
variables estáticas, así como saber que son las collections en java. También aprenderá a
definir y a crear paquete. Por último deberá tener un concepto de la modelación con UML y
el diseño Orientado a Objetos.
 Universidad de Antioquia
Diseño orientado a Objetos un ejemplo
Diseño de clases
Análisis del problema definición de requerimientos
Diseño de la interfaz de un package
– Identificar clases públicas
– Relaciones entre objetos
– Métodos públicos
Diseño de la interfaz interna al package
– Clases no públicas
– Variables y métodos accesibles desde clases del package
Implementación de las clases
– Variables privadas y métodos privados
– Código de los métodos
Gestión de Matriculación de Alumnos
Package 'matricula' con la funcionalidad básica
Clases públicas
– Alumno
– Asignatura
– Departamento
Descripción de las clases
Clase Departamento
- Lista de asignaturas
 Atributo o Dato
- Lista de alumnos
 Atributo o Dato
- Crear nueva asignatura
 Método
- Matricular alumno en asignatura  Método
Clase Alumno
- Nombre
- Cedula
- Descripción en formato de String  Método

Clase Asignatura
- Nombre
 Atributo o Dato
- Código
 Atributo o Dato
- Lista de alumnos matriculados
 Atributo o Dato
- Matricular alumno
 Método
- Lista de alumnos en forma de String  Método
 Universidad de Antioquia
matricula\Alumno.java
package matricula;
public class Alumno {
String nombre;
long cedula;
Alumno (String str, long n) {
nombre = str;
cedula = n;
}
public String descripcion ( ) {
return nombre + "\t" + cedula;
}
}
matricula\Asignatura.java
package matricula;
import java.util.*;
public class Asignatura {
String nombre;
long codigo;
private Vector alumnos = new Vector ();
private static long nasignaturas = 0;
private static long generarCodigo () {
return nasignaturas++;
}
Asignatura (String str) {
nombre = str;
codigo = generarCodigo ();
}
void matricular (Alumno alumno) {
alumnos.add(alumno);
}
public String descripcion(){
return "Asignatura: " + nombre +
"\tCodigo: " + codigo;
}
 Universidad de Antioquia
public String listaAlumnos(){
Enumeration enum = alumnos.elements();
StringBuffer lista =
new StringBuffer ("Alumnos matriculados:\n");
while (enum.hasMoreElements()) {
Alumno alumno = (Alumno) enum.nextElement();
lista.append(alumno.descripcion () + "\n");
}
return lista.toString();
}
} // Fin clase Asignatura
matricula\Departamento.java
package matricula;
import java.util.*;
public class Departamento {
private Vector asignaturas = new Vector ();
private Vector alumnos = new Vector ();
public Departamento (/* String Archivo*/) {
// Leer datos de un Archivo
}
public void matricular (Alumno alumno,
Asignatura asignatura) {
asignatura.matricular (alumno);
}
public Alumno nuevoAlumno (String nombre, long cedula){
Alumno alumno = new Alumno (nombre, cedula);
alumnos.addElement(alumno);
return alumno;
}
public Alumno buscarAlumno (long cedula) {
Enumeration enum = alumnos.elements ();
while (enum.hasMoreElements ()) {
Alumno alumno = (Alumno) enum.nextElement();
if (alumno.cedula == cedula) return alumno;
}
return null;
}
public Asignatura nuevaAsignatura (String nombre){
Asignatura asignatura = new Asignatura (nombre);
 Universidad de Antioquia
asignaturas.addElement(asignatura);
return asignatura;
}
public Asignatura buscarAsignatura (long codigo){
Enumeration enum = asignaturas.elements();
while (enum.hasMoreElements()) {
Asignatura asignatura =
(Asignatura) enum.nextElement();
if (asignatura.codigo == codigo)
return asignatura;
}
return null;
}
public String listaAsignaturas () {
Enumeration enum = asignaturas.elements();
StringBuffer lista = new StringBuffer ();
while (enum.hasMoreElements()){
Asignatura asignatura =
(Asignatura) enum.nextElement();
lista.append (asignatura.descripcion () + "\n");
}
return lista.toString();
}
} // Fin clase Departamento
Utilización del Paquete matrícula
1. El programa main (Clase Secretaria) hace la interacción con el usuario toda la I/O, se hace
en esta clase, puede ser pos dos opciones:
a. cargando la lista de materias y alumnos por archivo
b. Ingresando directamente los datos por teclado
Para este taller se realizará el ingreso de datos por la forma b.
2. Main (Clase Secretaria) se comunica con un objeto Departamento que hace de enlace con
los objetos de asignaturas y alumnos.
3. Main (Clase Secretaria) puede manipular los objetos que le proporciona el Departamento
(ej: pedir la descripción para mostrar por pantalla).
 Universidad de Antioquia
Obtener objeto Departamento
Este objeto hace de intermediario entre main (Secretaria) y los objetos del package
El usuario elige una de las siguientes operaciones:
1. Matricular alumno en asignatura.
- Cedula del alumno y código de la asignatura.
- Buscar objeto Asignatura y objeto Alumno en el departamento.
- (si no registrado en el departamento, pedir nombre y registrar alumno)
asignatura.matricular (alumno).
2. Crear nueva asignatura.
- Pedir nombre de la asignatura.
- Crear la asignatura.
- Mostrar la descripción de la asignatura (incluyendo el código generado).
3. Mostrar lista de asignaturas
- Pedir al Departamento un listado de asignaturas y mostrar por pantalla
4. Mostrar alumnos matriculados en una asignatura
- Pedir código de la asignatura
- Buscar objeto Asignatura en el Departamento
- Pedir a la asignatura listado de alumnos y mostrar por pantalla
Package Secretaria (clase main)
import java.io.*;
import matricula.*;
public class Secretaria {
static BufferedReader reader =
new BufferedReader (new InputStreamReader (System.in));
static long readLong () throws IOException {
 Universidad de Antioquia
return Integer.valueOf (readln ()) .longValue ();
}
static String readln () throws IOException {
return reader.readLine ();
}
public static void main (String args[]) throws IOException {
Departamento dpto = new Departamento (/* nombre Archivo */);
int opcion;
do {
System.out.println ("Que operacion desea realizar?");
System.out.println (" 1. Matricular alumno");
System.out.println (" 2. Registrar nueva asignatura");
System.out.println (" 3. Mostar asignaturas");
System.out.println (" 4. Mostar alumnos matriculados");
System.out.println (" 5. Terminar");
System.out.print ("Teclee opcion: ");
opcion = (int) readLong ();
switch (opcion) {
case 1: matricularAlumno (dpto); break;
case 2: nuevaAsignatura (dpto); break;
case 3: mostrarAsignaturas (dpto); break;
case 4: mostrarMatriculados (dpto); break;
case 5: break;
}
} while (opcion != 5);
}
static void matricularAlumno (Departamento dpto)
throws IOException {
System.out.print ("C.C del alumno: ");
long cedula = readLong ();
Alumno alumno = dpto.buscarAlumno (cedula);
if (alumno == null) {
System.out.print ("Nombre: ");
String nombre = readln ();
alumno = dpto.nuevoAlumno (nombre, cedula);
}
System.out.print ("Codigo de la asignatura: ");
long codigo = readLong ();
Asignatura asignatura = dpto.buscarAsignatura (codigo);
if (asignatura == null) {
System.out.println ("No existe la asignatura");
return;
}
dpto.matricular (alumno, asignatura);
 Universidad de Antioquia
System.out.println ("Operacion realizada");
}
static void nuevaAsignatura (Departamento dpto)
throws IOException {
System.out.print ("Nombre de la asignatura: ");
String nombre = readln ();
Asignatura asignatura = dpto.nuevaAsignatura (nombre);
System.out.println (asignatura.descripcion ());
}
static void mostrarMatriculados (Departamento dpto)
throws IOException {
System.out.print ("Codigo de la asignatura: ");
long codigo = readLong ();
Asignatura asignatura = dpto.buscarAsignatura (codigo);
if (asignatura == null) {
System.out.println ("No existe la asignatura");
return;
}
System.out.println (asignatura.listaAlumnos ());
}
static void mostrarAsignaturas (Departamento dpto) {
System.out.println (dpto.listaAsignaturas ());
}
} // Fin clase Secretaria
Consultas a resolver durante este taller: Completar el modelo y el código de este, para
que dicho modelo responda a lo siguiente.
1. Número de alumnos que posee una Materia
2. Número de materias que posee el departamento
3. Poder eliminar una materia del departamento (Tener en cuenta que no estén
matriculados alumnos en ella)
4. Cancelación de una materia por parte del alumno (Retirar Alumno de Materia)
 Universidad de Antioquia