Objektorienteeritud (objektipõhine) programmeerimine (OOP) on tarkvara arendamise paradigma, mis modelleerib programmi väikeste, omavahel suhtlevate üksuste ehk objektide kaudu. Iga objekt sisaldab nii andmeid (atribuutide või väljadena) kui ka meetodeid (funktsioone), mis neid andmeid töötlevad. Traditsiooniliselt kirjutati programmid järjestikuste käskude kogumina (protseduuriline programmeerimine), kuid OOP võimaldab korraldada koodi viisil, mis peegeldab paremini reaalse maailma kontsepte, lihtsustab keerukuse haldamist ja soodustab taaskasutust. OOP muudab ka meeskonnatöö lihtsamaks, sest erinevad osad on selgelt eraldatud ja liidestatud läbi objektide ja nende käitumise.
Enamik programmeerimiskeeli toetab mitmesuguseid stiile — nii protseduurilist kui ka objektorienteeritud lähenemist. Näiteks Python võimaldab kirjutada nii funktsionaalset, protseduurilist kui ka objektorienteeritud koodi. On palju programmeerimiskeeli, mis võimaldavad kirjutada OOP-s. Mõned sellised keeled on näiteks: C++, Java, Ruby, Perl, Emarald, Sapphire, PHP, Python jne.
OOP põhikontseptsioonid
- Klasse ja objektid — klass on mustand (tüüp), millest luuakse objekti (instantsi). Klass kirjeldab atribuute ja meetodeid; objekt on konkreetne selle kirjelduse eksemplar.
- Inkapsuleerimine (pakendamine) — andmed ja sellele ligipääsevad meetodid hoitakse koos, mis vähendab sisemise oleku tahtmatut muutmist ja muudab liidese selgemaks.
- Pärilikkus — uued klassid saavad üle võtta olemasolevate klasside omadusi ja käitumist, mis soodustab koodi korduvkasutust ja hierarhia loomist.
- Polümorfism — võimalus kasutada sama liidest erinevate konkreetsete objektidega; sama meetodinimi võib erinevates klassides erinevalt käituda.
- Abstraktsioon — keerukuse varjamine, eksponeerides ainult olulist liidest ja peites detailsuse, mis ei ole kasutajale vajalik.
Miks kasutada OOP-i?
- Modulaarsus: objektid moodustavad isoleeritud üksusi, mida on lihtne testida ja asendada.
- Taaskasutus: klassid ja komponendid on korduvkasutatavad mitmes projekti osas või teistes projektides.
- Hooldatavus: selge struktuur teeb koodi muutmise ja veaotsingu lihtsamaks.
- Loogiline modelleerimine: OOP muudab lihtsamaks reaalse maailma objektide ja suhete peegeldamise tarkvaras.
Lihtsad näited
Väike näide Pythoni-süntaksis, kus defineerime klassi Isik ja loome objekti:
class Isik: def __init__(self, nimi, vanus): self.nimi = nimi self.vanus = vanus def tervita(self): return f"Tere, mina olen {self.nimi} ja olen {self.vanus} aastat vana." p = Isik("Mari", 30) print(p.tervita()) Sarnane näide Java-s:
public class Isik { private String nimi; private int vanus; public Isik(String nimi, int vanus) { this.nimi = nimi; this.vanus = vanus; } public String tervita() { return "Tere, mina olen " + nimi + " ja olen " + vanus + " aastat vana."; } } Millal OOP ei pruugi olla parim valik
- Väikesed skriptid või ühefunktsioonilised tööriistad, kus OOP võib lisada liigset keerukust.
- Tugevalt funktsionaalse lähenemisega süsteemid, kus immuutsus ja statistiline funktsioonide kooslus on mugavam.
- Reaalaja- või madala taseme tõhususpõhised rakendused võivad vajada protseduurilist või süsteemset lähenemist parema jõudluse nimel.
Kokkuvõte
Objektorienteeritud programmeerimine on võimas meetod keerukate süsteemide modelleerimiseks ja hooldamiseks. Selle põhialused — klassid, objektid, inkapsuleerimine, pärilikkus ja polümorfism — annavad arendajatele tööriistad koodi korrastamiseks, taaskasutamiseks ja laiendamiseks. Kuigi OOP ei ole igas olukorras parim valik, on see laialdaselt kasutatav paljudes tööstusharudes ja programmeerimiskeeltes, mistõttu tasub selle põhialuseid mõista ning osata rakendada sobivatel juhtudel.