Hot.lt logo Hot.lt meniu
karščiausios IT naujienos
pasirink skiltį  
-atnaujinta 2001 04 16-
 
Turinys
Laimėk prizą!
El.prekyba
Įdomybės Internete
Atsiliepimai
Prenumeruokitės!
Klausk-atsakys!
Keiskimės nuorodomis!
Anekdotai
WWW
Menas:
Ars Novus, meno galerija
Žiniasklaida:
Populiarios TV laidos
Žiniu Radijas, tiesiogine transliacija
Laisvalaikis:
Akvariumai, fauna, flora
Įdarbinimas:
Preilė: darbuotojų paieška
.
.
Karšta
Kasijus
Gyvenimas po tikrovės
Egzistencializmas
Religiniai anekdotai
Povandeninė civilizacija
Cz. Milosz. Ulro žemė
Fermi paradoksas
I.Naživinas. Judėjas
Traktatas apie dvi Sarmatijas
Erazmo Stelos paraštėse
Elementariosios dalelės
Geologijos pionierius
Minčių valdymas
K.Jungas.Vėlyvos mintys
K.Saja. Molynė
Kolonizavimo protokolas
Placebo
Profsąjungos
Ateivių civilizacijos
Krikščionybė Egipte
Mano sielos liūdesiai
P.Adams. Senamadiška muzika
Mitas ir mokslas
J.A. Zaidelis. Riba
Emerikas Koloje
Vaišešikos mokykla
Kas Saulė,o kas Mėnulis?
"Pioneer" anomalijos
Filosofija: Konfucijus
R.W.Emersonas. Poetas
"Sutvėrėjo" žemėlapis
I.Calvino. Katinų markizė
Ramakrišnos panteizmas
Nauja sapnų teorija
"Wow" signalas
Pašalinės mintys
Odisėjas visapusiškas
Tolkieno pasaka
Rousseau. Vienišiaus svajos
Ortodoksų bažnyčia
Jėzaus kapas Kašmyre
Prekiautojai skausmu
K.Kavafis. Barbarų belaukiant
A.Einšteino panteizmas
Vienaragis zhi Kinijoje
Prabilo etruskų rašmenys
K.Jungas ir NSO
R.Kaijua. Sapnų apžavai ir problemos
Suvokimo durys
Visatos modeliai
Alisa ir musmirės
Ką žmonės mąsto Izraelyje
Archetipo koncepcija
Ūlos kraštas senovėje
Diagramos, pakeitusios pasaulį
Sielos klajonės
Suvokimo ribos
Pranašiškas Huxley
Šėtono manifestas
Pirmasis kraujas
OBE ir sapnai
Dropa diskai
Nibiru ir šumerai
Pranašas Mahometas
įvadas į Kabalą
Holografinis katinas
Kęstutis Plankas. Eilėraščiai
Netikėtas Šumero žlugimas
Oreivystės istorija
F. Kafka ir kabala
Esė apie dzūkus
Pederastai dulkina tautą
Poetas Jim Morrison
Slėpiningieji Edeno sodai
Hitleris: gyvas ar miręs?
Mankurtas: be ateities
Interneto pabaiga
E-bylos
 
 

Programavimo paradigmos

 

Procedūrinė prieš deklaratyvinę

Tai yra pagrindinė schizma apibūdinti, kaip bus programuojama. Panagrinėkime kiekvieną variantą atskirai.

Procedūrinis programavimas

Procedūrinis arba imperatyvusis programavimas naudotas pirmiausiai, nes jis artimas tam, kaip veikia kompiuteris. Jis ima vieną instrukciją ir ją „įvykdo“. Programa tėra vykdomų instrukcijų sąrašas ir, iš esmės, yra tam tikra procedūra (tarkim, skirta dviejų skaičių sudėčiai). Programavimas yra tiesiog nurodymas, ką turi atlikti mašina
sudėk du skaičius ir parodyk rezultatą - būtų procedūrinė programa, išreikšta lietuvių kalba.

