Objektinis programavimas (OOP): kas tai? Apibrėžimas ir pagrindai
Sužinokite objektinio programavimo (OOP) esmę, principais, privalumais ir praktiniais pavyzdžiais — aiškiai, suprantamai ir pritaikoma įvairioms kalboms.
Į 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ą.
Menuo ir struktūriniai sprendimai
- 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ą.
Funkcijos
Pagrindinė į objektus orientuoto programavimo idėja yra ta, kad viskas yra objektas. Tačiau objektas gali būti įvairių tipų:
- Kintamuosiuose gali būti saugoma įvairių tipų informacija (arba duomenys), kurią palaiko programavimo kalba. Pavyzdžiui, sveikųjų skaičių duomenų tipas ir sąrašų duomenų struktūra. Kintamieji - tai idėja, kuri jau žinoma iš procedūrinių programavimo kalbų. Objektiniame programavime kintamieji dažniausiai vadinami atributais.
- Procedūros (dar vadinamos funkcijomis, metodais arba procedūromis) - tai instrukcijų, kuriomis kompiuteriui nurodoma priimti įvestį, atlikti tam tikrus skaičiavimus arba pakeisti duomenis ir grąžinti išvestį naudotojui, sąrašas. Procedūros - tai taip pat idėja, kuri jau žinoma iš procedūrinių programavimo kalbų. Objektiniame programavime procedūros dažniausiai vadinamos metodais.
- Klasės - tai įvairių kintamųjų ir procedūrų rinkinys. Klasės paprastai bendrauja tarpusavyje ir keičia duomenis, kad jie veiktų taip, kaip nori naudotojas.
Objektai - tai terminas, vartojamas klasių egzemplioriams apibūdinti.
Pavyzdžiai
Toliau pateiktuose pavyzdžiuose sukursime klasę Human. Šią klasę sudaro atributai name (žmogaus vardas) ir friend (draugo vardas). Kiekviename klasės Žmogus metode yra nurodymų sąrašas, kuriame naudojami vardo ir draugo atributai.
Python
Šis kodas parašytas "Python" kalba.
Java
Šis kodas parašytas "Java" kalba.
Žmogaus klasė
Bendravimo su aukščiau esančia "Human" klase metodas
Kritika
Nors į objektus orientuotas programavimas yra populiarus, tačiau yra daug žmonių, kurie mano, kad jis yra blogas, ir jį kritikuoja.
- Luca Cardelli parašė straipsnį "Blogos inžinerinės objektinių kalbų savybės".
- 1995 m. Richardas Stallmanas rašė: "OOP įtraukimas į "Emacs" nėra aiškus patobulinimas; aš naudojau OOP dirbdamas su "Lisp Machine" langų sistemomis ir nesutinku su įprasta nuomone, kad tai yra geresnis programavimo būdas."
- Potok ir kt. atliktame tyrime teigiama, kad OOP ir procedūrinių metodų produktyvumas skiriasi labai nežymiai.
- Christopheris J. Date'as sakė, kad OOP lyginti su kitais dalykais, ypač tai, kaip OOP ir kitas dalykas yra susiję, yra sudėtinga, nes žmonės nesutaria dėl OOP reikšmės.
- Aleksandras Stepanovas pasiūlė, kad OOP suteikia požiūrį, kuris yra ribotas, kiek tai susiję su matematika, ir pavadino jį "beveik tokia pat apgaulė kaip ir dirbtinis intelektas".
- Paulas Grahamas, sėkmingas interneto pardavėjas ir programuotojas, teigė, kad OOP paskirtis - veikti kaip bandos mechanizmas, neleidžiantis vidutiniams programuotojams vidutinėse organizacijose "padaryti per daug žalos". Tai taip pat stabdo greitesnius, geresnius programuotojus, kurie žino, kaip viską atlikti galingiau ir kompaktiškiau. [1]
Klausimai ir atsakymai
K: Kas yra į objektus orientuotas programavimas?
A: Į objektus orientuotas programavimas - tai būdas rašyti kompiuterių programas, naudojant "objektus" duomenims ir metodams žymėti.
K: Kuo objektinis programavimas skiriasi nuo procedūrinio programavimo?
A: Procedūrinio programavimo atveju kompiuterio programos yra instrukcijų kompiuteriui sąrašas, kuriame nurodoma atlikti tam tikrus veiksmus tam tikru būdu. Objektinio programavimo atveju kompiuterių programose naudojami objektai, kurie bendrauja tarpusavyje, kad pakeistų tų objektų duomenis ir veiktų taip, kaip nori naudotojas.
Klausimas: Kuo objektinis programavimas naudingas programuotojams?
A: Objektinis programavimas leidžia kodą lengvai pakartotinai panaudoti kitose programos dalyse ar net kitų žmonių.
K: Kuo žinoma Python programavimo kalba?
A: Python leidžia rašyti kompiuterių programas ir objektinio, ir procedūrinio programavimo būdu.
Klausimas: Ar galite pateikti programavimo kalbų, leidžiančių rašyti kompiuterių programas objektinio programavimo būdu, pavyzdžių?
A: Programavimo kalbos, kuriomis galima rašyti kompiuterių programas objektinio programavimo būdu, yra šios: C++, Java, Ruby, Perl, Emarald, Sapphire, PHP, Python, C# ir kt.
K: Kas yra objektai objektiniame programavime?
A: Objektai - tai objektinio programavimo esybės, kuriose yra duomenų ir metodų.
K: Kaip objektai veikia objektiniame programavime?
A: Objektai sąveikauja tarpusavyje, kad pakeistų tuose objektuose esančius duomenis ir veiktų taip, kaip nori naudotojas.
Ieškoti