Viele Menschen in China betrachten Delphi als ihr bevorzugtes Entwicklungstool. Der Grund liegt natürlich darin, dass Delphi Entwicklern viele Funktionen bietet: objektorientierte Entwicklung, visuelles Schnittstellendesign, umfangreiche Komponenten und Multiplattform-Portabilität (neue Funktionen von Delphi6).
Aber für Anfänger ist objektorientiertes Denken möglicherweise nicht das größte Gefühl, das Delphi ihnen vermittelt. Das visuelle Interface-Design und die reichhaltigen und vielfältigen verfügbaren Komponenten hinterlassen einen tiefgreifenden und unvergesslichen Eindruck. Die schwerwiegende Folge davon ist, dass sich Anfänger oft lange Zeit nur auf die Verwendung der vorhandenen VCL-Komponenten konzentrieren, die von Delphi bereitgestellt werden, und dabei vernachlässigen, über die Auswirkungen des objektorientierten Denkens auf die gesamte Delphi-Komponentenarchitektur nachzudenken System.
Der folgende Code enthält einen der häufigsten Fehler, den Anfänger häufig machen. Obwohl es sich bei diesem Fehler nicht um einen Grammatikfehler handelt, zeigt er, dass das objektorientierte Denken des Benutzers gestärkt werden muss:
var
Form1: TForm1;
Durchführung
{$R *.dfm}
PROzedur TForm1.Button1Click(Sender: TObject);
beginnen
ShowMessage(Form1.Caption); // <-- Es gibt hier einige Probleme bei der Verwendung von Form1.
Ende;
Auf den ersten Blick scheint an dieser Art von Code nichts auszusetzen zu sein. Allerdings ist das Erscheinen von Form1 hier etwas unangemessen. Offensichtlich ist der Code hier geschrieben, um die ButtonClick-Methode von TForm1 zu implementieren, und Form1 ist als Instanz der TForm1-Klasse tatsächlich in die Implementierung der Klasse geschrieben. Gibt es nicht einige konzeptionelle Verwirrung, um sie anzupassen? zum objektorientierten Denken ist auch sehr einfach und kann auf zwei Arten geschrieben werden:
1. ShowMessage(Self.Caption); // <-- Diese Schreibweise ist sehr klar. Die anzuzeigenden Informationen sind die Beschriftung der aktuellen Instanz der Klasse.
2. ShowMessage(Caption); // <-- Die Schreibmethode ist hier die gleiche wie oben, aber das Schlüsselwort Self wird weggelassen;
Die drei Kerninhalte des objektorientierten Denkens sind Kapselung, Vererbung und Polymorphismus. Das durch das obige Beispiel aufgedeckte Problem ist das Problem der Kapselung. Ähnliche Beispiele sind:
var
Form1: TForm1;
...
var
Form2: TForm2;
procedure TForm1.Button1Click(Sender: TObject);
beginnen
Form2.Show; // <-- Als globale Variable ist die Verwendung von Form2 hier ebenfalls verwirrend.
Ende;
Das obige Beispiel ist möglicherweise allgemeiner. In den meisten Fällen haben TForm1 und TForm2 möglicherweise jeweils nur eine Instanz, sodass ein solcher Code als passabel angesehen werden kann. Im engeren Sinne erfüllt es jedoch nicht die Anforderungen der Kapselung. Beziehen Sie sich auf den folgenden Code:
Typ
TForm1 = Klasse(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
Privat
{Private Erklärungen}
FNext: TForm;
öffentlich
{Öffentliche Erklärungen}
Eigenschaft NextForm: TForm read FNext write FNext;
Ende;
var
Form1: TForm1;
Durchführung
verwendet Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
beginnen
wenn zugewiesen(FNext), dann
TForm2(FNext).Show;
Ende;
Ende.
//Das Folgende ist der Inhalt der Projektdatei:
Programm Projekt1;
verwendet
Formulare,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
beginnen
application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Form1.NextForm := Form2; // <-- Fügen Sie diesen Satz hinzu, damit der Code kaum die Anforderungen der Kapselung erfüllt
Application.Run;
Ende.
Übergeben Sie den Form2-Zeiger an Form1 als Attribut von Form1. Auf diese Weise entspricht Form1 beim Aufruf dem Prinzip der Kapselung! Natürlich sollen diese Codes nur die Idee der Kapselung widerspiegeln. In der Praxis können Sie nach Ihren persönlichen Gewohnheiten entscheiden, ob Sie sie wirklich so gründlich umsetzen möchten. Aber diese Art von Gedanken sollten im Kopf Wurzeln schlagen... (Unvollendet, Fortsetzung folgt).
Weitere Artikel