Conform celebrei ecuatii a lui Niklaus Wirth:
algoritmi + structuri de date = programe
un program este format din doua parti total separate: un ansamblu de
functii si un ansamblu de date asupra carora actioneaza functiile. Functiile
sunt privite ca si cutii negre, fiecare avand de rezolvat o anumita sarcina
(de facut anumite prelucrari). Aceasta modalitate de programare se numeste
programare dirijata de prelucrari. Evolutia calculatoarelor si a problemelor
de programare a facut ca in aproximativ zece ani programarea dirijata de
prelucrari sa devina ineficienta. Astfe este posibil ca o schimbare relativ minora in structura datelor sa provoace o dezorganizare majora a functiilor.
Inconvenientele programarii dirijate de prelucrari sunt eliminate
prin incapsularea datelor si a procedurilor care le manipuleaza intr-o
singura entitate numita obiect.
Programatorul nu este obligat sa cunoasca reprezentarea
fizica a datelor si procedurilor utilizate, motiv pentru care poate trata
obiectul ca pe o cutie neagra cu un comportament bine precizat.
In acest context, programarea devine dirijata de date, si nu de prelucrarile care trebuie realizate.
Obiectul este o instantiere (o instanta) a clasei.
In acelasi program se pot folosi mai multe obiecte apartinand aceleeasi
clase, sau unor clase diferite.
 Fiecare obiect se caracterizeaza prin stare
si comportament. Starea obiectului depinde de datele pe care acesta le
contine, in timp ce comportamentul este dat de metodele (functiile) clasei respective.
Utilizarea consecventa a obiectelor confera programarii urmatoarele calitati:
Abstractizarea datelor. Nu este nevoie de a cunoaste implementarea si reprezentarea interna a unui obiect pentru a-i adresa mesaje (a-l prelucra). Este posibila supraincarcarea metodelor. De exemplu, este foarte comod de a desemna printr-un simbol unic, +, adunarea intregilor, concatenarea sirurilor de caractere, reuniunea multimilor, suma vectorilor, matricilor etc.
Modularitate. Structura programului este determinata in mare masura de obiectele utilizate. Schimbarea definitiilor unor obiecte se poate face cu un minim de implicatii asupra celorlalte obiecte utilizate in program.
Flexibilitate. Un obiect poate fi foarte usor introdus intr-o biblioteca pentru a fi utilizat ca atare, sau pentru a construi noi tipuri prin mostenire, adica prin specializare (particularizare) si compunere cu obiecte existente.
Claritate. Incapsularea, posibilitatea de supraincarcare si modularitatea intaresc claritatea programelor.