Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Baal_30 en 10 Marzo 2015, 22:24 pm



Título: Duda al crear objeto
Publicado por: Baal_30 en 10 Marzo 2015, 22:24 pm
Muy buenas, vuelvo con otra duda :P

En el caso de crear un objeto, que le pasas al constructor un número que por ejemplo es la edad como argumento tipo así :  Objeto obj1 = new Objeto(10);

Si no quisieras que se creara el objeto si la edad es menor de 18, ¿como se haría?

Lo que he hecho ha sido esto en el constructor :

Código
  1. public Objeto(int edad){
  2. if(edad>=18){
  3. this.edad = edad;
  4. }
  5. else{
  6. System.out.println("No puedes crear este objeto con una edad menor de 18");
  7. }
  8. }

El problema es que el objeto lo crea igual, pero no le mete la edad, pero el objeto queda creado, con la edad a null (si no me equivoco).

Como se podría hacer para que directamente ni se crease el objeto ¿? Había pensado en hacerlo desde el main, pedir la nota ahí, haciendo un do-while por ejemplo que la siga pidiendo hasta que sea más de 18 y luego ya que la pase como argumento. Pero me gustaría saber si hay alguna otra forma más correcta de hacerlo.

Gracias de antemano y un saludo :)


Título: Re: Duda al crear objeto
Publicado por: PabloPbl en 10 Marzo 2015, 22:40 pm
Yo lo haría con un if, primero haría las comprobaciones y si es mayor de 18 creo el objeto, total ya se que tiene mas de 18 años.
En resumen: Comprobaría si la edad es mayor a 18 antes de crear el objeto.

Código
  1. int edad = 19;
  2. if(edad >= 18) {
  3.     Objeto obj = new Objeto(edad);
  4. }
  5. else{
  6.     System.out.println("No puedes crear el objeto");
  7. }


Título: Re: Duda al crear objeto
Publicado por: Baal_30 en 10 Marzo 2015, 23:06 pm
Ya, lo había pensado. Y parece una manera sencilla y muy funcional, pero me preguntaba si había otra forma o si se podía hacer desde el mismo constructor.

Pero gracias por la respuesta ¡! Con el código se ve más claro :)


Título: Re: Duda al crear objeto
Publicado por: Usuario Invitado en 11 Marzo 2015, 00:28 am
Al llamar al constructor, éste creará el objeto, independientemente si los parámetros pasados cumplan o no una determinada condición o serie de condiciones.

Una manera alterna a lo que deseas hacer es crear una instancia a través de un método, como lo hacemos con el patrón Factory:

Código
  1. public static Objeto createObjeto(int age) {
  2.    if (age >= 18)
  3.        return new Objeto(age);
  4.    return null;
  5. }

Obviamente el constructor debe ser privado para evitar que se creen objetos de la manera tradicional.


Título: Re: Duda al crear objeto
Publicado por: Baal_30 en 12 Marzo 2015, 09:15 am
Entonces ese método estaría en la clase del objeto, y lo llamarías desde el main en vez de llamar al constructor ¿no?


Título: Re: Duda al crear objeto
Publicado por: Usuario Invitado en 12 Marzo 2015, 12:34 pm
Sí. O puede ser en una fábrica, pero si no entiendes el patrón factory hazlo así nomás.

EDITO: Un ejemplo de una factoría muy sencilla:

Código
  1. public class SomeFactory {
  2.  
  3.    public ObjectOne createObjectOne(int age) {
  4.        return (age >= 18) : new ObjectOne(age) ? null;
  5.    }
  6.  
  7.    public ObjectTwo createObjectTwo(boolean state) {
  8.        return (state) : new ObjectTwo() ? null;
  9.    }
  10.  
  11.    public ObjectThree createObjectThree(double price) {
  12.        return (price <= 50.9) : new ObjectThree(price) ? null;
  13.    }
  14. }

Y aquí uno de tus objetos:

Código
  1. public class ObjectoOne {
  2.    private int age;
  3.    // otras propiedades
  4.  
  5.    public ObjectOne() {}
  6.    public ObjectOne(int age) { this.age = age; }
  7.    // getters y setters
  8.  
  9. }

Puedes ver el patrón Abstract Factory con un ejemplo funcional en mi post sobre Patrones de diseño.

Saludos.


Título: Re: Duda al crear objeto
Publicado por: Baal_30 en 12 Marzo 2015, 13:50 pm
Ummm entiendo... ¿Se suele utilizar mucho lo del patrón factory? Es la primera vez que lo leo :/

Y funcionaria igual con más argumentos ¿no? simplemente se harían las comprobaciones pertinentes y ya está...

Y el constructor sin parámetros tiene que ponerse siempre aunque no lo vayas a utilizar ¿?


Título: Re: Duda al crear objeto
Publicado por: Usuario Invitado en 12 Marzo 2015, 18:05 pm
1) Los patrones de diseño se usan de acuerdo a las necesidades del proyecto.
2) Los argumentos no tienen nada que ver con el funcionamiento de la factoría. Pero sería mejor un objeto que englobe todos esos argumentos que pasarlos uno a uno a la factoría. La factoría tiene como único propósito crear objetos de X tipo para su uso final.
3) Por compatibilidad sí. Aunque si estás 100% seguro que nunca utilizarás el constructor por defecto no lo tienes que implementar.


Título: Re: Duda al crear objeto
Publicado por: Baal_30 en 13 Marzo 2015, 09:30 am
Que grande Gus, como siempre, muchas gracias por contestar :)