Vous êtes sur la page 1sur 34

UNIVERSIDAD AUTONOMA GABRIEL RENE MORENO FACULTAD DE CIENCIAS EXACTAS Y TECNOLOGIA CARRERA DE INGENIERIA DE SISTEMAS

PROYECTO FINAL ARQUITECTURA SOA - MOVIL

SISTEMA DE GESTION PARA LA ADMINISTRACION DE

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

PEDIDOS DE LA EMPRESA P&N SA

MATERIA: DOCENTE: OBED

ARQUITECTURA DE SOFTWARE ING. VEIZAGA GONZALES JOSUE

ALUMNA: MARIA NATALY GONZALEZ CASTRO

SANTA CRUZ BOLIVIA ENERO-2012

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

Tabla de contenido
No se encontraron elementos de tabla de contenido.

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

1. FLUJO DE TRABAJO: REQUISITOS

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

REQUISITOS FUNCIONALES:

1.1. IDENTIFICAR ACTORES

SISTEMA DE GESTION PARA LA ADMINISTRACION DE PEDIDOS DE LA EMPRESA P&N SA

Adminstrador

Empleado

Cliente

1.2. IDENTIFICAR CASOS DE USO


CU1. CU2. CU3. CU4. CU5. Gestionar Empleado Gestionar Cliente Gestionar Producto Gestionar Tipo Venta Registrar Pedido

1.3. PRIORIZAR CASOS DE USO


Nro. CU1 CU2 CU3 CU4 CU5 Caso de Uso Gestionar Empleado Gestionar Cliente Gestionar Producto Gestionar Tipo Venta Registrar Pedido Estado Aprobado Aprobado Aprobado Aprobado Aprobado Prioridad Importante Importante Importante Importante Critico Riesgo Normal Normal Normal Normal Critico

1.4. DETALLAR CASOS DE USO


CU1: Gestionar Empleado

Gestionar Empleado Empleado

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

Caso de Uso Actores Actor Iniciador Pre-Condiciones Post-Condiciones Resumen Acciones del Actor

Acciones del sistema

Curso Alternativo o Alterno

CU1: Gestionar Empleado Empleado Empleado Ninguno Empleado registrado en el sistema Este caso de uso registra los datos personales del Empleado para posteriormente continuar con la emisin como docente y/o la inscripcin como alumno. Registrar: 1.1.- Solicita crear Nuevo Empleado 1.3.- ingreso sus datos personales 1.4.- guardo los datos del Empleado Modificar: 2.1.- Busco al empleado por su cdigo. 2.3.- Modifico los datos. 2.4.- Presiono botn Modificar. Eliminar: 3.1.- Busco al empleado por su cdigo. 3.3.- Presiono botn Eliminar. 1.2.- Genera el cdigo automticamente 1.5.- Valida y guarda los datos del Empleado. 2.2, 3.2.- busca y muestra los datos del Empleado. 2.5.- valida y guarda los datos actualizados del Empleado. 3.3.- Elimina al empleado. 1.4,2.4.- error al introducir los datos del Empleado 2.1,3.1.- no existe ese cdigo en el sistema

Interfaz del Prototipo:

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

CU2: Gestionar Cliente

Gestionar Cliente Empleado

Caso de Uso Actores Actor Iniciador Pre-Condiciones Post-Condiciones Resumen Acciones del Actor

Gestionar Cliente Empleado, cliente Empleado Ninguno Cliente registrado en el sistema Registrar datos de los clientes. 1.1.- Solicita crear Nuevo Cliente 1.3.- ingreso los datos requeridos y Presiono botn Guardar. 2.1.- Selecciono el Cliente de la lista. 2.3.- y Modifico los datos y Presiono botn Modificar. 3.1.- Selecciono el Cliente de la lista y Presiono botn Eliminar. 1.2.- genera el cdigo automticamente 1.5.- Valida los datos y Guarda los datos del Cliente. 2.3.- valida y Modifica los datos actualizados del Cliente. 3.3.- Elimina al Cliente. 1.4 error al introducir los datos del Cliente 2.2,3.1.- no existe ese cdigo en el sistema

Acciones del sistema

Curso Alternativo o Alterno

Interfaz ClienteMovil:

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

Interfaz ClienteEscritorio:

CU3: Gestionar Producto

Gestionar Producto Administrador

Caso de Uso Actores Actor Iniciador Pre-Condiciones Post-Condiciones Resumen Acciones del Actor

Acciones del sistema

Curso Alternativo o Alterno

CU3: Gestionar Producto Administrador Administrador Ninguno Producto registrado en el sistema. Este caso de uso registrar los Productos que se llevaran a cabo en algn Producto determinado 1.1.- Solicita crear Nuevo Producto 1.3.- ingreso los datos requeridos por el sistema. 1.4.- guardo los datos del Producto 2.1.- Busco al Producto por su cdigo. 2.3.- Modifico los datos. 2.4.- Presiono botn Modificar. 3.1.- Busco al Producto por su cdigo. 3.3.- Presiono botn Eliminar. 1.2.- genera el cdigo automticamente 1.5.- Valida los datos. 1.6.- Guarda los datos del Producto. 2.2.- busca y muestra los datos del Producto. 2.5.- valida y guarda los datos actualizados del Producto. 3.2.- busca y muestra los datos del Producto. 3.3.- Elimina al Producto. 1.4,2.4.- error al introducir los datos del Producto 2.1,3.1.- no existe ese cdigo en el sistema
INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

Interfaz del Prototipo:

CU4: Gestionar Tipo Venta

Gestionar Tipo Venta Administrador

Caso de Uso Actores Actor Iniciador Pre-Condiciones Post-Condiciones Resumen Acciones del Actor

Acciones del sistema

Curso Alternativo o Alterno

