Sablonok delphiben


Sablonok a Delphi-ban

A programozás DelphiCharts-ban lévő sablonokat (tervezési minták) gyakran használják a struktúrák, függőségek és kapcsolatok programozásában az objektumorientált tervezésben. A sablonok helyes és leghasznosabb használatának ismerete segít megtervezni alkalmazásait, kompaktabb, strukturáltabb újrahasználható kódot használva. Hozzájárul a nagy és összetett rendszerek kifejlesztéséhez.







Delphi - egy objektum-orientált nyelv, amelyben van egy sor osztályok (tárgyat), és bizonyos függőségeket, hogy már megvalósult, és készen áll a használatra, amely segít, hogy egyszerűsítsék és könnyítsék alkalmazások fejlesztését. De a legfontosabb kapcsolat fényében objektumsablont a modell: class öröklés, virtuális (virtuális) és abstratknye (összefoglaló) módszerek segítségével egy biztonságos (védett) és (public) metódus definíciókat. Mindez lehetővé teszi, hogy olyan programozási sablont hozzon létre, amelyet sokszor használhat és könnyen bővítheti képességeit. Csakúgy, mint bármely objektum-orientált nyelv, Delphi segítségével fokozza a funkcionalitás és stabilitás minták elkülönítésével az alapvető tulajdonságok és módszerek társaik esetleg módosulhatnak.
És a legegyszerűbb példa - maga Delphi, bővíthető fejlesztői környezet, köszönhetően a csomag architektúra, interfész fejlesztőkörnyezet (IDE) interfész és szerszámok (eszközök). Ezek a felületek határozzák meg egy sor elméleti és virtuális konstruktőrök és műveletek (módszereket), amelyeket széles körben használják mind írásban szoftvert és bővítése a fejlesztési környezet is (írás, összetevői, mesterek, szakértők).
Szeretném megjegyezni, hogy ebben a cikkben sok név és meghatározás kerül bemutatásra "ahogy van". Azt találták, hogy sokkal kényelmesebb, mint foglalkozó fordítási sablon nevek és egyéb feltételek az orosz, ez nem mindig lehetséges átvinni pontos meghatározására a fordítás, de a kifejezés jelentését nem szeretnék elveszíteni. Annak érdekében, hogy a továbbiakban az összes nevet minták maradt angol, ami azt illeti, és a forráskód példák, bár bevallom, hogy talán más források más, mint az enyém, a neveket és fogalmakat változhat. De ne hagyjuk, hogy a rejtélyes, mivel a leírás is világossá vált, mi a célja az egyes mintát. A felsorolt ​​sablonok nem úgy teszik, mintha a sablonok teljes listája lenne. Egyszerűen tükrözik tudásom ezen a területen az alábbiakban felsorolt ​​forrásokból.
A táblázatban felsorolunk néhány általánosan használt sablont (összesen több mint negyven).

Bizonyosodott, hogy ez az osztály csak egy példányt tartalmaz. Globális információkkal rendelkezik az osztály eléréséhez.

Az osztály interfészét egy másik felülethez konvertálja, amelyet a sablon ügyfél ért. Az adapter lehetővé teszi, hogy különböző interfészekkel rendelkező osztályok működjenek együtt, ami normál körülmények között lehetetlen a különböző interfészek miatt.

Az algoritmus vagy részeinek csontvázát globális műveletekben határozza meg, amely lehetővé teszi, hogy több lépésben megtörje a végrehajtást, átadva az alosztályoknak. Vagyis az alosztályok képesek újra definiálni az algoritmus egyes lépéseit anélkül, hogy megváltoztatnák az algoritmus teljes szerkezetét.

Egy objektum létrehozását elválasztja annak gyakorlati ábrázolásától, így egy konstruktor képes létrehozni az objektum különböző ábrázolásait.

Olyan mechanizmust biztosít a kapcsolódó vagy függő objektumok családjának létrehozásához, anélkül, hogy meghatározott osztályok leírására lenne szükség.

Olyan felületet határoz meg, amely lehetővé teszi objektum létrehozását, de lehetővé teszi az alosztályok számára, hogy eldöntsék, melyik osztályt kell végrehajtani. A gyári módszer lehetővé teszi, hogy az osztálynak alosztályai legyenek, azaz gyerekek.







felhasználások
Windows, üzenetek, rendszergazdák, osztályok, grafika, vezérlők, űrlapok, párbeszédek;

típus
TCSingleton = osztály (TComponent)
magán

védett

nyilvános

konstruktor Create (AOwner: TComponent); felülbírálhatja; // A konstruktor felülbírálása
Destroy; felülbírálhatja; // A megsemmisítő felülbírálása

var Global_CSingleton: TCSingleton;
Global_OSingleton: TOSingleton;

eljárás nyilvántartás;
kezdődik
RegisterComponents ('Patterns', [TCSingleton, TOSingleton]); // a leírt komponensek regisztrálásra kerülnek és elhelyezve a Patterns fülön.
végén;

