Memoria POO - Practica de programación orientada a objetos, programa de gestión de una fábrica PDF

Title Memoria POO - Practica de programación orientada a objetos, programa de gestión de una fábrica
Author Kike hds
Course Programación Orientada a Objetos
Institution UNED
Pages 43
File Size 1.2 MB
File Type PDF
Total Downloads 225
Total Views 309

Summary

PRÁCTICA DE PROGRAMACIÓNORIENTADA A OBJETOSTitulación: Ingeniería InformáticaNombre: EnriqueApellidos: Penadés BertóE-mail: [email protected]éfono: 628253172Índice:1-Introducción a la fábrica artesanal de muebles2-Analisis y diseño3-Diagramas UML3-Diagrama de casos de uso3-Diagrama de clases4...


Description

PRÁCTICA DE PROGRAMACIÓN ORIENTADA A OBJETOS Titulación: Ingeniería Informática

Nombre: Enrique Apellidos: Penadés Bertó E-mail: e Teléfono

es

Índice: 1-Introducción a la fábrica artesanal de muebles

2-Analisis y diseño

3-Diagramas UML 3.1-Diagrama de casos de uso 3.2-Diagrama de clases

4-Descripción de las clases más relevantes

5-Traza de ejecución

6-Desarrolos futuros y mejoras

7-Conclusiones

8-Anexo

1-Introducción a la fábrica artesanal de muebles. El enunciado de la práctica propone la construcción de un programa de gestión de una fábrica artesanal de muebles, donde los principales actores son los empleados (jefes, artesanos y comerciales), clientes (particulares y empresas) y los propios muebles, también con varios subtipos. Las clases deben mantener una jerarquía de herencia descrita en el enunciado y también interactuar entre ellas. De manera que se pueda llevar un control tanto de empleados y clientes como de los pedidos que llegan a la fabrica y los muebles que se pueden construir. La práctica esta estructurada en diferentes niveles, en el primer nivel se han de establecer las principales clases y las relaciones de herencia que se deben implementar. En el segundo ya se detallan algunas de las funcionalidades que debe llevar a cabo la aplicación, como el registro y búsqueda de muebles, empleados, personas y pedidos. Por último el tercer nivel incluye acciones más complejas como la asignación de ficas de empleados, pedidos, poder verla actividad de los artesanos (pedidos pendientes , pedidos realizados…) así como llevar un inventario de la fabrica cuanto a piezas que se necesitan etc

2-Analisis y diseño He basado la práctica en los siguientes conceptos: Comenzando la práctica me doy cuenta que la cantidad de clases no es excesivamente grande, pero al notar una gran diferenciación decido crear varios paquetes para poder ordenar todas las clases de una manera más eficiente, comenzando por el paquete personas donde se incluyen tanto empleados como clientes, y el paquete muebles donde se incluyen mesas y sillas.

Paquete personas: Un conjunto de Personas, en las que se incluyen los empleados y clientes que son unos de los principales actores de la práctica, estos tienen acceso a métodos propios que les permiten realizar acciones como la gestión de los empleados y pedidos por parte de los jefes entre otras . En esta rama la clase Personas contiene todos los datos y métodos genéricos comunes a todas las clases que heredan de ella, empleados y clientes (con sus respectivos subtipos), la defino como abstracta ya que no voy a necesitar instanciarla. Las clases empleados y clientes las usare para crear ArrayList genéricos para almacenar los diferentes subtipos de estas dos. Para los subtipos de Empleados según su tipo de contrato he decidido utilizar un tipo booleano común a todos los empleados en lugar de implementar dos clases adicionales, no sería excesivamente difícil de implementar dos clases adicionales pero creo que complicaría innecesariamente el código de algunos métodos.

Paquete muebles: Un conjunto de Muebles, que engloban el conjunto de sillas y mesas que se nombran en el enunciado de la práctica, estos son objetos con los que trabajan las demás clases, no tienen