CU4: Gestionar Tipo Venta Administrador Administrador Ninguno Asignar Tipo Venta a una Edicin. Administrar datos de las Tipo Ventas, donde se llevaran a cabo los cursos. 1.1.- Solicita crear Nuevo Tipo Venta 1.3.- ingreso los datos requeridos por el sistema y Presiono Guardar. 2.1.- Selecciono el Tipo Venta de la lista y Modifico los datos. 2.2.- Presiono botn Modificar. 3.1.- Selecciono el Tema de la lista y Presiono botn Eliminar. 1.2.- genera el cdigo automticamente 1.5.- Valida los datos y Guarda los datos del Tipo Venta. 2.3.- valida y Modifica los datos actualizados del Tipo Venta. 3.3.- Elimina al Tipo Venta. 1.5 error al introducir los datos del Tipo Venta 2.2,3.1.- no existe ese cdigo en el sistema

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

Interfaz del Prototipo:

CU5: Registrar Pedido

Registrar Pedido Empleado

Caso de Uso Actores Actor Iniciador Pre-Condiciones Post-Condiciones Resumen Acciones del Actor

Acciones del sistema

Curso Alternativo o Alterno

CU5: Registrar Pedido Empleado Empleado Gestionar Cliente, Gestionar Empleado, Gestionar Producto, Gestionar TipoVenta Ninguno Registrar los datos necesarios para crear la Pedido de un Producto 1.1.- Solicita crear Nueva Pedido 1.3.-ingreso los datos requeridos por el sistema. 1.4.- Buscar y seleccionar datos del cliente, empleado y tipo venta. 1.5.- Introducir los productos para registrar el pedido. 1.6.- guardo los datos la Pedido 1.2.- genera el cdigo automticamente 1.6.- Valida los datos. 1.7.- Guarda los datos la Pedido. 1.6.- error al introducir los datos la Pedido.

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

Interfaz del Prototipo PedidoMovil:

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

Interfaz del Prototipo PedidoEscritorio:

10

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

1.5. DIAGRAMA GENERAL DE CASOS DE USO

Gestionar Tipo Venta Cliente

<<include>>

Gestionar Producto <<include>>

Adminstrador

Gestionar Cliente

<<include>> Registrar Pedido

<<include>>

Gestionar Empleado Empleado

11

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

REQUISITOS NO FUNCIONALES: El software ser Preciso, ya que contamos con la precisin que el SGBD MySQL nos ofrece, el cual nos brinda el almacenamiento, como en la obtencin de informacin gracias a las consultas que se efectan constantemente en los formularios y en las transacciones de estas. El software ser recuperable, ya que el sistema cuenta con un plan de contingencia, la cual no tiene dificultad alguna para volver a funcionar en posibles fallas inesperadas El software trabajara aprovechando el adecuado uso de recursos del sistemas para que de esta manera sea eficiente Sera de uso portable, ya que se podr adaptar a diferentes cambios de recursos El Software ser de fcil mantenimiento, ya que contara con un modulo para diagnosticar posibles fallas, y realizar cambios necesarios al software

REQUISITOS DE RESTRICCION: Tiempo: El tiempo de Desarrollo estimado para el desarrollo de software estar indefinido momentneamente, ya que est en constante implementacin por las necesidades del propietario de la empresa P&N SA. Pero para el desarrollo de prototipo se espera poder obtenerlo en funcin de un semestre, con el cual se obtendr algunos mdulos de los puntos establecidos para el completo desarrollo del sistema. Costo: El costo estimado para el desarrollo de software, basado en tablas de recursos y estimaciones es de 1.000 $us. Recursos : Este software ser desarrollado mediante las siguientes herramientas Plataforma: se desarrollara en el sistema operativo Windows XP x86 IDE: NetBeans 6.9.1 con el lenguaje JAVA SGBD: El gestor de base de datos ser MySQL Case: StarUML para el modelo de diagramas de UML

12

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

2. FLUJO DE TRABAJO: ANALISIS

13

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

2.1. Anlisis de la Arquitectura


2.1.1. Identificar Paquetes

Adm Recursos

Adm Pedidos

2.1.2. Identificar Casos de Uso por Paquete


Paquete Adm Recursos:

Gestionar Empleado <<trace>> Adm Recursos <<trace>> <<trace>> Gestionar Producto Gestionar Tipo Venta

Adm Recursos

Gestionar Empleado Gestionar Tipo Venta

Gestionar Producto Administrador

14

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

Paquete Adm Pedidos:

Gestionar Cliente <<trace>> Adm Pedidos <<trace>> Registrar Pedido

Adm Pedidos Gestionar Producto

Gestionar Cliente

<<include>> Gestionar Tipo Venta <<include>> <<include>>

Registrar Pedido

<<include>>

Gestionar Empleado Empleado

15

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

2.2. Anlisis de Casos de Uso


2.2.1. Diagramas de Colaboracin
CU1. Gestionar Empleado

CU2.

Gestionar Cliente

CU3.

Gestionar Producto

CU4.

Gestionar Tipo Venta

CU5.

Registrar Pedido

2.3. Anlisis de Paquetes


Adm Pedidos Adm Recursos

16

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

3. FLUJO DE TRABAJO: DISEO

17

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

3.1. Diseo de la Arquitectura


3.1.1. Escenario del Usuario y Subsistemas
Adm Recursos

Sistema de Pedidos de P&N SA. Usuario

Adm Pedidos

USUARIOS

Administrador: es el usuario encargado de registrar toda la informacin relacionada que se maneja sobre los cursos que imparte la empresa Empleado: Es el usuario encargado de Registrar las inscripciones y notas sobre los cursos que imparte la empresa

3.1.2. Arquitectura Fsica del Subsistema


