Teoria automatelor nu este învățată pretutindeni. Universitățile tehnice sunt predate această teorie așa cum este aplicat la sinteza echipamente digitale, dar nu și în ceea ce privește programarea (Aceste constatări făcute de colegul meu Shalyto AA pentru universități de top din Sankt-Petersburg).
Viața este un lucru delicat. Mulți care au absolvit universitățile tehnice la începutul (mijlocul) anilor optzeci au trebuit să își schimbe domeniul de activitate de mai multe ori. Circuitry inceput brusc sa se ocupe cu integrat film subțire tehnologia de fabricație de circuit, un specialist în dispozitive electronice cu vid pentru „pană“ în circuitele microprocesor. A obținut educația "largă" primită în universitățile sovietice, "nimic despre tot". Mulțumesc dragi Leonid Ilici pentru copilăria noastră fericită.
Cu toate acestea, după mastering-ul [programării automate], se pune întrebarea: cum aș putea programa altfel? Programarea automată permite rezolvarea aproape oricăror sarcini ciclice complexe, cu costuri minime pentru depanare.
Așa este. Alte tehnologii de programare ar trebui recomandate numai celor care sunt predispuși la sadomasochism.
Relevanța programării automate
De ce tehnicile automate de programare sunt deosebit de relevante acum? Există două probleme:
- comportamentul imprevizibil al codului de program dezvoltat prin intermediul RAD;
- dispariția "culturii programării".
Comportamentul imprevizibil al codului de program dezvoltat de RAD
La începutul anilor nouăzeci, au apărut instrumente de dezvoltare rapidă a aplicațiilor (RAD), care includ, în special, astfel de produse cunoscute Borland precum Delphi și C ++. Sistemele de programare de mai sus permit nu numai programarea în sensul obișnuit al cuvântului, ci și desenarea efectivă a programelor, oprirea componentelor vizuale din VCL în formele ferestrei.
Orice obiect vizual VCL este caracterizat de un număr de proprietăți, metode și evenimente. S-ar părea că manipularea simplă a atributelor enumerate poate forța programul dezvoltat să facă ceea ce dezvoltatorul-programator necesită de la acesta. Nu era acolo.
Charles Calvert, în capitolul introductiv "Programarea vizuală este RAD" din cartea sa "Delphi 2. Enciclopedia utilizatorului", recunoaște sincer:
Unul dintre aspectele ironice ale mediilor ca Delphi este că este un mare avantaj pentru începători, dar uneori confunde programatori cu experiență. Deci, VCL tinde să ascundă implementarea exactă a anumitor obiecte, împiedicând astfel pe străini să schimbe comportamentul implicit al codului,
Astfel, partea ironică și un mare beneficiu merg la cineva lateral. pentru comportamentul defaudat al codului este viclean și mijlocul secret al RAD. Un exemplu clasic de comportament de cod imprevizibil a fost clar demonstrat de poet, "fondatorul" programării orientate pe obiecte. Un poet care pentru noi este "totul".
"Unchiul meu - cele mai sincere reguli
Atunci când nu sa îmbolnăvit o glumă,
Sa respectat forțat
Și nu ar fi putut să-l inventeze mai bine. "
Ce este "unchiul lui Puskin" din poziția de programare orientată pe obiect:
Care este comportamentul TUncle? De îndată ce valoarea proprietății de sănătate a fost modificată de codul programului (la întreg "hurly"), funcția Respect ("respectat el însuși forțat") "a tras". Și ar trebui să fie? Nu neapărat, pentru că există o funcție numită Gândește, prin care unchiul ar fi inventat ceva mai bun. Poate că interpretarea nu este în întregime corectă, ci clară.
Cultura programării
Despre cultura programării nu se poate spune decât că cultura se estompează încet, dar sigur. (Programatorii-profesioniști ai școlii sovietice au lăsat deoparte, probabil, o lacrimă a unui om zgârcit). Acum, mai mulți codificatori. diferă de programatorii-dezvoltatori prin faptul că nu sunt capabili să stabilească o sarcină. și descrie-o în documentele programului.
- comportamentul codului programului, dezvoltat exclusiv prin RAD, este inițial imprevizibil;
- astfel încât comportamentul codului de program să devină previzibil, trebuie să învățați cum să controlați comportamentul codului.
Cum să învăț cum să controlați comportamentul codului de program?
Este foarte simplu - metoda de programare automată - aranjarea "punctelor de control" cu utilizarea instrucțiunii casei - implementarea software-ului mașinii de stat finite.
Implementarea mașinii de stat
Ca exemplu de implementare a unui automat finit, care ilustrează clar sensul aranjamentului punctelor de control. noi folosim schiurile de schi, care urmează să fie trecute, cu cerința obligatorie de a păstra în limitele standardelor de timp. a trebuit tuturor.
Trasee de schi - plasarea punctelor de control
Figura de mai sus arată o pistă de schi. Punctul 0 - începe și termină, punctele 1-7 - control. În punctele de control sunt judecătorii, stabilind timpul de trecere și numărul de biliard al schiorului.
Cu o organizație similară de trecere a standardului pentru schiorii de schi, schiorul se dovedește a fi "fixați" punctele de control la traiectoria pistei de schi. Dacă la linia de sosire se dovedește că schiorul nu a trecut cel puțin unul dintre punctele de control - reluarea este inevitabilă. Și dacă "tăiați colțurile" între punctele de control?
Odată ce viața a pus în fața unei alegeri: fie de zece kilometri de-a lungul curbei, drumul rupt, dar pavate, sau „tăiat“ și să treacă direct prin pădure, aproximativ trei kilometri. Trei kilometri "în linie dreaptă" au fost înfundați (în Belarus) și au fost depășiți în patru ore. Viața a respins afirmația că „distanța cea mai scurtă dintre două puncte este o linie dreaptă“, și a confirmat celălalt - „teorie seacă, prietenul meu, dar pomul vieții este verde magnific.“
Încercarea de a "tăia colțurile" între punctele de control de-a lungul traiectoriei "roșii" fie nu va aduce un câștig semnificativ în timp, nici nu va duce la o pierdere semnificativă a acestora. Nu a respectat standardul - reluați.
Nu este dificil să se implementeze programabil "trecerea standardului pentru o cruce de schi" sub forma unui automat finit.
Implementarea software-ului mașinii de stat
La implementarea mașinii de stat finit, algoritmul a fost ușor complicat. Schiorul trebuie să fie transportat la viteza de zgomot, timpul de deplasare de la cel anterior până la următorul punct de control este limitat la cinci secunde.
Aparatul de stat este implementat folosind Delphi 7. Forma butonului de resetare 8, 0 este numit btnStart, restul - CP1-CP7 (cp - punctul de control). Apăsarea unui buton este echivalentă cu cea a unui schior care intră în punctul de control. Handlerul de evenimente OnClick alocat tuturor celor opt butoane are un singur buton. Procedura pregătită Eliberare.
Etichetele Label1-3 solicită utilizatorului schior. butonul pe care trebuie să îl apăsați în continuare, arată timpul rămas înainte de apăsarea și rezultatul. Fragmentele din textul programului de mașină finită de stat sunt prezentate mai jos.
Textul programului de mașină de stat
Cum functioneaza masina de stat
Programul imediat după lansare va afișa un mesaj către utilizator - "Apăsați butonul 0". Care poate fi răspunsul:
- un utilizator cu mâini mici jucăuș va apăsa orice, dar butonul 0;
- utilizatorul ascultător va da clic pe butonul 0.
Reacția mașinii de stat finită cu mâinile mici
Trebuie remarcat faptul că un utilizator obraznic poate apăsa butoanele până la sfârșitul luminii, dar nimic nu va ieși din ea. Apăsând pe oricare dintre butoanele cp1-cp7 înainte de a apăsa butonul btnStart mașina de stare va ignora pur și simplu, deoarece în procedura de eliberare există linii:
În fragmentul de cod al mașinii de stat nu există nici o "capcană" pentru variabila de mod 0. Codul din instrucțiunea caz nu va fi executat. Programul o va ocoli pur și simplu. Indicatorul liniei curente de cod în modul debugger (doar un indicator) se va întoarce cu încăpățânare la începutul procedurii.
Răspunsul unei mașini de stat finite la un utilizator obedient
De îndată ce utilizatorul apasă butonul 0 (btnStart), variabilele mode și s_mode iau valorile 1 și respectiv 0. Pointerul "nu reușește" în procedura de trecere a "punctului de control" și va fi în interiorul ramurii 0 caz s_mode din.
Mai mult, după executarea codului
aparatul de stat va aștepta evenimentele onclick butonul CP1 care corespunde s_mode de stat = 1. Nici un utilizator de convingere nu poate forța aparatul de stat pentru a răspunde la apăsarea oricărui alt buton, cu excepția CP1, deoarece atunci când variabilele de inegalitate o_mode ( «de așteptat» buton) și s_mode (apăsat de fapt, butonul) indicatorul este o prostie să se întoarcă la începutul procedurii -zhdat eveniment OnClick este butonul CP1 .
Mai mult, codul de mai sus al mașinii de stat pornește temporizatorul. Timerul încetinește încet cinci secunde și oprește "crucea de schi" dacă utilizatorul nu a apăsat butonul cp1.
În acest mod este deosebit de convenabil să se "construiască" programe de comunicare care implementează protocoale de comunicare. Să presupunem că un automat Un finit de la starea 1 a trimis secvența de octet (1) Aparatul de stat, sa mutat la starea următoare (2) și așteaptă un răspuns clar (2) de pe masina B. Aparat B poate trimite într-o linie de orice (în termen de cinci secunde). Dar dacă cinci secunde automaton A nu primește un răspuns de așteptat, (2) a aparatului B - toate tryndets. Cronometrul informează că răspunsul așteptat al automatului B nu a fost recepționat într-un interval de timp dat. Utilizatorul vede în mod clar unde, la ce etapă a mașinii de stat a existat un eșec în schimbul de date. Și ia decizia unui comandant.
Modificarea mașinii de stat
Când efectuați modificări la seria mașinii cod de stat „alungi“ indicatorul pe ramuri ale programului și se va opri, de așteptare pentru următoarea apăsând 0. Cu alte cuvinte, aparatul de stat după programele de ramură de utilizator „kick“ se vor trece toate punctele de control, care sunt în mod clar indicate și programator, ca toate automatele normale, se va întoarce la starea inițială.
Analogic cu o mașină cu apă gazoasă. Ei au hrănit automatul cu trei copeici, și-au îndreptat un pahar de sifon cu sirop de pere și s-au întors la starea inițială - așteptând ca cineva să-i hrănească o altă monedă.
Este convenabil să urmăriți o astfel de execuție utilizând instrumente de depanare.
Notă - după terminare; în program este necesar să adăugați altceva. care se va ocupa de situațiile de criză.
Mașina de stat finită funcționează pe principiul "pasului spre fotografierea laterală" (reluarea standardelor pentru crucea de schi). Masina de tip "Scroll" sau "cheat" nu va da nici utilizator (codul original), nici programul în sine (versiunea modificată a codului). Mașina va forța ambele să treacă "punctele de control" exact așa cum a scris programatorul.
Codul mașinii de stat finite abundă cu ramuri, dar ramificații - structuri logice "alegere" - într-o formă explicită, ca și cum nu. Declarația cazului face ca textul programului să fie atât de "transparent" încât întrebarea "ce se întâmplă dacă" cineva să-și dea degetul și să ajungă la punctul însuși. Și cât de "transparent" este construcția dacă a> 0 atunci b: = 0 altfel dacă a<0 then b:=a else if a<>b apoi (și așa mai departe.)? Este vorba de cultura de programare - scriind cod ușor de citit.
Codul automatului finit este reciproc ortogonal. Când modificați codul, dacă adăugați noi fragmente de caz la cod, nu este necesar să modificați codul sursă. Programul nu "crawlează" - probabilitatea de eroare în codare este redusă.
concluzie
Deoarece a fost menționat despre Pușkin, este păcat să nu-l amintim pe Mayakovski, care a anticipat "nașterea" operatorului cazului (dar fără scara lui de marcă).
- De la o cioară
Băiatul este doar un laș.
Acest lucru este foarte rău.
Acest lucru, deși el însuși este de sus,
susține cu o pasăre formidabilă.
Bravo băiat, bine,
în viață este util. "
Iată ce se întâmplă:
băiat de caz
Acum, când a devenit exemplu clar de modul în care aparatul de stat controlează comportamentul codului de program, puteți trece în condiții de siguranță pentru a citi articolul de profesorul B. P. Kuznetsov și la analiza „algoritmi ciclice arbitrare prezentate sub forma unui grafic al unei tranziții automatului finite.“ Mult noroc!
Pentru a comanda serviciile firmei OOO "Documentația tehnică", puteți să o trimiteți prin e-mail. mail la admin @ tdocs. su (fără spații), tel. 8-910-468-09-28, 8-916-631-48-82 sau sub formă de contacte.