EJERCICIOS SOBRE ARQUITECTURAS SOFTWARE DE alfredo/iso/   EJERCICIOS SOBRE ARQUITECTURAS

download EJERCICIOS SOBRE ARQUITECTURAS SOFTWARE DE alfredo/iso/   EJERCICIOS SOBRE ARQUITECTURAS

of 23

  • date post

    20-Oct-2018
  • Category

    Documents

  • view

    213
  • download

    0

Embed Size (px)

Transcript of EJERCICIOS SOBRE ARQUITECTURAS SOFTWARE DE alfredo/iso/   EJERCICIOS SOBRE ARQUITECTURAS

  • EJERCICIOS SOBRE ARQUITECTURAS SOFTWARE DE VARIOS NIVELES 1.- La interfaz de usuario asociada a un caso de uso llamado CONSULTAR PRECIO aparece a continuacin, junto con la clase Java correspondiente:

    import java.awt.*; import java.awt.event.*; public class ConsPrecioIU extends Frame { Label label1 = new Label(); Panel panel1 = new Panel(); Button button1 = new Button(); Button button2 = new Button(); Panel panel2 = new Panel(); GridLayout gridLayout1 = new GridLayout(3,2); Label label2 = new Label(); TextField textField1 = new TextField(); Label label3 = new Label(); TextField textField2 = new TextField(); Label label4 = new Label(); TextField textField3 = new TextField(); public ConsPrecioIU() { super(); try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.setTitle("Frame Title"); label1.setText("CONSULTAR PRECIO"); label1.setAlignment(Label.CENTER); button1.setLabel("Consultar Precio"); button1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { button1_actionPerformed(e); } }); button2.setLabel("Cancelar"); button2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { button2_actionPerformed(e); } }); label2.setText("MANZANAS (Kg.)"); label3.setText("PERAS (Kg.)"); label4.setText("NARANJAS (Kg.)"); panel2.setLayout(gridLayout1); this.add(label1, BorderLayout.NORTH); this.add(panel1, BorderLayout.SOUTH); panel1.add(button1, null); panel1.add(button2, null); this.add(panel2, BorderLayout.CENTER); panel2.add(label2, null); panel2.add(textField1, null); panel2.add(label3, null); panel2.add(textField2, null);

  • panel2.add(label4, null); panel2.add(textField3, null); this.pack(); this.setVisible(true);} void button1_actionPerformed(ActionEvent e) {...} void button2_actionPerformed(ActionEvent e) {...} } Se dispone tambin de una clase llamada Aviso que sirve para crear Dialog modales asociados al objeto Frame actual. La llamada new Aviso(this,"Pulsa Aceptar y me voy"); creara lo siguiente:

    Adems, nos han proporcionado los siguientes mtodos, los cuales no sabemos ni a qu clase pertenecen ni qu es lo que hacen exactamente, pero nos han dicho que son tiles para acceder a los datos almacenados en la siguiente tabla de una BD Access. Adems nos dicen que dicha BD es accesible por medio de una fuente de datos ODBC llamada PRODS

    public void inicializarBD () { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conexion=DriverManager.getConnection("jdbc:odbc:PRODS"); sentencia=conexion.createStatement(); } catch(Exception e){System.out.println("Error"+e.toString());} } public float getPrecio(String nombre) { try{ rs=sentencia.executeQuery("SELECT PRECIO FROM PRODUCTOS "+ "WHERE NOMBRE='"+nombre+"'"); if (rs.next()) return rs.getFloat("PRECIO"); } catch (Exception e) {System.out.println("Error: "+e.toString());} return 0; } Se pide: Rellenar la clase ConsPrecioIU con el cdigo necesario para que al pulsar el botn CONSULTAR PRECIO aparezca como resultado el precio de los productos escogidos. Por ejemplo, el resultado sera el siguiente:

    si los precios actuales fueran los que aparecen en la tabla ACCESS anterior y se hubiera pulsado el botn CONSULTAR PRECIO con los siguientes datos de entrada:

  • La solucin debe basarse en una arquitectura lgica en 3 niveles y ser extensible ante un futuro cambio en la lgica del negocio, ya que se est pensando en aplicar porcentajes de descuento a cada producto dependiendo de la cantidad de Kg. que se compre. 2.- La interfaz de usuario asociada a un caso de uso llamado RESERVAR LABORATORIO aparece a continuacin, junto con las clases Java correspondientes:

    import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ReservarLab extends JFrame { JPanel jPanel1 = new JPanel(); JLabel jLabel1 = new JLabel(); BorderLayout borderLayout1 = new BorderLayout(); JPanel jPanel2 = new JPanel(); JComboBox jComboBox1 = new JComboBox(); JComboBox jComboBox2 = new JComboBox(); JButton jButton1 = new JButton(); JPanel jPanel3 = new JPanel(); GridLayout gridLayout1 = new GridLayout(6,6); JTextField jTextField1 = new JTextField(); JTextField cajasTexto[][] = new JTextField[5][5]; GestorLabs gestor = new GestorLabs(); public ReservarLab() { super(); try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.setSize(new Dimension(400, 300)); jLabel1.setText("NOMBRE USUARIO:"); jPanel2.setLayout(gridLayout1); jButton1.setText("Reservar"); this.getContentPane().setLayout(borderLayout1); this.setTitle("Reservar Laboratorio"); jTextField1.setColumns(20);

  • this.getContentPane().add(jPanel1, BorderLayout.NORTH); jPanel1.add(jLabel1, null); jPanel1.add(jTextField1, null); this.getContentPane().add(jPanel2, BorderLayout.CENTER); jPanel2.add(new JLabel()); String etiqsDias[] = new String[5]; etiqsDias[0]="L"; etiqsDias[1]="M"; etiqsDias[2]="X"; etiqsDias[3]="J"; etiqsDias[4]="V"; for (int i=0;i

  • 4.- El diagrama de secuencia con el diseo del caso de uso Buscar Personas Por Nombre

    Usuario

    Buscar PersonasPor Nombre

    es el siguiente:

    usuario

    : IU_VP : GestorPersonas

    escribir Nombre()

    buscarPorNombre(nombre:String)

    P1, P2, ... Pn()Pi: Persona

    getNombre()

    getDireccion()

    getTelefono()

    GBD: Statement

    executeQuery("select * from persona where nombre= %nombre")

    r: ResultSetnew()next()

    getString("nombre"),...,: getString("telefono")

    new Persona(nombre:String, direccion:String, telefono:String)

    Esta es la interfaz grfica de usuario correspondiente al caso de uso:

    A continuacin presentamos una implementacin INCOMPLETA en Java de dicho caso de uso utilizando una arquitectura fsica en tres niveles. package jun02;

  • import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; import java.rmi.*; public class IU_VP extends JFrame { JLabel jLabel1 = new JLabel(); JTextField jTextField1 = new JTextField(); JTextArea jTextArea1 = new JTextArea(); GestorPersonas g; public IU_VP() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { jLabel1.setBounds(new Rectangle(17, 41, 130, 30)); this.getContentPane().setLayout(null); this.setSize(new Dimension(400, 300)); this.setTitle("Pertsonen bilakatzaile / Buscador de Personas"); jLabel1.setRequestFocusEnabled(false); jLabel1.setText("Izena / Nombre"); jTextField1.setBounds(new Rectangle(122, 40, 197, 33)); jTextField1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jTextField1_actionPerformed(e); } }); jTextArea1.setBounds(new Rectangle(45, 97, 261, 145)); this.getContentPane().add(jTextArea1, null); this.getContentPane().add(jTextField1, null); this.getContentPane().add(jLabel1, null); } public void setLogicaNegocio(GestorPersonas gp) {g=gp;}

  • void jTextField1_actionPerformed(ActionEvent e) { } public static void main(String[] argc) { IU_VP i = new IU_VP(); i.setVisible(true); try{ System.setSecurityManager(new RMISecurityManager()); String url = i.setLogicaNegocio((GestorPersonas)Naming.lookup(url)); } catch (Exception ex) { } } } package jun02; import com.objectspace.jgl.Container; public interface GestorPersonas { /** Mtodo que busca personas con un determinado nombre * @param n Nombre de la persona a buscar * @return Container con los objetos de Persona que tienen dicho nombre */ Container buscarPorNombre(String n) } package jun02; public class Persona { private String nombre; private String direccion; private String telefono; public Persona(String n, String dir, String tel) { nombre=n; direccion=dir; telefono=tel; } public String getNombre(){return nombre;} public String getDireccion() {return direccion;} public String getTelefono() {return telefono;} } package jun02; import java.rmi.server.*; import java.rmi.*;

  • import java.sql.*; import java.util.*; import com.objectspace.jgl.Container; import com.objectspace.jgl.Array; public class ImplGestorPersonas { PreparedStatement s; Connection o; public ImplGestorPersonas() throws RemoteException { try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); o=DriverManager.getConnection("jdbc:odbc:BDPers"); s=o.prepareStatement("select nombre, direccion, telefono"+ " from persona where nombre like ?"); } catch (Exception ex){System.out.println("Error: "+ex.toString());} } public Container buscarPorNombre(String n) throws RemoteException { Array v=new Array(); } public static void main(String[] args) { System.setSecurityManager(new RMISecurityManager()); try { ImplGestorPersonas objetoServidor = new ImplGestorPersonas(); try { java.rmi.registry.LocateRegistry.createRegistry(1200); } catch (Exception e) {System.out.println("Rmiregistry ya lanzado");} Naming.rebind("//localhost:1200/gestorPersonas", ); System.out.println("Lanzado el objeto servidor"); } catch (Exception e) {System.out.println("Error al lanzar el servidor"+e.toString());} }} Se pide implementar el cdigo correspondie