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.

Autorius: Leandro Alegsa

Į 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.

klasė Human(object): def __init__(self, name, friend=None): self. name = name self. friend = friend def say_name(self): print("Mano vardas yra "+self. name) def say_goodnight(self): if self. friend is None: print("Labos nakties niekam.") else: print("Labos nakties "+self. friend. Sukurkite naują žmogaus objektą vardu stephen, kurio vardas "Stephen" stephen = Human("Stephen") # Sukurkite naują žmogaus objektą vardu joe, kurio vardas "Joe", o draugas - stephen joe = Human("Joe", stephen) stephen. say_name() # Parodo "Mano vardas Stephen" stephen. say_goodnight() # Parodo "Labos nakties niekam" joe. say_name() # Parodo "Mano vardas Joe" joe. say_goodnight() # Parodo "Labos nakties Stephen

Java

Šis kodas parašytas "Java" kalba.

Žmogaus klasė

class Human { private String name = "unnamed"; // šio žmogaus vardas private Human friend = null; // žmogaus draugas // Šis metodas sukuria naują žmogaus objektą, kai jam suteikiamas vardas ir draugas public Human(String name, Human friend) { this. name = name; this. friend = friend; }      // Šis metodas taip pat sukuria naują Žmogaus objektą, kai pateikiamas tik vardas public Human(String name) { this. name = name; this. friend = null; }      // Šiuo metodu sukuriamas naujas žmogaus objektas, kai nepateikiamas nei vardas, nei draugas public Human() { this. name = "be vardo"; this. friend = null; } public void sayName() { System. out. println("Mano vardas yra " + this. name); } public void sayGoodnight() { if (friend == null) { System. out. println("Labos nakties, niekas."); } else { System. out. println("Labos nakties " + friend. name); }     } }

Bendravimo su aukščiau esančia "Human" klase metodas

class Main { public static void main(String[] args) { // Sukurkite naują žmogaus objektą stephen, kurio vardas "Stephen" Žmogus stephen = new Human("Stephen"); // Sukurkite naują žmogaus objektą joe, kurio vardas "Joe", o stephen - draugas Žmogus joe = new Human("Joe", stephen); stephen. sayName(); // Parodo "Mano vardas Stephen" stephen. sayGoodnight(); // Parodo "Labos nakties, niekas." joe. sayName(); // Parodo "Mano vardas Joe" joe. sayGoodnight(); // Parodo "Labos nakties, Stephen" } }

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
AlegsaOnline.com - 2020 / 2025 - License CC3