De ce este esențială programarea condusă prin teste (aka Test Driven Development / TDD)

În majoritatea cazurilor, programatorii sunt prea leneși și sar peste teste, confortându-se că sursele lor deja sunt funcționale și nu mai scriu testele unitare de bază.

Scopul testelor este de a împiedica în viitoarele schimbări să intervină probleme critice.

Scrierea testelor după ce codul a fost scris este o altă problemă pentru că testează doar cod și nu funcționalitatea.

Scopul scrierii testului înaintea codului propriu-zis este să știm precis că obținem funcționalitatea dorită și se face constructiv pas cu pas, eliminând astfel posibilitatea unui eșec grav când aplicația este utilizată public.

Majoritatea dau vina că prin această metodă durează mult mai mult să dezvolți o componentă, mai ales o aplicație.

Aceasta este o minciună spusă total cu nerușinare!

Scrierea unei aplicații sau componente folosind metodologia TDD se face mai repede cu garantarea funcționalității.

Un bun programator care a exersat continuu, ajunge în a scrie cod în acest mod la fel de rapid și mult mai cursiv. Această persoană va ști pe termen lung mult mai bine tot ce a așezat în acele surse. În momentele în care se vor adăuga noi componente aplicației, se va ști precis că ceea ce deja există funcționează în continuare fără probleme.

Type hinting și tipul valorii întoarse

Din PHP 7.0.0, limbajul ne lasă să fim mult mai specifici în ce vor accepta și ce vor întoarce funcțiile, respectiv metodele din obiecte.

Poți indica ce tip de argument are nevoie funcția (type hinting – indiciu de tip) și ce tip de rezultat vor întoarce (return type – tipul întoarcerii).

Iată un exemplu:

[php]

declare(strict_types=1);

function adaugaNumere (int $a, int $b, boolean $afiseazaSuma): int
{
$suma = $a + $b;
if ($afiseazaSuma) {
echo $suma;
}
return $suma;
}

adaugaNumere(1, 2, true); // succes
adaugaNumere(1, "2", true); // eroare, am declarat strict_types activ
adaugaNumere(1, "string", true); // eroare, indiferent de valoarea lui stric_types

[/php]

Această funcție primește două argumente numere întregi (integer) și o valoare booleană. Va întoarce un număr întreg.

Declarația lui strict_types (tipuri stricte) se face întotdeauna la începutul fișierului pentru a informa compilatorul intenția de a utiliza acest mod.

Encapsulare și delegare

Encapsularea:

Obiectele își văd de propria lor treabă și de ceea ce au de făcut în spatele ușilor închise. Ele oferă interfața prin care orice cerere (Request) și răspuns (Response) pot fi trecute. Orice date nu trebuie expuse și părțile murdare ale implementării, sunt ascunse în spatele acestor uși.

Un exemplu de delegare aplicat ar fi MVC-ul:

Controllerul, într-un proiect scris folosind OOP și MVC, este surprinzător de simplu și scurt, el invocând în general obiecte din clasele Model și oferind toate datele procesate unui View responsabil de modul expunerii datelor (HTML, Json, XML etc.). Ideal în Controller vom face invocarea Model-elor necesare doar folosind argumentele din Request și rezultatele vor fi oferite View-ului care ideal nu va procesa absolut nimic, ci doar va fi responsabil de afișare, adică un șablon (template) ce aplică valorile primite.

Conceptul este descris doar minimal, dar în realitate, el fiind aplicat extrem de complicat de menținătorii unora din cele mai populare framework-uri, ironie sau genialitate ce o voi lăsa pentru un articol dedicat acestui subiect.

Paradigma programării orientate pe obiect

Ca multe alte paradigme, programarea orientată pe obiecte, OOP, s-a născut din necesitatea manevrării complexității. Ideea principală este de a împărți întregul sistem în piese cât mai mici, izolate una de cealaltă. Dacă aceste piese mici pot ascunde cât mai multe detalii de implementare, vor deveni ușor de folosit.

O analogie a modului de funcționare al unui automobil poate ajuta înțelegerea principiului mai ușor.

Când conduci o mașină, operezi o intefață: direcția, ambreiajul, accelerația, frâna. Necesarul de cunoștințe de a manevra mașina este limitat de interfață. Această interfață în esență ascunde toate sistemele complexe care fac mașina să funcționeze, cum ar fi motorul acesteia, sistemul electronic, și multe altele. Ca șofer, nu trebuie să te îngrijorezi de acele sisteme complexe.

O idee similară este împărtășită și de OOP. Obiectul ascunde complexitatea funcționalității lui și expune o interfață limitată, ușor de utilizat. Adițional, un obiect poate ascunde anumite parți și preveni modificarea lor directă, un aspect important al OOP.

În aplicații mari și complexe, unde dezastre se pot întâmpla când accesarea directă a proprietăților este posibilă, OOP operează pe ideea că acele proprietăți vor fi ascunse și inaccesibile altor factori în afara obiectului și vor fi accesibile doar prin operații oferite de interfața publică.

Salutare lume!

Bine ai venit pe acest blog.

Sunt un programator, ce a părăsit România în 2014, la vârsta de 31 de ani.

Din simplul motiv că suntem apreciați ca programatori în întreaga lume, mai ales în țările dezvoltate, am ales să ne petrecem viața ca familie acolo unde sistemul funcționează mai bine și perspectivele de educație pentru copii noștri sunt mai bune decât în România. Secundar, să fie o locație de care să ne și bucurăm mai mult — cândva cineva îmi spunea că a ales să trăiască acolo unde se simte într-o vacanță permanentă și astfel serviciul nu a mai fost un stres de atunci.

Partea de renumerație nu a fost importantă în decizie, datorită posibilităților de lucru la distanță, trend care devine tot mai la modă și adoptat de tot mai multe companii și vechi și noi. În prezent, companii din diverse colțuri ale lumii, plătesc oameni la distanță similar cu cei ce preferă încă lucrul în birou, ceea ce duce la o uniformizare a venitului mediu ca programator pe plan global, oferind șansa chiar și în România pentru cei ce nu doresc să o părăsească, să lucreze pe un venit mai adecvat comparativ cu salariile mizere încă oferite de exploatatorii locali — personal, orice e sub 1.200 € după impozite îl consider un salar de sclav în domeniul IT.

Posibilitatea de a lucra de oriunde, e ceea ce mă ține încă a sta zi de zi în fața calculatorului și a-mi cultiva continuu cunoștințele de programare pentru a fi în ritmul cerințelor actuale.