Hola MrClassic, he revisado tu ejercicio y en primer lugar felicitarte porque se ve un buen trabajo. Te voy a hacer distintas apreciaciones para tratar de animarte a mejorar:
[ Deje todo comentado como muestra del proceso de desarrollo del ejercicio. "iniciaba de una forma luego la cambiaba por otra que creia mejor" ]Estos comentarios sobre cosas que pensaste pero luego cambiaste es preferible no presentarlos a la hora de entregar un ejercicio o ejemplo. Se entiende que siempre que se crea código hay un proceso de cambio y de mejora progresivo, y el trabajo se evalúa en base al código final, no en base a lo que se haya ido pensando a lo largo del proceso de creación del código.
Por ejemplo esto:
this("",0,"","");
/* nombre = "";
edad = 0;
direccion = "";
telefono = "";*/
El this está muy bien usado. No hace falta ver el comentario, si usas el this de esa manera (y lo has creado tú mismo, sin copiarlo desde ningún sitio) ya estás demostrando un mejor nivel de programación.
[ Deseo saber si estoy o no incurriendo en el modelo descrito en la siguiente imagen como dije tengo dudas mil, y el diagrama de clases muestra que la clase mainUniversidad "usa" a todas las demas clases. ]En general sí estás haciendo un buen uso del modelo de programación orientada a objetos
Pero la imagen que describe el modelo de la programación orientada a objetos es esta:
El método main no es el centro de atención, simplemente "pone en juego a los objetos"
Voy a hacer una revisión de clases una a una:
Clase Estudiante: todo bien
Clase Curso: todo bien
Clase Matricula: está muy bien planteada y de acuerdo con la filosofía de la orientación a objetos. Una matrícula es una relación de un estudiante con un curso y consta de algunos atributos propios, de un objeto estudiante y de un objeto curso. ¡Ahí estás haciendo un buen uso de los objetos!
Los métodos get de atributos objetos devuelven objetos -- > bien
Método getMatricula: este método podemos decir que no está bien planteado por varios motivos, pero son cuestiones que irás aprendiendo a medida que vayas avanzando en el estudio de Java. Te digo que no está bien planteada porque:
a) Un método get suele ser un método tipo función, por tanto que devuelve algo con return. Este método no devuelve nada.
b) Cada clase debe tener sus responsabilidades. La clase responsable de almacenar la facultad es la clase curso, por tanto debería ser esta clase quien dispusiera de un método que diga el nombre de la facultad. En el código que has planteado esta responsabilidad la tiene switch(datoFacultad){ dentro de getMatricula, y esto no es adecuado. Yendo más allá, posiblemente hubiera sido adecuado crear una clase Facultad, pero tanto si se crea como si no, no sería apropiado tener ese switch dentro de la clase Matricula.
c) Un método como el getMatricula debería llamarse mostrarDatosMatricula
d) Un método como getMatricula debería posiblemente ser un método sobreescrito toString(), pero para esto necesitas avanzar en la programación Java para comprender qué es, para qué sirve y cómo se utiliza el método toString()
Clase CapturaDatos: todo bien. Teniendo en cuenta que las clases son el molde para crear objetos, no es un nombre adecuado. Sería más adecuado CapturadorDeDatos. De esta forma podemos decir que "hemos creado un objeto capturador de datos" y no "un objeto captura datos"
Clase MainUniversidad: bien
Este fragmento:
//OBTENEMOS Y MOSTRAMOS VALORES DE VARIABLES DE ESTUDIANTE USANDO METODOS Getters
System.out.println("\n");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
System.out.println("LOS DATOS INGRESADOS SON: ");
System.out.println("NOMBRE: " + estudiante.getNombre());
System.out.println("EDAD: " + estudiante.getEdad());
System.out.println("DIRECCION: " + estudiante.getDireccion());
System.out.println("TELEFONO: " + estudiante.getTelefono());
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
Está mostrando los datos de un estudiante, pero esto no debe ser responsabilidad de la clase del main, deberías tener un método dentro de la clase estudiante para hacer esto, y en el main simplemente invocar este método.
Lo mismo cuando muestras los datos de los cursos y de las matrículas. Esto debería ser responsabilidad de cada clase, no del main.
[ desearia "ya que no puedo preguntar de forma hablada", que intuyera algunas de mis iniciales intenciones "Lo comentado" y me diera sus apreciaciones con miras de saber si estoy o no en lo correcto ]Sí, todo lo que se ve comentado ha sido mejorado. Por ejemplo
//Constructor Auxiliar
curso = new Curso();
//ESTABLECEMOS VALORES PARA VARIABLES DE CURSO USANDO METODOS Setters
curso.setNombre(nom2);
curso.setTematica(tema);
curso.setCarrera(carrera);
curso.setFacultad(facultad);
========================================== */
//Constructor con parametros
curso = new Curso(nom2,tema,carrera,facultad);
¡Muy bien! Estás haciendo en una línea lo que antes hacías en cinco
[ ¿Donde se debe imprimir?, ¿En una clase cualquiera "Matricula en este caso" o el "main"?, "de igual manera imprimi en ambas clases" ]Creo que ya he comentado que cada clase debe ocuparse de sus cosas.
[ si se imprime en el main, como debo imprimir la información del estudiante, que debo instanciar? la clase estudiante?"Estudiante.getNombre(), o la clase matricula que contiene la clase estudiante y curso instanciadas Matricula().getStudent().getNombre()? "¿Es esto ultimo correcto?. ]Sí, esto último es correcto. Normalmente dispondrás del objeto Matricula y a lo mejor no conoces o no tienes visibilidad el objeto estudiante, excepto si accedes a él a través de la matrícula.
Nota: largas cadenas de llamadas no se consideran adecuadas, por ejemplo pais.getRegion().getProvincia().getCiudad().getFacultad().getMatricula().getEstudiante indicaría que algo no se está haciendo bien.
[ El ejercicio trata de representar la matricula de un curso Universitario, trate de hacer lo mas claro posible, espero sea entendido ]El ejercicio está bien planteado y el diseño es bueno, podrás mejorarlo si sigues estudiando y practicando, pero te felicito por el trabajo.
Saludos.