Ver Mensaje Individual
  #10 (permalink)  
Antiguo 01/07/2012, 22:03
Avatar de zero0097
zero0097
 
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años, 7 meses
Puntos: 69
Respuesta: [dudas]Conceptos de oop

De antemano disculpa el testamento que acabo de redactar pero espero y te ayude bro...

Una clase se especifica con la palabra class, pero que es?

Básicamente puedes verlo como un molde, una clase no es un objeto, pero para crear un objeto necesitas una clase, para crear un pastel necesitas un molde, entonces el molde es la clase y el objeto es el pastel... el molde le da el tamaño y la forma al pastel.... así pues una clase tiene atributos y funciones que cuando se cree un objeto a partir de esta clase (del molde) vas a tener los atributos y comportamientos del objeto en base al molde....

Como sabes a partir de un molde, puedes crear muchos pasteles, que aparentemente serían iguales pero sabemos que son distintos, en mi ejemplo pueden haber sido hechos en el mismo molde pero uno puede ser de chocolate o de lodo, o de tamales, o de accerrin, etc.... Esos atributos como tal los puedes definir tambien en la clase (en la vida real el molde no le puede dar sabor al pastel, pero en OOP si!)....

Ahora bien con los JavaBeans. Una clase puede ser un molde, pero cuando ese molde sirve para acceder objetos y sus propiedades (solo para eso) se dice que es un JavaBean, dicho de otro modo, un JavaBean es siempre una clase (que posteriormente se hará objeto) pero una clase NO siempre es un JavaBean....

Un JavaBean como habrás leido es una clase que cumple con lo siguiente:
Cita:
Iniciado por WikiPedia
Debe tener un constructor sin argumentos.
Sus propiedades deben ser accesibles mediante métodos get y set que siguen una convención de nomenclatura estándar.
Debe ser serializable
Asi pues, te dare un ejemplo: Vamos a crear un objeto, vamos a crear una persona (el ejemplo más choteado lo se), para eso, para crear una persona, necesitamos un molde (claro en la vida real no es asi jaja, es a modo de ejemplo)...

Entonces vamos a ello, que propiedades debe tener el molde para poder hacer personas? bueno si pensamos un poco podemos vernos a nosotros mismos, tenemos una Edad, un Nombre, un color de Piel, color de Ojos, Sexo (Genero), esos serían nuestros atributos, ahora bién, cual sería nuestro comportamiento? bueno una persona que puede hacer? caminar, hablar, etc..

Vamos a crear el molde, que como dije es una clase:
Código Javascript:
Ver original
  1. public class Persona {
  2.     //definimos los atributos
  3.     private String nombre;
  4.     private int edad;
  5.     private String genero;
  6.  
  7.     //tengamso un cosntructor para crear personas
  8.     public Persona(String nombre, int edad, String genero) {
  9.         this.nombre = nombre;
  10.         this.edad = edad;
  11.         this.genero = genero;
  12.         //espero y no te confundas con el this (muchos lo hacen)
  13.         //si no me preguntas y te aclaro.
  14.     }
  15.    
  16.     //definimos las funciones o comportamiento
  17.     //pueden ser privadas pero solo si se llamaran desde el mismo molde cosa que no queremos, por que quebramos el concepto
  18.     public String presentarse() {
  19.         return "Hola majo!! yo soy " + nombre + " y tu?";
  20.     }
  21.    
  22.     public void despedirse(Persona persona) {
  23.         System.out.println("Hasta luego " + persona.getNombre() + ", te cuidas!!");
  24.     }
  25.    
  26.     //Ahora definimos las propiedades de un JavaBean
  27.     //eso no significa que esto sea un JavaBean por que no cumple con las 3 cosas!
  28.     public String getNombre() {
  29.         return nombre;
  30.     }
  31.    
  32.     //Como no es usual que no una persona se cambie de nombre, no pondremos un setter
  33.     //pero si lo necesitaramos seria asi:
  34.     /*
  35.     public void setNombre(String nombre) {
  36.         this.nombre = nombre;
  37.     }*/
  38.    
  39.     //asi mismo podemos tener getters para edad y sexo!! pero por prisa no los haremos 
  40. }

Pues bueno, hasta alli muy bién tenemos un Molde para hacer personas, ojo esa clase no es una persona, es solo un molde, ahora a partir de ese molde creemos a dos personas, para ejemplificar...

Sin embargo aqui entramos en otra de tus dudas (o eso creo) este molde es una clase por lo tanto sera un molde y nada más, no hara operaciones, no pedira datos, no imprimira nada (bueno en mi ejemplo si pero no se debe hacer), solo es un molde... asi que hagamos otra clase para crear a nuestras personas, que tal la clase donde esta el metodo principal? suena bien...