métodos propios más allá de Setters, Getters y métodos toString que permiten dar o mostrar el valor a sus parámetros internos, aún así son también parte esencial de la práctica.

Paquete menus: Menús que albergan tango las colecciones de datos con las que he trabajado (ArrayList), como los métodos que actúan sobre estas. Métodos que permiten la modificación de la plantilla de empleados, los muebles en Inventario etc. Se organizan de manera que solo ciertos actores pueden tener acceso a algunos de estos menús y de esta manera solo acceden a un numero limitado de métodos, por ejemplo un Empleado puede acceder al menú de Inventario, por lo que puede modificar los distintos Muebles que se encuentran, pero no puede hacer cambios en la gestión de la plantilla de Empleados ya que no tiene acceso a esos datos ni métodos. Para la Interfaz he decidido dadas mis limitaciones con interfaces graficas, (Javax.Swing) implementar menús de consola, aunque si he incluido una función simple como es la introducción de datos mediante JOptionPane, que aporta un poco de dinamismo y un apartado visual más agradable, además de un simple sistema try catch para evitar que el programa caiga si se introduce una opción no contemplada en los menús como por ejemplo un char.

3-Diagramas UML 3.1Diagrama de casos de uso

3.2-Diagramas de Clases

4- Descripción de las clases más relevantes Clase Persona: Es una clase abstracta muy simple, solo tiene un String nombre su respectivo método getter y setter. Es un “molde” para el resto de las clases que heredan de ella.

Clase Empleado: Esta clase hereda de persona, todos sus parámetros son privados, y uno de ellos estático, son los siguientes: IdSiguiente: Se trata de un entero estático cuyo valor inicial es 1 y se aumenta en 1 cada vez que se invoca el constructor, de esta manera consigo que el numero de identificación sea consecutivo sin un método exclusivo para este calculo y al ser estática se comparte con todas las subclases, de esta manera no podrá haber un jefe y un artesano con el mismo Id. Id: Es el entero en el que se almacena el valor de la IdSiguiente y el que se usa en el método toString de dicha clase para obtener el numero de Id de cada empleado.

Sueldo: Es una variable de tipo double que almacena el sueldo de cada empleado. Contrado: Es un tipo booleano que me sirve para poder definir el tipo de contrato que tendrá asignado cada empleado, mediante un método String si contrato es true el contrato se fijará como “en plantilla” por lo contrario si es false será “contrato por horas”. Tipo Contrato: Es un String que almacena el valor del método que recoge el booleano Contrato y dependiendo de su valor imprime en forma de String el tipo de contrato. También esta clase tiene un par de métodos, uno propio y uno sobrescrito de la clase padre Object: Método constructor: Recibe como parámetros el nombre (de la clase padre persona), el sueldo y el contrato) además este método se ocupa de la suma consecutiva de el valor de las Id sumando uno a IdSiguiente cada vez que es invocado. Método toString: Este método es sobrescrito de la clase Object y se ocupa de proporcionar una “descripción” de los objetos que se crearan de esta clase en forma de String imprimiendo los valores de las variables que me interesan, esta clase es la primera en sobrescribirlo, más adelante en clases hijas este será implementado de nuevo para atender necesidades particulares de cada hijo.

Clases Jefe y Comercial: Estás dos clases heredan de Empleado y únicamente poseen un constructor que posee las mismas características que el de la clase padre.

Clase Artesano: Hereda de Empleado y posee un parámetro particular: Encargo: Es una variable de tipo Pedido (Clase que se explica más adelante), Esta almacena el pedido asignado por un jefe a cada artesano. Tiene algunos métodos propios: recibirPedido: Es un método que recibe como parámetro un Pedido y lo amacena dentro de la variable encargo quedando así fijado el Pedido pendiente de un Artesano particular. getEncargo: Metodo que se ocupa de pasar he imprimir el encargo en forma de String mediante el método toString de la clase Pedido. Método toString: Este une el método toString de la clase padre y añanade el método getEncargo para incluir el pedido de cada Artesano en el caso de que este tengo alguno asignado. De esta manera uso el polimorfismo, ya que el método toString se aplica de manera diferente según el tipo de empleado.

