Ver Mensaje Individual
  #12 (permalink)  
Antiguo 03/07/2012, 09:46
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

Bueno, claro que no hay que confundir una clase con un archivo, puedes tener muchas clases dentro de un ".java" y también puedes tener una o mas clases dentro de otra clase (Inner Classes) si suponemos que cada persona tiene un perro, la puedes "embeber?" dentro de persona, y la clase Mascota puede definir un perro, ejemplo:

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.     private Mascota mascota;
  7.  
  8.     //tengamso un cosntructor para crear personas
  9.     public Persona(String nombre, int edad, String genero, String nombreMascota, int edadMascota) {
  10.         this.nombre = nombre;
  11.         this.edad = edad;
  12.         this.genero = genero;
  13.         this.mascota = new Mascota(nombreMascota, edadMascota);
  14.     }
  15.    
  16.     //clase de la mascota (dentro de clase persona que a mi ver no debe ser asi ?)
  17.     class Mascota {
  18.         private String tipo;
  19.         private int edad;
  20.        
  21.         public Mascota(String tipo, int edad) {
  22.             this.tipo = tipo;
  23.             this.edad = edad;
  24.         }
  25.        
  26.         public String getTipo() {
  27.             return tipo;
  28.         }
  29.        
  30.         public int getEdad() {
  31.             return edad;
  32.         }
  33.     }
  34.    
  35.     public String presentarse() {
  36.         return "Hola majo!! yo soy " + nombre + ", mi mascota es un " + mascota.getTipo() + ". ";
  37.     }
  38.    
  39.     public void despedirse(Persona persona) {
  40.         System.out.println("Hasta luego " + persona.getNombre() + ", te cuidas!!, me voy con mi " + mascota.getTipo() + ". ");
  41.     }
  42.    
  43.     public String getNombre() {
  44.         return nombre;
  45.     }
  46. }

y así podemos obtener sus atributos:
Código Javascript:
Ver original
  1. public class Main {
  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", "Perro", 2);
  8.        
  9.         //Creamos a Messi por ejemplo
  10.         Persona persona2 = new Persona("Lionel Messi", 24, "Femenino", "Gato", 5); //jejeje no me cae bien
  11.        
  12.        
  13.         System.out.println(persona1.presentarse());
  14.        
  15.         //La salida es
  16.         //Hola majo!! yo soy Cristiano Ronaldo, mi mascota es un Perro.
  17.                        
  18.         persona2.despedirse(persona1);
  19.        
  20.         //La salida será:
  21.         //Hasta luego Cristiano Ronaldo, te cuidas!!, me voy con mi Gato.  
  22.     }
  23. }

Sin embargo en este ejemplo, creo que la abstracción no es adecuada ya que hay personas que no van a tener mascotas, por lo tanto la clase mascota debería estar fuera de la clase persona, y ambas pueden heredar de otra clase como tu dices de "Seres vivos"...

Cuando yo era novicio creía que hacer archivos separados era peor que tenerlo en uno solo, sin embargo con el tiempo y el desarrollo de aplicaciones te organizas mejor y tienes todo mejor estructurado. En mi opinión cada clase que tengo que hacer la hago en un archivo, eso si, a veces la puedo hacer en el mismo archivo lo que si casi nunca he usado es lo que acabamos de hacer de meter una clase dentro de otra, sin embargo al abstraer un objeto de la vida real, un sistema se compone de subsistemas, por lo tanto es totalmente válido el uso de "Inner Classes" con tal de lograr una buena abstracción de nuestro "objeto real"...
__________________
De nada, hay te encargo +1...