Kas saate selgitada protseduurilise programmeerimise ja OOP-i erinevust?


Vastus 1:

Algne küsimus:

Kas saate selgitada protseduurilise programmeerimise ja OOP-i erinevust?

Vastus:

Kõigepealt määratleme, mida tähendab protseduuriline ja objektorienteeritud programmeerimine.

Definitsioon - mida tähendab protseduurikeel? Protseduurikeel on arvutiprogrammeerimiskeeltüüp, mis määrab programmi koostamiseks selle programmeerimiskontekstis hästi struktureeritud sammud ja protseduurid. See sisaldab süsteemsete avalduste, funktsioonide ja käskude järjekorda arvutusülesande või programmi täitmiseks. Protseduurikeelt tuntakse ka kui imperatiivset keelt.Techopedia selgitab protseduurikeeltProcedsionaalne keel, nagu nimigi viitab, toetub etteantud ja hästi korraldatud protseduuridele, funktsioonidele. või alamrutiine programmi arhitektuuris, täpsustades kõik toimingud, mida arvuti peab soovitud olekusse või väljundisse jõudmiseks tegema. Protseduurikeel eraldab programmi muutujate, funktsioonide, avalduste ja tingimuslike operaatorite piires. Andmetes ja muutujates rakendatakse toiminguid või funktsioone ülesande täitmiseks. Neid protseduure saab kutsuda / käivitada kõikjal programmi hierarhia vahel ja ka muude protseduuride vahel. Menetluskeeles kirjutatud programm sisaldab ühte või mitut protseduuri. Menetluskeel on üks levinumaid kasutatavaid programmeerimiskeeli tüüpe, mille märkimisväärsed keeled on näiteks C / C ++, Java, ColdFusion ja PASCAL.

Määratleme nüüd objektorienteeritud programmeerimise.

Definitsioon - mida tähendab objektorienteeritud programmeerimine (OOP)? Objektorienteeritud programmeerimine (OOP) on objektide ümber konstrueeritud tarkvara programmeerimismudel. See mudel jagab andmed objektideks (andmeväljad) ja kirjeldab objektide sisu ja käitumist klasside (meetodite) deklareerimise kaudu .OOP funktsioonid hõlmavad järgmist: Kapseldamine: See muudab programmi struktuuri haldamise lihtsamaks, kuna iga objekti teostus ja olek on peidus täpselt määratletud piirid.Polümorfism: see tähendab abstraktsete üksuste rakendamist mitmel viisil.Pärimus: See viitab rakendusfragmentide hierarhilisele paigutusele.Objektidele orienteeritud programmeerimine võimaldab lihtsustatud programmeerimist. Selle eeliste hulka kuulub korduvkasutatavus, refaktoriseerimine, laiendatavus, hooldus ja tõhusus.Techopedia selgitab objektorienteeritud programmeerimist (OOP) OOP on viimase kümne aasta jooksul või enam olnud valitud programmeerimismudel. OOP-i modulaarne disain võimaldab programmeerijatel luua tarkvara hallatavates tükkides, mitte suures koguses jadakoodis. Üks OOP-i suurtest eelistest on skaleeritavus, mille objektidel ja määratlustel pole piiratud piiranguid. Samuti takistab andmete eraldamine meetodist tavalistes probleemides, mis leitakse vanemates lineaarsetes tarkvarakeeltes. Kui viga ilmneb lineaarses koodis, saab selle süsteemi kaudu tõlkida ja luua raskesti jälgitavaid vigu. Vastupidiselt ei ole OOP-programm koos meetodi ja andmete eraldamisega selliste levinud vigade suhtes vastuvõtlik. Populaarsete OOP-keelte hulka kuuluvad Java, C-keelte perekond, VB.NET Shop ja Python. Niinimetatud "puhtad" OOP-keeled hulka kuuluvad Scala, Ruby, Eiffel, JADE, Smalltalk ja Emerald.

Mõistete allikas on pärit Mis on objektorienteeritud programmeerimine (OOP)? - mõiste Techopedia ja mis on protseduurikeel? - Techopedia määratlus

Nüüd. Vaatame erinevuse rakendamist targalt.

Alustame protseduuriga ja lihtsaim viis selleks on kasutada spetsiaalselt C-keelt Arduinoga, sest seda ma tean.

Otsustasin kasutada alusena vilkuva tule õpetust, kuna see on üks põhilisi rakendusi.