<<Cliente>> Pedidos_Movil <<Servidor>> Pedidos_WServidor Servicios <<conexion>>

Pedidos Usuario

Modelo Negocio <<Cliente>> Pedidos_Escritorio <<conexion>> Datos

Presentacion Empleado

<<Base Datos>> MySQL

Diagrama de Despliegue

18

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

3.1.3. Arquitectura Lgica del Subsistema

<<Cliente>> Pedidos_Escritorio: Presentacion <<form>> IEmpleado <<form>> ICliente <<form>> IProducto <<form>> ITipoVenta

<<Cliente>> Pedidos_Movil: Pedidos

<<form>> FrmPedido <<form>> IPedido

<<form>> FrmCliente

Servidor

Servicios <<Web Service>> WSEmpleado <<Web Service>> WSCliente <<Web Service>> WSTipoVenta

<<Web Service>> WSProducto

<<Web Service>> WSPedido

Modelo

Negocio <<class>> NEmpleado <<class>> NProducto <<class>> NCliente <<class>> NTipoVenta

<<class>> NPedido

Datos <<class>> Empleado <<class>> Pedido <<class>> Cliente <<class>> TipoVenta <<class>> Producto

<<class>> DetallePedido

<<class>> HibernateUtil

19

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

3.2. Diseo de casos de uso


3.2.1. Diagrama de Secuencia y Diagrama Parcial de Clases
CU1. Gestionar Empleado

20

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

class Empleado javax.swing.JFrame IEmpleado ~ cempleado: CEmpleado = new CEmpleado() ~ + + + + + + + + + + + + empleadows: WSEmpleado D_FechaIngreso: datechooser.beans.DateChooserCombo Listar: javax.swing.JTable RB_Sexo_Femenino: javax.swing.JRadioButton RB_Sexo_Masculino: javax.swing.JRadioButton TF_CI: javax.swing.JTextField TF_Cod: javax.swing.JTextField TF_Direccion: javax.swing.JTextField TF_Nombre: javax.swing.JTextField TF_Telefono: javax.swing.JTextField btnEliminar: javax.swing.JButton btnModificar: javax.swing.JButton btnNuevo: javax.swing.JButton btnRegistrar: javax.swing.JButton btnSalir: javax.swing.JButton IEmpleado() initComponents() : void btnNuevoActionPerformed(java.awt.event.ActionEvent) : void btnRegistrarActionPerformed(java.awt.event.ActionEvent) : void btnModificarActionPerformed(java.awt.event.ActionEvent) : void btnEliminarActionPerformed(java.awt.event.ActionEvent) : void btnSalirActionPerformed(java.awt.event.ActionEvent) : void ListarMouseClicked(java.awt.event.MouseEvent) : void main(String[]) : void Nuevo() : void Registrar() : void Modificar() : void Eliminar() : void Listar() : void validar() : boolean ObtenerCantFilas(String) : int getFecha(DateChooserCombo) : String setFecha(DateChooserCombo, String) : void obtenerFechadelSistema(DateChooserCombo) : void +empleadows + + + + + + + + nuevoEmpleado() : int insertarEmpleado(int, String, int, String, String, String, int) : void modificarEmpleado(int, String, int, String, String, String, int) : void eliminarEmpleado(int) : void listEmpleados() : String listNombresEmpleados() : String obtCodEmpleado(String) : int obtNombreEmpleado(int) : String -

WSEmpleado

Empleado cod: int nombre: String ci: int sexo: String fechaI: String dir: String telef: int estado: int conexion: Conexion sta: Statement Empleado() Empleado(Conexion) getCi() : int setCi(int) : void getCod() : int setCod(int) : void getConexion() : Conexion setConexion(Conexion) : void getDir() : String setDir(String) : void getEstado() : int setEstado(int) : void getFechaI() : String setFechaI(String) : void getNombre() : String setNombre(String) : void getSexo() : String setSexo(String) : void getSta() : Statement setSta(Statement) : void getTelef() : int setTelef(int) : void NuevoCod() : int Registrar() : void Modificar() : void Eliminar() : void ObtenerPorNombre(String) : void ObtenerPorCod(int) : void ObtenerEmpleados() : String ObtenerTodoEmpleados() : String toString() : String CargarDatos(ResultSet) : void

~ + + + + + + + + + +

+ + + + + + + + + + + + + + +

+ + + +cempleado + + CEmpleado + + empleado: Empleado = new Empleado() + + CEmpleado() +empleado + NuevoCodEmpleado() : int + RegistrarEmpleado(int, String, int, String, String, String, int) : void + ModificarEmpleado(int, String, int, String, String, String, int) : void + EliminarEmpleado(int) : void + ListarEmpleados() : String + ListarNombresEmpleados() : String + ObtenerCodEmpleado(String) : int + ObtenerNombreEmpleado(int) : String + ValidarEmpleado(String) : boolean + + + + + + + + Conexion + + DRIVER: String = "com.mysql.jdbc... +conexion + BASEDEDATOS: String = "jdbc:mysql://l... + USUARIO: String = "root" + PASSWORD: String = "" con: Connection res: ResultSet sta: Statement Conexion() conectar() : void desconectar() : void getCon() : Connection setCon(Connection) : void getRes() : ResultSet setRes(ResultSet) : void getSta() : Statement setSta(Statement) : void CantidadTuplas(String) : int main(String[]) : void

21

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

CU2.

Gestionar Cliente

22

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