Metams bėgant procedūrinis programavimas sudėtingėjo ir darėsi vis abstraktesnis. Nuo mašininių komandų pereita prie vis labiau nutolstančių nuo aparatūros instrukcijų. Pagrindinis procedūrinių kalbų vystymasis buvo funkcijų ir paprogramių hierarchijos sukūrimas. Jei ankstyvajame etape, pvz., rūšiavimas buvo realizuojamas panaudojant registrus ir mašininio lygio vykdymo išsišakojimus, tai vėliau rūšiavimas įtrauktas kaip programavimo kalbos elementas.

Dideliu proveržiu procedūriniame programavime buvo objektiškai orientuoto programavimo (OO) įvedimas. Tai leido duomenis ir procedūras sujungti į vieną paketą – objektą. Iš praktinės pusės patogu vienoje vietoje turėti duomenis ir kodą, kuris dirba su tais duomenimis. O kartu ir didelis postūmis abstraktumo link. Kodas ima mėgdžioti realaus pasaulio objektus. Programiniai elementai turi būsenas ir elgiasi tarsi realūs objektai.

Tačiau tikrovė yra tokia, kad net daugybė OO kalbų naudojama nenaudojant objektų, - taip kaip buvo senais gerais laikais. Galima sukurti įrankius, tačiau negalima priversti juos naudoti.

Deklaratyvusis programavimas

Jis remiasi idėja, kad paprasčiausiai išdėstoma problema bei tikslai leidžiant sistemai rasti būdus pasiekti sprendimą. Pvz., duodami užduotį žmogui („užprogramuodami“ jį) paprastai užduoties nesuskaidote į atskirus žingsnius.

Reikia pastebėti, kad schizma tarp šių dviejų programavimo prieigų taikoma ir vartotojo sąsajos (UI) kūrimui. Tokios kalbos kaip XAML ar MXML deklaratyviosiomis, nes parašoma UI specifikacija nesirūpinant, kaip bus sukurti UI realizuojantys objektai. Procedūrinis būdas yra tam tikra tvarka iškviesti objektų konstruktorius ir nurodyti jų savybes.

Žinomiausi deklaratyvių kalbų variantai yra funkcinės ir loginės kalbos.

Funkcinės kalbos

Šios kalbos bando programavimo kalbas suvesti į matematines funkcijas, kurių rezultatas niekada nesikeičia, pvz., sin(0.3) visada bus tas pats. Tad funkcija tiesiog yra išrinkimo veiksmas. Beje, matematinės funkcijos skiriasi nuo funkcijų programavimo kalbose. Šios gali turėti šalutinių efektų ar būsenos pokyčių, pvz.,

function pliusvienas() {
   globaluskintamasis++;
   return globaluskintamasis;
}

Tokia funkcija yra neleistina funkcinėje kalboje. Joje kintamieji nėra kintamieji ta prasme, kad kartą aprašyti savo reikšmę turi visą programos vykdymo laiką – jie yra „surišti“ su reikšme. Bet kaip tada ciklai ir sąlyginis programos vykdymas?

Yra du atsakymai. Pirma, kodėl skaičiuojate? Jei dėl to, kad tai algoritmo, kuris gražina sprendinį, dalis, to nedarykite. Tiesiog gražinkite atsakymą. T.y., jei skaičiuojate sin(0.3) iteraciniu būdu, paslėpkite iteraciją funkcijoje ir paprasčiausiai gražinkite atsakymą.

Antras atsakymas – yra funkcinis būdas tokiam veiksmui atlikti – rekursija ir funkcinė kompozicija. Pvz., funkcija f(x), gražinanti x+1, gali būti realizuota taip:

x=0;
y=f(x);
z=f(f(x));
ir t.t.

Atkreipkite dėmesį, kad išraiškoje z=f(f(f(f(x)))) tik kintamasis z yra surištas su rezultatu, joks kintamasis nekeičia savo reikšmės. Iš principo, tokia funkcija veikia tarsi ciklas.

Funkcinės kalbos turi didelį privalumą tame, kad nenurodoma, kaip reikia atlikti funkcijas, o nurodomas tik jų rezultatas. Jose aiškiau matoma, kas vyksta ir jose lengviau realizuoti tokius dalykus, kaip lygiagrečius skaičiavimus.

Loginės kalbos

