Programarea orientată pe obiecte (OOP) este un model de limbaj de programare care se concentrează pe utilizarea obiectelor în loc de acțiuni pentru a îndeplini sarcini. Aceasta implică adoptarea unei abordări care este mai atentă la date și mai puțin preocupată de logică, ceea ce este mai frecvent cazul în alte paradigme de programare. Viziunea asupra obiectelor și acțiunilor este inversă a modului în care este în alte limbi, iar accentul se pune pe obiectele în sine, mai degrabă decât pe execuția sarcinilor care folosesc obiectele. La fel, structura nu ia în considerare modul de utilizare a logicii, ci definirea datelor care vor fi utilizate în programare.
Proiectarea software-ului de calculator cu programare orientată pe obiect începe cu definirea obiectelor care urmează să fie manipulate de program. Programatorul va începe apoi să identifice relația dintre fiecare obiect, un proces denumit de obicei modelarea datelor. În esență, programatorul caută să plaseze obiectele într-o clasificare, ajutând astfel la definirea datelor care fac parte din moștenirea adusă sarcinii de către fiecare obiect. De fapt, procesul de definire a acestor clase și subclase de date se numește în mod normal moștenire.
OOP ajută, de asemenea, la sortarea obiectelor într-o manieră care permite polimorfismul să aibă loc. Adică, diferite obiecte vor putea răspunde la un mesaj comun, dar fiecare într-un mod diferit, care este unic pentru acel obiect. În același timp, acest tip de programare permite încapsularea unui obiect, ascunzând sau protejând efectiv datele asociate obiectului dintr-o vizualizare ușoară fără acces de securitate.
Unul dintre avantajele programării orientate pe obiect este că procesul folosește bine modularitatea, ceea ce înseamnă că obiectele și sarcinile sunt grupate într-un mod în care fiecare modul poate fi luat în considerare independent. Acest lucru poate fi de mare ajutor atunci când faceți îmbunătățiri unui program, deoarece modularitatea face posibilă abordarea sarcinii de a face alternanțe la configurarea unei părți a programării fără a afecta structura și funcția celorlalte module.