class Cliente javax.swing.JFrame ICliente ~ + + + + + + + + + clientews: WSCliente Listar: javax.swing.JTable TF_CI: javax.swing.JTextField TF_Cod: javax.swing.JTextField TF_Direccion: javax.swing.JTextField TF_Nombre: javax.swing.JTextField TF_Telefono: javax.swing.JTextField btnEliminar: javax.swing.JButton btnModificar: javax.swing.JButton btnNuevo: javax.swing.JButton btnRegistrar: javax.swing.JButton btnSalir: javax.swing.JButton ICliente() initComponents() : void btnNuevoActionPerformed(java.awt.event.ActionEvent) : void btnRegistrarActionPerformed(java.awt.event.ActionEvent) : void btnModificarActionPerformed(java.awt.event.ActionEvent) : void btnEliminarActionPerformed(java.awt.event.ActionEvent) : void btnSalirActionPerformed(java.awt.event.ActionEvent) : void ListarMouseClicked(java.awt.event.MouseEvent) : void main(String[]) : void Nuevo() : void Registrar() : void Modificar() : void Eliminar() : void Listar() : void validar() : boolean ObtenerCantFilas(String) : int Pedidos: FrmCliente + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wc: WebToMobileClient = new WebToMobile... midletPaused: boolean = false exitCommand: Command RegistrarCliente: Command BuscarCliente: Command EliminarCliente: Command ModificarCliente: Command okCommand: Command Atras: Command exitCommand1: Command okListarCliente: Command MenuCliente: List FrmCliente: Form TF_Nombre: TextField TF_CI: TextField TF_Cod: TextField TF_Telefono: TextField TF_Direccion: TextField ListarClientes: Form tableItem1: TableItem Pedidos() initialize() : void startMIDlet() : void resumeMIDlet() : void switchDisplayable(Alert, Displayable) : void commandAction(Command, Displayable) : void getExitCommand() : Command MenuPrincipalAction() : void property get getMenuCliente() : List MenuClienteAction() : void property get getFrmCliente() : Form property get getTF_Cod() : TextField property get getTF_Nombre() : TextField property get getTF_CI() : TextField property get getTF_Direccion() : TextField property get getTF_Telefono() : TextField property get getBuscarCliente() : Command property get getRegistrarCliente() : Command property get getModificarCliente() : Command property get getEliminarCliente() : Command property get getAtras() : Command property get getListarClientes() : Form getOkCommand() : Command getExitCommand1() : Command getOkListarCliente() : Command getDisplay() : Display exitMIDlet() : void startApp() : void pauseApp() : void destroyApp(boolean) : void validar() : boolean ObtenerCantFilas(String) : int MIDlet CommandListener

~clientews WSCliente ~ + + + + + + + + + ncliente: CCliente = new CCliente() nuevoCliente() : int insertarCliente(int, String, int, String, int) : void modificarCliente(int, String, int, String, int) : void eliminarCliente(int) : void ListClientes() : String ListNombresClientes() : String obtCliente(int) : String obtCodCliente(String) : int obtNombreCliente(int) : String

Cliente + + + + + + -cliente + + + + + + + + + + + + + + + + + + + cod: int nombre: String ci: int dir: String telef: int estado: int conexion: Conexion sta: Statement Cliente() Cliente(Conexion) getCi() : int setCi(int) : void getCod() : int setCod(int) : void getConexion() : Conexion setConexion(Conexion) : void getDir() : String setDir(String) : void getEstado() : int setEstado(int) : void getNombre() : String setNombre(String) : void getTelef() : int setTelef(int) : void NuevoCod() : int Registrar() : void Modificar() : void Eliminar() : void Listar() : String ObtenerPorNombre(String) : void ObtenerPorCod(int) : void ObtenerClientes() : String CargarDatos(ResultSet) : void toString() : String + + + + -conexion + + + + + + + + + + + Conexion() conectar() : void desconectar() : void getCon() : Connection setCon(Connection) : void getRes() : ResultSet setRes(ResultSet) : void getSta() : Statement setSta(Statement) : void CantidadTuplas(String) : int main(String[]) : void

Conexion DRIVER: String = "com.mysql.jdbc... BASEDEDATOS: String = "jdbc:mysql://l... USUARIO: String = "root" PASSWORD: String = "" con: Connection res: ResultSet sta: Statement

~ncliente CCliente + + + + + + + + + + + cliente: Cliente CCliente() NuevoCodCliente() : int RegistrarCliente(int, String, int, String, int) : void ModificarCliente(int, String, int, String, int) : void EliminarCliente(int) : void ListarClientes() : String ObtenerCliente(int) : String ListarNombresClientes() : String ObtenerCodCliente(String) : int ObtenerNombreCliente(int) : String ValidarCliente(String) : boolean

23

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

CU3.

Gestionar Producto

24

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

class Producto javax.swing.JFrame IProducto ~ + + + + + + + + + productows: WSProducto Listar: javax.swing.JTable TF_Cantidad: javax.swing.JTextField TF_Cod: javax.swing.JTextField TF_Nombre: javax.swing.JTextField TF_PrecioV: javax.swing.JTextField btnEliminar: javax.swing.JButton btnModificar: javax.swing.JButton btnNuevo: javax.swing.JButton btnRegistrar: javax.swing.JButton btnSalir: javax.swing.JButton IProducto() initComponents() : void btnNuevoActionPerformed(java.awt.event.ActionEvent) : void btnRegistrarActionPerformed(java.awt.event.ActionEvent) : void btnModificarActionPerformed(java.awt.event.ActionEvent) : void btnEliminarActionPerformed(java.awt.event.ActionEvent) : void btnSalirActionPerformed(java.awt.event.ActionEvent) : void ListarMouseClicked(java.awt.event.MouseEvent) : void main(String[]) : void Nuevo() : void Registrar() : void Modificar() : void Eliminar() : void Listar() : void validar() : boolean ObtenerCantFilas(String) : int

