Mis on deklaratiivne programmeerimine?

Deklaratiivne programmeerimine on viis täpsustada, mida programm peaks tegema, selle asemel et täpsustada, kuidas seda teha. Enamik arvutikeeli põhinevad probleemi lahendamiseks vajalikel sammudel, kuid mõned keeled näitavad ainult probleemi olulisi omadusi ja jätavad arvuti otsustada, milline on probleemi parim lahendus. Väidetavalt toetavad esimesed keeled kohustuslikku programmeerimist, teised aga deklaratiivset programmeerimist.

Võib kaaluda järgmist SQL-i näidet, et saada müügiandmetest kõik müügipiirkonnad, kus kasum ületab teatud arvu, näiteks 700 USA dollarit (USD).

Valige piirkond, kasum müügist, kus kasum > 700

See avaldus ei näita, mida SQL-süsteem peab andmete saamiseks tegema. SQL-süsteem saab läbida iga müügikirje ja teha kindlaks, kas tingimus on täidetud, või saab eelsorteeritud andmetest kiiresti hankida paar parimat kirjet. Avaldus näitab ainult soovitud andmete olemust.

Prolog on deklaratiivne programmeerimiskeel, mis näitab olemite vahelisi loogilisi seoseid.

esivanem (M, C) :- ema (M, C)
esivanem (X, Z) :- ema (X, Y), esivanem (Y, Z)
Ülaltoodud programm näitab tõepärasid. Kui M on C ema, siis M on C esivanem. Kui X on mõne inimese Y ema, kes on Z esivanem, siis X on Z esivanem. Seda ja mõningaid ema-lapse fakte arvestades programm oskab vastata küsimustele kogu emapoolse sugupuu kohta.
Programmi täitmise ajal loob Prolog süsteem hulga tõeseid väiteid, luues seeläbi teadmistebaasi. Seda teadmistebaasi otsitakse tõhusalt iseseisvalt. Ülaltoodud programmi looja ei täpsusta, kuidas otsida.
HTML ja CSS on deklaratiivsed programmeerimiskeeled. Näiteks HTML-i näide

Arvutiprogrammeerimise ja arvutiteaduse valdkonnas on operatsioonilepingud viis täpsustada või dokumenteerida, kuidas konkreetne funktsioon muudab programmi erinevaid elemente. Erinevalt abstraktsest programmeerimisliidest (API) või liidese juhtimisdokumendist kasutatakse arvutirakenduse või -süsteemi loomise arendus- ja modelleerimisfaasis abiks töölepinguid. Kõige elementaarsemal tasemel määratleb leping toimingu neli tunnust, täpsemalt toimingu nime, mis tahes viiteid toimingule projekteerimise muudes valdkondades, mis tahes nõuded sisendile või olekule enne toimingu sooritamist ja toimingu olekut. süsteem või muutujad pärast toimingu sooritamist. Leping ei määratle midagi konkreetset selle kohta, kuidas toiming sisemiselt toimib, vaid käsitletakse ainult seda, kuidas programmi olek selle kasutamine mõjutab.

Operatsioonilepinguid ei koostata üldiselt iga programmimudeli toimingu jaoks. Selle asemel on need reserveeritud toimingute jaoks, mis on eriti keerulised või raskesti jälgitavad. Mitmed arvutimodelleerimiskeeled, nagu Unified Modeling Language (UML) toetavad operatsioonilepinguid ja neil on viise, mis aitavad visualiseerida, kuidas programmi olek võib pärast toimingu sooritamist muutuda.

Esimesed kaks määratlust, mis on vajalikud operatsioonilepingute loomiseks, on toimingu nimi, mis võib olla ükskõik milline, ja mis tahes ristviited. Ristviide on loend muudest programmimudeli operatsioonidest või piirkondadest, mis kasutavad määratletavat toimingut või mida toiming oma töötlemisel kasutab. See aitab näha, kuidas üldine disain toimib, ja on eriti kasulik näha, kuidas mudeli ühe piirkonna muudatused mõjutavad teisi valdkondi.

Operatsioonilepingud määratlevad järgmiseks operatsiooni läbiviimiseks vajalikud eeltingimused. See võib hõlmata nõuet, et teatud muutujad laaditaks sobivate väärtustega või et teatud programmiosad oleksid kindlas olekus. Kui toimingu sooritamisel eeltingimused ei ole täidetud, siis toimingut ei toimu või võib see täielikult ebaõnnestuda. Lepingut kasutatakse abstraktse vahendina, mistõttu on eeldused tavaliselt üsna üldised ja hõlmavad rohkem programmi olekut kui konkreetseid muutujaid.

