Programmeringsparadigmer er måtene å klassifisere programmeringsspråk på basert på deres egenskaper. Språk kan klassifiseres i flere paradigmer.
Noen paradigmer er først og fremst opptatt av implikasjoner for utførelsesmodellen til språket, for eksempel å tillate bivirkninger eller om sekvensen av operasjoner er definert av utførelsesmodellen. Andre paradigmer er først og fremst opptatt av måten koden er organisert på, for eksempel å gruppere kode i enheter sammen med tilstanden som koden modifiserer. Andre er imidlertid først og fremst opptatt av syntaksstil og grammatikk.
Vanlige programmeringsparadigmer inkluderer: [ 1 ] [ 2 ] [ 3 ]
Symbolske teknikker som refleksjon, som lar programmet referere til seg selv, kan også betraktes som et programmeringsparadigme. Dette er imidlertid forenlig med de store paradigmene, og er derfor ikke et reelt paradigme i seg selv.
For eksempel har språk som faller inn under imperativparadigmet to hovedkarakteristikker: de etablerer rekkefølgen operasjoner skjer i, med konstruksjoner som eksplisitt kontrollerer den rekkefølgen, og de tillater bivirkninger, der tilstanden kan endres ved en gitt tid. , innenfor én kodeenhet, og les deretter på et annet tidspunkt innenfor en annen kodeenhet. Kommunikasjon mellom kodeenheter er ikke eksplisitt. I mellomtiden, i objektorientert programmering , er koden organisert i objekter som inneholder tilstand som bare er modifisert av koden som er en del av objektet. De fleste objektorienterte språk er også imperative språk. I motsetning til dette indikerer ikke språk som samsvarer med det deklarative paradigmet i hvilken rekkefølge operasjoner skal utføres. I stedet gir de en rekke operasjoner tilgjengelig på systemet, sammen med forholdene som hver får lov til å kjøre under. Utførelsesmodellimplementeringen av språket holder styr på hvilke operasjoner som er gratis å utføre og velger rekkefølgen uavhengig. Mer i sammenligning av programmeringsspråk med flere paradigmer.
Utviklingen av prosessuelle språk ga opphav til språk som ble brukt som vokabular relatert til problemet som skulle løses. Eksempler på disse språkene er:
Alle disse språkene følger et prosedyreparadigme. De beskriver, trinn for trinn, nøyaktig prosessen som må følges for å løse et spesifikt problem. Effektiviteten og effektiviteten til hver løsning avhenger av erfaringen, oppfinnsomheten og dyktigheten til programmereren .
Akkurat som programvareteknikk (som en prosess) er definert av forskjellige metoder , er programmeringsspråk (som datamodeller) definert av forskjellige paradigmer . Noen språk er designet for å støtte ett paradigme ( Smaltalk støtter objektorientert programmering, Haskell støtter funksjonell programmering), mens andre programmeringsspråk støtter flere paradigmer (som Object Pascal , C++ , Java , JavaScript , C# , Scala , Visual Basic , Common Lisp , Scheme , Perl , PHP , Python , Ruby , Oz og F# ). For eksempel kan programmer skrevet i C++, Object Pascal eller PHP være rent prosedyremessige, rent objektorienterte, eller kan inneholde elementer fra begge eller andre paradigmer. Programvaredesignere og programmerere bestemmer hvordan de skal bruke disse paradigmatiske elementene.
I objektorientert programmering behandles programmer som et sett med objekter som samhandler. I funksjonell programmering behandles programmer som en sekvens av tilstandsløse funksjonsevalueringer. Ved programmering av datamaskiner eller systemer med mange prosessorer, i prosessorientert programmering, behandles programmer som sett med samtidige prosesser som virker på logiske delte datastrukturer.
Mange programmeringsparadigmer er like kjent for teknikkene de forbyr som for de de muliggjør. For eksempel tillater ikke ren funksjonell programmering bruk av bivirkninger, mens strukturert programmering ikke tillater bruk av "gå til"-setningen. Delvis av denne grunn blir nye paradigmer ofte sett på som doktrinære eller for rigide av de som er vant til eldre stiler. [ 6 ] Å unngå visse teknikker kan imidlertid gjøre det lettere å forstå oppførselen til programmet og bevise teoremer om riktigheten av programmet.
Programmeringsparadigmer kan også sammenlignes med programmeringsmodeller, slik at en utførelsesmodell kan påkalles ved bruk av bare ett API. Programmeringsmodeller kan også klassifiseres i paradigmer basert på egenskapene til utførelsesmodellen.
For parallell databehandling er det vanlig å bruke en programmeringsmodell i stedet for et språk. Årsaken er at detaljene til parallell maskinvare siver inn i abstraksjonene som brukes til å programmere maskinvaren. Dette får programmereren til å kartlegge mønstre i algoritmen til mønstre i utførelsesmodellen (som har blitt satt inn på grunn av en maskinvarelekkasje i abstraksjonen). Som en konsekvens er ikke noe parallelt programmeringsspråk godt egnet for alle beregningsproblemer. Derfor er det mer praktisk å bruke et grunnleggende skriptspråk og sette inn API-kall i parallelle utførelsesmodeller gjennom en programmeringsmodell. Slike parallelle programmeringsmodeller kan klassifiseres i henhold til maskinvarereflekterende abstraksjoner som delt minne, distribuert minne med meldingsoverføring , forestillinger om sted synlig i koden, etc. Disse kan betraktes som varianter av programmeringsparadigmet som bare gjelder parallelle programmeringsspråk og modeller.