Objektorienteeritud programmeerimine (OOP): mõiste, omadused ja näited
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.
Omadused
Objektipõhise programmeerimise põhiidee on, et kõik on objekt. Objektid võivad aga olla erinevat tüüpi:
- Muutujad võivad sisaldada erinevat tüüpi teavet (või andmeid), mida programmeerimiskeel toetab. Näitena võib tuua täisarvu andmetüübi ja loetelude andmestruktuuri. Muutujad on idee, mis on juba olemas protseduurilistes programmeerimiskeeltes. Objektipõhises programmeerimises nimetatakse muutujaid peamiselt atribuutideks.
- Protseduurid (tuntud ka kui funktsioonid, meetodid või rutiinid) on nimekiri juhistest, mis ütlevad arvutile, et ta võtab sisendit, teeb arvutusi või muudab andmeid ning tagastab kasutajale väljundi. Protseduurid on samuti idee, mis on juba olemas protseduurilistes programmeerimiskeeltes. Objektipõhises programmeerimises on protseduurid peamiselt tuntud kui meetodid.
- Klassid on erinevate muutujate ja protseduuride kogum. Klassid räägivad tavaliselt omavahel, et teha muudatusi andmetes, et töötada kasutaja soovitud viisil.
Objektid on termin, mida kasutatakse klasside instantside tähistamiseks.
Näited
Allpool toodud näidetes loome klassi nimega Human
. See klass sisaldab atribuute name
(inimese nimi) ja friend
(sõbra nimi). Iga meetod klassis Human
sisaldab käskude nimekirja, mis kasutab nii atribuute name kui
ka friend
.
Python
See kood on Pythonis.
Java
See kood on Java keeles.
Inimese klass
Meetod ülalpool oleva inimklassiga rääkimiseks
Kriitika
Kuigi objektorienteeritud programmeerimine on populaarne, on palju inimesi, kes arvavad, et see on halb ja kritiseerivad seda.
- Luca Cardelli kirjutas artikli pealkirjaga "Bad Engineering Properties of Object-Oriented Languages".
- Richard Stallman kirjutas 1995. aastal: "OOP-i lisamine Emacs'ile ei ole ilmselge edasiminek; ma kasutasin OOP-i, kui töötasin Lisp Machine'i aknasüsteemidega, ja ma ei nõustu tavalise seisukohaga, et see on parem viis programmeerimiseks."
- Potoki jt. uuringust selgub, et OOP ja protseduuriliste lähenemisviiside vahel on väga väike erinevus tootlikkuses.
- Christopher J. Date ütles, et OOP-i võrdlemine teiste asjadega, eriti see, kuidas OOP ja teine asi on omavahel seotud, on keeruline, sest inimesed ei ole OOP-i tähenduse osas ühel meelel.
- Alexander Stepanov pakkus välja, et OOP annab vaatenurga, mis on matemaatiliselt piiratud, ja nimetas seda "peaaegu sama palju pettuseks kui tehisintellekt".
- Paul Graham, edukas internetimüüja ja programmeerija, on väitnud, et OOP eesmärk on toimida karjatamismehhanismina, mis hoiab keskmisi programmeerijaid keskmistes organisatsioonides "liiga palju kahju tegemast". See pidurdab ka kiiremaid, paremaid programmeerijaid, kes teavad, kuidas teha asju võimsamalt ja kompaktsemalt. [1]
Küsimused ja vastused
K: Mis on objektorienteeritud programmeerimine?
V: Objektipõhine programmeerimine on viis kirjutada arvutiprogramme, kasutades "objekte" andmete ja meetodite tähistamiseks.
K: Kuidas erineb objektorienteeritud programmeerimine protseduurilisest programmeerimisest?
V: Protseduurilise programmeerimise puhul on arvutiprogrammid arvutile antud juhiste nimekiri, mis ütleb talle, et ta teeks teatavaid asju teatud viisil. Objektorienteeritud programmeerimisel kasutavad arvutiprogrammid objekte, mis räägivad omavahel, et muuta nendes objektides olevaid andmeid ja töötada kasutaja soovitud viisil.
K: Kuidas on objektorienteeritud programmeerimisest kasu arendajatele?
V: Objektipõhine programmeerimine võimaldab koodi hõlpsasti taaskasutada teistes programmiosades või isegi teiste inimeste poolt.
K: Mille poolest on Pythoni programmeerimiskeel tuntud?
V: Python võimaldab kirjutada arvutiprogramme nii objektorienteeritud kui ka protseduurilises programmeerimises.
K: Kas te oskate tuua näiteid programmeerimiskeelte kohta, mis võimaldavad kirjutada arvutiprogramme objektorienteeritud programmeerimises?
V: Programmeerimiskeeled, mis võimaldavad kirjutada arvutiprogramme objektorienteeritud programmeerimises, on näiteks C++, Java, Ruby, Perl, Emarald, Sapphire, PHP, Python, C# jne.
K: Mis on objektid objektorienteeritud programmeerimises?
V: Objektid on objektorienteeritud programmeerimises üksused, mis sisaldavad andmeid ja meetodeid.
K: Kuidas objektid objektorienteeritud programmeerimises töötavad?
V: Objektid suhtlevad omavahel, et muuta nendes objektides olevaid andmeid ja töötada kasutaja soovitud viisil.