Į objektus orientuotas programavimas (OOP) — tai kompiuterių programų rašymo paradigma, kurioje pagrindinė sąvoka yra objektų". Šioje paradigmoje tiek duomenys, tiek metodai (funkcijos) yra susieti su objektais, o programos logika kuriama kaip objektų tarpusavio sąveika. Tradiciškai programos galėjo būti rašomos kaip seka procedūrų ir instrukcijų (procedūrinis programavimas), tačiau OOP leidžia modeliuoti realaus pasaulio objektus, jų savybes ir elgesį taip, kad kūrėjui būtų lengviau kurti, prižiūrėti ir pakartotinai naudoti kodą.

Dauguma programavimo kalbų palaiko įvairius programavimo stilius arba jų mišinius. Pavyzdžiui, "Python" leidžia rašyti tiek objektinio, tiek procedūrinio stiliaus programas. Yra daug kalbų, kurios palaiko OOP: kai kurios žinomos — C++, Java, Ruby, Perl, Emarald, Sapphire, PHP, Python ir kt. Kiekviena kalba turi savo ypatybes ir sintaksę, bet bendrieji OOP principai išlieka panašūs.

Pagrindiniai OOP principai

  • Encapsuliacija (įdarbinimas) — duomenys (laukai) ir su jais susiję metodai talpinami į objektą arba klasę. Tai leidžia paslėpti vidinę objekto būseną ir valdyti prieigą per viešus metodus (get/set).
  • Abstrakcija — sudėtingų sistemų supaprastinimas modeliuojant tik svarbiausias savybes ir elgesį. Klasės apibrėžia, kas yra reikšminga konkrečiam objektui, o smulkesnės detalės slepiamos.
  • Paveldėjimas — leidžia kurti naujas klases remiantis esamomis, paveldint laukus ir metodus. Tai skatina kodo pakartotinį naudojimą ir loginių ryšių tarp tipų modeliavimą.
  • Polimorfizmas — gebėjimas naudoti bendrą sąsają skirtingų tipų objektams. Tai reiškia, kad vieną metodą galima pritaikyti įvairiems objektams, o elgesys priklausys nuo konkretaus objekto tipo.

Klasės, objektai ir jų komponentai

  • Klasė — šablonas arba brėžinys, apibrėžiantis laukus (savybes) ir metodus (elgesį) tam tikro tipo objektams.
  • Objektas — klasės egzempliorius, turintis konkrečias reikšmes laukams. Kiekvienas objektas gali turėti savą būseną ir kviečiamus metodus.
  • Kontruktorius — specialus metodas, vykdomas kuriant objektą, skirtas inicijuoti pradinius laukų dydžius.
  • Destruktorius — (ne visuomet privalomas) metodas, kuris vykdomas, kai objektas pašalinamas arba išlaisvinamas.
  • Prieigos modifikatoriai — (pvz., public, private, protected) reguliuoja, kas gali pasiekti klasės laukus ir metodus, taip stiprinant encapsuliaciją.
  • Kompozicija — objektai gali turėti kitų objektų kaip savo laukus (santykis „turi“). Dažnai saugesnis ir lankstesnis būdas nei per didelis paveldėjimas.
  • Paveldėjimo naudojimas — tinka, kai yra aiškus „yra“ ryšys tarp tipų (pvz., Automobilis yra Transporto priemonė). Reikėtų vengti pernelyg gilios arba netinkamos paveldėjimo grandinės.

Kodavimo pavyzdys (supaprastintas pseudokodas)

Štai labai paprastas pavyzdys, iliustruojantis klasę ir objektą (pseudokodas):

 class Zmogus:     laukelis vardas     laukelis amzius      funkcija __init__(v, a):         vardas = v         amzius = a      funkcija sveikintis():         print("Sveikas, aš esu " + vardas + " ir man " + amzius + " metų.")  zmogus1 = Zmogus("Jonas", 30) zmogus1.sveikintis() 

Privalumai ir trūkumai

  • Privalumai: geresnė kodo organizacija, lengviau palaikyti ir išplėsti programas, skatina kodo pakartotinumą, aiškesnis modeliavimas realaus pasaulio objektų.
  • Trūkumai: kartais sudėtingesnė struktūra ir didesnis pradinės architektūros planavimo poreikis; netinkamai naudojant paveldėjimą gali atsirasti pernelyg sujungti (angl. tightly coupled) sprendimai.

Kada verta naudoti OOP

OOP ypač naudinga didesnėms programoms arba projektams, kuriuose reikia aiškios struktūros, pakartotinio komponentų naudojimo ir lengvo plėtimo. Mažoms skriptinėms užduotims arba vienkartiniams įrankiams kartais pakanka procedūrinio arba funkcinio stiliaus, priklausomai nuo problemos pobūdžio.

Apibendrinimas

Objektinis programavimas yra galinga paradigma, padedanti modeliuoti sudėtingas sistemas kaip sujungtų objektų visumą. Supratus pagrindinius principus — encapsuliaciją, abstrakciją, paveldėjimą ir polimorfizmą — galima kurti aiškesnį, prižiūrimą ir pakartotinai naudojamą kodą. Renkantis programavimo kalbą verta atsižvelgti į projekto reikalavimus, komandos patirtį ir kalbos OOP palaikymą.