WSProducto ~ cproducto: CProducto = new CProducto() + + + + ~productows + + + + + nuevoProducto() : int insertarProducto(int, String, int, float) : void modificarProducto(int, String, int, float) : void eliminarProducto(int) : void listProductos() : String listNombresProducto() : String obtCodProducto(String) : int obtNombreProducto(int) : String obtProducto(String) : String

Producto cod: int nombre: String cantidad: int precioV: float estado: int conexion: Conexion sta: Statement Producto() Producto(Conexion) getCantidad() : int setCantidad(int) : void getCod() : int setCod(int) : void getConexion() : Conexion setConexion(Conexion) : void getEstado() : int setEstado(int) : void getNombre() : String setNombre(String) : void getPrecioV() : float setPrecioV(float) : void NuevoCod() : int Registrar() : void Modificar() : void Eliminar() : void ObtenerPorNombre(String) : void ObtenerPorCod(int) : void ObtenerProductos() : String ObtenerTodoProductos() : String CargarDatos(ResultSet) : void toString() : String

~ + + + + + + + + + +

Conexion + + + + + + + + + + + + + + + DRIVER: String = "com.mysql.jdbc... BASEDEDATOS: String = "jdbc:mysql://l... USUARIO: String = "root" PASSWORD: String = "" con: Connection res: ResultSet sta: Statement -conexion Conexion() conectar() : void desconectar() : void getCon() : Connection setCon(Connection) : void getRes() : ResultSet setRes(ResultSet) : void getSta() : Statement setSta(Statement) : void CantidadTuplas(String) : int main(String[]) : void

+ + + + producto: Producto = new Producto() + + CProducto() + NuevoCodProducto() : int RegistrarProducto(int, String, int, float) : void +producto + + ModificarProducto(int, String, int, float) : void + EliminarProducto(int) : void + ListarProductos() : String + ListarNombresProducto() : String + ObtenerCodProducto(String) : int + ObtenerNombreProducto(int) : String + ObtenerProducto(String) : String + + + + + + + + CProducto

+cproducto

25

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

CU4.

Gestionar Tipo Venta

26

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

class TipoVenta javax.swing.JFrame ITipoVenta ~ + + + + + + + + + tipoventaws: WSTipoVenta JTextField11: javax.swing.JLabel Listar: javax.swing.JTable TF_Cod: javax.swing.JTextField TF_Descripcion: javax.swing.JTextField TF_Interes: javax.swing.JTextField TF_Nombre: javax.swing.JTextField TF_Plazo: javax.swing.JTextField btnEliminar: javax.swing.JButton btnModificar: javax.swing.JButton btnNuevo: javax.swing.JButton btnRegistrar: javax.swing.JButton btnSalir: javax.swing.JButton ITipoVenta() initComponents() : void btnNuevoActionPerformed(java.awt.event.ActionEvent) : void btnRegistrarActionPerformed(java.awt.event.ActionEvent) : void btnModificarActionPerformed(java.awt.event.ActionEvent) : void btnEliminarActionPerformed(java.awt.event.ActionEvent) : void btnSalirActionPerformed(java.awt.event.ActionEvent) : void ListarMouseClicked(java.awt.event.MouseEvent) : void main(String[]) : void Nuevo() : void Registrar() : void Modificar() : void Eliminar() : void Listar() : void ObtenerCantFilas(String) : int validar() : boolean WSTipoVenta ~ ctv: CTipoVenta = new CTipoVenta() +tipoventaws + + + + + + + + nuevoTV() : int insertarTV(int, String, String, int, String) : void modificarTV(int, String, String, int, String) : void eliminarTV(int) : void listTV() : String listNombresTV() : String obtCodTV(String) : int obtNombreTV(int) : String

TipoVenta cod: int nombre: String descripcion: String interes: int plazo: String estado: int conexion: Conexion sta: Statement TipoVenta() TipoVenta(Conexion) getCod() : int setCod(int) : void getConexion() : Conexion setConexion(Conexion) : void getDescripcion() : String setDescripcion(String) : void getEstado() : int setEstado(int) : void getInteres() : int setInteres(int) : void getNombre() : String setNombre(String) : void getPlazo() : String setPlazo(String) : void getSta() : Statement setSta(Statement) : void NuevoCod() : int Registrar() : void Modificar() : void Eliminar() : void ObtenerPorNombre(String) : void ObtenerPorCod(int) : void ObtenerTipoVentas() : String Listar() : String CargarDatos(ResultSet) : void toString() : String

+ctv CTipoVenta ~ tipoVenta: TipoVenta = new TipoVenta()

+ + + + + + + + + + + + + + +

+ + + + CTipoVenta() + NuevoCodTipoVenta() : int +tipoVenta + + + RegistrarTipoVenta(int, String, String, int, String) : void + + ModificarTipoVenta(int, String, String, int, String) : void + + EliminarTipoVenta(int) : void + + ListarTipoVentas() : String + + ListarNombresTipoVentas() : String + + ObtenerCodTipoVenta(String) : int + + ObtenerNombreTipoVenta(int) : String + + + + Conexion + + DRIVER: String = "com.mysql.jdbc... + BASEDEDATOS: String = "jdbc:mysql://l... -conexion + USUARIO: String = "root" + PASSWORD: String = "" + con: Connection + res: ResultSet + sta: Statement + + Conexion() + conectar() : void desconectar() : void + getCon() : Connection setCon(Connection) : void getRes() : ResultSet setRes(ResultSet) : void getSta() : Statement setSta(Statement) : void CantidadTuplas(String) : int main(String[]) : void

27

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

CU5.

Registrar Pedido

28

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil


class Pedido

PARCIAL 1.1