Clase Cliente Esta clase extiende Persona, esta tiene la variable Id e IdSiguiente que cumplen la misma función que en el caso de los empleados, hereda la variable nombre de persona e implementa su propia versión del método toString añadiendo la Id. Su constructor solo recibe como parametro el nombre yhace el calculo de las Ids consecutivas.

Clases Particular y Empresa Estas dos clases heredan de Cliente y constan de una variable String,en la clase Particular se denomina DNI y en la clase empresa NIF. En cuanto a los métodos: El constructor recibe como parámetros el nombre y dependiendo de la clase el DNI o el NIF. Cada una tiene su propio Getter para DNI o NIF y también su propio toString que se diferencia tan solo en la inclusión del DNI o NIF.

Clase Mueble Esta está incluida en un paquete propio denominado muebles, posee las siguientes variables: Color: Es un tipo String que hace referencia al color del mueble. Precio: Tipo double que almacena el valor de el mueble. serieSiguiente: Es un double estático que hace referencia al numero de serie del mueble, tiene un valor inicial de 1 que va aumentando en 1 cada vez que se invoca al constructor. numSerie: Este double almacena el valor de serieSiguiente. Entre sus métodos no incluyo setters ya que todos los parámetros se introducen mediante el constructor que recibe un String color y el double precio (el numero de serie se asigna automáticamente), Método toString: recopila los distintos guetters (color,precio y numSerie) y los imprime en forma de String para obtener la descripción del objeto.

Clases Silla y Mesa Clases que heredan de Mueble, solo constan de un constructor que llama al constructor padre (Mueble).

Clases Silla Cocina y Silla Plegable Heredan de la clase Silla y al igual que esta tan solo contienen un constructor que llama al constructor padre por lo tanto heredan parámetros y métodos de la clase Silla y en consecuencia de Mueble.

Clase Silla Oficina Esta clase hereda de Silla y cuenta con un parámetro extra, un booleano denominado “ruedas” el cual está incluido en el constructor por lo que el constructor llama al constructor padre e incluye la nueva variable ruedas. Ruedas: Es un booleano que utilizo para especificar si la silla tiene o no ruedas, en caso de contener el valor true la silla tiene ruedas, si es false será sin ruedas. Esta clase contiene un par de métodos propios: Metodo Ruedas: Recibe como parámetro el valor del booleano ruedas, en caso de que sea true imprime el String “con ruedas” en caso false imprime “sin ruedas”.

Método toString: Es una implementación particular del método toString de la clase padre en el que se incluye el método Ruedas para incluir en la descripción del objeto si tiene o no ruedas.

Clases Mesa Dormitorio y Mesa Comedor Heredan de la clase Mesa y al igual que esta tan solo contienen un constructor que llama al constructor padre por lo tanto heredan parámetros y métodos de la clase Mesa y en consecuencia de Mueble.

Clases Mesa de Café Hereda de la clase Mesa y al igual que la silla de oficina la única diferencia con las de demás es que contiene un booleano esta vez denominado “material” que según su valor indica si la mesa es de madera o cristal. También incluye el método Material que recibe el booleano e imprime “Madera” o “Cristal” según el valor de este, y el método toString que incluye el método Material.

