¿Cómo se integra la capa de modelo con la capa de interfaz?
Para avanzar en el desarrollo de una aplicación, es vital enlazar correctamente la capa de modelo con la capa de interfaz. Este proceso es crucial para permitir que los usuarios interactúen con el sistema de manera efectiva. Vamos a detallar cómo se realiza este procedimiento utilizando métodos estáticos y simulaciones de autenticación para distintas entidades de usuario, como doctores y pacientes.
¿De qué manera se autentican los usuarios?
La autenticación se realiza a través de correos electrónicos. En este simulacro inicial, nos centramos en dos tipos de usuarios: doctores y pacientes. Para gestionarlo, se creó un método estático privado que determinará el tipo de usuario basado en el parámetro insertado.
privatestaticvoidAutenticacionSimulada(int tipoUsuario){if(tipoUsuario ==1){// Usuario es un Doctor}elseif(tipoUsuario ==2){// Usuario es un Paciente}}
La autenticación varía en función del tipo de usuario, verificando los correos en listas predefinidas para doctores y pacientes.
¿Cómo se gestionan las listas de doctores y pacientes?
Para simular un sistema realista de autenticación y manejo de datos de usuarios, se crearon listas que almacenan los correos electrónicos de doctores y pacientes. Este esquema imita la recuperación de registros de una base de datos.
Estas listas permiten verificar si el correo electrónico ingresado por el usuario está registrado, facilitando la autenticación.
¿Cuál es la lógica implementada para validar correos electrónicos?
El proceso de verificación recorre las listas de usuarios (doctores o pacientes) hasta encontrar una concordancia con el correo ingresado. Si se encuentra, se cambia el estado de una variable booleana indicadora para true.
bool emailCorrecto =false;foreach(var doctor in listaDoctores){if(doctor.Email == emailIngresado){ emailCorrecto =true; doctorLogueado = doctor;break;}}
Esta verificación evita accesos no autorizados y asegura que solo los usuarios registrados puedan acceder a sus respectivos menús.
¿Cómo se maneja el menú y qué opciones se presentan?
Una vez autenticado el usuario, el menú se ajusta según el tipo de usuario. La funcionalidad del menú es esencial para guiar al usuario hacia las operaciones que puede realizar en el sistema. En el código proporcionado, se establece un menú inicial que pide al usuario que ingrese su correo electrónico para verificar su identidad y tipo.
while(!emailCorrecto){ Console.WriteLine("Por favor ingrese su correo electrónico:"); emailIngresado = Console.ReadLine();// Lógica de verificación}
¿Qué otras configuraciones y consideraciones se implementan?
Además de la autenticación, es importante mencionar la preparación del programa para ulteriores mejoras, como persistencia de datos y ampliación de funcionalidades. El uso de listas para manejar colecciones de objetos es altamente eficiente para pequeñas simulaciones, pero no es adecuado para sistemas más extensos donde se contempla el acceso regular a bases de datos.
Con esta estructura, se sienta la base para un sistema robusto y seguro que no solo autentica usuarios, sino que también prepara el camino para integrar futuras mejoras y funcionalidades adicionales.
Para los compañeros que comienzan este módulo, recomiendo:
1.- Aventarse 3 cafés bieeen cargados.
2.-Tener la documentación de Java abierta en otra ventana.
3.- Pausar cada que haya dudas porque la profesora va muy rápido
4.- Paciencia, porque va a doler (poquito).
no es necesario el cafe
gracias por recordarme que tengo que tomarme el cafe jajaj
Para los que sufrimos por que ella va muy rapido aqui les dejo algunos atajos de teclado rapidos(para windows, no se en mac como seran):
Ctr + D = Duplica toda la linea de codigo
Shift + Alt + flecha arriba o flecha abajo = Mueve la linea de codigo completo
Ctrl + E = te aparece una ventana de los archivos recientes y te ayuda a cambiar entre los archivos mas rapidamente que dando click en las pestañas superiores.
si presionan dos veces Shift les abre una ventana para buscar en todo el proyecto, la palabra de busqueda relacionará methodos clases y variables, cuando presionan ENTER los lleva directamente a donde su busqueda.
Creo que es buena practica empezar a no depender del mouse.
¿son ideas mias o vas super rapido haciendo el codigo?
no amigo, no es idea tuya, eso sucede cuando tomas practica, puedes codificar mucho más rápido
Si, va súper rápido y a veces es posible perderse
woooow me encanto esta clase, tenia de todo!...Arreglos, poliformismo, niveles de acceso de la información...Vi tantas cosas y ¡¡¡aprendí mucho!!! Excelente clase :)
La verdad que si, super completa
Excelente aunque me hubiese gustado diseñar alguna interfaz grafica, Pero ese sera mi nuevo reto implementar una interfaz a esta logica de negocio.
A mi gustaría ver un curso en Platzi de interfaces gráficas con JavaFX o Swing por lo menos
YO TAMBIEN ESPERO UN CURSO ASI!
En vez de crear dos variables globales para el usuario logueado, yo hice solo una pero de tipo User:
publicstaticUser userLogged;
Me pareció una mala clase debido a que fue muy rápido a mi parecer.
Para eso esta el botón de pausa amigo. O puedes ver el video primero entender que esta realizando y después tratar de implementarlo tu mismo, de ese modo se aprende mas.
Aparte de ir rápido, no estaría nada mal que se vaya a la par con el diagrama UML pues creo que todos nos guiamos de un diagrama para la construcción del código.
Platzi tiene algo de interfaz gráfica con JAVA?
Te recomiendo el siguiente sitio web habla un poco de una de las librerias para integrar elementos gráficos:
A pesar de que si es cierto que va rápido, me parece buena clase, ya que todo lo que plasmo en código ya lo hemos visto en el curso anterior y este curso, lo veo más como un reto para evaluar que tanto sabemos de lo que hemos visto.
Buena aplicación del método equals() :D
Todos diciendo que la profe va rápido y yo viendo la clase en velocidad x2 😅
jajajaj yo en 1.5x
Yo también, me ayudó bastante que ya estoy acostumbrado a ver videos en Youtube a 2x, es una habilidad que desarrollé sin querer 😆
Muy buena clase.
Agrego por acá un try{}catch(){} para validar en caso de que el usuario digite campos nulos:
try{String email = sc.nextLine();if(userType ==1){for(Doctor d : doctors){if(d.getEmail().equals(email)){ correctUser =true;//Obtener el usuario logueado doctorLogged = d;//showDoctorMenu}}}if(userType ==2){for(Patient p : patients){if(p.getEmail().equals(email)){ correctUser =true;//Obtener el usuario logueado patientLogged = p;//showPatientMenu}}}}catch(NullPointerException e){System.out.println("Please type a correct email format");}
Por alguna razón no mer sirvió, sin embargo despues de buscar y hacer algunos cambios lo logre hacer con:
System.out.printf("\nType here 👉 ");do{try{try{ test = keyboard.nextLine();//receive whatever inputif(test.isEmpty()){thrownewNullPointerException("var is empty");}else{sleepFor(500); uResponse =Integer.parseInt(test);//parse that input into an Integer (not an int)break;}}catch(NullPointerException e){System.out.printf("\nRemember you must type at least ony number from 0-2\n");showMenu();}}catch(NumberFormatException e){//TODO: handle exceptionSystem.out.printf("\n\nERROR (❌): this program only accepts integers\n\n");showMenu();}}while(true);
Cual es el comando en IntelliJ, para copiar una linea completa hacia abajo?
Ctrl + D
tal cual, muchas gracias!!
Genial, me gusta cuando nos metemos de lleno al codigo jejeje.
Esta es un clase valiosa, la rapidez con la que programa te ayudar a evaluar tus conocimientos de java
Según lo entendido en la asignación de objetos en clases anteriores...
doctorLogged =d ;
Esta asignación sería incorrecta ya que a doctorLogged se estaría asignando la dirección de memoria de d , al menos eso creo.
¿Cual es la forma correcta de copiar un objeto en java?
Exactamente se lo esta "señalando", pero ese es el objetivo de esa linea de código
Alguien me podría ayudar con mi duda.
¿Por que anahi guarda en una variable static doctorLogged para ver el tipo de doctor que está logeado?
¿Que pasaría si dos doctores se conectan uno despué de otro?
¿Se sobresscribiría esa variable?
Se supone que se utiliza una variable static cuando necesitas compartir información entre instacias de una misma clase.
Gracias
Porque las variables estáticas pueden usarse en métodos estáticos, si nada más hubiera escrito:
publicDoctor doctorLogged
Por la lógica de los métodos estáticos no podríamos usarla
Gente no se mareen tanto con esta y las demas clase q faltan desde aqui.
Ya q no se ve tema como tal sino ya la implementacion final de las clases para terminar el programa osea pura logica de programacion(como el usuario agenda citas y como el doctor agrega fechas disponibles) y conocimiento a fondo de los collections, q como se habran dado cuenta, no se vio mucho, de collections por lo tanto va a ser muy complejo entender lo q sigue.
Mi recomendacion seria investiguen harto de estructuras de datos y como se relacionan con los collections de Java(basicamente los collections es la implementacion de las estructuras de datos pero en Java) una vez q realmente hayan practicado y entendido las Estructuras de Datos, veran q no es tan complejo lo q sigue, como recomendacion antes de hacer toda la carrera de Java Backend en Platzi vean este curso de Harvard de fundamentos de Ciencias de la Computacion CS50x Harvard by the way esta en ingles pero tiene certificacion, espero les sirva