învățați

Autor: Camioane

Bine ați venit la ultimul episod din seria „Învață să programezi cu Starter”. În primele patru episoade am tratat „Introducere și instalare” a ediției gratuite Delphi Starter, apoi ne-am mutat la elementele de bază IDE din „Construirea în depanare”. În „Arhitectură și straturi de cod” au fost discutate conceptele cheie ale structurii adecvate a aplicațiilor și în ultimul episod am început „Proiectarea interfețelor utilizatorului”.

Există, de asemenea, seria „Învață să programezi în C ++” scrisă de David Millington, Manager de produs C ++ Builder, care a terminat deja seria cu postarea finală pe blog care acoperă operatorii C ++ și aplicația finală.

Codificarea în C ++ și Object Pascal este diferită. Inițial am fost tentat să implementez calculatorul aici în „felul meu”, dar mi-am dat seama că pentru unii dezvoltatori ar putea fi interesant să puteți compara modul în care cele două limbi pot fi utilizate pentru a implementa același UI și cod. proiecta. În consecință, am modificat ușor UI-ul calculatorului pe care l-am creat în episodul anterior, astfel încât să se potrivească cu cel al lui David.

Codul sursă final al proiectului „Delphi Super Calculator” poate fi descărcat de pe Amazon S3.

Structura aplicației

Iată captura de ecran de la Managerul de proiect și puteți vedea că proiectul calculatorului conține un formular principal și cinci unități cu cod.

În episodul anterior am creat proiectul calculatorului cu formularul principal cu 20 de butoane și o etichetă care acționează ca un „afișaj”. Este foarte important să separați codul interfeței de utilizator de logica aplicației. Cel mai bun mod de a realiza această separare este prin utilizarea interfețelor. Încercând să se potrivească cu designul lui David, am adăugat la proiectul meu o nouă unitate „uInterfaces” și am definit două interfețe acolo. Un „ICalculator” pe care îl implementează clasa „TCalculator” și un „ICalculatorDisplay” care este implementat de formularul principal. Aceste două interfețe sunt singurul mod prin care UI comunică cu logica aplicației.

Puteți elimina codul de eșantion din clasa „TCalculator” care a fost adăugat mai devreme în scopuri demonstrative și putem începe să implementăm calculatorul în mod real.

Clasa noastră „TCalculator” implementează o interfață și de aceea nu poate fi moștenită direct din „TObject”, dar trebuie derivată din „TInterfacedObject” care este clasa de bază pentru toate clasele Delphi care implementează interfețe. Dacă nu specificați clasa de bază pentru obiectul dvs., veți fi moștenit de la „TObject”. În mod similar, toate interfețele Delphi derivă din „IInterface”, iar clasa „TInterfacedObject” implementează doar aceste metode moștenite. Constructorul clasei noastre „TCalculator” ia o referință la „ICalculatorDisplay” și îl stochează în câmpul privat, astfel încât orice calculator de timp trebuie să afișeze ceva, poate apela doar metoda „UpdateUI” și trece șirul care va fi afișat. Acesta este un design bun. Clasa de calculatoare știe cât mai puțin despre UI. Trebuie doar să poată trece un șir pentru afișare. Acesta ar putea fi un FireMonkey, VCL sau poate chiar o aplicație pentru consolă.

Formularul principal conține, de asemenea, referința la clasa „ICalculator” ca câmp privat. Referința reală a unității „uCalculator” se află în clauza „implementării” utilizează formularul, deci aceasta este cât mai curată posibil. Codul din formularul principal trebuie să știe doar despre metodele interfeței „ICalculator” pentru a comunica cu logica aplicației.

Până în prezent, acest lucru acoperă aproximativ codul C ++ pe care David îl discută în postarea de pe blogul „Învață să programezi cu C ++ Builder: # 3, Design, Architecture și UI”.

Următoarele două episoade intră în funcționarea interioară a C ++ și Object Pascal face lucrurile diferit. Scopul meu a fost să imit în Delphi codul din C ++. Nu există niciun concept de „indicatori inteligenți” în Object Pascal. Există constructori și destructori pe care trebuie să îi apelați pentru a instanția obiectul și pentru al elibera.

De asemenea, nu există o bibliotecă „boost” în Delphi și nu există tipuri opționale care să ofere semantică nulă atât pentru tipurile simple, cât și pentru cele de obiecte. Object Pascal tratează tipurile încorporate diferit de C ++. Tipurile „nulabile” ale Object Pascal sunt planificate pentru viitor - în conformitate cu foaia de parcurs oficială RAD Studio - dar încă nu există. Pentru a modela într-o oarecare măsură tipul „boost optional”, există un proiect „uOptionals” în proiectul Delphi care folosește un tip generic „TOptional” pentru a modela numere întregi opționale și duble opționale pe care le folosește clasa „TCalculator” C ++.

Este foarte primitiv, dar într-o oarecare măsură imită C ++ stimulează semantica „opțională”.

Un alt tip interesant în implementare este clasa polimorfă de „operator” care efectuează o operație pe două valori duble și returnează rezultatul ca dublu. De asemenea, are funcția „Nume” care este utilizată pentru a afișa simbolul unei operații date.

În Object Pascal putem defini doar o clasă cu metode abstracte virtuale care acționează ca un plan pentru clase specializate care oferă implementări pentru metode abstracte moștenite. Există, de asemenea, o funcție globală din fabrică care returnează tipul corect de instanță compatibil „TOperator”.

Restul codului proiectului este aproape identic cu versiunea simplă de calculator C ++ disponibilă de la GitHub. Codul sursă final al proiectului „Delphi Super Calculator” poate fi descărcat de pe Amazon S3

Asta este! Sper că ți-a plăcut la fel de mult ca și mine seria „Învață să programezi cu Delphi”.

Este timpul pentru noi provocări. În zilele următoare voi face două seminarii web globale la care sunteți invitați cu toții. Vă puteți înregistra mai jos:

  • 14 decembrie: Dezvoltare Appx pentru Magazin Windows 10
  • 20 decembrie: migrarea la serverul RAD

Reduceți timpul de dezvoltare și ajungeți mai rapid pe piață cu RAD Studio, Delphi sau C ++ Builder.
Proiecta. Cod. Compila. Implementați.
Începeți actualizarea de încercare gratuită astăzi