Clase Pedido Esta clase está incluida en el paquete auxiliar, y conta de las siguientes variables: Pedido: Es un ArrayList de Muebles que almacenará los distintos objetos Mueble que formen parte del Pedido. pedidoSig: Tipo double estático con valor inicial de 1, este aumenta en uno cada vez que se invoca el constructor. numPedido: Es un double que almacena el valor de pedidoSig, de esta manera el numero de pedido aumenta a cada nuevo pedido sin necesidad de un método especifico. cliente: Es un String que contiene el nombre del cliente que realiza el pedido. Total: Es un double con un valor inicial de 0, es utilizado en un método como valor inicial y como resultado para almacenar la suma de valor de todos los Muebles incluidos en el ArrayList pedido. Los métodos que incluye esta clase son: El construtor: Recibe como parámetros un ArrayList de Muebles que almacena en la variable pedido y un String cliente que almacena en cliente, también realiza el calculo para asignar el valor a nunPedido aumentando en uno el valor de pedidoSig cada vez que es invocado. Método impPedido: Recorre el ArrayList pedido y imprime las características de los Muebles almacenados mediante el método toString correspondiente a cada una de sus subclases. setTotal: Recibe como parámetro un double cualquiera y lo asigna al valor de Total. calcTotal: Realiza el calculo del precio total del pedido, recorre el ArrayList pedido y mediante el método getPrecio de la clase Mueble obtiene el valor de precio de cada objeto y los suma al Total almacenándose en la misma variable Total.

5-Traza de ejecución El programa está dividido en diversos menús que contienen los diferentes métodos para manipular la información necesaria para el funcionamiento de la fábrica, estos están incluidos en el paquete menús. Menú principal Es la clase principal de la aplicación y se llama “fabrica”, Este contiene el método menú que imprime en pantalla las diferentes opciones y el main, que pide la introducción de un entero con JOptionPane, mediante una sentencia switch da acceso al resto de menús del programa.

También incluye un try catch que previene la introducción de una opción incorrecta, recoge la excepción, imprime un mensaje de advertencia y vuelve a ejecutar el main para que el programa no termine de manera inesperada. Como se ve en las capturas la opción cero cierra el programa, y las demás opciones llevan a los diferentes submenús que componen el programa. Opción 1: Entrar como Jefe. Esta opción lleva el MenuJefe que es la clase ocupada de gestión de empleados clientes, inventario, y asignación de perdidos. Al igual que el menú principal contiene un método que imprime el menú en consola, un JOptionPane que recoge la entrada del usuario y un switch que conduce a los diferentes métodos que componen la clase. Al igual que el menú principal tiene tambien un try catch que camputura posibles exepciones en cuanto a introduccíón de opciones incorrectas y el cierre del del JOptionPane. Esta clase tambien contiene Arrays estaticos (Empleados, Artesanos y Clientes), que son sobre los que se hacen todas las operaciones.

Listar Empleados/Clientes: se lista a los Empleados/Clientes registrados, esta función no es más que un metodo que recorre el ArrayList Empleados y ejecuta un toString sobre todos ellos, en caso de no haber ninguno se lanza el mensaje “No hay empleados registrados” y el programa continua con normalidad. Los empleados/clientes se imprimen en fichas.

Añadir un Empleado/Cliente: esta función se ocupa de recoger los datos de el empleado/cliente que se desea añadir e incluirlo dentro de su respectivo Array. La recogida de datos se hace mediante JOptionPane. El apartado más destacable es que el metodo clasifica los tipos de empleado (Artesano, Jefe y comercial), gracias a un tipo enumerado, se pide el tipo al usuario, se compara con el tipo enumerado y mediante un switch se usa el constructor de la clase deseada. Si el tipo no coincide con el enum se imprime un mensaje de “Tipo de empleado incorrecto” y el programa continua. El tipo de contrato se define mediante un booleano. En el caso de los clientes este proceso se lleva a cabo mediante un booleano.