MIDlet CommandListener Pedidos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wc: WebToMobileClient = new WebToMobile... midletPaused: boolean = false exitCommand: Command LimpiarDetalle: Command SeleccionarProducto: Command RegistrarPedido: Command cancelCommand: Command backListPedidos: Command okListPedidos: Command okalertSelecCliente: Command okAlertRegPedido: Command backFrmPedido: Command okAddProducto: Command cancelAddProducto: Command backCommand: Command okAlertGuardar: Command okCommand1: Command MenuPrincipal: List MenuPedidos: List FrmPedido: Form CG_Cliente: ChoiceGroup TF_CodPedido: TextField CG_TipoVenta: ChoiceGroup TF_FechaE: TextField TF_FechaP: TextField TF_Empleado: TextField TF_Obs: TextField TF_MontoTotal: TextField tableItem: TableItem ListarPedidos: Form tableItem2: TableItem AddProducto: Form CG_Producto1: ChoiceGroup TF_Cantidad: TextField alertRegistrarPedido: Alert tableModel3: SimpleTableModel tableModel2: SimpleTableModel Pedidos() initialize() : void startMIDlet() : void resumeMIDlet() : void switchDisplayable(Alert, Displayable) : void commandAction(Command, Displayable) : void getExitCommand() : Command property get getMenuPrincipal() : List MenuPrincipalAction() : void property get getMenuPedidos() : List MenuPedidosAction() : void getOkAlertListprod() : Command property get getSeleccionarProducto() : Command property get getLimpiarDetalle() : Command property get getFrmPedido() : Form property get getTF_CodPedido() : TextField property get getCG_Cliente() : ChoiceGroup property get getTF_Empleado() : TextField property get getTF_FechaP() : TextField property get getTF_FechaE() : TextField property get getCG_TipoVenta() : ChoiceGroup getTableItem() : TableItem property get getTF_MontoTotal() : TextField property get getTF_Obs() : TextField getTableModel1() : SimpleTableModel getCancelCommand() : Command property get getRegistrarPedido() : Command getOkListPedidos() : Command getBackListPedidos() : Command getOkAlertRegPedido() : Command property get getListarPedidos() : Form getAlertRegistrarPedido() : Alert getOkAddProducto() : Command getBackCommand() : Command getCancelAddProducto() : Command property get getAddProducto() : Form property get getCG_Producto1() : ChoiceGroup property get getTF_Cantidad() : TextField getBackFrmPedido() : Command getOkAlertGuardar() : Command getTableItem2() : TableItem getTableModel3() : SimpleTableModel getDisplay() : Display exitMIDlet() : void startApp() : void pauseApp() : void destroyApp(boolean) : void CargarCombos() : void obtenerFechadelSistema() : String ObtenerCantFilas(String) : int LimpiarPedido() : void LimpiarDetalle() : void

javax.swing.JFrame IPedido ~ ~ ~ ~ ~ + + + + + + + + pedido: WSPedidos cliente: WSCliente empleado: WSEmpleado tipoVenta: WSTipoVenta producto: WSProducto CB_Clientes: javax.swing.JComboBox CB_Empleados: javax.swing.JComboBox CB_Producto: javax.swing.JComboBox CB_tipoVenta: javax.swing.JComboBox JTextField11: javax.swing.JLabel Listar: javax.swing.JTable ListarDetalle: javax.swing.JTable TF_Cod: javax.swing.JTextField TF_FechaE: javax.swing.JTextField TF_FechaP: javax.swing.JTextField TF_monto: javax.swing.JTextField TF_obs: javax.swing.JTextField btnAddProducto: javax.swing.JButton btnNuevo: javax.swing.JButton btnRegistrar: javax.swing.JButton btnSalir: javax.swing.JButton IPedido() initComponents() : void btnNuevoActionPerformed(java.awt.event.ActionEvent) : void btnRegistrarActionPerformed(java.awt.event.ActionEvent) : void btnSalirActionPerformed(java.awt.event.ActionEvent) : void ListarMouseClicked(java.awt.event.MouseEvent) : void ListarDetalleMouseClicked(java.awt.event.MouseEvent) : void btnAddProductoActionPerformed(java.awt.event.ActionEvent) : void ListarDetalleKeyReleased(java.awt.event.KeyEvent) : void main(String[]) : void Nuevo() : void Registrar() : void Listar() : void CargarCombos() : void obtenerFechadelSistema() : String ObtenerCantFilas(String) : int validar() : boolean

~cliente ~producto WSProducto ~ + + + + + + + + + cproducto: CProducto = new CProducto() nuevoProducto() : int insertarProducto(int, String, int, float) : void modificarProducto(int, String, int, float) : void eliminarProducto(int) : void listProductos() : String listNombresProducto() : String obtCodProducto(String) : int obtNombreProducto(int) : String obtProducto(String) : String ~ + + + + + + + + ~tipoVenta WSTipoVenta ctv: CTipoVenta = new CTipoVenta() nuevoTV() : int insertarTV(int, String, String, int, String) : void modificarTV(int, String, String, int, String) : void eliminarTV(int) : void listTV() : String listNombresTV() : String obtCodTV(String) : int obtNombreTV(int) : String ~ + + + + + + + + ~empleado ~ WSEmpleado cempleado: CEmpleado = new CEmpleado() nuevoEmpleado() : int insertarEmpleado(int, String, int, String, String, String, int) : void modificarEmpleado(int, String, int, String, String, String, int) : void eliminarEmpleado(int) : void listEmpleados() : String listNombresEmpleados() : String obtCodEmpleado(String) : int obtNombreEmpleado(int) : String + + + + + + + + + nuevoCliente() : int insertarCliente(int, String, int, String, int) : void modificarCliente(int, String, int, String, int) : void eliminarCliente(int) : void ListClientes() : String ListNombresClientes() : String obtCliente(int) : String obtCodCliente(String) : int obtNombreCliente(int) : String ~pedido WSPedidos ~ + + + + cpedido: CPedido = new CPedido() nuevoPedido() : int insertarPedido(int, int, int, String, String, int, float, String) : void insertarDetallePedido(int, int, int, float) : void listPedidos() : String WSCliente ncliente: CCliente = new CCliente()

