învață

Bine ați venit la ultimul episod din seria „Învățați să programați cu Delphi Community Edition”. În primele patru episoade am tratat „Introducere și instalare” a Delphi Community Edition gratuită, apoi am trecut 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”.

Î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. Cu toate acestea, acest lucru ar adăuga un pic prea multă complexitate pentru o serie inițială, așa că aș prefera să rămân la scrierea unei clase separate cu logica calculatorului.

În primul rând, am adăugat două noi tipuri de date la unitatea uCalculator. Prima este o enumerare, ca listă de valori valabile pentru „operațiunea” calculatorului. A doua este clasa reală cu logica definită în câteva metode și informațiile de stare, reprezentate de câteva câmpuri, ca orice clasă bună care urmează abordare orientată obiect:

Câmpurile sunt folosite pentru a stoca șirul de intrare curent pe care îl tastează utilizatorul, totalul până acum (de la operațiile anterioare), operațiunea solicitată (care urmează să fie aplicată următoarei perechi de valori) și un steag boolean care indică dacă afișajul trebuie să afișeze valoarea de intrare sau cel mai recent total (ceva ce vom face după ultima operație, dar înainte ca intrarea să înceapă din nou).

Metodele au roluri diferite. Cele două operații de adăugare, NewOperator și CalcTotal sunt implicate direct atunci când diferitele butoane sunt apăsate în interfața de utilizare. AddDigit ar trece doar cifra butonului care a fost apăsat, iar NewOperation ar face același lucru pentru operație, declanșând calculul valorii curente de intrare. Iată codul lor:

Metoda CalcTotal este cea mai importantă, declanșată prin apăsarea butonului = al oricăreia dintre operațiuni. Observați modul în care acest cod folosește clasa TCalculator pe care am scris-o la pasul 3 al seriei. De asemenea, resetează starea afișajului, astfel încât metoda DisplayValue poate fi înclinată într-un fel sau altul:

Ultimul pas este să vă asigurați că formularul utilizează clasa TCalcStatus și butoanele apelează metodele corespunzătoare. Dar mai întâi trebuie să creăm o instanță reală a acestui obiect. Putem adăuga obiectul la clasa formularului, în secțiunea câmpurilor private și îl putem inițializa/elibera în două gestionare de evenimente specifice, OnCreate și OnDestroy. Aceasta este definiția completă a clasei de formular, cu toate componentele și gestionarele de evenimente, plus un câmp personalizat și o metodă personalizată. Un formular este doar o clasă, deci poate fi extins ca orice altă clasă din codul dvs.:

Pentru cele 4 operațiuni, codul este similar cu primul manipulator de evenimente OnClick de mai jos. Toate operațiunile sunt similare, dar gestionarele de evenimente sunt separate, la fel și separatorul zecimal și semnul =. Pentru tastele numerice, în schimb, am creat un singur handler de evenimente, conectat la butonul All (pur și simplu selectând metoda pentru handlerul de evenimente din lista derulantă Inspector de obiecte de lângă OnClick. În acest fel codul este partajat și se bazează pe parametrul „Expeditor”, un obiect care indică ce butoane au fost apăsate, pentru a accesa textul butonului curent (numărul care a fost apăsat). Iată codul:

Observați că aproape fiecare dintre gestionările evenimentului include un apel către metoda Reîmprospătare pentru a actualiza interfața de utilizare. În mod ideal, cererea de reîmprospătare a interfeței de utilizare ar veni direct din logica de afaceri printr-o interfață, o viitoare extensie a acestui proiect.

Cu tot acest cod scris, acum putem rula aplicația finală și o putem testa. Știu că are câteva ciudățenii în care am lăsat pentru a evita complicarea excesivă a codului, dar majoritatea operațiilor de bază funcționează bine. Iată aplicația care rulează:

De dragul acestei serii inițiale de postări pe blog menite să descopere Delphi Community Edition, ne-am concentrat doar pe Windows. Dar această aplicație poate fi recompilată cu ușurință pentru platformele mobile, lucru pe care îl vom concentra pe o postare ulterioară pe blog.

Acesta este deocamdată sfârșitul seriei și iată linkurile către postările anterioare. În curând vor fi adăugate mai multe.

Partea 5: Punerea calculatorului împreună (această postare)