Professional Documents
Culture Documents
Escenarios:
1) Normal
2) Usuario o contraseña incorrectos
Identificar usuario
Empleado
Escenario 1:
: Empleado
validar( )
validar(String, String)
createStatement()
executeQuery( )
Escenario 2:
: Empleado
validar( )
validar(String, String)
createStatement()
executeQuery( )
Diagramas de colaboración (equivalentes a los dos diagramas de
secuencia mostrados):
Escenario 1
3: createStatement()
1: validar( ) 2: validar(String, String)
: : Sesion
FrameSesion :
Connection
: Empleado
4: executeQuery( )
:
Statement
Escenario 2
1: validar( )
2: validar(String, String) 3: createStatement()
: : Sesion
FrameSesion
: Empleado :
Connection
5: DialogError( )
6: setMensaje(String)
7: setVisible(Boolean)
4: executeQuery( )
:
DialogError :
Statement
Diagrama de clases multicapa.
-mSesion
<<pantalla>>
Sesion
FrameSesion
(from Use Case View) -mBD
(from Use Case View)
validar() Connection
validar()
(from Logical View)
createStatement()()
Statement
DialogError (from Use Case View)
(from Use Case View)
executeQuery()
setMensaje()
setVisible()
DialogError()
Aspectos de la implementación.
Tras realizar la “traducción a código” tal y como hemos explicado en clase, debemos tomar
ciertas decisiones de “bajo nivel”.
Traducción A:
La clase FrameSesion la construimos utilizando el entorno de desarrollo que tengamos.
Según los diagramas anteriores, deberemos añadirle el código indicado a continuación en
cursiva:
public class FrameSesion extends Frame
{
private Sesion mSesion=new Sesion();
public FrameSesion()
{
// This code is automatically generated by Visual Cafe when you add
// components to the visual environment. It instantiates and initialises
...
void buttonAceptar_ActionPerformed(java.awt.event.ActionEvent event)
{
validar();
}
public Sesion() {
// Conexión mediante ODBC
String url="jdbc:odbc:Merprosa1";
String driver="sun.jdbc.odbc.JdbcOdbcDriver";
try {
Class.forName(driver);
mBD=DriverManager.getConnection(url, "", "");
}
catch (Exception e) {
System.err.println("Error al conectar a la base de datos: " + e);
}
}
Traducción B:
En esta traducción, rescribimos el método validar(String, String) de Sesión y lo dejamos de
esta manera:
public boolean validar(String nombre, String contraseña) throws Exception {
String SQL="Select contraseña from Usuarios where Nombre='" + nombre +
"'";
ResultSet r=mBD.createStatement().executeQuery(SQL);
if (r.next()) {
if (r.getString(1).equals(contraseña))
return true;
}
return false;
}
Nota que hemos suprimido las cláusulas try...catch de este método, y que le hemos añadido
throws Exception en su cabcera.
Ahora, puesto que el método validar(String, String) puede arrojar una excepción, debemos
capturarla allá donde lo llamemos. Es decir, que el método validar() de FrameSesion debe
ser modificado y quedar de este modo:
private void validar() {
try {
if (!mSesion.validar(textFieldNombre.getText(),
textFieldContraseña.getText())) {
DialogError d=new DialogError(this, true);
d.setMensaje("Nombre de usuario o contraseña incorrectos");
d.setVisible(true);
}
}
catch (Exception e) {
DialogError d=new DialogError(this, true);
d.setMensaje("Error: " + e);
d.setVisible(true);
}
}
Mientras que antes era más sencillo, pero el resultado menos elegante:
private void validar() {
if (!mSesion.validar(textFieldNombre.getText(),
textFieldContraseña.getText())) {
DialogError d=new DialogError(this, true);
d.setMensaje("Nombre de usuario o contraseña incorrectos");
d.setVisible(true);
}
}