Código Javascript:
Ver original
  1. public class CreaPersonas {
  2.     public static void main(String[] params) {
  3.         //Ho si tenemos un molde para hacer personas!!
  4.         //como el molde es publico podemos acceder a el!!
  5.        
  6.         //Creamos a CR7
  7.         Persona persona1 = new Persona("Cristiano Ronaldo", 26, "Masculino");
  8.        
  9.         //Creamos a Messi por ejemplo
  10.         Persona persona2 = new Persona("Lionel Messi", 24, "Femenino"); //jejeje no me cae bien
  11.        
  12.         //Ok ya tengo mis dos personas, por que solo esas son las que quiero....por ahora
  13.        
  14.         /*
  15.         Como tanto Messi y Ronaldo son personas, y fueron sacadas de mi molde de personas
  16.         entonces tienen los atributos y funciones que defini en mi molde, y las puedo usar*/
  17.        
  18.         //Hacemos que ronaldo se presente
  19.         //como la funcion nos devuelve un string vamos a imprimirla directo
  20.         System.out.println(persona1.presentarse());
  21.        
  22.         //lo que obtenemos es:
  23.         //Hola majo!! yo soy Cristiano Ronaldo y tu?
  24.        
  25.         //Ahora como messi lo veo medio subido en su nube va a cortar a ronaldo, nos despediremos
  26.         //El metodo no nos regresa cadena alla imprime asi que solo lo llamamos (que no debe de ser asi, es mejor que devuelva la string)
  27.        
  28.         //Sin embargo para que se despida, hay que decirle de que persona se va a despedir,
  29.         //el metodo recibia a una persona entonces le diremos que se despida de ronaldo
  30.        
  31.         persona2.despedirse(persona1);
  32.        
  33.         //La salida será:
  34.         //Hasta luego Cristiano Ronaldo, te cuidas!!       
  35.     }
  36. }

Ok, todo muy bien, pero en ese ejemplo no existe un JavaBean (100% Frijol), para que son!! para que!!!....bueno los JavaBeans son muy usados (por no decir obligados) en muchas aplicaciones bién diseñadas... básicamente es una clase, (un molde) con la cual hacemos un objeto o muchos objetos (usualmente uno) para acceder a otros objetos, es muy usado en el MVC (Modelo Vista Controlador) donde la presentación de tu aplicación, esta separada de la lógica y operatividad de la misma y están comunicadas precisamente por el JavaBean, sirven para eso, separar la lógica o las operaciones de lo visual, creando una aplicación mejor diseñada, de fácil mantenimiento y pues escalable por así decirlo....

Como lo comente nuestro molde para hacer personas no es en su totalidad un bean, por que no? por que su constructor recibe los datos de la persona que vamos a crear, para hacer un Bean, eso hay que hacerlo mediante setters y getters, y para no gastar mi teclado, copio y pego el ejemplo de wikipedia y lo adaptamos a nuestro ejemplo:

Código Javascript:
Ver original
  1. public class MrBean implements java.io.Serializable {
  2.  
  3.    private String nombre;
  4.    private int edad;
  5.    private String sexo;
  6.  
  7.    public PersonaBean() {
  8.       // Constructor sin argumentos
  9.    }
  10.    
  11.    //los setters
  12.    public void setNombre(String nombre) {
  13.      this.nombre = nombre;
  14.    }
  15.  
  16.    public void setEdad(int edad) {
  17.      this.edad = edad;
  18.    }
  19.    
  20.    public void setSexo(String sexo) {
  21.     this.sexo = sexo;
  22.    }
  23.    
  24.    //ahora los getters
  25.    public String getNombre() {
  26.     return nombre;
  27.    }
  28.    
  29.    public int getEdad() {
  30.     return edad;
  31.    }
  32.    
  33.    public String getSexo() {
  34.     return sexo;
  35.    }
  36.  }

Ahora ese es nuestro JavaBean de persona....

Ahora ami me surge una duda y espero y los maestros nos la respondan... un bean es para acceder a los atributos de un objeto sin embargo este bean de persona de wikipedia, crea su objeto apartir de ese bean... a lo que voy es existe un JavaBean por cada objeto o es un solo JavaBean para varios objetos de un mismo tipo?.....

En fin, espero que mi respuesta te haya servido y disculpa por lo extenso pero me llego la inspiración... y disculpa si algun ejemplo tiene errores de ejecución o compilación, no los comprobe ya que no tengo el JDK en esta maquina =/

Saludos!
__________________
De nada, hay te encargo +1...

Última edición por zero0097; 01/07/2012 a las 22:08