konstruktor TCSingleton.Create (AOwner: TComponent);
kezdődik
ha Global_CSingleton <> nil, majd // ellenőrizze a létrehozandó összetevő egyediségét
kezdődik
ShowMessage ("A komponens már létezik! Nem lehet több ilyen összetevőt létrehozni."); // ha már létezik, a felhasználó megtagadja a másik példány létrehozását
Abort // megszakítja a végrehajtást hibaüzenetek nélkül
vég
Elsőként kezdődik
örökölt Create (AOwner); // egyébként létrehozunk egy objektumot
Global_CSingleton: = önmagát; // és adja át a linket
végén;
végén;

destructor TCSingleton.Destroy;
kezdődik
ha Global_CSingleton = Self akkor // ha van egy objektum, amelyet meg kell semmisíteni
Global_CSingleton: = nulla; // majd pusztítsd el
örökölt Destroy; // hívja a külső megsemmisítőt
végén;

konstruktor TOSingleton.Create (AOwner: TComponent);
kezdődik
ha Global_OSingleton <> nil akkor
kezdődik
ShowMessage ('Az objektum már létezik! Egynél több ilyen objektumot nem lehet létrehozni.');
elvetél
vég
Elsőként kezdődik
örökölt Create (AOwner);
Global_OSingleton: = önmagát;
végén;
végén;

destructor TOSingleton.Destroy;
kezdődik
ha Global_OSingleton = Önmagát akkor
Global_OSingleton: = nulla;
örökölt Destroy;
végén;

használja a SysUtils, Classes;

FCustomerID: Longint;
FFirstName: string;
FLastName: string;
FDOB: TDateTime;

funkció GetCustomerID: Longint; virtuális;
function GetFirstName: string; virtuális;
function GetLastName: string; virtuális;
funkció GetDOB: TDateTime; virtuális;

konstruktor Create (CustID: Longint); virtuális;
property CustomerID: Longint olvassa el a GetCustomerID;
tulajdonság Elsőnév: karakterlánc olvasása GetFirstName;
tulajdonság LastName: string read GetLastName;
tulajdonság DOB: TDateTime olvasás GetDOB;

funkció GetCustomer (CustomerID: Longint): TNewCustomer;

konstruktor TNewCustomer.Create (CustID: Longint);

kezdődik
FCustomerID: = CustID;
FFirstName: = "A";
FLastName: = 'New_Customer';
FDOB: = Most;
END;

funkció TNewCustomer.GetCustomerID: Longint;

függvény TNewCustomer.GetFirstName: string;
kezdődik
Eredmény: = FFirstName;
végén;

függvény TNewCustomer.GetLastName: string;
kezdődik
Eredmény: = FLastName;
végén;

funkció TNewCustomer.GetDOB: TDateTime;
kezdődik
Eredmény: = FDOB;
végén;

TOldDOB = rekord
Nap: 0..31;
Hónap: 1..12;
Év: 0..99;
végén;

FCustomerID: Integer;
FName: string;
FDOB: TOldDOB;

konstruktor Create (CustID: Integer);
tulajdonság CustomerID: Integer olvassa el az FCustomerID-t;
tulajdonság Név: string read FName;
tulajdonság DOB: TOldDOB olvasni FDOB;

konstruktor TOldCustomer.Create (CustID: Integer);

kezdődik
FCustomerID: = ÜgyfélID;
FName: = 'Old_Customer';
az FDOB megkezdése előtt
Nap: = 1;
Hónap: = 1;
Év: = 1;
végén;
végén;

funkció GetCustomerID: Longint; felülbírálhatja;
function GetFirstName: string; felülbírálhatja;
function GetLastName: string; felülbírálhatja;
funkció GetDOB: TDateTime; felülbírálhatja;

konstruktor Create (CustID: Longint); felülbírálhatja;
Destroy; felülbírálhatja;

konstruktor TAdaptedCustomer.Create (CustID: Longint);

kezdődik
örökölt Create (CustID);
FOldCustomer: = TOldCustomer.Create (CustID);
végén;

destructor TAdaptedCustomer.Destroy;
kezdődik
FOldCustomer.Free;
örökölt Destroy;
végén;

funkció TAdaptedCustomer.GetCustomerID: Longint;

funkció TAdaptedCustomer.GetFirstName: string;
var SpacePos: egész;

funkció TAdaptedCustomer.GetLastName: string;
var SpacePos: egész;

funkció TAdaptedCustomer.GetDOB: TDateTime;
var FullYear: Word;

funkció GetCustomer (CustomerID: Longint): TNewCustomer;

kezdődik
ha az ÜgyfélID> Last_OldCustomer_In_Database majd
Eredmény: = TNewCustomer.Create (CustomerID)
más
Eredmény: = TAdaptedCustomer.Create (CustomerID) mint TNewCustomer;
végén;

Így a TadaptedCustomer osztály két réteg közötti rétegként létezik, biztosítva a normál interakciót - az adatok átalakítását az új osztály által érthető formátumba.
Ez az egyik legegyszerűbb sablon. Mint már írtam, ezek közül csak mintegy 40 van, de nem leszek ennyire szaporodó, és a következő cikkben néhány további sablont vizsgálunk, amelyek összetettebbek, mint a fentiek. Mindazonáltal minél magasabb a bonyolultságuk, annál hasznosabbak azok, amelyeket a fejlesztések során használhatnak. És minél hamarabb megtanulod használni ezt a tudást nyereséggel, annál könnyebb és könnyebb lesz az Ön számára a munka és a program.

Denis Migachev AKA Denver




Kapcsolódó cikkek