Operatsioonilepingute viimane osa määratleb kõik järeltingimused. Järeltingimused on programmimudeli üksuste loend, mida on toimingu täitmise tõttu muudetud. See võib määrata muudatusi andmestruktuuris või programmi oleku muudatusi, näiteks juhtimise nihutamist eraldi moodulisse. Täpselt määratletud töölepingute abil saab programme enne tegeliku rakendamise algust tõhusalt modelleerida ja muuta.

Modemi veaparandusprotokollid on meetodid andmeedastusvigade tuvastamiseks ja parandamiseks. On olemas nii riistvara- kui ka tarkvarapõhised protokollid ja neid kasutatakse sageli koos. Üksikmodem kasutab sideühenduse müra kompenseerimiseks tavaliselt sisseehitatud riistvarapõhist protokolli. Süsteemid lingi mõlemas otsas kasutavad sageli tarkvarapõhiseid protokolle, et tulla toime probleemidega, mida modem ei kontrolli.

Edastusvigade parandamine on üldiselt mitmeastmeline protsess. Enne iga andmepaketi saatmist lingi kaudu arvutab edastav modem selle kontrollsumma ja lisab selle paketti. Kontrollsumma määramiseks kasutatakse sageli tsüklilise koondamise kontrolli (CRC) algoritmi. Kui pakett saabub, arvutab vastuvõttev modem välja ka andmete kontrollsumma ja võrdleb seda juba paketis olevaga. Kui need kaks ei ühti, teatab vastuvõtja saatjale, et tal on vaja vigane andmepakett uuesti saata.

1980. aastatel tutvustas Microcom, Inc. riistvarapõhiste modemi veaparandusprotokollide perekonda. Seda nimetatakse Microcomi võrguprotokolliks (MNP) ja see koosneb kümnest nummerdatud klassist, mis parandasid aja jooksul jõudlust. MNP klass 3 kõrvaldab näiteks üksikutest andmebaitidest mittevajalikud kadreerimisbitid. MNP klass 5 tihendab andmed enne nende saatmist, tuginedes klasside 1–4 täiustustele. MNP klass 6 muudab andmete ribalaiust, eelistades vastavalt vajadusele ühte suunda teisele ja vähendab ühenduse käivitamise aega.

MNP võeti laialdaselt kasutusele ja see on sisse ehitatud enamikesse telefonipõhistesse modemitesse. Üks täiustatumaid riistvarapõhiseid modemi veaparandusprotokolle võeti kasutusele 1990. aastate alguses. Rahvusvahelise Telekommunikatsiooni Liidu telekommunikatsiooni standardimise sektori (ITU-T) V.42 standard lisati kiiresti MNP kõrvale modemitesse. Selle modemite lingipääsuprotseduur (LAPM) sisaldab MNP-ga võrreldes paremat andmete tihendamist. Samuti lisab see edastatavatele andmetele vähem üldkulusid ning toetab paremini voo juhtimist ja sünkroonset edastamist.

Riistvarapõhised modemi veaparandusprotokollid võivad olla väga head tagamaks, et iga andmepakett saabub tervena. Paljusid failiedastusi saab aga tõhusamalt hallata, kasutades nii tarkvara- kui ka riistvaraprotokolle koos. Kui ühendus katkeb väga suure faili saatmisel, peavad paljud süsteemid alustama faili algusest. Seevastu mõned tarkvarapõhised veaparandusprotokollid jätavad meelde, kus edastamine pooleli jäi, ja jätkavad sealt. Tarkvaraprotokollid saavad ka paremini hallata voojuhtimist süsteemis väljaspool modemiühendust.

XMODEM oli üks varasemaid tarkvarapõhiseid modemi veaparandusprotokolle, mis loodi 1970. aastate lõpus. See oli väga lihtne, sisaldades igas paketis ploki numbrit, primitiivset kontrollsummat ja mõnda markerbaiti. Selle kontrollsumma algoritm oli problemaatiline ja paljud inimesed rakendasid peagi lisafunktsioonidega variatsioone. Nende hulka kuulusid suuremad ploki suurused, mitme faili ülekandmine ja uue paketi käivitamine enne eelmise kontrollimist. YMODEM, mis oli XMODEMi järglane 1980. aastate keskel, loetles paljud neist valikuliste täiustustena.
ZMODEM ja selle variandid on palju täiustatud tarkvarapõhised modemi veaparandusprotokollid. 1986. aastal YMODEMi autori poolt välja töötatud ZMODEM sisaldab palju paremat CRC-algoritmi, mis kasutab 32 bitti. See võib liikuda järgmise paketi juurde, ootamata praeguse kinnitust, parandades läbilaskevõimet või sõnumi edastamist. Kui ühendus katkeb, saab ZMODEM taaskäivitada suure failiedastuse sealt, kus see pooleli jäi. Hilisemad variatsioonid hõlmasid veelgi suuremaid plokkide suurusi ja pakettandmete automaatset tihendamist.