Ver Mensaje Individual
  #15 (permalink)  
Antiguo 12/01/2009, 20:48
califa010
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 4 meses
Puntos: 5
Respuesta: Clases con métodos compartidos

Aunque es algo dependiente de la implementación particular del lenguaje (del compilador, el intérprete, la máquina virtual o lo que sea...), en muchos de los lenguajes que tienen sintaxis de objetos (¿la mayoría?, ¿todos?), tanto los métodos estáticos como los de instancia son compartidos en tiempo de ejecución (Java, C#, C++, Actionscript, etc, etc). Es decir, hay una sóla copia del código de la función / método en memoria, por clase. Lo único que cambia es que a un método de instancia se le pasa un parámetro adicional, implícito (generalmente es el primero), que es la referencia / puntero a this (a partir de cual se puede acceder al estado del objeto, o sea, a las variables o propiedades de instancia).

En algunos lenguajes, este parámetro se declara incluso explícitamente (aunque no se pasa en la llamada); creo que así era en Python, donde el primer parámetro de un método es self, si no recuerdo mal (no estoy seguro de si el nombre es una palabra reservada o sólo una convención).

Pero fuera de eso, los métodos estáticos o de instancia son iguales en ese punto (más allá de las diferencias semáticas o conceptuales, a nivel del lenguaje).

Un ejemplo para ilustrar esto último (completamente inútil a los fines prácticos, por lo demás).

Código PHP:
class Test {

    public 
$id;
    
    public function 
__construct($id) {
        
$this->id $id;
    }
    
    public static function 
testStatic($explicitThis) {
        return 
$explicitThis->id;
    }
    
    public function 
testInstance() {
        return 
$this->id;
    }
}

$a = new Test(1);
$b = new Test(2);

echo 
Test::testStatic($a) . ' - ' $a->testInstance() . "<br>";
echo 
Test::testStatic($b) . ' - ' $b->testInstance() . "<br>"

Saludos
Juan Pablo Califano