[Pregunta Java] Metodos y return

xDanySx

Tengo una consulta, no se si se puede hacer lo que quiero hacer...

Tengo varias clases que contienen los mismos metodos: Listar() Insertar() y Borrar()
Tengo una clase menu en el que tengo 1 menu y 1 submenu, el primer menu me lista las clases y el segundo submenu las opciones, que son los metodos.

Ahora bien, mi pregunta es, para refactorizar y no duplicar el código del submenu en todas las clases, había creado el submenu en la clase menu.
Entonces me encuentro que tengo el método subMenu de la clase Menu que quiero que me devuelva un metodo (switch con Listar() Insertar() y Borrar() ), porque ya todas las clases tienen los mismos métodos (que hacen cosas distintas en cada clase)...

El caso... eso es posible?
En caso afirmativo, como¿?

Gracias a todos :man_technologist:

Soltrac

Te has cargado la OO por la puta cara.

Yo primero me daría un revisado a herencia y polimorfismo y después de esto volvería a intentar crear todo el ecosistema porque si tienes varias clases que contienen los mismos métodos, lo tienes mal desde el principio.

Al final, sin ver tu esquema, casi seguro que todo se soluciona con una clase abstracta o virtual o incluso una interfaz dependiendo del lenguaje que contiene los 3 métodos y una implementación diferente para cada método y estoy convencido que la clase submenu puede heredar de menu.

1 1 respuesta
B

Has probado con las interfaces?

De tener una interfaz que sea Submenu con los metodos (listar, insertar y borrar). Estos están vacíos en la interfaz

Luego te creas tu menú implementado esta interfaz y te añadirá los métodos de listar, insertar y borrar. Luego ya dentro haces lo que quieres que haga.

Algo así que hace milenios que no uso java.

interface SubMenu{
    public void listarElementos();
    public void insertarElemento();
    public void borrarElemento();
}

class MenuStart implements SubMenu{

public void listarElementos(){
  #code
}

public void insertarElemento(){
  #code
}

public void BorrarElemento(){
  #code
}
}
1 1 respuesta
xDanySx

#2 a ver a ver, las clases tienen métodos con el mismo nombre, pero hacen cosas distintas, por eso esta separado en clases.
Respecto al subMenu, es un método de la clase Menu

xDanySx

#3 Lo mismo problema, que es que cada listado insertado y borrado, interactua con una tabla distinta de de una bbdd, vamos, que no comparten código los métodos

2 respuestas
Soltrac

#5 Y q mas da que no comparta código? Al fin y al cabo al declarar una clase abstracta o una interfaz le estás diciendo que la implementación en cada clase es diferente.

1
B

#5 No has pensado en pasar por parámetros el nombre de la tabla y la entidad que quieres meter?

Coges el método que reciba el array/entity con la clase a insertar en la bbdd y la tabla donde quieras que se introduzca.
Y ya dentro del método con estos parámetros que se las apañe.

1 1 respuesta
xDanySx

Voy a echar un pensamiento a lo que dice #7

Gracias, chicos

P

Como te han dicho por arriba, interfaz y a correr.

B

Desde mi humilde opinión, yo implementaría la interfaz con los métodos para llamar a funciones de listar, borrar, editar.
Y dentro de estas funciones, hacer la llamada a otra clase que sería la encargada de administrar todas las llamadas a la base de datos, conexiones, insertado, borrado, actualización y que devuelvan el query o el result.

Y luego en tu método de listar, borrar, actualización o inserción; tener las funciones para mostrar los datos o mensajes.

JuAn4k4

No me creo que tengas dos cosas que se llamen Menu y SubMenu y hagan cosas diferentes. No me lo creo. Yo me estoy imaginando que estas confundiendo comportamiento con datos.

1 respuesta
xDanySx

#11 No lo hay. Hay un método menú que muestra clases para seleccionar con la que quieres interactuar y el submenu que muestra la acciones que se pueden hacer, interactuando la clase con los métodos de esta.

A ver tampoco he dicho que sea la mejor solución, que dudo que lo sea, pero es lo que se me ocurrió así a priori 🤷🏻‍♂️

djamb

Te voy a poner un ejemplo de lo que creo que necesitas:
public abstract class ClasePadre{
public void metodoComun(){
//Metes aquí todas las mierdas comunes
cosasEspecificasCadaClase();
}
abstract public void cosasEspecificasCadaClase();
}

Y ya en cada clase hijo defines lo que quieras que haga cosasEspecificasCadaClase()

Siento no indexar mejor las cosas, estoy en el móvil.

1

Usuarios habituales