Page 39 - Revista_60.pub
P. 39
A PROGRAMAR
CLASSES DE INFRAESTRUTURA: A CLASSE USING
Result := Action(Obj); class procedure New
finally <T: class, constructor>
Obj.Free; (Action: TProc<T>);
end; overload; static;
end; class function New
<T: class, constructor; TResult>
class function Using.New<T, TResult> (Obj: T; Action: TFunc<T, TResult>)
(Action: TFunc<T>): TResult; : TResult; overload; static;
begin class function New
Result := New<T, TResult>( <T: class, constructor; TResult>
T.Create, (Action: TFunc<T, TResult>)
Action : TResult; overload; static;
); end;
end;
Como se pode ver, a implementação é bastante pareci-
da com os dois métodos anteriores. Apenas estamos a acres-
centar um parâmetro genérico TResult que será o tipo de re- Um bom design
sultado que as funções irão retornar.
No caso de TResult, não foram aplicadas restrições, o OOP deve procurar que
que significa que mesmo tipos de dados primitivos serão váli- cada objeto represente
dos para o retorno da ação.
Uma possível utilização para estes novos métodos se- uma entidade real, uma
ria:
(* Método 4 *) parte do todo que é o
var
SomeString: string;
begin software, com uma res-
SomeString :=
Using.New<TBar, string>( ponsabilidade bem de-
function (Bar: TBar): string
begin
Result := Bar.Text; finida e uma vida útil
end
);
end; determinada pelo exer-
Vejamos então como ficaria a nossa Unit completa para cício dessa responsa-
a classe Using:
bilidade, e não mais do
unit RO.Using;
interface que isso. Uma classe
uses
SysUtils utilitária ou um método
;
type estático acabam por ir
Using = class
public
class procedure New contra o exercício des-
<T: class, constructor>
(Obj: T; Action: TProc<T>);
overload; static; se objetivo.
AUTOR
Escrito por Nuno Picado
Autodidata na área de programação, vê o percurso de aprendizagem da programação como um fim em si
mesmo. Considera o pensamento lógico deveria ser de ensino fundamental, tanto quanto português e
matemática, o que se conseguiria com ensino de técnicas de programação logo a partir do primeiro ciclo.
Autor de projetos como Reusable Objects e AtWS (anteriormente conhecido como WS-DLL), considera
que a partilha de conhecimento é o melhor mecanismo de evolução da racionalidade
39