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