La sobrecarga en programación orientada a objetos nos permite tener definidas diferentes funciones con el mismo nombre, pero diferente número de parámetros. Algo muy util para poder procesar datos de diferentes formas sin perder la lógica de la clase.
//Java
public class miClase {
private String nombre = new String("Mi Nombre");
public String devuelveNombre() {
return this.nombre;
}
public String devuelveNombre(String nuevoNombre) {
this.setNombre(nuevoNombre);
return this.nombre;
}
private void setNombre(String nuevoNombre) {
this.nombre = nuevoNombre;
}
}
//ADA
declare
type TAlimento is (PAN, LECHE, ACEITE);
type TProducto_Automóvil is (ACEITE, BUJÍA);
procedure Comprar (ProdAlim: TAlimento) is -- ...
procedure Comprar (ProdAutom: TProducto_Automóvil) is -- ...
begin
Comprar (ACEITE); -- Ambigüedad.
Comprar (TAlimento'(ACEITE)); -- Se supera la ambigüedad.
Comprar (ProdAlim => ACEITE); -- También se supera la ambigüedad.
end;
Hace tiempo que desde Javascript podemos hacer esto usando la variable arguments
, disponible dentro de todas las funciones y que nos informa del número de argumentos que le pasamos a una función.
//Javascript
var miClase = new Object();
miClase.nombre = "Mi Nombre";
miClase.devuelveNombre = function() {
if (arguments.length == 1) this.setNombre(arguments[0]);
return this.nombre;
};
miClase.setNombre = function(nuevoNombre){
this.nombre = nuevoNombre;
}
alert(miClase.devuelveNombre("Mas otro"));
John Resig, ha desarrollado un sistema más elegante con el cual mediante una función, podemos conseguir esto de una forma aún más fácil.
//Javascript
// addMethod - By John Resig (MIT Licensed)
function addMethod(object, name, fn){
var old = object[ name ];
object[ name ] = function(){
if ( fn.length == arguments.length )
return fn.apply( this, arguments );
else if ( typeof old == 'function' )
return old.apply( this, arguments );
};
}
Con esta función, añadir métodos a nuestros objetos será tan fácil como esto:
//Javascript
function Users(){
addMethod(this, "find", function(){
// Find all users...
});
addMethod(this, "find", function(name){
// Find a user by name
});
addMethod(this, "find", function(first, last){
// Find a user by first and last name
});
}
O mejor aún, lo añadimos como un método nuevo del objeto Object()
, así podremos usarlo en cualquier objeto de nuestra aplicación de la siguiente forma.
//Javascript
Object.prototype.addMethod = function (name, fn){
var old = this[ name ];
this[ name ] = function(){
if ( fn.length == arguments.length )
return fn.apply( this, arguments );
else if ( typeof old == 'function' )
return old.apply( this, arguments );
};
}
var p = new Object();
p.addMethod("alert", function() { alert("hola");});
p.addMethod("alert", function(a){ alert(a);});
p.alert();
p.alert("que te pasa??");
4 comentarios, 0 referencias
+
#