Autor Tema: Ejercicio diagramas de clases e interfaces Java relación entre clases paquetes  (Leído 2967 veces)

nlenisres

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Hola, el siguiente ejercicio me fue propuesto pero estoy un poco confundida con la creación del código. Ayuda por favor...


Enunciado ejercicio diagramas de clases e interfaces Java

1. Crea el diagrama de clases siguiente:

a. Diagrama una clase abstracta Empleado con los atributos: documento, nombre, sueldoHora (y otros que creas necesarios) y crea sus correspondientes métodos getteres y setteres, también puedes crear un constructor que tenga todos los atributos para asignar los atributos y un constructor vacio. Crea una clase Desarrollador (sin atributos ni métodos), una clase GestorProyectos con los atributos: área y sus métodos set y get. Crea una clase Admin sin atributos ni métodos. Establece la relación de herencia entre ellos.

b. Diagrama una clase Empresa con los atributos: nit, nombre, direccion, ciudad (y los creas necesarios); crea sus correspondientes métodos getteres y setteres. Crea una clase EmpresaDesarrollo sin atributos ni métodos y establece su relación de herencia.

c. Establece la relación entre clase Empleado y Empresa. Supongamos que: un empleado solo puede trabajar en una única empresa.


2. Crear las clases Java:

a. Crear las clases anteriormente diagramadas a Clases Java.

b. Crea 3 paquetes en java: Un paquete llamado modelos con las clases: Empleado, Desarrollador, GestorProyectos, Admin, Empresa, EmpresaDesarrollo. Un paquete llamado operaciones, y crear dos nuevas clases e interfaces: Una interface llamada IOperacionEmpleado, otra interface llamada IOperacionEmpresa; una clase llamada OperaciónEmpleado que implemente de IOperacionEmpleado. Por último, una clase llamada OperacionEmpresa que implemente de IOperacionEmpresa.

c. Crea la clase principal o de pruebas, puedes llamarla Main, y prueba las clases del paquete operaciones, creando atributos de las interfaces e instancias de las clases que ahí están (recuerda que de una interface no puedes crear instancias).

d. En la clase principal, puedes usar la consola (System) o gráficamente con JOptionPane, incluso swing. Creando un menú que te permita ingresar empresas, una vez creadas las empresas, puedes crear empleados y asignarles la empresa donde pertenecen. Y realizar otras operaciones como: consultar todas las empresas, todos los empleados, empleado por documento, calcular sueldo de empleado, contar cantidad de empleados en una empresa.

e. En IOperacionEmpleados, declara los siguientes métodos abstractos que resuelvan lo anterior solicitado en el menú para empresas (puedes sobreescribir el método toString() en la clase Empleado). En OperacionEmpleado implementa los métodos para que realicen dichas operaciones.

f. En IOperacionesEmpresa declara los métodos abstractos necesarios que resuelvan lo solicitado en el menú e impleméntalos en OperacionEmpresa.

Nota: para almacenar la información de los empleados y empresas, puedes usar arreglos. Se permite usar listas (List, ArrayList).

« Última modificación: 18 de Abril 2022, 19:36 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re: Ejercicio diagramas de clases e interfaces
« Respuesta #1 en: 05 de Marzo 2022, 16:58 »
¿Cuál es tu confusión?
¿Has escrito al menos las clases básicas como Empleado o Empresa?

Especifica en que parte te atascas y/o muestra el código que tengas hecho y te ayudamos a corregirlo y a continuar a partir de él.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

nlenisres

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re: Ejercicio diagramas de clases e interfaces
« Respuesta #2 en: 05 de Marzo 2022, 17:59 »
Hola, gracias por responderme.

