Muitas pessoas na China consideram o Delphi sua ferramenta de desenvolvimento preferida. A razão é, obviamente, porque o Delphi fornece aos desenvolvedores muitos recursos: desenvolvimento orientado a objetos, design de interface visual, componentes ricos e portabilidade multiplataforma (novos recursos do Delphi6).
Mas para iniciantes, o pensamento orientado a objetos pode não ser o maior sentimento que o Delphi traz para eles. O design da interface visual e os ricos e diversos componentes disponíveis deixam a impressão mais profunda e inesquecível. A séria consequência disso é que os iniciantes muitas vezes se concentram apenas no uso dos componentes VCL existentes fornecidos pelo Delphi por um longo tempo, enquanto negligenciam a reflexão sobre o impacto do pensamento orientado a objetos em todo o Delphi. O significado contido na arquitetura do componente sistema.
O trecho de código a seguir contém um dos erros mais comuns que os iniciantes costumam cometer. Embora esse erro não seja um erro gramatical, ele revela que o pensamento orientado a objetos do usuário precisa ser fortalecido:
var
Formulário1: TForm1;
implementação
{$R *.dfm}
Procedimento TForm1.Button1Click(Remetente: TObject);
começar
ShowMessage(Form1.Caption); // <- Existem alguns problemas com o uso do Form1 aqui.
fim;
À primeira vista, parece não haver nada de errado com esse tipo de código. No entanto, a aparência do Form1 aqui é um tanto irracional. Obviamente, o código aqui foi escrito para implementar o método ButtonClick do TForm1, e o Form1, como uma instância da classe TForm1, é na verdade escrito na implementação da classe. Não há alguma confusão conceitual. Ele precisa ser alterado para estar em conformidade. para o pensamento orientado a objetos Também é muito simples e pode ser escrito de duas maneiras:
1. ShowMessage(Self.Caption); // <-- Esta forma de escrever é muito clara. A informação a ser mostrada é a legenda da instância atual da classe.
2. ShowMessage(Caption); // <-- O método de escrita aqui é o mesmo acima, mas a palavra-chave Self é omitida;
Os três conteúdos principais do pensamento orientado a objetos são encapsulamento, herança e polimorfismo. O problema exposto pelo exemplo acima é o problema do encapsulamento. Exemplos semelhantes incluem:
var
Formulário1: TForm1;
...
var
Formulário2: TForm2;
procedimento TForm1.Button1Click(Remetente: TObject);
começar
Form2.Show; // <-- Como variável global, o uso de Form2 aqui também é confuso.
fim;
O exemplo acima pode ser mais geral. Na maioria dos casos, em um projeto, TForm1 e TForm2 podem ter apenas uma instância cada, portanto tal código pode ser considerado aceitável. Mas, em sentido estrito, não atende aos requisitos de encapsulamento. Consulte o seguinte código:
tipo
TForm1 = classe(TForm)
Botão1: Botão T;
procedimento Button1Click(Remetente: TObject);
privado
{Declarações privadas}
FNext: TForm;
público
{Declarações públicas}
propriedade NextForm: TForm leitura FNext gravação FNext;
fim;
var
Formulário1: TForm1;
implementação
usa Unidade2;
{$R *.dfm}
procedimento TForm1.Button1Click(Remetente: TObject);
começar
se atribuído (FNext) então
TForm2(FNext).Mostrar;
fim;
fim.
//A seguir está o conteúdo do arquivo do projeto:
programa Projeto1;
usa
Formulários,
Unidade1 em 'Unit1.pas' {Form1},
Unidade2 em 'Unit2.pas' {Form2};
{$R *.res}
começar
aplicativo.Inicializar;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Form1.NextForm := Form2; // <- Adicione esta frase para fazer com que o código atenda aos requisitos de encapsulamento
Aplicativo.Executar;
fim.
Passe o ponteiro Form2 para Form1 como um atributo de Form1. Desta forma, Form1 obedece ao princípio do encapsulamento ao chamar! É claro que esses códigos servem apenas para refletir a ideia de encapsulamento. Na prática, você pode decidir se realmente deseja implementá-lo de forma tão completa de acordo com seus hábitos pessoais. Mas esse tipo de pensamento deveria criar raízes na mente... (Inacabado, continua).
Mais artigos