Jos neretai artimesnės deklaratyviam idealui nei funkcinės kalbos. Jose irgi neleidžiama funkcijoms ar kintamiesiems keisti reikšmių, tačiau jos turi vieną papildomą ingredientą – įrodymą.

Šiose kalbose galite užrašyti:
arsusiję(A,B);

ir bus gražinta true, jei A ir B susiję, o kitu atveju - false. Tai veikia netgi tada, kai A ir B yra susiję ne tiesiogiai, o per daugelį tarpinių sąsajų. Kalboje realizuota rekursyvi paieškos priemonė, kuri įrodo teiginius priklausomai nuo to, kas yra jos duomenų bazėje. Tarkim, galite užrašyti:
arsusiję(A,x);
Kur x yra nesurištas kintamasis, - ir bus paieška bandys surasti tokią x reikšmę, kuriai teiginys būtų true. Galima užrašyti apibendrintai
arsusiję(A,B,C, x,y,z);
Kad būtų ieškoma x,y,z, kuriems predikatas yra true.

„Prolog“ kalba buvo sukurta 1972 m. Ji yra bendros paskirties kalba su įvedimo/išvedimo priemonėmis, grafika ir pan. Tačiau daugelis programuotojų mano, kad ji kiek dirbtina dėl šalutinių reiškinių dirbant su predikatais. Tačiau kai kurie uždaviniai loginėse kalbose išsprendžiami labai paprastai. Vis tik neaišku, ar loginis programavimas nuves kur nors toliau.

Dinaminės kalbos

