Objektno orijentirani jezici. Osnove objektno-orijentiranog programiranja

Objektno orijentirano programiranje temelji se na prezentaciji programa u obliku skupa objekata. Svaki objekt pripada klasi, koja zauzvrat zauzima svoje mjesto u naslijeđenoj hijerarhiji. Korištenje OOP-a minimizira suvišne podatke, što poboljšava upravljivost, razumijevanje programa.

Što je OOP

Nastao je kao rezultat razvoja proceduralnog programiranja. Osnova objektno-orijentiranih jezika su sljedeća načela, kao što su:
  • enkapsulacija;
  • nasljeđivanje;
  • polimorfizam.
  • Neka načela koja su prvotno bila utvrđena u prvim OOP-ima doživjela su značajne promjene.
    Primjeri objektno orijentiranih jezika:
  • Pascal. S izdavanjem Delphija 7 na službenoj razini počeo se nazivati ​​Delphi. Glavno područje korištenja Object Pascala je pisanje aplikacijskog softvera.
  • C ++ se široko koristi za razvoj softvera koji je jedan od najpopularnijih jezika. Odnosi se na stvaranje OS-a, aplikacija, upravljačkih programa uređaja, aplikacija, poslužitelja, igara.
  • Java se prenosi u bajtnom kodu, obrađenom od strane Java virtualnog stroja. Prednost ove metode izvršenja je neovisnost operativnog sustava i opreme. Postojeće obitelji: Standardno izdanje, Enterprise Edition, Micro Edition, Card.
  • javascript se koristi kao skriptni jezik za web stranice. Sintaksa u velikoj mjeri podsjeća na C i Java. Primjena je Ecmascripta. Sam Ecmascript se koristi kao osnova za konstruiranje drugih skriptnih jezika, kao što su JScript, ActionScript.
  • Objective-Cbaziran na jeziku C, a sam C kod je jasan kompilatoru Objective-C.
  • Perl - na visokoj razini interpretira se u Microsoftovom dinamičkom jeziku opće namjene. Ima bogate mogućnosti za rad s tekstom, izvorno dizajniran posebno za manipulacije tekstom. Trenutno se koristi u administraciji sustava, razvoju mrežnog programiranja, bioinformatici itd.
  • PHP. Skraćenica je prevedena kao pretprocesor hiperteksta. Koristi se za razvoj web-aplikacija, uključujući poslužiteljski dio. To vam omogućuje stvaranje gui-aplikacija pomoću paketa PHP-GTK, PHP-Qt, WinBinder.
  • Python je jezik opće namjene usmjeren na poboljšanje produktivnosti i čitljivosti kodova. Razvijen je Cython projekt za prevođenje programa napisanih u Pythonu u C kod.
  • Apstrakcija

    Svaka knjiga žanra "Objektno-orijentirano programiranje za lutke" ističe jedno od glavnih načela - apstrakcija. Ideja je podijeliti pojedinosti ili karakteristike provedbe programa na važne i nevažne. Potrebno za velike projekte, omogućuje vam da radite na različitim razinama predstavljanja sustava bez navođenja pojedinosti.


    Sažeti tip podataka prikazan je kao sučelje ili struktura. Omogućuje vam da ne razmišljate o razini detalja provedbe. ATD ne ovisi o drugim dijelovima koda. Dobro poznati aforizam Davida Wheelera svjedoči: svi problemi u računalnoj znanosti mogu se riješiti na različitoj razini apstrakcije.

    Nasljeđivanje

    Objektno orijentirani jezici su dostupninaslijeđeno je jedno od najvažnijih načela.
    Označava da se neka vrsta funkcionalnosti može ponovno koristiti. Klasa koja nasljeđuje svojstva drugog naziva se derivat, potomak ili potklasa. Onaj od kojeg se nasljeđivanje pojavljuje naziva se predak, baza ili superklasa. Odnos prema nasljednicima potomstva stvara posebnu hijerarhiju. Postoji nekoliko vrsta nasljeđivanja:
  • jednostavno;
  • množina.
  • Kada višestruko nasljeđivanje može biti nekoliko djece od jednog pretka, kada je u običnom - samo jedno. To je glavna razlika između tipova. Nasljeđe izgleda ovako: klasa Animal {function draw () {return "just animal"; } funkcija jesti {} {vratiti životinja jede}}} klasa Krava proteže životinjsku {funkciju draw () {Povratak "nešto što izgleda kao krava"}} Vidimo da je klasa krava naslijedila sve metode od klasne životinje. ako radimo Cow.eat (), dobivamo "životinja jede", a nacrtaj () se mijenja. Cow.draw () će vratiti "nešto što izgleda kao krava" i Animal.draw () će vratiti "samo životinja" "


    Inkapsulacija

    Inkapsulacija ograničava pristup drugim komponentama, povezuje podatke s metodama za obradu, a osobni se pristupnik koristi za pakiranje.
    Obično se pojam enkapsulacije i prikrivanja identificira, ali neki jezici razlikuju te pojmove. Drugim riječima, kritična svojstva su zaštićena, a njihova promjena postaje nemoguća. klasa Animal {private $ name; funkcija __construct ($ name) {$ this- & gt; name = $ name; } funkcija getName {} {return $ this-> name; }} Ime je prihvaćeno kao argument konstruktora. Kada se konstruktor koristi u drugim dijelovima koda, ništa ne može promijeniti element naziva. kakovidi, to je naznačeno unutra, za druge dijelove koda nije dostupno.

    Polimorfizam

    Polimorfizam omogućuje da se ime i ime upotrijebe za rješavanje sličnih, ali tehnički različitih zadataka.
    U gornjem primjeru nalazi se tablica. Vidimo klasu CardDesk i klasu GraphicalObject. Oba imaju funkciju zvanu draw (). Ona izvodi različite akcije, iako ima jedno ime. Ad hoc polimorfizam ili posebni polimorfizam koristi:
  • preopterećenje funkcija, metoda;
  • vrste dovođenja.
  • Preopterećenje uključuje korištenje nekoliko funkcija s jednim imenom, kada se izbor odgovarajućeg događa tijekom faze kompilacije. Dovođenje tipova znači pretvaranje vrijednosti jedne vrste vrijednosti u drugu vrstu. Postoji eksplicitna transformacija - funkcija koja prihvaća jedan tip, ali se vraća na drugi, implicitan, izvršava kompajler ili tumač.
    "Jedno sučelje - mnoge implementacije" Bjorn Stroustrup.

    Klasa

    Klasa je vrsta podataka koja se sastoji od jednog skupa polja i metoda.
    Ima unutarnja i vanjska sučelja za upravljanje sadržajem. Prilikom kopiranja preko zadatka, kopirano sučelje, ali ne i podaci. Različiti tipovi međusobno djeluju putem:
  • nasljeđivanja;
  • asocijacije;
  • agregacija. Kada se naslijedi, klase kćeri nasljeđuju sva svojstva roditelja, asocijacija se odnosi na interakciju objekata. Kada objekt jedne klase ulazi u drugi, naziva se agregacija. Ali kada još uvijek ovise jedna o drugoj tijekom života, to je kompozicija. Jedan od glavnihkarakteristike su opseg vidljivosti. Koncept je različito određen od strane različitih zastupnika. Object Pascal opisan je na sljedeći način: ClassName = klasa (SuperClass) privatna {korištenje elemenata ograničeno je samo granicama modula} {ovdje su navedena polja} stroga privatna {pristupna specifikacija postala dostupna s izlaznim Delphi 2007 označava isto kao privatni} zaštićeni {elementi mogu korišteni unutar ClassName ili nasljeđivanje} public {} objavljeni {stavke dostupne su svima, one se prikazuju u Object Inspector} kraju; Ovdje je SuperClass predak iz kojeg se događa nasljeđivanje. Za C ++ kreiranje izgleda ovako: class MyClass: public Parent {public: MyClass (); //konstruktor ~ MyClass (); //destructor protected: private:}; U ovom primjeru, Roditelj je predak, ako ga ima. Specifičnosti privatne, javne, zaštićene označavaju isto kao u prethodnom primjeru na Pascalu. Također, vidimo konstruktora, destruktora, dostupnog bilo kojem dijelu programa. U C ++, sve stavke po defaultu su privatne, odnosno, to može biti izostavljen.

    Osobitosti realizacije

    U središtu objektno orijentiranih jezika objekt je dio klase. Sastoji se od:
  • polja;
  • metoda.
  • ​​Podatkovno polje opisuje parametre objekta. Oni predstavljaju određenu vrijednost koja pripada klasi, opisuje njeno stanje, svojstva. Oni su prema zadanim postavkama zatvoreni, a promjene podataka nastaju zbog korištenja različitih metoda. Metoda - skup funkcija koje određuju sve moguće radnje dostupne za izvršenje nad objektom. Svi objekti međusobno djeluju s pozivima drugih. Može biti vanjsko ili unutarnjekoji je određen modifikatorima pristupa.

    OOP-metodologija

    Postoje sljedeće metodologije:
  • Komponentno orijentirano programiranje;
  • Programiranje prototipa;
  • Klasno orijentirano programiranje.
  • Komponentno programiranje se oslanja na koncept komponente - kao cjelovit program koji je namijenjen za ponovnu uporabu. Realiziran kao skup dizajna sa zajedničkom značajkom, pravilima, ograničenjima. Pristup se koristi u objektno-orijentiranom jeziku Java, gdje se orijentacija komponenti provodi pomoću JavaBeans, pisanih u skladu s istim pravilima.
    U prototipnom programiranju ne postoji koncept klase - nasljeđivanje se provodi kloniranjem postojećeg prototipa. To je osnova objektno-orijentiranih javascript jezika i drugih dijalekata ecmascripta, kao i lua ili lo. Glavne značajke:
  • potomci ne bi trebali sačuvati strukturnu sličnost prototipa (u odnosu na klasu - kopija se događa na točan način);
  • Kod kopiranja prototipa, sve su metode naslijeđene jedna prema jedna. Klasno orijentirano programiranje usredotočuje se na pojam klase i instance. Klasa definira ukupnu strukturu, ponašanje za slučajeve koji ih uzimaju.

    Objektno orijentirani jezici

    Svi OSOA-i u potpunosti su u skladu s načelima OOP-elemenata su objekti koji imaju svojstva. U tom slučaju mogu postojati dodatna sredstva.
    OSO nužno sadrži skup sljedećih elemenata:
  • deklariranje razreda s poljima, metodama;
  • širenje nasljeđivanjemfunkcije;
  • polimorfno ponašanje.
  • Osim gore navedenog popisa, mogu se dodati i dodatna sredstva:
  • konstruktor, destruktor, finalizatori; Svojstva;
  • indekseri;
  • modifikatori pristupa.
  • Neki OSO-ovi odgovaraju svim glavnim elementima, drugi - djelomično. Ostali su hibridni, tj. Oni su kombinirani s podsustavima drugih paradigmi. Obično se načela OOP-a mogu primijeniti i na jezik usmjeren na pristranost. Međutim, korištenje OBO-a još uvijek ne čini objektno orijentiran kod. JAP-ovi podržavaju više od jedne paradigme. Na primjer, PHP ili javascript podržavaju funkcionalno, proceduralno, objektno orijentirano programiranje. Java radi s pet paradigmi: objektno orijentiranim, generaliziranim, proceduralnim, aspektno orijentiranim, konkurentnim. C # se smatra jednim od najuspješnijih primjera multiparadigmalnosti. Podržava iste pristupe kao i Java, a ovom popisu dodana je refleksivna paradigma. Zastupnik poput Oza osmišljen je kako bi spojio sve koncepte tradicionalno povezane s različitim programskim paradigmama.

    Povezane publikacije