Ya escribí las clases, cree los paquetes, los métodos set y get y el menú. Mi confusión está en dónde escribo los métodos para realizar las operaciones solicitadas y qué métodos utilizar

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re: Ejercicio diagramas de clases e interfaces
« Respuesta #3 en: 05 de Marzo 2022, 23:38 »
OK, a ver, para meternos en contexto.
Esta podría ser la clase Empleado
Código: [Seleccionar]
public abstract class Empleado {

private String documento;
private String nombre;
private double sueldoHora;

public Empleado() {
documento = "";
nombre = "";
sueldoHora = 0d;
}

public Empleado(String documento, String nombre, double sueldoHora) {
this.documento = documento;
this.nombre = nombre;
this.sueldoHora = sueldoHora;
}

public String getDocumento() {
return documento;
}

public void setDocumento(String documento) {
this.documento = documento;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public double getSueldoHora() {
return sueldoHora;
}

public void setSueldoHora(double sueldoHora) {
this.sueldoHora = sueldoHora;
}

@Override
public String toString() {
return String.format("documento=%s, nombre=%s, sueldoHora=%s", documento, nombre, sueldoHora);
}

}

Estas serían sus clases hijas. Nótese que sus métodos toString() se combinan con el toString() de la clase madre para mostrar la información adaptada a cada subclase.
Desarrollador
Código: [Seleccionar]
public class Desarrollador extends Empleado {

public Desarrollador() {
super();
}

public Desarrollador(String documento, String nombre, double sueldoHora) {
super(documento, nombre, sueldoHora);
}

@Override
public String toString() {
return String.format("Desarrollador [%s]", super.toString());
}

}

GestorProyectos
Código: [Seleccionar]
public class GestorProyectos extends Empleado {

private String area;

public GestorProyectos() {
super();
area = "";
}

public GestorProyectos(String documento, String nombre, double sueldoHora, String area) {
super(documento, nombre, sueldoHora);
this.area = area;
}

public String getArea() {
return area;
}

public void setArea(String area) {
this.area = area;
}

@Override
public String toString() {
return String.format("GestorProyectos [%s, area=%s]", super.toString(), area);
}

}

Admin
Código: [Seleccionar]
public class Admin extends Empleado {

public Admin() {
super();
}

public Admin(String documento, String nombre, double sueldoHora) {
super(documento, nombre, sueldoHora);
}

@Override
public String toString() {
return String.format("Admin [%s]", super.toString());
}

}

Esta sería la clase Empresa, a la cuál además de los atributos mencionados en el enunciado, le he añadido un ArrayList para guardar los Empleados que trabajarán para la Empresa.
Es necesario relacionar un empleado con una empresa y creo que la mejor forma es que cada empresa creada, tenga su propio ArrayList donde guardar los empleados que trabajan para ella.

Código: [Seleccionar]
import java.util.ArrayList;

public abstract class Empresa {

private String nit;
private String nombre;
private String direccion;
private String ciudad;
private ArrayList<Empleado> empleados;

public Empresa() {
nit = "";
nombre = "";
direccion = "";
ciudad = "";
empleados = new ArrayList<Empleado>();
}

public Empresa(String nit, String nombre, String direccion, String ciudad) {
this.nit = nit;
this.nombre = nombre;
this.direccion = direccion;
this.ciudad = ciudad;
empleados = new ArrayList<Empleado>();
}

public String getNit() {
return nit;
}

public void setNit(String nit) {
this.nit = nit;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getDireccion() {
return direccion;
}

public void setDireccion(String direccion) {
this.direccion = direccion;
}

public String getCiudad() {
return ciudad;
}

public void setCiudad(String ciudad) {
this.ciudad = ciudad;
}

public void asignarEmpleado(Empleado emp) {
empleados.add(emp);
}

public int contarEmpleados() {
return empleados.size();
}

@Override
public String toString() {
return String.format("nit=%s, nombre=%s, direccion=%s, ciudad=%s", nit, nombre, direccion, ciudad);
}

}

Y su clase hija EmpresaDesarrollo
Código: [Seleccionar]
public class EmpresaDesarrollo extends Empresa {

public EmpresaDesarrollo() {
super();
}

public EmpresaDesarrollo(String nit, String nombre, String direccion, String ciudad) {
super(nit, nombre, direccion, ciudad);
}

@Override
public String toString() {
return String.format("EmpresaDesarrollo [%s]", super.toString());
}

}


Hasta aquí tenemos digamos la "parte fácil".
Haremos un programa donde crear empresas, crear empleados que trabajarán en esas empresas y poder hacer algunas operaciones con estas entidades.

Bien, esas operaciones nos dicen que se han de hacer mediante otras dos clases, las cuáles han de implementar sendas interfaces en las que se declararán los métodos que realizarán esas operaciones.
Lo vemos en el próximo mensaje..
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

nlenisres

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re: Ejercicio diagramas de clases e interfaces
« Respuesta #4 en: 06 de Marzo 2022, 00:03 »
Hola, si hasta ahí tengo el ejercicio además cree este pequeño menú vacío, pero ahí me quedé porque no estoy segura de que métodos utilizar para realizar las operaciones solicitadas o como instanciarlos desde las interfaces y clases abstractas.

De antemano, mil gracias por tu ayuda

Código: [Seleccionar]
package ejercicio1_pooii;

import javax.swing.JOptionPane;

public class Main {