Truputį pasitrauksime į šalį nuo aptariamo klausimo. Dabar labai daug kalbama apie dinamines kalbas. Tradicinės kalbos (Java, C++ ar C#) yra statinės kalbos. Tačiau ribą labai sunku nustatyti. Anksčiau skirdavo pagal tai, ar kalbos kompiliuojamos, ar interpretuojamos. Šiuo metu didžiausias dėmesys skiriamas tipams. Kuriant OO kalbą renkamasi, ar bus griežta tipų kontrolė. Griežtos tipų kontrolės kalbose griežtai apibrėžiama,kokio tipo objektai gali būti naudojami. Jei metodo parametro tipas yra Obuolys, tai bus klaida, jei pabandysime joje nurodyti Apelsinas tipo reikšmę. Alternatyva – bet kurioje vietoje leisti bet kokio tipo objektus ir pačiai kalbai pasirinkti, kaip geriausiai susitvarkyti – tai silpna tipų kontrolė.

Statinėse kalbose galima pažiūrėti, kokia reikšmė bus priskirta kintamajam tiesiog skaitant programos kodą. Dinaminėse to negalima, nes kas priskirta pasimato tik programos vykdymo metu. Silpna tipų kontrolė ar dinaminės kalbos palengvina programavimą, tačiau neverčia laikytis programavimo disciplinos.

Ankstyvosiose kalbose nebuvo tikrojo duomenų ir kodo atskyrimo, kas leido programoms modifikuoti savo kodą. Vėliau save modifikuojantis kodas įgavo reputaciją kaip pavojingas ir nesaugus. Kalbos atskyrė duomenis ir kodą – programoms leista manipuliuoti tik duomenimis, o ne savo kodu. Tačiau interpretuojamos kalbos, pvz., „Basic“ ar „JavaScript“ ištrynė tą skirtumą. Jose leidžiama modifikuoti kodą – tad jos tapo dinaminėmis platesne prasme.

Dinaminės kalbos gali atrodyti žingsniu į ateitį, tačiau tai ir sugrįžimas į ankstyvuosius laukinius laikus.

Grafinės kalbos

Paskutinė paradigma yra grafinės kalbos, jei jas aplamai galima vadinti kalbomis. Tai keistas OO ir deklaratyvaus aspektų mišinys su trupučiu procedūriškumo. Idėja tame, kad jei mėgdžiojame realaus pasaulio objektus, tai programiniai objektai turi įgauti vaizdą. Tai įprasta vartotojo sąsajų srityje – mygtukas, kurį galime nutempti ir pasidėti norimoje vietoje yra fizinis mygtuko objekto programinio kodo pavaizdavimas. Su juo galima ekgtis kaip su realiu objektu – tempti, keisti dydį, spalvą ir pan.UI grafiniai objektų komponentinis požiūris vis dar kuriamas – kaip ActiveX, WPF, Widgets ir t.t.

O jei tą patį principą pritaikysime programavimui. Gaunama ciklo, sąlyginio vykdymo, modulio ir kt. komponentus. Programą surenkame tarsi UI sutempdami ir susiedami komponentus į vykdymo grandinę. Tereikia vos kelių eilučių procedūrinio kodo, nurodančio tikslesnius veiksmus, tačiau dauguma komponentų susijungs vien per savybes.

Toks stilius naudojamos tokiose kalbose kaip „Scratch“, skirtose vaikams. O neseniai „Google“ paskelbė apie grafinio programavimo aplinką, skirtą „Android“ – tačiau ji dar tebetestuojama.

Ir galiausiai

Yra dar daug kitų programavimo paradigmų, tačiau jos daugiausia yra nuošalyje ir specialios aplinkoms. Pvz., sinchroninis, asinchroninis ar įvykiais valdomas programavimas, taip pat nuoseklus ir lygiagretusis skaičiavimas, yra dirbtinio intelekto (AI) ir programavimo sąveika. Pvz., naudojant genetinius algoritmus programa išsivysto, o ne parašoma.

Kiti HOT.LT straipsniai:
Kompiuterių ištakos
Ką vadiname programuotoju?
Programavimo kalbų evoliucija
Dėl kompiuterinio raštingumo
Džonas Bakas – FORTRAN tėvas
Windows 11: negi vėl déja vu?
Unix ir C kalbos kiltis ir ... šachmatai
Technika: Nuo Paleolito laikų
Programavimo kalbų istorija
Lambda išraiškos – Java į naują lygį
Optimali stulpelių eilės tvarka
Didelių duomenų analizės terminai
Aukšto lygio programavimo kalbų evoliucija
Intuicijos ribojimas matematikoje 19-me amžiuje
Pirmoji programuotoja: Ada Lovelace
Tikroji Interneto pabaiga
"Ruby" kalba ir RoR
Bilas Geitsas: kol dar nebuvo garsus
Danas Briklinas: skaičiuoklės autorius
P-NP: Ant sveiko proto svarstyklių
AWK kalba - sena ir nuolat aktuali
Ar mašina kada nors mąstys?
Programavimo kalbų klegesys
Mūšis kibernetiniame pasaulyje
Naujojo tipo mokslas
ARPANET istorija
Visata kaip kompiuteris
Kobolo motina
Haketonai

 

 
 
HOT.LT informacija  
Kviečiame visus prisidėti prie svetainės kūrimo! Rašykite el.paštu info@hot.lt Mes stengiamės Jums!  
 
Atskiri HOT skyriai  
Domeno vagystė  
Interneto romantikai  
Programinė įranga  
WebOn produktai el.komercijai  
 
Karštos WWW svetainės  
 
Informacija:  
NSO ir mistika  
ONLINE.LT  
   
Portalai  
Banga  
 
Lietuviai:  
Globalusis tinklas  
Lithuanica svetainė!  
  Mirusieji - atminimui  
   
Aukcionai, prekyba:  
Banknotai  
 
Spauda:  
Verslo žinios  
Žinių radijas  
Lietuvos rytas  
Moteris, žurnalas  
Vartiklis, elraštis  
 
Interneto paslaugos:  
Elnet@  
 
IT paslaugos:  
Baltic Amadeus  
 
Kultūra:  
Džiazo svetainė  
Lietuvos filharmonija  
Interaktyvi proza  
  Rasa, tautiniai šokiai  
Lietuvos vienuolynai  
Teatras  
Meno galerija  
Filosofija  
Mitologija  
Literatūra  
  Poezija  
  Fantastika  
  Biblijos puslapiai  
   
Mistika:  
Kabala  
Fuko švytuoklė  
   
Darbo sauga  
Sabelija  
 
Laisvalaikis:  
Akvariumai  
   

 

 
 
delo
© HOT.LT 2000.
Draudžiama be leidimo naudoti bet kurią šios svetainės dalį.
'Intelligent' design.