~ncliente +cproducto +ctv CProducto ~ + + + + + + + + + + producto: Producto = new Producto() ~ CProducto() NuevoCodProducto() : int RegistrarProducto(int, String, int, float) : void ModificarProducto(int, String, int, float) : void EliminarProducto(int) : void ListarProductos() : String ListarNombresProducto() : String ObtenerCodProducto(String) : int ObtenerNombreProducto(int) : String ObtenerProducto(String) : String + + + + + + + + + CTipoVenta tipoVenta: TipoVenta = new TipoVenta() CTipoVenta() NuevoCodTipoVenta() : int RegistrarTipoVenta(int, String, String, int, String) : void ModificarTipoVenta(int, String, String, int, String) : void EliminarTipoVenta(int) : void ListarTipoVentas() : String ListarNombresTipoVentas() : String ObtenerCodTipoVenta(String) : int ObtenerNombreTipoVenta(int) : String ~ + + + + + + + + + + CEmpleado empleado: Empleado = new Empleado() CEmpleado() NuevoCodEmpleado() : int RegistrarEmpleado(int, String, int, String, String, String, int) : void ModificarEmpleado(int, String, int, String, String, String, int) : void EliminarEmpleado(int) : void ListarEmpleados() : String ListarNombresEmpleados() : String ObtenerCodEmpleado(String) : int ObtenerNombreEmpleado(int) : String ValidarEmpleado(String) : boolean + + + + + + + + + + + cliente: Cliente CCliente() NuevoCodCliente() : int RegistrarCliente(int, String, int, String, int) : void ModificarCliente(int, String, int, String, int) : void EliminarCliente(int) : void ListarClientes() : String ObtenerCliente(int) : String ListarNombresClientes() : String ObtenerCodCliente(String) : int ObtenerNombreCliente(int) : String ValidarCliente(String) : boolean + + + + + + + +cempleado CCliente

~cpedido CPedido pedido: Pedido detallePedido: DetallePedido CPedido() NuevoCodPedido() : int RegistrarPedido(int, int, int, String, String, int, float, String) : void NuevoCodDetallePedido() : int RegistrarDetallePedido(int, int, int, int, float) : void ListarPedidos() : String main(String[]) : void

+empleado Empleado + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cod: int nombre: String ci: int sexo: String fechaI: String dir: String telef: int estado: int conexion: Conexion sta: Statement Empleado() Empleado(Conexion) getCi() : int setCi(int) : void getCod() : int setCod(int) : void getConexion() : Conexion setConexion(Conexion) : void getDir() : String setDir(String) : void getEstado() : int setEstado(int) : void getFechaI() : String setFechaI(String) : void getNombre() : String setNombre(String) : void getSexo() : String setSexo(String) : void getSta() : Statement setSta(Statement) : void getTelef() : int setTelef(int) : void NuevoCod() : int Registrar() : void Modificar() : void Eliminar() : void ObtenerPorNombre(String) : void ObtenerPorCod(int) : void ObtenerEmpleados() : String ObtenerTodoEmpleados() : String toString() : String CargarDatos(ResultSet) : void

-pedido -cliente Pedido Cliente + + + + + + + + + + + + + + + + + + + + + + + + + cod: int nombre: String ci: int dir: String telef: int estado: int conexion: Conexion sta: Statement Cliente() Cliente(Conexion) getCi() : int setCi(int) : void getCod() : int setCod(int) : void getConexion() : Conexion setConexion(Conexion) : void getDir() : String setDir(String) : void getEstado() : int setEstado(int) : void getNombre() : String setNombre(String) : void getTelef() : int setTelef(int) : void NuevoCod() : int Registrar() : void Modificar() : void Eliminar() : void Listar() : String ObtenerPorNombre(String) : void ObtenerPorCod(int) : void ObtenerClientes() : String CargarDatos(ResultSet) : void toString() : String + + + + + + + + + + + + + + + + + + + + + + + + + cod: int codClie: int codEmp: int fechaPedido: String fechaEntrega: String codTV: int monto: float obs: String conexion: Conexion sta: Statement Pedido() Pedido(Conexion) getCod() : int setCod(int) : void getCodClie() : int setCodClie(int) : void getCodEmp() : int setCodEmp(int) : void getCodTV() : int setCodTV(int) : void getConexion() : Conexion setConexion(Conexion) : void getFechaEntrega() : String setFechaEntrega(String) : void getFechaPedido() : String setFechaPedido(String) : void getMonto() : float setMonto(float) : void getObs() : String setObs(String) : void NuevoCod() : int Registrar() : void Listar() : String CargarDatos(ResultSet) : void getDate(String) : Date toString() : String

+tipoVenta +producto TipoVenta Producto + + + + + + + + + + + + + + + + + + + + + + + cod: int nombre: String cantidad: int precioV: float estado: int conexion: Conexion sta: Statement Producto() Producto(Conexion) getCantidad() : int setCantidad(int) : void getCod() : int setCod(int) : void getConexion() : Conexion setConexion(Conexion) : void getEstado() : int setEstado(int) : void getNombre() : String setNombre(String) : void getPrecioV() : float setPrecioV(float) : void NuevoCod() : int Registrar() : void Modificar() : void Eliminar() : void ObtenerPorNombre(String) : void ObtenerPorCod(int) : void ObtenerProductos() : String ObtenerTodoProductos() : String CargarDatos(ResultSet) : void toString() : String + + + + + + + + + + + + + + + + + + + + + + + + + + + cod: int nombre: String descripcion: String interes: int plazo: String estado: int conexion: Conexion sta: Statement TipoVenta() TipoVenta(Conexion) getCod() : int setCod(int) : void getConexion() : Conexion setConexion(Conexion) : void getDescripcion() : String setDescripcion(String) : void getEstado() : int setEstado(int) : void getInteres() : int setInteres(int) : void getNombre() : String setNombre(String) : void getPlazo() : String setPlazo(String) : void getSta() : Statement setSta(Statement) : void NuevoCod() : int Registrar() : void Modificar() : void Eliminar() : void ObtenerPorNombre(String) : void ObtenerPorCod(int) : void ObtenerTipoVentas() : String Listar() : String CargarDatos(ResultSet) : void toString() : String