    public static void main(String[] args) {
        int op = 0;
        String menu = "Bienvenido, por favor ingrese la información solicitada: \n";
        menu += "1. Ingresar Empresa: \n";
        menu += "2. Ingresar datos del Empleado\n";
        menu += "3. Consular información del Empleado: \n";
        menu += "4. Consultar todas las empresas: \n";
        menu += "5. Consultar todos los empleados: \n";
        menu += "6. Calcular sueldo de empleado: \n";
        menu += "7. Cantidad de empleados en la empresa: \n";
        menu += "8. Salir \n";
        menu += "Selecciona una de las opciones del menú \n";
        do {
            op = Integer.parseInt(JOptionPane.showInputDialog(menu));
            switch (op) {
                case 1:

                    break;
                case 2:

                    break;
                case 3:

                    break;
                case 4:

                    break;
                case 5:

                    break;
                case 6:

                    break;
                case 7:

            }
        } while (op != 8);
    }
}
« Última modificación: 18 de Abril 2022, 19:33 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re: Ejercicio diagramas de clases e interfaces
« Respuesta #5 en: 06 de Marzo 2022, 01:14 »
Comencemos creando las interfaces, por ejemplo IOperacionEmpleado
Código: [Seleccionar]
public interface IOperacionEmpleado {

public Empleado crearEmpleado();

public void listarEmpleados();

public void consultarEmpleado();

public void calcularSueldoEmpleado();

}
Fíjate que al ser una interfaz, no incluye código. Solo se pone "la firma" de los métodos, es decir, nombre de los métodos, tipo que retorna y, si fuera necesario, los parámetros a recibir entre paréntesis.

Lo mismo con la interface IOperacionEmpresa.
En esta ocasión, el método asignarEmpleado() probablemente necesitaremos recibir como parámetro el Empleado que hay que asignar.
Código: [Seleccionar]
public interface IOperacionEmpresa {

public void crearEmpresa();

public void asignarEmpleado(Empleado emp);

public void listarEmpresas();

public void contarEmpleadosdeEmpresa();
}

Vamos a ver ahora las clases que van a implementar estas interfaces.
Empecemos por la clase OperacionEmpleado, la cuál tendrá un ArrayList donde guardar los empleados que el usuario vaya creando.
Al indicarle a esta clase que ha de implementar la interface que hemos escrito antes, automáticamente se nos "obliga" a sobreescribir los métodos de dicha interfaz.
Código: [Seleccionar]
import java.util.ArrayList;

public class OperacionEmpleado implements IOperacionEmpleado {

private ArrayList<Empleado> empleados = new ArrayList<Empleado>();

@Override
public Empleado crearEmpleado() {

}

@Override
public void listarEmpleados() {

}

@Override
public void consultarEmpleado(String documento) {

}

@Override
public void calcularSueldoEmpleado(String documento, int horasTrabajadas) {

}

}

Es aquí, ahora, donde hay que escribir el código para que cada uno de estos métodos funcionen.

Código: [Seleccionar]
import java.util.ArrayList;

import javax.swing.JOptionPane;

public class OperacionEmpleado implements IOperacionEmpleado {

private ArrayList<Empleado> empleados = new ArrayList<Empleado>();

@Override
public Empleado crearEmpleado() {
//Preguntamos que tipo empleado se va a crear
int tipo = JOptionPane.showOptionDialog(null, "Elija tipo de Empleado quiere crear",
"Crear Empleado", 0, 3, null,
new String[] {"Admin", "Desarrollador", "Gestor Proyectos"}, null);
//Pedimos datos del empleado
String documento = JOptionPane.showInputDialog(null, "Documento:", "Crear Empleado", 3);
String nombre = JOptionPane.showInputDialog(null, "Nombre:", "Crear Empleado", 3);
double sueldoHora = Double.parseDouble(JOptionPane.showInputDialog(null,
"Sueldo x Hora:", "Crear Empleado", 3));
//Comprobamos elección para determinar que empleado hay que crear
switch(tipo) {
case 0: //Admin
Admin admin = new Admin(documento, nombre, sueldoHora);
empleados.add(admin);
return admin;
case 1: //Desarrollador
Desarrollador desarr = new Desarrollador(documento, nombre, sueldoHora);
empleados.add(desarr);
return desarr;
case 2: //Gestor de proyectos, requiere pedir otro dato
String area = JOptionPane.showInputDialog(null, "Area:", "Crear Empleado", 3);
GestorProyectos gesPro = new GestorProyectos(documento, nombre, sueldoHora, area);
empleados.add(gesPro);
return gesPro;
default:
return null;
}
}

@Override
public void listarEmpleados() {
JOptionPane.showMessageDialog(null, "Se mostrará un listado en la consola",
"Listar Empleados", 1);
System.out.println("\n\t\tLISTA EMPLEADOS");
System.out.println("\t\t----- ---------\n");
for (Empleado emp: empleados)
System.out.println(emp);
}

@Override
public void consultarEmpleado() {
String documento = JOptionPane.showInputDialog(null, "Documento del empleado:", "Consultar Empleado", 3);
//Buscamos el empleado
Empleado buscar = null;
for (Empleado emp: empleados)
if (emp.getDocumento().equals(documento))
buscar = emp;
//Comprobamos si lo hemos encontrado
if (buscar == null)
JOptionPane.showMessageDialog(null, "No hay ningún empleado con ese documento",
"Consultar Empleado", 0);
else
JOptionPane.showMessageDialog(null, buscar,
"Listar Empleados", 1);
}

@Override
public void calcularSueldoEmpleado() {
String documento = JOptionPane.showInputDialog(null, "Documento del empleado:", "Calcular Sueldo", 3);
int horas = Integer.parseInt(JOptionPane.showInputDialog(null, "Horas trabajadas:", "Calcular Sueldo", 3));
//Buscamos empleado
Empleado buscar = null;
for (Empleado emp: empleados)
if (emp.getDocumento().equals(documento))
buscar = emp;
//Comprobamos si lo hemos encontrado
if (buscar == null)
JOptionPane.showMessageDialog(null, "No hay ningún empleado con ese documento",
"Calcular Sueldo", 0);
else {
double calculo = buscar.getSueldoHora() * horas;
JOptionPane.showMessageDialog(null,String.format("Sueldo: %.2f", calculo),
"Calcular Sueldo", 1);
}
}

}

Lo mismo con la clase OperacionEmpresa, implementamos la interfaz y escribimos el código para los métodos.
La clase cuenta con su ArrayList para guardar empresas.
Código: [Seleccionar]
import java.util.ArrayList;

import javax.swing.JOptionPane;

public class OperacionEmpresa implements IOperacionEmpresa {

private ArrayList<Empresa> empresas = new ArrayList<Empresa>();

@Override
public void crearEmpresa() {
String nit = JOptionPane.showInputDialog(null, "NIT:", "Crear Empresa", 3);
String nombre = JOptionPane.showInputDialog(null, "Nombre:", "Crear Empresa", 3);
String direc = JOptionPane.showInputDialog(null, "Direccion:", "Crear Empresa", 3);
String ciudad = JOptionPane.showInputDialog(null, "Ciudad:", "Crear Empresa", 3);

empresas.add(new EmpresaDesarrollo(nit, nombre, direc, ciudad));

}

@Override
public void asignarEmpleado(Empleado emp) {
String nit = JOptionPane.showInputDialog(null, "Indique NIT de la empresa:", "Asignar Empleado", 3);
//Buscamos empresa
Empresa buscar = null;
for (Empresa empre: empresas)
if (empre.getNit().equals(nit))
buscar = empre;
//Comprobamos
if (buscar == null)
JOptionPane.showMessageDialog(null, "No hay empresas con ese NIT", "Asignar Empleado", 0, null);
else {
buscar.asignarEmpleado(emp);
JOptionPane.showMessageDialog(null, "Empleado asignado", "Asignar Empleado", 1, null);
}
}

@Override
public void listarEmpresas() {
JOptionPane.showMessageDialog(null, "Se mostrará un listado en la consola", "Listar Empresas", 1, null);
System.out.println("\n\t\tLISTA EMPRESAS");
System.out.println("\t\t----- --------\n");
for (Empresa empre: empresas)
System.out.println(empre);
}

@Override
public void contarEmpleadosdeEmpresa() {
String nit = JOptionPane.showInputDialog(null, "Indique NIT de la empresa:", "Contar Empleados", 3);
//Buscamos empresa
Empresa buscar = null;
for (Empresa empre: empresas)
if (empre.getNit().equals(nit))
buscar = empre;
//Comprobamos
if (buscar == null)
JOptionPane.showMessageDialog(null, "No hay empresas con ese NIT", "Contar Empleados", 0, null);
else
JOptionPane.showMessageDialog(null,
String.format("Empleados contados: %d", buscar.contarEmpleados()), "Contar Empleados", 1, null);
}

}

Y con esto ya podemos crear la clase Main.

Usamos tu menú, habrá que añadir objetos de las clases OperacionEmpleado y OperacionEmpresa y ya prácticamente solo será necesario invocar a los métodos necesarios para cada opción:

Código: [Seleccionar]
public class Main {

private static OperacionEmpleado empleados = new OperacionEmpleado();
private static OperacionEmpresa empresas = new OperacionEmpresa();

public static void main(String[] args) {
int op = 0;
        String menu = "Bienvenido, por favor ingrese la información solicitada: \n";
        menu += "1. Ingresar Empresa: \n";
        menu += "2. Ingresar datos del Empleado\n";
        menu += "3. Consular información del Empleado: \n";
        menu += "4. Consultar todas las empresas: \n";
        menu += "5. Consultar todos los empleados: \n";
        menu += "6. Calcular sueldo de empleado: \n";
        menu += "7. Cantidad de empleados en la empresa: \n";
        menu += "8. Salir \n";
        menu += "Selecciona una de las opciones del menú \n";
        do {
            op = Integer.parseInt(JOptionPane.showInputDialog(menu));
            switch (op) {
                case 1:
                empresas.crearEmpresa();
                    break;
                case 2:
                //Creamos empleado y lo recogemos
                Empleado emp = empleados.crearEmpleado();
                //Y ahora lo asignaremos a una empresa
                empresas.asignarEmpleado(emp);
                    break;
                case 3:
                empleados.consultarEmpleado();
                    break;
                case 4:
                empresas.listarEmpresas();
                    break;
                case 5:
                empleados.listarEmpleados();
                    break;
                case 6:
                empleados.calcularSueldoEmpleado();
                    break;
                case 7:
                empresas.contarEmpleadosdeEmpresa();
            }
        } while (op != 8);
    }

}

Pruébalo, y pregunta lo que no entiendas.
Un saludo.

NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".