Programozási paradigma
A programozási paradigmák a programozási nyelvek csoportosítását jelentik aszerint, hogy mit csinálnak. A nyelvek egynél több paradigmába is tartozhatnak.
Egyes paradigmák a kód futtatásának módját vizsgálják, például a mellékhatások engedélyezését, vagy azt, hogy a dolgokat egy bizonyos sorrendben kell végrehajtani. Más paradigmák a kód csoportosításának módját vizsgálják, például a kód egy vagy két darabba (vagy inkább sok kis darabba) való rendezését. Más paradigmák a sorrendet és a darabokat vizsgálják, amelyek a programot olyanná teszik, amilyen.
A paradigmáknak két fő csoportja van, az imperatív és a deklaratív. Egy nyelv lehet egyszerre mindkettő.
Tartalomjegyzék
· 1 Imperatív programozás
· 2 Deklaratív programozás
· 3 Egyéb paradigmák
· 4 Áttekintés
· 5 Problémák a paradigmákkal
· 6 Történelem
o 6.1 Gépi kód
o 6.2 Procedurális nyelvek
o 6.3 Objektumorientált programozás
o 6.4 Deklaratív paradigmák
· 7 Kapcsolódó oldalak
· 8 Hivatkozások
· 9 Egyéb weboldalak
Imperatív programozás
Az imperatív programokban a programozók a számítógépnek megadják a végrehajtandó lépések egy sorát, amelyeket el kell végezni ahhoz, hogy valamit elvégezzenek. Ha valaki azt szeretné, hogy a számítógép rajzoljon egy macskaarcot, akkor olyan utasításokat adhat, hogy "rajzolj ide egy kört, rajzolj oda két kisebb kört, rajzolj rá két háromszöget", és így tovább. Az imperatív programoknak néha sok mellékhatása van.
Két fő imperatív paradigma létezik, és sokszor egy nyelv mindkettővel rendelkezik:
- Strukturált - A számítógép olyan utasításokat kap, amelyek mindig egy bizonyos sorrendben vannak megadva. Az olyan lépések, mint a "menj vissza a 3. lépéshez" (ún. goto utasítások) nem engedélyezettek.
- Eljárási - A program lehetővé teszi a programozó számára, hogy nevet adjon a parancsok listájának, ami ezeket a parancsokat egy "eljárássá" alakítja, amelyet később használhat. A legtöbb strukturált nyelv szintén procedurális.
- Objektumorientált - Az ötleteket a számítógépnek objektumok segítségével magyarázzák el, olyan kóddarabok segítségével, amelyeknek van egy sor parancsuk, és van róluk némi információ.
Deklaratív programozás
A deklaratív paradigmákban a programozó megmondja a számítógépnek, hogy mit tegyen, ahelyett, hogy megmondaná, hogyan tegye. Ha azt akarnák, hogy a számítógép rajzoljon egy macskaarcot, akkor olyan utasításokat adhatnának, hogy "Rajzolj egy arcot, rajzolj két szemet, két fület és egy szájat".
A legismertebb deklaratív paradigmák a következők:
- Funkcionális - A munka nagy részét a funkciók végzik, mellékhatások nélkül.
- Logika - Egy sor tényt közölnek, majd egy vagy több "kérdést" tesznek fel.
- Eseményvezérelt - A kódrészletek úgy vannak beállítva, hogy bizonyos dolgok bekövetkezésekor (például a számítógép bekapcsolásakor) fussanak.
Más paradigmák
Egyes paradigmák mind az imperatív, mind a deklaratív nyelvekben megtalálhatók. Ezek a paradigmák általában a fenti paradigmák valamelyikével együtt találhatók meg, ahelyett, hogy önállóan járnának.
Áttekintés
A programozási nyelveket paradigmák szerint csoportosítják, ugyanúgy, ahogy a gépeket is csoportosíthatják aszerint, hogy mire használják őket.
Néhány nyelv csak egy fő paradigmába illeszkedik, mint például:
- Smalltalk (objektum-orientált)
- Assembly (imperatív, de nem strukturált vagy objektumorientált)
- Haskell (funkcionális)
- Prolog (logika)
A legtöbb nyelv azonban egynél több paradigmában létezik. Néhány azok közül, amelyek kiemelkednek azzal, hogy egynél több paradigmájuk van, a következők:
- Scala (objektum-orientált, funkcionális, párhuzamos)
- Visual Basic (eseményvezérelt, objektumorientált)
- Common Lisp (procedurális, funkcionális, objektumorientált, meta)
- Scheme (funkcionális, procedurális, meta)
- Perl (funkcionális, procedurális, meta, objektumorientált, eseményvezérelt)
- Python (funkcionális, objektumorientált, procedurális)
- Ruby (funkcionális, objektumorientált, procedurális)
- Wolfram Language (funkcionális, procedurális, általában deklaratív)
- Oz (logikai, funkcionális, imperatív, objektumorientált)
- F# (funkcionális, imperatív, objektumorientált, meta)
A több paradigma nem mindig jó. Egyetlen esetben lehet jó, ha kevesebb paradigma van, amikor egy nyelv csak funkcionális. Egy függvény egy ilyen nyelvben néha kevesebb munkát végez (például csak a dolgok egy csoportjának azon részein megy át, amelyekre valóban szüksége van), mintha a nyelv procedurális lenne.
Sok programozási paradigma ugyanolyan jól ismert azokról a dolgokról, amelyeket nem engednek megtenni, mint azokról, amelyeket megengednek az embereknek. Ez például a funkcionális nyelvekre igaz. Ha egy funkcionális nyelv csak vagy főleg funkcionális, akkor általában nem engedi meg az oldalhatásokat. Egy másik eset, amikor ez igaz, a strukturált programozás: ez abban különbözik a normál imperatív nyelvektől, hogy nem engedi a programozóknak a "goto utasítások" használatát (utasítások, amelyek azt mondják a programnak, hogy menjen egy korábbi lépésre). Emiatt és más okok miatt az emberek néha úgy gondolják, hogy az új paradigmák nem engednek meg elég dolgot. Néha azonban nem baj, ha a számítógép nem enged meg dolgokat: ez segíthet az embereknek elkerülni a kódjukkal kapcsolatos problémákat, és hagyhatja, hogy a számítógép találgatásokat tegyen, így gyorsabban lefuttathatja a kódot, vagy akár ellenőrizheti a kódot problémákra, mielőtt a kód lefutna!
![A különböző programozási paradigmák áttekintése Peter Van Roy szerint](https://alegsaonline.com/image/250px-Programming_paradigms.svg.png)
![Zoom](https://www.alegsaonline.com/zoom.png)
A különböző programozási paradigmák áttekintése Peter Van Roy szerint
Problémák a paradigmákkal
A programozási nyelveket tanulmányozók egy része nem szereti, hogy paradigmákat használnak a programozási nyelvek csoportosítására, például Harper és Krishnamurthi. Ezek az emberek azt mondják, hogy sok programozási nyelvet nem lehet egyszerűen paradigmákba csoportosítani, mert a nyelvek rengeteg paradigmából kölcsönöznek dolgokat és ötleteket.
Történelem
Az idők során új paradigmák jöttek létre, és az emberek vagy akkoriban, vagy visszatekintve rámutattak ezekre. Az egyik első paradigma, amelyet a programozás új módjaként ismertek fel, a strukturált programozás volt az 1960-as évekből. A "programozási paradigma" fogalma 1978-ból származik, ha nem korábbi, amikor Robert W. Floyd használta tanítás közben. A "paradigma" szót abban a formában, ahogy Robert értette, először Thomas Kuhn használta A tudományos forradalmak szerkezete (1962) című könyvében.
Gépi kód
A legalacsonyabb szintű (a számítógéphez legközelebb álló) és legrégebbi programozási paradigma a gépi kód, egy imperatív paradigma. A gépi kódban az utasítások nem mások, mint számok egy bizonyos sorrendben megadott halmaza. Az assembly nyelv egy kicsit kevésbé alacsony szintű (és egy kicsit kevésbé régi). Az assembly nyelvben a számítógépnek szóló utasítások mnemonikus (könnyebben megjegyezhető neveket), a memóriacímek (a számítógépben lévő információ megtalálásának irányai) pedig neveket kaphatnak. Ezeket néha első és második generációs nyelveknek nevezik.
Az 1960-as években az assembly nyelveket olyan új dolgokkal tették jobbá, mint a könyvtár COPY, a makrók ("speciális" kódrészletek, amelyek a program futása előtt normál kóddá alakultak át), a programon kívülről futtatható eljárások (névvel ellátott és későbbre elmentett utasítások) és változók (névvel ellátott és későbbre elmentett elemek). Ez lehetővé tette, hogy az emberek bizonyos kódokat több projektben is használhassanak, és ne kelljen a hardver-specifikus problémákkal (olyan problémákkal, amelyek csak egyfajta számítógépen fordulnak elő) foglalkozniuk, köszönhetően az olyan parancsoknak (az utasítások nevei), mint a READ/WRITE/GET/PUT.
Az assembly-t olyan rendszerekben használták, és néha még mindig használják, ahol fontos, hogy a kód gyors legyen, és a beágyazott rendszerekben is sokat használják, mert a felhasználó pontosan tudja ellenőrizni, hogy mit csinál a gép.
Procedurális nyelvek
Az 1960-as évek végén kezdték el kitalálni a procedurális nyelveket. Ezeknek a harmadik generációs nyelveknek (az első néhány, ma magas szintű nyelvnek nevezett nyelvnek) voltak szavai, amelyek ahhoz kapcsolódtak, amit meg akartak oldani. Például,
- COmmon Business Oriented Language (COBOL) - olyan szavakat használ, mint file, move és copy.
- FORmula TRANslation (FORTRAN) - matematikai szavakat és szimbólumokat használ ( írás és gépelés során használt alakzatok). Főleg a természettudományok és a mérnöki tudományok számára fejlesztették ki.
- ALGOrithmic Language (ALGOL) - algoritmusok (a számítógépnek megmondó lépéssorozatok) írására készült. Matematikai szavakat és szimbólumokat használ, akárcsak a FORTRAN.
- Programming Language One (PL/I) - mindenki számára hasznosnak kellett volna lennie.
- Kezdők Minden célt szolgáló szimbolikus utasításkód (BASIC) - a kezdők programozásának segítésére készült.
- C - egy programozási nyelv, amely sok mindenre alkalmas. Dennis Ritchie 1969 és 1973 között dolgozott rajta az AT&T Bell Labs-ben.
Objektum-orientált programozás
Miután sokan elkezdték használni a procedurális nyelveket, feltalálták az objektumorientált programozási nyelveket. Ezekben a nyelvekben az adatokat és a hozzájuk tartozó "módszereket" (az adatok manipulálásának módjait) egy "objektumba" helyezik. Néhány programozó, például Richard Stallman, nem ért egyet azzal, hogy az objektumorientált nyelvek jobban alkalmasak arra, hogy elmagyarázzák a számítógépnek az ötleteket, mint a procedurális nyelvek.
Mivel az objektumorientált programozás egy paradigma, nem pedig egy nyelv, az emberek olyan objektumorientált assembly nyelveket készítettek, mint a HLA (High Level Assembly).
Deklaratív paradigmák
Ezzel egy időben néhányan deklaratív programozási nyelveket készítettek. A deklaratív nyelvek közül jól ismert az SQL (a táblázatokban dolgok hozzáadására és eltávolítására szolgáló nyelv).
Kapcsolódó oldalak
- Mindset
- Típus rendszer
- Turing teljesség
Kérdések és válaszok
K: Mi az a programozási paradigma?
A: A programozási paradigma a programozási nyelvek csoportosítása a működésük alapján.
K: Mi a paradigmák két fő csoportja?
V: A paradigmák két fő csoportja az imperatív és a deklaratív.
K: Miben különböznek az imperatív és a deklaratív paradigmák?
V: Az imperatív paradigmák a kód futtatásának módját vizsgálják, például a mellékhatások engedélyezése vagy a dolgok meghatározott sorrendben történő elvégzése, míg a deklaratív paradigmák a kód csoportosításának módját vizsgálják, például a kód egy vagy két darabba (vagy inkább sok kis darabba) való rendezését.
K: Lehet egy nyelv imperatív és deklaratív paradigma is?
V: Igen, egy nyelv lehet egyszerre imperatív és deklaratív paradigma is.
K: Hogyan csoportosítja egy programozási paradigma a nyelveket?
V: A programozási paradigmák a nyelveket aszerint csoportosítják, hogy mit csinálnak. Azt nézik, hogy a kód hogyan fut, hogyan van csoportosítva, és milyen sorrendben és milyen darabokból áll össze a program.
K: Vannak más típusú programozási paradigmák is az imperatív és a deklaratív mellett?
V: Igen, vannak más típusú programozási paradigmák is az imperatív és a deklaratív mellett. Egyesek például a kód futtatásának módját vizsgálják (például oldalhatások engedélyezése), míg mások a kód csoportosítását (például a kód egy vagy két darabba rendezése).
K: Minden nyelv csak egyféle programozási paradigmához tartozik?
V: Nem, nem minden nyelv tartozik csak egyféle programozási paradigmához; egyes nyelvek többféle paradigmához is tartozhatnak.