// häälestusfunktsioon käivitatakse üks kord, kui vajutate lähtestamist või lülitate sisse paneeli tühjuse seadistuse () {// lähtestate digitaalse pin LED_BUILTIN väljundina. pinMode (LED_BUILTIN, VÄLJUND); } // silmusfunktsioon töötab ikka ja jälle igavesti tühiseks ahelaks () {digitalWrite (LED_BUILTIN, HIGH); // lülitage LED sisse (HIGH on pingetase) viivitus (1000); // oodake teist digitalWrite'i (LED_BUILTIN, LOW); // lülitage LED välja, tehes pinge LOW viivituse (1000); // oota hetke}

Las ma selgitan koodi natuke paremini. Teil on kaks funktsiooni Seadistamine ja Silmus. Silmust kutsutakse korduvalt ja seadistust kutsutakse ainult üks kord. Kui saadate vastavalt kõrge ja madala võimsuse, saadate LED-le käsu digitalWrite. Viivitus on see, kui kaua tuli põleb või kustub, antud juhul 1000 ms või umbes 1 sekund. Päris otse, kuid see näitab teile protseduurilise programmeerimise olulisust. Kirjutate protseduuri või juhiseid ja seda korratakse, kuni see lõpeb. Nõutud koodil pole täiendavat keerukust.

C # ja OOP näite aeg.

süsteemi kasutamine; kasutades System.Collections.Generic; kasutades System.Linq; kasutades System.Text; nimeruumi oih {avaliku klassi klient {// Member Variables public int CustID; avalik keel Nimi; avalik keel Aadress; // väljade initsialiseerimise nõustaja () {CustID = 1101; Nimi = "Tom"; Aadress = "USA"; } // kliendikirjete kuvamise meetod (funktsionaalsus) avaliku void displayData () {Console.WriteLine ("Client =" + CustID); Console.WriteLine ("Nimi =" + Nimi); Console.WriteLine ("Aadress =" + Aadress); } // Sisenemispunkti kood}} Klassiprogramm {static void Main (string [] args) {// objekti kiirenduse klient obj = uus klient (); // obj.displayData () kutsumise meetod; // väljad, mis kutsuvad Console.WriteLine (obj.CustID); Console.WriteLine (obj.Name); Console.WriteLine (obj.Aadress); }}}

Siin on klassikaline näide OOP-st. Teil on kliendiklass, mis määratleb kõik objektid, mis teil on saadaval. Teil on endiselt funktsioone / meetodeid kirjutamiseks. Kuid peamine erinevus on see, et soovite iga meetodi / funktsiooni jagada vastavalt sellele, mida ta peaks tegema. Sealt on teie peamine meetod programmi sisenemispunkt ja seega peaks siin olema teie kriitiline kood.


Vastus 2:

OOPS-i kontseptsioon Java-s

Protseduurikeel põhineb funktsioonidel, kuid objektorienteeritud keel põhineb reaalmaailma objektidel. Protseduurikeel annab tähtsuse funktsioonide täitmise järjestusele, kuid objektorienteeritud keel annab olulisuse objektide olekutele ja käitumisele.Proceduriline keel paljastab andmed kogu programmi jaoks kuid objektorienteeritud keel kapseldab andmed.Proceduraalne keel järgib ülalt alla programmeerimise paradigmat, objektorienteeritud keel järgib alt üles programmeerimise paradigmat.Proceduralkeel on oma olemuselt keeruline, nii et seda on keeruline muuta, laiendada ja säilitada, kuid objektorienteeritud keel on oma olemuselt vähem keerukas. nii et seda on lihtsam modifitseerida, laiendada ja hooldada. Menetluskeel pakub vähem koodi korduvkasutuse ulatust, kuid objektorienteeritud keel pakub koodide taaskasutamise ulatust.


Vastus 3:

Protseduuriline programmeerimine on programmeerimine, mille peamiseks abstraktsioonimehhanismiks on protseduurid. Ah.

Mis on protseduur? See on nime kandev kood, millele saab nime abil tugineda ja mis võtab vastu väärtusi ja viiteid kontekstist, kuhu see kutsutakse, parameetritest ning võib pärast mõne töö tegemist tagastada väärtused ja viited sellele kontekstile.

Sageli näidatakse protseduuri sees tagasiväärtusena üks konkreetne väärtus. Protseduure toetavates keeltes on tavaline, et neid kasutatakse justkui funktsioonidena, kus parameetreid käsitletakse argumentidena ja tagastamisväärtus arvutatakse protseduuri käigus funktsiooni väärtusena nende argumentide jaoks. Kuid ka idioomaatiline on, kui protseduur tagastab parameetrite kaudu ühe või mitu väärtust kutsuvasse konteksti, kas parameetrid välja, välja arvatud juhul, kui keel seda toetab, või muutes viitega edastatud väärtust, ja kasutada tagasiväärtust ise lipu, oleku või vea indikaator. Programmeerimiskultuurides, mida Unix tugevalt mõjutab, näete sageli 0 naasmist, et näidata edu (või vähemalt teadaolevate tõrgete puudumist), ja negatiivset arvu, mis tähistab mõnda teadaolevat tõrkerežiimi.

See pole mudeli jaoks tingimata vajalik, kuid ma ei saa mõelda keelest, mis kasutab põhimõtteliseks abstraktsioonimehhanismiks protseduure, millel pole ka juhtimisvoogu, kasutades peaaegu sama tuntud tuntud poolmaagilise komplekti asjad nagu:

if (tingimus) {doThisThing ()} else {doThatThing ()}

ja

while (tingimus) {keepOnDoingThisThing ()}

Ma arvan, et enamiku programmeerijate meelest on “protseduuriline” programmeerimine üsnagi seotud “struktureeritud programmeerimisega”. Päeval, mil struktureeritud programmeerimine oli uus, leiti, et olemas on mugav juhtimiskonstruktsioonide komplekt, millest saaks kogu protseduuri käigus moodustada kõik vajalikud juhtimisvoo mudelid:

alternatiivide valimine

  • kui siis veel (kaks valikut loogilisel alusel) juhtum või lüliti (palju valikuid mis tahes komplekti alusel)

kordus

teadaolevate piiridega:

  • silmuste (tavaliselt teatava arvu iteratsioonide korral) ettejuhtuvate silmuste jaoks (iterake nii mitu korda kui mõne kollektsiooni suurus, võib-olla üle liikmete endi)

ad-hoc piiridega:

  • samal ajal tegema (0 või enam iteratsiooni) tegema samal ajal (1 või enam iteratsiooni)

ja kahjuks ebapopulaarne:

  • väljumisaeg

mis käivitab koodi enne väljumist vähemalt üks kord ja kood pärast väljumist null või enam korda.

Neid struktuure saab üksteise suhtes rakendada, kuid see on mõnel juhul üllatavalt raske. Lülitus- / juhtumilauseid on väga keeruline jäljendada täpselt pesastatud if-de abil. Ja meie jaoks on oluline, et need on peaaegu alati sisse seatud keele rakendamisse ja nad saavad teha asju, mida teie, töötav programmeerija, näete vaeva koodi kirjutamiseks. Igas puhtalt või peamiselt protseduurilises keeles, mida ma võin mõelda, oleks väga raske ja paljudel juhtudel võimatu kirjutada oma juhtimisstruktuure, mis toimisid samamoodi kui sisseehitatud. Kasutate siis sisseehitatud protseduure. Menetluslik, struktureeritud ja programmeerimine on väga piiratud maailm.

Protseduuripõhistes programmeerimiskeeltes on tavaliselt ka mingisugune moodulikontseptsioon, nimetatud konteiner hunnik protseduure. Mõned neist protseduuridest on nähtavad ja kasutatavad väljaspool moodulit, mõned on nähtavad ja kasutatavad ainult mooduli sees, see tähendab teiste protseduuride abil ka samas moodulis. Enamikus moodulitega keeltes võib moodul sisaldada ka muutujaid, mis on moodulis määratletud protseduuridele nähtavad ja nende vahel jagatud. Isegi C saab seda teha. Selline moodulisüsteem võimaldab teatud määral kapseldamist ja teabe varjamist: need mooduli sees olevad protseduurid ja muutujad, mis tagavad väljaspool moodulit nähtavate protseduuride rakendamise, võivad aidata ühendada süsteemi struktuuri. Mis on kena.

Kui lähete sammu edasi ja lubate sama mooduli mitut kasutamist, kusjuures igal kasutamisel on oma moodulis määratletud muutujate koopia, siis hakkab moodul välja nägema primitiivne omamoodi objekt. Ja kui te muudate moodulite eksemplare koos muutujatega esmatähtsaks ja jagate protseduure nende vahel kuidagi, nii et teil on neist ainult üks eksemplar, siis olete üsna lähedal sellele, mida C ++ teeb. See peenteraline modulaarne, protseduuriline, struktureeritud programmeerimine ei ole objektorienteeritud programmeerimine.

Objektorienteeritud programmeerimine on programmeerimine, mille peamiseks abstraktsioonimehhanismiks on objektid. Ah.

Mis on objekt? See on pikaealine arvutuslik üksus, millelt võib midagi paluda. Objektorienteeritud programmeerimise arhetüüp ja näide on Smalltalk. Smalltalkis on iga väärtus objekt (või vähemalt need vähesed väärtused, mis pole objektid, on loodud justkui nägema). Arvutamine toimub objektide poolt üksteisele sõnumeid edastades. Smalltalki rakendused erinevad mõnevõrra, kuid see on üldine idee:

Objektid, mis mällu on seatud. Kui objekt soovib, et mõni teine ​​objekt midagi teeks, koostab ta selle paludes sõnumi ja saadab selle soovitud objektile. Teated on objektid. Objektid vastutavad oleku säilitamise eest, see tähendab, et neil on muutujad. Nad ei jookse koodi. Kui objekt saab teate, edastab see selle oma klassile. Klassid on objektid. Klassid vastutavad objektide loomise ja haldamise eest, nad ei jookse koodi. Klass edastab sõnumi oma metaklassile. Metaklassid on objektid. Metaklassid vastutavad meetodite haldamise eest. Metaklass vaatleb oma meetodeid ja leiab sõnumile vastava. Meetodid on objektid. Tee ääres kaunistati sõnumiobjekti mitmesuguse lisateabega, sealhulgas viitega sõnumi saanud objektile. Meetod vastutab koodi käitamise eest ja selleks kasutab ta kõiki algses sõnumis edastatud argumente. Meetod töötab oma koodi sõnumi saanud objekti kontekstis. Meetodi kood on lihtsalt sõnumite skript ehitamiseks ja teistele objektidele saatmiseks. Kui metaklass ei leia sõnumile vastavat meetodit, alustatakse otsinguga klassi klassi vanemklasside metaklassid. Seda nimetatakse päranduseks.

Võib juhtuda, et ühel või teisel rakendusel on tõhususe tagamiseks sisseehitatud teatud meetodid, kuid põhimõtteliselt saab kogu Smalltalki süsteem töötada just nii.

Programmeerimine tähendab Smalltalkis skriptisõnumite kombinatsioonide saatmist meetodites kasutamiseks ja uute klasside loomist (koos metaklassidega) meetodite jaoks, kus elada. Ja see kehtib nii juhtimisvoo ekvivalendi kui ka millegi muu kohta muud.

Menetluskeeles võite võtta mõne kollektsiooni liikme suhtes mõne toimingu, mille kood on natuke selline nagu pseudokood:

ettekuulutamine (kollektsiooni teema) doThisActionOn (theThing)

Tüüpilises Smalltalkis võib samaväärne sõnumite saatmise skript välja näha järgmine:

aKogumistööd: [aThing | aThing takeThisAction].

TakeThisAction on siin teade, mis saadetakse igale aThing objektile kollektsioonis aCollection. (Muide, nurksulgudes olev kood on plokk, mida Smalltalk nimetab lambdaks. See on objekt.) Kui neid kahte võrrelda, näeme erinevalt protseduuridest objektorienteeritud programmeerimise kriitilisi omadusi:

  • Protseduurikoodis valime, kuidas kollektsiooni liikmetest mööda pääseda, valime jutlustamismehhanismi. Objektorienteeritud koodis palume kollektsioonil läbida, me ei tea, kuidas ta seda teeb. Protseduurikoodis peab kutsukoodil olema juurdepääs protseduurile nimega doThisActionOn, objektorienteeritud koodis takeThisAction on lihtsalt sümbol. Me ei tea, kuidas kollektsiooni kuuluvad objektid seda tõlgendavad.

See on objektorienteeritud programmeerimise olemus ja seda on kirjeldatud kui „programmeerimist bucki läbimisel”. Protseduuride programmeerimisel peame seevastu selgelt välja ütlema, mida iga arvutus teeb.