// NOTA: Estos imports son SOLO necesarios para los metodos que que YA ESTÁN IMPLEMENTADOS.
import java.lang.reflect.Field;
import java.lang.reflect.Method;


/**
 *
 * @author DIT-UC3M
 */
public class Clase {
    
    public String nombre;
    
    private Atributo[] atributos;
    private Constructor[] constructores;
    private Metodo[] metodos;
    
    /** Constructor de la clase a partir de un objeto cualquiera. */
    public Clase( Object o) {
 		// ESTE MÉTODO YA ESTÁ IMPLEMENTADO.       
        this.nombre = o.getClass().getName();
        
        int numAtributos = o.getClass().getDeclaredFields().length;
        int numConstructores = o.getClass().getConstructors().length;
        int numMetodos = o.getClass().getDeclaredMethods().length;        
        
        atributos = new Atributo[numAtributos];
        constructores = new Constructor[numConstructores];
        metodos = new Metodo[numMetodos];
        
        for ( int i=0; i<numAtributos ; i++) {
            Field f = o.getClass().getDeclaredFields()[i];
            atributos[i] = new Atributo(f.getName(),f.getType().getName(),f.getModifiers());
        }
        
        for ( int i=0; i<numConstructores ; i++) {
            java.lang.reflect.Constructor c = o.getClass().getConstructors()[i];
            constructores[i] = new Constructor(c.getName(),c.getModifiers());
        }
        
        for ( int i=0; i<numMetodos ; i++) {
            Method m =  o.getClass().getDeclaredMethods()[i];
            metodos[i] = new Metodo(m.getName(), m.getModifiers(),m.getReturnType().getName());
        }

    }
    
    public Atributo[] getAtributos() {
        // A IMPLEMENTAR.  
        return null;
    }

    public Constructor[] getConstructores() {
        // A IMPLEMENTAR.  
        return null;
    }

    public Metodo[] getMetodos() {
        // A IMPLEMENTAR.  
        return null;
    }
    
    public String toString() {
        // A IMPLEMENTAR.  
        return null;
   
    }
}
