Osnovni koncepti objektno usmerjenega programiranja

Objektno usmerjeno programiranje ima štiri osnovne koncepte: ograjevanje ali enkapsulacijo (ang. encapsulation), zakrivanje ali abstrakcijo (ang. abstraction), dedovanje (ang. inheritance) in večobličnost ali polimorfizem (ang. polymorphism). Čeprav se ti koncepti morda zdijo zapleteni, ti bo razumevanje njihovega delovanja pomagalo razumeti osnove objektno usmerjenega programa.

Ograjevanje ali enkapsulacija

Na podoben način kot pilula »ogradi« zdravilo od zunanjega sveta, deluje tudi ograjevanje v objektno usmerjenem programiranju. Pri ograjevanju oblikujemo zaščitno pregrado okoli informacij, ki jih vsebuje objekt, od preostale programske kode.

To storimo tako, da povežemo podatke in metode, ki delujejo nad temi podatki, v eno samo enoto, imenovano razred. Tako zakrijemo zasebne podrobnosti razreda pred zunanjim svetom in izpostavimo samo funkcionalnost, ki je pomembna za povezovanje oziroma komuniciranje razreda z zunanjim svetom. Kadar razred ne dovoli neposrednega dostopa do svojih zasebnih podatkov, pravimo, da je dobro ograjen.

Primer

Recimo, da imamo razred, ki predstavlja osebo. Ta razred lahko vsebuje zasebne podatke razreda, kot je na primer številka zdravstvenega zavarovanja stevilka_zzzs. Ko iz razreda ustvarimo objekt, številka zdravstvenega zavarovanja tega objekta ne sme biti izpostavljena drugim objektom v programu. Z ograjevanjem te lastnosti razreda zunanja koda nima neposrednega dostopa do nje – lastnost tako ostane varna znotraj razreda osebe.


Če je v razredu osebe zapisana metoda, ki preveri ali ima oseba predpisano zdravilo, imenovana predpisano_zdravilo(), lahko ta metoda nato po potrebi dostopa do spremenljivke stevilka_zzzs in preveri ali je zdravnik osebi s to številko zdravstvenega zavarovanja predpisal določeno zdravilo. Zasebni podatki osebe so tako dobro ograjeni v razredu.

Zakrivanje ali abstrakcija

Pogosto je lažje razmišljati in oblikovati program, ko lahko ločimo vmesnik razreda od njegove izvedbe in se osredotočimo samo na vmesnik. To je podobno obravnavanju sistema kot »črne skrinjice«, kjer za uporabo ni pomembno razumeti podrobnosti notranjega delovanja.

Ta proces pri objektno usmerjenem programiranju imenujemo »zakrivanje«, ker zakrijemo podrobnosti izvedbe razreda in predstavimo samo vmesnik, ki je enostaven in omogoča uporabo samo preko javnih metod razreda. Ustrezno uporabljena abstrakcija pomaga izolirati vpliv sprememb programske kode. To pomeni, da bodo spremembe kode, če gre kaj narobe, vplivale samo na podrobnosti izvedbe razreda in ne na zunanjo programsko kodo.

Primer

Predstavljajmo si zvočni predvajalnik kot objekt, ki v notranjosti vsebuje zapleteno logično vezje. Na zunanji strani ima gumbe, ki omogočajo interakcijo z objektom. Ko pritisnemo gumb, ne razmišljamo o tem, kaj se dogaja v notranjosti, ker tega ne vidimo. Čeprav ne vidimo, da zaradi pritiska na gumb logično vezje izpolni določeno funkcijo, logično vezje to funkcijo še vedno izvede.

Zakrivanje skrije podrobnosti pred uporabnikom. Včasih je bila notranjost zvočnega predvajalnika povsem drugačna, glasba pa je bila shranjena na avdio kasetah. Danes je glasba shranjena v datotekah in tudi postopek predvajanja je povsem drugačen. Za uporabnika pa se zaradi zakrivanja ni spremenilo praktično nič. Za predvajanje zvočnih posnetkov mora samo pritisniti gumb .