Arhive etichetă: OOP

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ă.