DetallePedido +detallePedido + + + + + + + + + + + + + + + cod: int codPed: int codProd: int cantidad: int montoP: float conexion: Conexion sta: Statement DetallePedido() getCantidad() : int setCantidad(int) : void getCod() : int setCod(int) : void getCodPed() : int setCodPed(int) : void getCodProd() : int setCodProd(int) : void getConexion() : Conexion setConexion(Conexion) : void getMontoP() : float setMontoP(float) : void NuevoCod() : int Registrar() : void

-conexion

+conexion

-conexion Conexion

+ -conexion + + + + + + + + + + + + + +

-conexion DRIVER: String = "com.mysql.jdbc... BASEDEDATOS: String = "jdbc:mysql://l... USUARIO: String = "root" -conexion PASSWORD: String = "" con: Connection res: ResultSet sta: Statement Conexion() conectar() : void desconectar() : void getCon() : Connection setCon(Connection) : void getRes() : ResultSet setRes(ResultSet) : void getSta() : Statement setSta(Statement) : void CantidadTuplas(String) : int main(String[]) : void

29

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

3.3. Diseo de Datos


3.3.1. Diseo Lgico (a) Diagrama Final de Clases
class Class Mo...

TIPOVENTA EMPLEADO CI: int COD: int DIR: STRING ESTADO: int NOMBRE: STRING SEXO: STRING TEL: int 1 COD: int DESCRIPCION: STRING ESTADO: int INTERES: int NOMBRE: STRING PLAZO: STRING 1 DETALLEPEDIDO ESTA CANTIDAD: int COD: int CODPED: int CODPROD: int MONTOP: FLOAT

0..*

1..* PEDIDO

CLIENTE CI: int COD: int DIR: STRING 1 ESTADO: int NOMBRE: STRING TEL: int

1..* -

COD: int CODCLIE: int CODEMP: int CODTV: int 1..* FECHAENTREGA: DATE FECHAPEDIDO: DATE MONTO: FLOAT OBS: STRING

PRODUCTO 1..* CANTIDAD: int COD: int ESTADO: int NOMBRE: STRING PRECIOV: int

(b) Mapeo Empleado Cd Nombre CI Sexo FechaI Direccin tel Estado Cliente Cd Nombre CI Dir tel Estado TipoVenta Cd Nombre descripcin Interes Plazo Estado Producto Cd Nombre Cantidad preciov

estado

Pedido Cd codclie codemp Fechapedido Fechaentrega codtv monto obs Detalle Pedido Cd codped codprod Cantidad Montop

30

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

3.3.2. Diseo Fsico


(c) Tabla de Volumen Empleado Nombre Tipo de Dato Amplitud Llave Descripcin Cdigo Entero 5 PK Cdigo del empleado Nombre Texto 50 Nombre del empleado CI Entero 10 CI del empleado Sexo Texto 2 Seco del empleado fechai Fecha 8 Fecha inicio Direccin Texto 20 Direccin de su domicilio Telfono Entero 8 Nmero de telfono estado entero 8 Estado activado Cliente Nombre Tipo de Dato Amplitud Llave Descripcin Cdigo Entero 5 PK Cdigo del cliente Nombre Texto 50 Nombre del cliente CI Entero 10 CI del cliente Direccin Texto 20 Direccin de su domicilio Telfono Entero 8 Numero de telfono estado entero 8 Estado activado Producto Nombre Tipo de Dato Amplitud Llave Descripcin Cdigo Entero 5 PK Cdigo del producto Nombre Texto 50 Nombre del producto Cantidad Entero 10 Cantidad de producto preciov entero 20 Precio venta estado entero 8 Estado activado Tipo Venta Nombre Tipo de Dato Amplitud Llave Descripcin Cdigo Entero 5 PK Cdigo del tipo venta Nombre Texto 50 Nombre del tipo venta descripcion texto 20 Descripcion del tipo venta interes texto 20 Inters de la tipo plazo Entero 8 Tiempo de pago estado entero 8 Estado activado Pedido Nombre Tipo de Dato Amplitud Llave Descripcin Cdigo Entero 5 PK Cdigo del pedido Cdigo cliente Entero 5 FK Cdigo del cliente Cdigo empleado Entero 5 FK Cdigo del empleado Cdigo tipoventa Entero 5 FK Cdigo de tipo venta Fecha pedido fecha 8 Fecha pedido Fecha entrega Fecha 8 Fecha entrega monto flotante 8 Monto total

31

INF552 - Arquitectura de Software

Sistema de Pedidos de Productos P&N SA. Arquitectura SOA + Aplicacin Mvil

PARCIAL 1.1

Detalle pedido Nombre Tipo de Dato Amplitud Llave Descripcin Cdigo Entero 5 PK Cdigo de detalle pedido Cdigo pedido Entero 5 FK Cdigo del pedido Cdigo producto Entero 5 FK Cdigo del producto Cantidad Entero 5 Cantidad del pedido monto flotante 5 Monto a pagar

32

INF552 - Arquitectura de Software

Vous aimerez peut-être aussi