Editar un Empleado/Cliente: este método en primer lugar ejecuta el metodo Listar para poder tener una visión más clara de los empleados/clientes registrados y pide que se seleccione la posición que ocupa el sujeto a modificar en su ArrayList, el metodo borra la posición seleccionada, pide nuevos datos e inserta el nuevo sujeto en la posición anteriormente borrada, de manera que queda en la misma posición. En caso de que la posición fuera errone el progrmaa imprime un mensaje en consola y continua la ejecución del programa. Eliminar un Empleado/Cliente: lo primero que hace este método es ejecutar el metodo Listar para tener una mejor vision de los sujetos almacenados hasta el momento, después pide la posición de el Empleado/Cliente en su respectivo ArrayList y elimina el sujeto en dicha posición. Si la posición es erronea el programa informa mediante un mensaje de consola y el programa continua. Asignar un pedido: ejecuta el método Listar Pedidos del menu cliente y desplega un JOptionPane en el que el usuario debe elegir la posicion en el ArrayList de pedidos que quieres asignar, una vez elegido se recorre el ArrayList Empleados y se guardan todos los Artesanos en un nuevo ArrayList, se imprimen los datos de este nuevo ArrayList y el usuario debe elegir de este el artesano al que quiere asignar el pedido elegido anteriormente, este se guardara en la variable encargo del artesano correspondiente.

Gestión Inventario. Inventario:Es un submenú accesible tanto desde el menú de jefe como el de artesanos, en este se encuentra el ArrayList de Muebles y los metodos que gestionan este.

Listar muebles: se lista a los Muebles registrados, es un metodo que recorre el ArrayList Muebles y ejecuta un toString sobre todos ellos, en caso de no haber ninguno se lanza el mensaje “No hay Muebles registrados” y el programa continua con normalidad.

Añadir un mueble: En este método se recogen todos los tados necesarios para crear los muebles: Si es un mueble o una mesa y sus subtipos.

Con estos datos podemos decidir el constructor que debemos utilizar según el objeto que queramos crear, tambien debemos introducir otros datos como color y precio además de en el caso de la silla de oficina si tiene ruedas y la mesa de café el material del que está hecha.

Editar un mueble: Este método funciona igual que el de Empleados/Clientes , se listan los muebles registrados para poder seleccionar el deseado, se borra el Mueble seleccionado mediante su posición en el ArrayList una vez eliminado se vuelven a introducir todos los datos necesarios para crear un nuevo objeto mueble, este nuevo objeto se inserta en la posición anteriormente eliminada.

Eliminar un mueble: También ejecuta Listar muebles para poder seleccionar la posición que se desea eliminar, una vez se selecciona se debe confirmar la eliminación en caso de introducir una posición incorrecta el programa Imprime el mensaje”posicón incorrecta” y continua la ejecucion en el menu Inventario.

Menu cliente Este menú contiene el ArrayList de Pedidos y permite a los clientes hacer y consultar sus pedidos. Ver muebles en Stock: Ejecuta el método Listar Muebles del menú Inventario Hacer pedido: Lo primero que hace este método es pedir el nombre del cliente, luego ejecuta el método Listar muebles del menú Inventario, final mente pide que se introduzca la posición del Mueble que se desea añadir, después de elegirlo se pregunta si se desea continuar añadiendo otros muebles, este bucle se repite hasta que se selecciona la opción de no añadir más.

Ver Pedido: Recorre el ArrayList de pedidos y ejecuta el método toString de la clase Pedidos en la que se incluye el cálculo del Total.

Editar un pedido: Este ejecuta Ver pedidos, se selecciona el pedido a editar, este se elimina y se introducen los datos de un nuevo pedido que se inserta en la posición anteriormente eliminada. Cancelar un pedido: Lista los pedidos y posteriormente pide la posición del pedido que se desea eliminar, una vez seleccionado el método pide la confirmación de que se desea eliminar.

Menu Empleados/Artesanos El menú de empleado es un menú intermedio de da acceso a los empleados como comerciales y artesanos, en este caso solo a los artesanos. El menú de artesanos sirve para que estos puedan ver sus pedidos asignados por los jefes y acceder al inventario de Muebles.

Ver mis pedidos pendientes: Lista los Artesanos registrados y una vez seleccionada su posición imprime el pedido asignado a este.

6-Desarrollos futuros y mejoras. Las primeras mejoras que podría implementar en un futuro son las relativas al nivel 3 de la práctica como, la asignación de f...


Similar Free PDFs