Zero

Zero
Zero

17 noviembre 2005

Herencia dinámica

Muchas cosas empieza a funcionar ya en Zero. Por ejemplo, el nuevo lenguaje Prowl (no se puede decargar todavía) que soporta herencia dinámica de una manera mucho más intuitiva. El siguiente código lo ejemplifica.


// Dinamica.pwl

object Persona
attribute + nombre = "juan";
attribute + salario = 18000;

method + toString()
{
return nombre.concat( "\n" );
}

method + ponSalario(s)
{
salario = s;
return;
}
endObject

object Empleado : Persona
method + toString()
{
return nombre.concat( " (empleado)\n" );
}
endObject

object Directivo : Persona
method + toString()
{
return nombre.concat( " (directivo)\n" );
}
endObject

object EmpleadoEmpresa : Empleado( salario < 20000 ),
Directivo( salario >= 20000)
method + toString()
{
return super();
}
endObject

object Dinamica : ConsoleApplication
method + doIt()
{
reference miEmplEmpt = EmpleadoEmpresa.copy("");

System.console.write("\nEjemplo Dinámica\n");

System.console.write( miEmplEmpt.toString() );
System.console.lf();

miEmplEmpt.ponSalario( 30000 );

System.console.write( miEmplEmpt.toString() );
System.console.lf();

return;
}
endObject


---
Con la siguiente salida:

Ejemplo Dinámica
juan (empleado)

juan (directivo)


Exceptuando a Cecil, que tiene algo parecido, creo que no existe nada igual, además Cecil a) es un lenguaje declarativo y b) es para clases.

No hay comentarios: