Korisnik:Ognjenzivanovic/prevod1
Proceduralno programiranje je paradigma programiranja, zasnovana na imperativnom programiranju,[1] koja uključuje implementiranje ponašanja računarskog programa kao procedura (posnatih kao funkcije, potprogrami) koje pozivaju jedna drugu. Rezultujući program je niz koraka koji formiraju hijerarhiju poziva na njegove sastavne procedure.
Prvi veći proceduralni programski jezici su se pojavili 1957–1964, i to su bili Fortran, ALGOL, COBOL, PL/I i BASIC.Pascal i C su nastali 1970–1972.
Računarski procesori obezbeđuju hardversku podršku za proceduralno programiranje kroz registar steka i uputstva za pozivanje procedura i vraćanje iz njih. Moguća je hardverska podrška za druge tipove programiranja, poput Lisp mašina ili Java procesora, ali nijedan pokušaj nije bio komercijalno uspešan.
Razvojne prakse
urediOdređene prakse razvoja softvera se često koriste sa proceduralnim programiranjem kako bi se poboljšao kvalitet i smanjili troškovi razvoja i održavanja.
Modularnost i oblast vidljivosti
urediModularnost se odnosi na organizovanje procedura programa u zasebne module—od kojih svaki ima specifičnu i razumljivu svrhu.
Minimiziranje oblasti vidljivosti promenljivih i procedura može poboljšati kvalitet softvera smanjenjem kognitivnog opterećenja procedura i modula.
Program kojem nedostaje modularnost ili ima široku oblast vidljivosti obično ima procedure koje troše mnoge promenljive koje koriste i druge procedure. Rezultujući kod je relativno teško razumeti i održavati.
Deljenje
urediPošto procedura može da specificira dobro definisan interfejs i da bude samostalna, ona podržava ponovnu upotrebu koda—posebno preko softverske biblioteke.
Poređenje sa drugim programskim paradigmama
urediImperativno programiranje
urediProceduralno programiranje je izvedeno iz imperativnog programiranja, jer podrazumeva direktnu komandu izvršenja.
Proceduralno je podklasa imperativnog pošto proceduralno uključuje koncepte bloka i oblasti vidljivosti, dok imperativno opisuje opštiji koncept koji ne zahteva takve karakteristike. Proceduralni jezici generalno koriste rezervisane reči koje definišu blokove, kao što su if
, while
, i for
za implementaciju kontrole toka, dok nestrukturirani imperativni jezici (tj. asemblerski jezik) koriste goto naredbe i tabele grananja u tu svrhu.
Objektno orijentisano programiranje
urediTakođe klasifikovano kao imperativno, objektno orijentisano programiranje (OOP) uključuje podelu implementacije programa na objekte koji izlažu ponašanje (metode) i podatke (članove) preko dobro definisanog interfejsa. Nasuprot tome, proceduralno programiranje se odnosi na podelu implementacije programa na promenljive, strukture podataka i potprograme. Važna razlika je u tome što, dok proceduralno uključuje procedure za rad na strukturama podataka, OOP spaja to dvoje zajedno. Objekat je struktura podataka i ponašanje povezano sa tom strukturom podataka.[2]
Neki OOP jezici podržavaju koncept klase koji omogućava kreiranje objekta na osnovu definicije.
Nomenklatura varira između ove dve, iako imaju sličnu semantiku:
Proceduralno | Objektno orijentisano |
---|---|
Procedura | Metoda |
Zapis | Objekat |
Modul | Klasa |
Poziv procedure | Poruka |
Funkcionalno programiranje
urediPrincipi modularnosti i ponovne upotrebe koda u funkcionalnim jezicima su u osnovi isti kao u proceduralnim jezicima, pošto oba potiču iz strukturiranog programiranja. na primer:
- Procedure odgovaraju funkcijama. Oba dozvoljavaju ponovnu upotrebu istog koda u različitim delovima programa i na različitim tačkama njegovog izvršavanja.
- Po istom principu, pozivi procedura odgovaraju aplikaciji funkcije.
- Funkcije i njihovi moduli odvojeni su jedni od drugih na isti način, korišćenjem argumenata funkcije, povratnih vrednosti i opsega promenljivih.
Glavna razlika između stilova je u tome što funkcionalni programski jezici uklanjaju ili barem ne naglašavaju imperativne elemente proceduralnog programiranja. Skup funkcija funkcionalnih jezika je stoga dizajniran da podrži pisanje programa što je više moguće u smislu čistih funkcija:
- Dok proceduralni jezici modeluju izvršavanje programa kao niz imperativnih komandi koje mogu implicitno da izmene deljeno stanje, funkcionalni programski jezici modeluju izvršavanje kao procenu složenih izraza koji zavise samo jedan od drugog u smislu argumenata i povratnih vrednosti. Iz tog razloga, funkcionalni programi mogu imati slobodan redosled izvršavanja koda, a jezici mogu ponuditi malo kontrole nad redosledom kojim se izvršavaju različiti delovi programa; na primer, argumenti za pozivanje procedure u Šemi se vrednuju proizvoljnim redosledom.
- Funkcionalni programski jezici podržavaju (i u velikoj meri koriste) prvoklasne funkcije, anonimne funkcije i zatvaranja, iako su ovi koncepti takođe uključeni u proceduralne jezike najmanje od Algola 68.
- Funkcionalni programski jezici imaju tendenciju da se oslanjaju na optimizaciju repne rekurzije i funkcije višeg reda umesto na imperativne konstrukcije petlje.
Mnogi funkcionalni jezici su, međutim, u stvari nečisto funkcionalni i nude imperativne/proceduralne konstrukcije koje omogućavaju programeru da piše programe u proceduralnim stilovima, ili u kombinaciji oba stila. Uobičajeno je da se ulazni/izlazni kod u funkcionalnim jezicima piše proceduralnim stilom.
Postoji nekoliko ezoteričnih funkcionalnih jezika (kao što je Unlambda) koji izbegavaju pravila strukturiranog programiranja da bi bili teški za programiranje (i stoga izazovni). Ovi jezici su izuzetak od zajedničke osnove između proceduralnih i funkcionalnih jezika.
Logičko programiranje
urediU logičkom programiranju, program je skup premisa, a izračunavanje se vrši pokušajem dokazivanja teorema kandidata. Sa ove tačke gledišta, logički programi su deklarativni, fokusirajući se na to šta je problem, a ne na to kako ga rešiti.
Međutim, tehnika rezonovanja unazad, implementirana SLD rezolucijom, koja se koristi za rešavanje problema u logičkim programskim jezicima kao što je Prolog, tretira programe kao procedure redukcije cilja. Dakle, klauzule oblika:
- H :- B1, …, Bn.
imaju dvojako tumačenje, i kao procedure
- da prikažu/reše H, prikažu/reše B1 i … i Bn
i kao logičke implikacije:
- B1 i … i Bn implicira H.
Vešt logički programer koristi proceduralno tumačenje za pisanje programa koji su efikasni i efikasni, i koristi deklarativno tumačenje kako bi osigurao da su programi ispravni.
Reference
uredi- ↑ „Programming Paradigms“.
- ↑ Stevenson, Joseph (August 2013). „Procedural programming vs object-oriented programming“. neonbrand.com.