• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Clases e Interfaces - Nivel básico Java SE

FuRRRaira

Nuevo
Registrado
13 Feb 2019
Mensajes
33
Puntos
8
Buenas, tengo una duda sobre clases e interfaces.

Tengo un programa con dos clases y dos interfaces (lo puedes ver en el código que muestro, aunque he omitido las interfaces para que se entienda mejor lo que voy a preguntar), una clase implementa una interfaz y la otra clase implementa la otra interfaz.

El constructor de la clase CongPersonasImpl crea un objeto de tipo AccesoDatoImpl, y lo utiliza para inicializar la variable denominada dato (de tipo interfaz AccesoDato) de la clase CongPersonasImpl.


De tal forma que cuando creamos un objeto de tipo CongPersonasImpl se crea también otro objeto de tipo AccesoDatoImpl que se recibe como atributo (denominado dato) del objeto CongPersonasImpl.


Y utilizaremos el atributo denominado dato para llamar desde la clase CongPersonasImpl a los métodos de la clase AccesoDatoImpl, o a los métodos de cualquier clase que implemente la interfaz AccesoDato.​

--------------------------------------------------------------------------------------------------------------------------------

package datos;


public class AccesoDatoImpl implements AccesoDato {


//Implementa los métodos de la interfaz AccesoDato
}



package negocio;​
import datos.*;

public class CongPersonasImpl implements CongPersonas{


private final AccesoDato dato;​


public CongPersonasImpl() {​
this.dato = new AccesoDatoImpl();
}


//Implementa los métodos de la interfaz CongPersonas
}



package principal;​
import negocio.*;

public class Principal {


private static final CongPersonas congPer = new CongPersonasImpl();

public Static void main(String[] args) {​
//Utilizamos la variable congPer para acceder a los métodos de la clase CongPersonasImpl
}​
}


--------------------------------------------------------------------------------------------------------------------------------

Entonces me surgen dos preguntas que no consigo responder:

¿de qué nos puede servir crear un objeto de una clase al momento de crear un objeto de otra clase?​
¿y de qué nos puede servir utilizar un objeto como argumento de otro objeto?


Saludos!
F
 
Última edición:
1.- Lo que para mí tiene más sentido es pasar una instancia por constructor. Pasas al constructor un objeto que quieres que esté instanciado dentro de tu nuevo objeto. Creo que es mejor así porque tú controlas en todo momento qué objeto le inyectas, mucho mejor que crear un objeto a pelo en el constructor.

Esto se ve mucho en la inyección de dependencias, cuando por ejemplo un Servicio recibe por constructor un objeto de tipo Repositorio para acceder a los datos que es el que usará para acceder y escribir información. Además, este objeto será de tipo interfaz, pudiendo pasar cualquier objeto que implemente esa interfaz por si hay casos más específicos de repositorio a tener en cuenta que no tengas que reescribir la clase y simplemente te crees tu nuevo tipo de Repositorio y se lo inyectes por constructor a tu Servicio.

2.- Aunque creo que he respondido arriba, otro ejemplo de recibir objetos en el constructor es el uso del Decorator Pattern. También puedes tener una clase hija que herede de una clase padre y uno de los constructores de la clase hija reciba un objeto de la clase padre más el resto de atributos con los que ha de ser instanciada.

No sé si te he ayudado.
 
Muchas gracias Moebius! :D Me has ayudado bastante.


Muy interesante el tema de pasar por parámetro un objeto de tipo interfaz al constructor, ahora estoy escribiendo un programa de ejemplo para aclararme las ideas sobre ese tema ya que no lo tengo muy claro.

Aunque aún me falta por ver el tema de bases de datos o repositorios (justo es lo próximo que me toca), así que voy a estar unos días estudiando las bases de datos. Luego completaré el programa de ejemplo que estoy haciendo ahora incluyendo la parte de la base de datos, y lo mostraré por aquí.


Cuando termine te comento, a ver si por fin consigo aclararme... :cafe:
 
Arriba