Objektno usmerjeni jeziki. Osnove objektno usmerjenega programiranja

Objektno usmerjeno programiranje temelji na predstavitvi programa v obliki niza objektov. Vsak objekt pripada razredu, ki pa se uvršča v hierarhijo, podedovano. Uporaba OOP-a zmanjša odvečne podatke, kar izboljša obvladljivost in razumevanje programa.

Kaj je OOP

Pojavil se je zaradi razvoja postopkovnega načrtovanja. Osnova objektno orientiranih jezikov so naslednja načela, kot so:
  • enkapsulacija;
  • dedovanje;
  • polimorfizem.
  • Nekatera načela, ki so bila prvotno določena v prvih OOP, so se bistveno spremenila.
    Primeri objektno usmerjenih jezikov:
  • Pascal. Z izdajo Delphi 7 na uradni ravni se je začela imenovati Delphi. Glavno področje uporabe Object Pascal je pisanje aplikacijske programske opreme.
  • C ++ se pogosto uporablja za razvoj programske opreme, ki je eden izmed najbolj priljubljenih jezikov. Velja za ustvarjanje operacijskega sistema, aplikacij, gonilnikov naprav, aplikacij, strežnikov, iger.
  • Java se prenaša v bajtno kodo, ki jo obdeluje virtualni stroj Java. Prednost tega načina izvajanja je neodvisnost operacijskega sistema in opreme. Obstoječe družine: Standard Edition, Enterprise Edition, Micro Edition, Card.
  • javascript se uporablja kot skriptni jezik za spletne strani. Sintaksa v veliki meri spominja na C in Java. Je izvajanje Ecmascripta. Sam Ecmascript se uporablja kot osnova za gradnjo drugih skriptnih jezikov, kot so JScript, ActionScript.
  • Objective-Cki temelji na jeziku C, in sama koda C je jasna prevajalniku Objective-C.
  • Perl - na visoki ravni se razlaga v dinamičnem jeziku Microsoft za splošne namene. Ima bogate zmožnosti za delo z besedilom, prvotno zasnovano posebej za manipulacije z besedilom. Trenutno se uporablja v sistemski administraciji, razvoju programiranja omrežja, bioinformatiki itd.
  • PHP. Okrajšava se prevede kot predprocesor s hipertekstom. Uporablja se za razvoj spletnih aplikacij, vključno s strežniškim delom. To vam omogoča, da ustvarite gui-aplikacije z uporabo paketov PHP-GTK, PHP-Qt, WinBinder.
  • Python je jezik splošnega pomena, osredotočen na izboljšanje produktivnosti razvijalca in berljivosti kode. Projekt Cython je bil razvit za prevajanje programov, napisanih v Pythonu, v kodo C.
  • Abstrakcija

    Vsaka knjiga žanra "Objektno usmerjeno programiranje za telebane" poudarja eno od glavnih načel - abstrakcijo. Ideja je, da se podrobnosti ali značilnosti izvajanja programa razdelijo na pomembne in nepomembne. Zahtevan za velike projekte, vam omogoča delo na različnih ravneh sistemske reprezentacije brez podrobnosti.


    Abstraktni tip podatkov je predstavljen kot vmesnik ali struktura. Omogoča vam, da ne razmišljate o stopnji podrobnosti izvajanja. ATD ni odvisen od drugih delov kode. Znani aforizem Davida Wheelerja dokazuje: Vse probleme v računalništvu lahko rešimo na drugačni ravni abstrakcije.

    Dedovanje

    Na voljo so objektno usmerjeni jezikidediščina je eno najpomembnejših načel.
    Označuje, da se lahko uporabijo nekatere vrste funkcij. Razred, ki podeduje lastnosti drugega, se imenuje izpeljanka, naslednik ali podrazred. Tisti, iz katerega pride dedovanje, se imenuje prednik, baza ali superrazred. Odnos do dedičev potomcev ustvarja posebno hierarhijo. Obstaja več vrst dedovanja:
  • preprosto;
  • množina.
  • Če je lahko večkratno dedovanje več otrok iz enega prednika, ko je v navadni - samo ena. To je glavna razlika med vrstami. Dedovanje izgleda takole: razred Animal {function draw () {return "just animal"; } funkcijo jesti {} {vrniti žival je}}}} Razred Krava razširi živali {funkcija nariše () {vrne "nekaj, kar izgleda kot krava"}} Vidimo, da je razred Krava podedoval vse metode od razredne živali. če delamo Cow.eat (), dobimo "žival jede", nato pa spremenimo risbo (). Cow.draw () bo vrnil "nekaj, kar izgleda kot kravo" in Animal.draw () bo vrnil "samo žival" "


    Inkapsulacija

    Inkapsulacija omejuje dostop do drugih komponent, povezuje podatke z metodami za obdelavo in za embalažo se uporablja specifikator zasebnega dostopa.
    Običajno je identificiran koncept inkapsulacije in prikrivanja, vendar nekateri jeziki razlikujejo te koncepte. Z drugimi besedami, kritične lastnosti so zaščitene in njihova sprememba postane nemogoča. Razred Animal {private $ name; funkcija __construct ($ name) {$ this- & gt; name = $ name; } funkcija getName {} {return $ this-> name; }} Ime je sprejeto kot argument konstruktorja. Ko je konstruktor uporabljen v drugih delih kode, nič ne more spremeniti elementa imena. Kakoglej, označeno je znotraj, za druge dele kode pa ni na voljo.

    Polimorfizem

    Polimorfizem omogoča uporabo enega in imena za reševanje podobnih, a tehnično različnih nalog.
    V zgornjem primeru je tabela. Vidimo razred CardDesk in razred GraphicalObject. Oba imata funkcijo, imenovano draw (). Opravlja različna dejanja, čeprav ima eno ime. Ad hoc polimorfizem ali poseben polimorfizem uporablja:
  • preobremenitev funkcij, metod;
  • vrste vnosa.
  • Preobremenitev vključuje uporabo več funkcij z enim samim imenom, kadar se izbira ustreznega pojavlja med fazo prevajanja. Priprava tipov pomeni pretvorbo vrednosti ene vrste vrednosti v drugo vrsto. Obstaja eksplicitna transformacija - funkcija, ki sprejme en tip, vendar se vrne v drugo, implicitno, izvrši prevajalnik ali tolmač.
    "En vmesnik - veliko izvedb" Bjorn Stroustrup.

    Razred

    Razred je vrsta podatkov, ki je sestavljena iz enega niza polj in metod.
    Ima notranje in zunanje vmesnike za upravljanje vsebin. Ko kopirate prek dodelitve, kopirate vmesnik, ne pa podatkov. Različni tipi medsebojno vplivajo preko:
  • dedovanja;
  • združenja;
  • združevanje.
  • Ko je podrejeni, hčerinski razred podeduje vse lastnosti matičnega, asociacija se nanaša na interakcijo predmetov. Ko objekt enega razreda vstopi v drug, se imenuje agregacija. Toda, ko so med življenjem še vedno odvisni drug od drugega, je sestava. Eden glavnihznačilnosti so obseg vidnosti. Koncept je različno določen z različnimi poslanci. Object Pascal je opisan na naslednji način: ClassName = razred (SuperClass) zasebno {uporaba elementov je omejena samo z mejami modulov} {tukaj so podana polja} stroga zasebna {dostopna specifikacija je postala dostopna z izhodom Delphi 2007 označuje enako kot zasebni} zaščiteni {elementi lahko uporabljeni znotraj ClassName ali dedovanja} public {} objavljeni {predmeti so na voljo vsem, so prikazani na koncu predmeta Object Inspector}; Tukaj je SuperClass prednik, iz katerega pride do dedovanja. Za C ++ ustvarjanje izgleda takole: class MyClass: public Parent {public: MyClass (); //konstruktor ~ MyClass (); //destructor protected: private:}; V tem primeru je Roditelj prednik, če obstaja. Posebnosti zasebne, javne, zaščitene označujejo enako kot v prejšnjem primeru na Pascalu. Prav tako vidimo konstruktorja, destruktorja, ki je na voljo v katerem koli delu programa. V C ++ so vse postavke privzeto zasebne, kar lahko izpustite.

    Posebnosti realizacije

    V središču objektno usmerjenih jezikov je objekt del razreda. Sestavljen je iz:
  • polj;
  • metoda.
  • ​​Podatkovno polje opisuje parametre objekta. Predstavljajo določeno vrednost, ki pripada razredu, opisujejo njeno stanje, lastnosti. Privzeto so zaprti, spremembe podatkov pa nastanejo zaradi uporabe različnih metod. Metoda - niz funkcij, ki določajo vse možne ukrepe, ki so na voljo za izvedbo nad objektom. Vsi objekti komunicirajo s klicem drugih. Lahko je zunanja ali notranjaki je določena z modifikatorji dostopa.

    OOP-metodologija

    Obstajajo naslednje metodologije:
  • komponentno usmerjeno programiranje;
  • Programiranje prototipov;
  • Razredno usmerjeno programiranje.
  • Komponentno zasnovano programiranje se opira na koncept sestavnega dela - takega integralnega programa, ki je namenjen za ponovno uporabo. Realiziran kot niz modelov s skupno značilnostjo, pravili, omejitvami. Pristop se uporablja v objektno usmerjenem jeziku Java, kjer je orientacija komponent izvedena z uporabo JavaBeans, ki je napisana v skladu z istimi pravili.
    V prototipnem programiranju ni koncepta razreda - dedovanje se izvaja s kloniranjem obstoječega prototipa. Je osnova objektno orientiranih jezikov javascripta in drugih narječnih besedil ter lua ali lo. Glavne značilnosti:
  • potomci ne smejo ohraniti strukturne podobnosti prototipa (glede na razred - kopija tega se zgodi natančno);
  • Pri kopiranju prototipa so vse metode podedovane ena proti ena.
  • Razredno usmerjeno programiranje se osredotoča na koncept razreda in primerka. Razred definira celotno strukturo, obnašanje za primere, ki jih vzamejo.

    Objektno usmerjeni jeziki

    Vsi OSOA so popolnoma skladni z načeli elementov OOP, ki so objekti, ki imajo lastnosti. V tem primeru lahko pride do dodatnih sredstev.
    OSO nujno vsebuje niz naslednjih elementov:
  • razglasitev razredov s polji, metodami;
  • širitev z dedovanjemfunkcije;
  • polimorfno vedenje.
  • Poleg zgornjega seznama se lahko dodajo dodatna sredstva:
  • konstruktor, destruktor, zaključevalci;
  • lastnosti;
  • kazalci;
  • modifikatorji dostopa.
  • Nekateri OSO-ji ustrezajo vsem glavnim elementom, drugi - delno. Drugi so hibridni, to pomeni, da so združeni s podsistemi drugih paradigm. Običajno se načela OOP-a lahko uporabljajo tudi za jezik, usmerjen v pristranskost. Vendar pa uporaba OBO-ja še vedno ne povzroča objektne usmerjenosti kode. JAP podpira več kot eno paradigmo. Na primer, PHP ali javascript podpira funkcionalno, proceduralno, objektno usmerjeno programiranje. Java deluje s petimi paradigmami: objektno usmerjeno, posplošeno, proceduralno, vidno usmerjeno, konkurenčno. C # velja za enega najbolj uspešnih primerov multiparadigmalnosti. Podpira iste pristope kot Java, na ta seznam je dodana refleksivna paradigma. MP, kot je Oz, je zasnovan tako, da združuje vse koncepte, ki so tradicionalno povezani z različnimi programskimi paradigmami.

    Sorodne publikacije