Ver Mensaje Individual
  #11  
Antiguo 22-10-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
La sobrecarga de métodos es una solución elegante al problema de cómo nombrar a dos rutinas pertenecientes a la misma clase y que hacen la misma tarea, y cuya funcionalidad sólo se diferencia por los parámetros que acepta. En lo de misma tarea hay que hacer hincapié, ya que puede ser tentador llamarle de la misma manera a diversos métodos que desempeñan funciones muy diferentes, con la venia de que los parámetros supuestamente despejan cualquier duda de qué es lo que el programa va a hacer cuando se llame a un método o a otro. Dentro de una clase debemos evitar la sobrecarga de un método más allá de una sola funcionalidad general definida para todas las versiones que se escriban del mismo. Dos funcionalidades no tan semejantes y nombradas de la misma manera en el mismo contexto podría ser considerado una mala práctica (lección que aprendí en años recientes).

Mi voto es para los métodos sobrecargados puestos con juicio.

Cita:
Empezado por AgustinOrtu Ver Mensaje
Nunca entendi porque en Pascal tenemos que avisarle al compilador que estamos sobrecargando un metodo
Es porque Pascal, a diferencia de lenguajes sádicos como C++, previene al programador de cometer muchas pequeñas pifias que de otro modo tendrían repercusiones después, incluso en tiempo de ejecución. Escribiste SetData queriendo escribir SetDate, pero el impertérrito compilador de C++ determinó que querías definir una sobrecarga del ya existente método SetData.

Cita:
Empezado por AgustinOrtu Ver Mensaje
Otra cosa que me molesta de la sobrecarga, esta relacionada con las funciones [...] el compilador podria diferenciar entre las invocaciones:
Código Delphi [-]
  // error de compilacion, E2252 Method 'Bar' with identical parameters already exists
  TFoo = class
  public
    function Bar: Integer; overload;
    function Bar: string; overload;
  end;
Sin embargo, si usamos un procedure con un parametro de salida out, si que compila:
Código Delphi [-]
  TFoo = class
  public
    procedure Bar(out Result: Integer); overload;
    procedure Bar(out Result: string); overload;
  end;
Lo dicho es debido a que una función, por lo general, también puede ser ejecutada como procedimiento:
Código Delphi [-]
Foo1.Bar;  // ¿A cuál de los dos métodos función "Bar" estoy llamando?

Un abrazo.
Un abrazo (sobrecargado).

Al González.
Responder Con Cita