Kaj je objektno usmerjeno programiranje

Strukturirano programiranje

Če si kdaj napisal(-a) in uporabil(-a) lastno funkcijo, potem si programiral(-a) v slogu programiranja, ki ga imenujemo strukturirano programiranje (ang. structured programming) ali postopkovno programiranje (ang. procedural programming). Cilj strukturiranega programiranja je napisati jasno in učinkovito programsko kodo tako, da problem razbijemo na zaporedje manjših problemov. Vsakega od teh manjših problemov se lotimo tako, da v obliki podprograma (ang. procedure, subroutine) ali funkcije (ang. function) napišemo postopek, ki rešuje ta podproblem.

Pri strukturiranem programiranju podatke običajno shranimo v programski jezik vgrajene osnovne podatkovne strukture – števila, nize, tabele itd. – v katerih hranimo podatke, potem pa jih posredujemo funkcijam, ki delujejo nad temi podatki. Pri stukturiranem programiranju se torej osredotočimo na sam proces, ki mu posredujemo podatke, potrebne za ta proces. Podatki so načeloma neodvisni od procesa in le od programerja je na primer odvisno, ali bo v postopku med sabo zmnožil dve spremenljivki s števili (kar je smiselno, če števili predstavljata na primer dolžini in ne, če števili predstavljata število prebivalcev v dveh mestih).

Objektno usmerjeno programiranje

Pri objektno usmerjenem programiranju (ang. object-oriented programming – OOP) pa izhajamo iz samih podatkov za katere določimo postopke, ki jih lahko nad temi podatki izvajamo. Tako so podatki in funkcije, ki delujejo nad temi podatki, združeni v samostojno enoto oziroma entiteto, ki ji rečemo objekt (ang. object). Namesto, da bi funkcijam posredovali podatke, naložimo podatke, s katerimi želimo delati, v objekt ter nato pokličemo funkcije objekta, ki na podlagi podatkov objekta ustvarijo želeni rezultat.

Poglejmo enostaven primer. Denimo, da imamo podatka o dolžini stranic pravokotnika. Pri »navadnem« programiranju bi ta dva podatka shranili v dve spremenljivki. V kodi med spremenljivkama ni nobene povezave, je le v programerjevi glavi. Ko želimo izračunati ploščino tega pravokotnika, napišemo funkcijo, ki sprejme dva parametra (dolžini stranic) in vrne ploščino.

Pri objektno usmerjenem programiranju pa bi ustvarili razred Pravokotnik. Ta bi omogočal tako hranjenje podatkov o dolžini stranic določenega pravokotnika, kot tudi vseboval funkcijo, ki pove ploščino tega pravokotnika. Podatka sta sedaj povezana, saj sta del istega objekta. Prav tako funkcija, ki računa ploščino, »ve«, da podatka predstavljata dolžini stranic.


Objekti, ki jih ustvarimo, pogosto odražajo entitete v resničnem svetu. Na primer, če bi želeli napisati programsko kodo za forum na spletni strani, bi zelo verjetno ustvarili objekt Oseba, ki bi vseboval vse informacije o nekem članu foruma (na primer ime, uporabniško ime, e-poštni naslov, geslo itd.), kot tudi funkcije, ki bi delovale s temi podatki ali nad temi podatki (na primer registracija, prijava, odjava, prepoved itd.).

Razlike med strukturiranim in objektno usmerjenim programiranjem

Z objektno usmerjenim programiranjem dobimo možnost ustvarjanja novih podatkovnih tipov oziroma podatkovnih struktur. S tem lahko predpišemo, kaj smemo z določenimi podatki početi. Za podatkovne tipe, ki so vgrajeni v jezik, je poskrbljeno (dveh nizov ne moremo zmnožiti), a načeloma ne dovolj.

Recimo, da imamo podatek o tem, koliko sporočil je v forumu objavil uporabnik. Dobro bi bilo, če bi ta podatek imeli shranjen v podatkovnem tipu, ki ne bi dovolil, da dva tovrstna podatka med sabo zmnožimo!