Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Windows 8
  • Tehnologii pentru crearea de software. Există doar paradigme de programare structurală și obiect Descrieți abordarea structurală a programării

Tehnologii pentru crearea de software. Există doar paradigme de programare structurală și obiect Descrieți abordarea structurală a programării

Programare- o ramură relativ tânără și în dezvoltare rapidă a științei și tehnologiei. Experiența realizării unor dezvoltări reale și îmbunătățirii software-ului și hardware-ului existent este în mod constant regândită, în urma căreia apar noi metode, metodologii și tehnologii care, la rândul lor, servesc drept bază pentru instrumente de dezvoltare software mai moderne. Este recomandabil să se studieze procesele de creare a noilor tehnologii și să se determine principalele tendințe ale acestora prin compararea acestor tehnologii cu nivelul de dezvoltare al programării și cu caracteristicile software-ului și hardware-ului disponibil programatorilor.

tehnologie de programare numiți un set de metode și instrumente utilizate în procesul de dezvoltare software. Ca orice altă tehnologie, tehnologia de programare este un set de instrucțiuni tehnologice, inclusiv:

  • indicarea secvenței operațiilor tehnologice;
  • enumerarea condițiilor în care se realizează cutare sau cutare operațiune;
  • descrieri ale operațiunilor în sine, unde pentru fiecare operațiune sunt definite datele inițiale, rezultatele, precum și instrucțiunile, regulamentele, standardele, criteriile și metodele de evaluare etc.

Pe lângă setul de operații și succesiunea acestora, tehnologia determină și modalitatea de a descrie sistemul proiectat, sau mai degrabă modelul utilizat într-un anumit stadiu de dezvoltare.

Programare orientată pe obiecte (OOP) este definită ca o tehnologie de creare a unui software complex bazat pe reprezentarea unui program ca un set de obiecte, fiecare dintre acestea fiind o instanță de un anumit tip (clasă), iar clasele formează o ierarhie cu moștenirea proprietăților. Interacțiunea obiectelor software într-un astfel de sistem se realizează prin transmiterea de mesaje.

Principalul avantaj al programării orientate pe obiecte în comparație cu programarea modulară este descompunerea „mai naturală” a software-ului, care facilitează foarte mult dezvoltarea acestuia. Acest lucru duce la o localizare mai completă a datelor și integrarea lor cu subprograme de procesare, ceea ce permite dezvoltarea aproape independentă a părților individuale (obiectelor) ale programului. În plus, abordarea obiect oferă noi modalități de organizare a programelor bazate pe mecanismele de moștenire, polimorfism, compoziție și conținut. Aceste mecanisme fac posibilă construirea de obiecte complexe din unele relativ simple. Ca urmare, rata de reutilizare a codului crește semnificativ și devine posibilă crearea de biblioteci de clase pentru diverse aplicații.



Dezvoltarea rapidă a tehnologiilor de programare bazate pe abordarea obiectului a făcut posibilă rezolvarea multor probleme. Astfel, au fost create medii care suportă programarea vizuală, de exemplu, Delphi, C++ Builder, Visual C++ etc. Atunci când folosește un mediu vizual, un programator are posibilitatea de a proiecta o parte, de exemplu, interfețele unui viitor produs, folosind instrumente vizuale pentru adăugarea și configurarea componentelor speciale ale bibliotecii. Rezultatul designului vizual este pregătirea unui program viitor, în care codurile corespunzătoare au fost deja introduse.

Se poate da o definitie generala: Obiect OOP este o colecție de variabile de stare și metode (operații) asociate. Aceste metode definesc modul în care un obiect interacționează cu mediul.

Sub metode obiect să înțeleagă proceduri și funcții a căror declarație este inclusă în declarația obiectului și care efectuează acțiuni. Capacitatea de a controla stările unui obiect prin apelarea unor metode determină în cele din urmă comportamentul unui obiect. Acest set de metode este adesea denumit interfața unui obiect.

Programarea structurată (SP) a apărut ca o soluție la problema reducerii COMPLEXITĂȚII dezvoltării software.

La începutul erei programării, munca unui programator nu era reglementată de nimic. Sarcinile de rezolvat nu diferă ca amploare și scară, s-au folosit în principal limbaje orientate către mașină și limbi apropiate acestora, cum ar fi Assembly, programele dezvoltate rareori atingeau dimensiuni semnificative și nu existau restricții stricte de timp. a dezvoltării lor.

Pe măsură ce programarea s-a dezvoltat, au apărut sarcini pentru care s-au determinat intervale de timp limitate pentru sarcini din ce în ce mai complexe cu implicarea unor grupuri de programatori. Și, ca urmare, dezvoltatorii se confruntă cu faptul că metodele potrivite pentru dezvoltarea sarcinilor mici nu pot fi utilizate în dezvoltarea proiectelor mari din cauza complexității acestora din urmă.

Astfel, scopul programării structurate este de a crește fiabilitatea programelor, de a asigura întreținere și modificări, facilitând și accelerând dezvoltarea.

Metodologie de programare imperativă structurată - o abordare care constă în stabilirea unei bune topologii a programelor imperative, inclusiv respingerea utilizării datelor globale și a operatorului de salt necondiționat, dezvoltarea modulelor cu conectivitate puternică și asigurarea independenței acestora față de alte module.

Abordarea se bazează pe două principii principale:

· Descompunerea secvenţială a algoritmului de rezolvare a problemei de sus în jos.

Utilizarea codurilor structurale.

Reamintim că această metodologie este cea mai importantă dezvoltare a metodologiei imperative.

Origine, istorie și evoluție. Edsger Dijkstra este considerat a fi creatorul abordării structurale. De asemenea, deține o încercare (din păcate, complet inaplicabilă programării în masă) de a combina programarea structurată cu metode de demonstrare a corectitudinii programelor create. Oameni de știință atât de cunoscuți precum H. Mills, D.E. Knuth, S. Hoor.

Metode și concepte care stau la baza programării structurate. Se află trei

Metodă descompunere algoritmică de sus în jos- constă în detalierea pas cu pas a enunţului problemei, începând cu problema cea mai generală. Această metodă oferă o structură bună. Metoda este susținută de conceptul de algoritm.

Metodă organizarea modulară a părților programului- consta in despartirea programului in componente speciale numite module. Metoda este susținută de conceptul de modul.

Metodă codificare structurală- constă în utilizarea a trei structuri principale de control la codificare. Etichetele și operatorul de salt necondiționat sunt link-uri greu de urmărit de care vrem să ne lipsim. Metoda este susținută de conceptul de control

Limbaje de programare structurală. Principala diferență față de metodologia clasică a programării imperative este eșecul (mai precis, acest sau acel grad de eșec) de la operatorul de sărituri necondiționate .

„O proprietate importantă a sintaxei pentru un programator este capacitatea de a reflectă în structura programului structura algoritmului de bază. Când utilizați o metodă cunoscută sub numele programare structurată, programul este construit ierarhic - de sus în jos (de la programul principal la subprogramele de cel mai de jos nivel), folosind doar un set limitat de structuri de control la fiecare nivel: secvențe simple de instrucțiuni, bucle și unele tipuri de ramuri condiționate. Odată cu implementarea consecventă a acestei metode, structura algoritmilor rezultați este ușor de înțeles, de depanat și modificat. În mod ideal, ar trebui să putem traduce schema de program construită în acest fel direct în instrucțiunile de program corespunzătoare care reflectă structura algoritmului.

Teorema de structurare (Boem-Jacopini): Orice program corect (adică un program cu o intrare și o ieșire fără bucle și ramuri inaccesibile) poate fi scris folosind următoarele structuri logice - secvență, selecție și repetare buclă

Corolarul 1: Orice program poate fi redus la o formă fără o declarație goto.

Corolarul 2: Orice algoritm poate fi implementat într-un limbaj bazat pe trei structuri de control - secvență, ciclu, repetiție.

Corolarul 3: Complexitatea programelor structurate este limitată, chiar dacă dimensiunea lor este nelimitată.

Programarea structurată nu este un scop în sine. Scopul său principal este de a obține un program bun („corect”), dar chiar și în cel mai bun program, uneori sunt necesare instrucțiuni goto: de exemplu, pentru a ieși din multe bucle imbricate.

Practic, în toate limbile care susțin metodologia imperativă, este posibil să se dezvolte programe folosind și această metodologie. O serie de limbi au introdus înlocuitori speciali pentru instrucțiunea goto pentru a facilita gestionarea buclelor (de exemplu, Break and Continue in C).

Clasa de sarcini. Clasa de probleme pentru această metodologie corespunde clasei de probleme pentru metodologia imperativă. Rețineți că în acest caz este posibil să se dezvolte programe mai complexe, deoarece sunt ușor de perceput și analizat.

Programare structuralănu este prima metodologie de programare completă. Programarea structurată a avut un impact uriaș asupra dezvoltării programării. Această metodă a fost folosită pe scară largă în programarea practică și până în prezent nu și-a pierdut semnificația pentru o anumită clasă de probleme.

Abordarea structurală se bazează pe două principii fundamentale:

1 este utilizarea limbajelor de programare procedurală (Algol, Pascal, SI);

2 este o descompunere secvențială a algoritmului de rezolvare a problemei de sus în jos.

Problema este rezolvată prin aplicarea unei secvențe de acțiuni. Inițial, sarcina este formulată în termeni de intrare-ieșire. Aceasta înseamnă că unele date sunt date ca intrare în program. Programul rulează și dă un răspuns.

După aceea, începe descompunerea secvențială a întregii sarcini în acțiuni mai simple.

De exemplu, dacă trebuie să scriem un program pentru verificarea corectitudinii adresei, atunci îl vom scrie mai întâi după cum urmează:

Verificați adresa cu baza de date a adreselor disponibile

Dacă rezultatul testului este pozitiv,imprima da,

altfel tipăriți nr.

Evident, o astfel de înregistrare este afișată unu-la-unu într-un program într-un limbaj de nivel înalt, de exemplu, în Pascal.

program check_address (intrare, ieșire); varan_address: Adresa; start read_address(o _address);

if (check_database(an_address)) atunci

scrieInTMIa" ; altfel

Acest program folosește procedura citit_ abordare pentru a citi adresa și procedura Verifica_ Bază de date pentru a verifica adresa citită cu informațiile din baza de date. Acum putem continua procesul de programare pentru procedurile de nivelul următor: citirea adresei și verificarea cu baza de date.

Este foarte important ca în orice etapă programul să poată fi verificat. Pentru a face acest lucru, trebuie să scrieți stub-uri - proceduri care simulează intrarea și ieșirea din procedurile de nivel inferior. (În programul de mai sus, puteți utiliza o procedură de citire a adresei care pur și simplu înlocuiește o adresă fixă ​​în loc de intrarea terminalului și o procedură de verificare a bazei de date care nu face nimic, ci pur și simplu returnează întotdeauna adevărat.)

Programul este legat de stub-uri și poate rula. Stub-urile vă permit să testați logica de nivel superior înainte de a implementa următorul nivel.

Programarea structurată a fost clar definită importanța programării modulare atunci când dezvoltați proiecte mari, dar limbajele de programare încă nu suportau modularitatea. Singura modalitate de a structura programe a fost să le compune din subrutine sau funcții. Controlul asupra corectitudinii apelurilor de funcții, inclusiv corespondența numărului și tipurilor de argumente reale cu parametrii formali așteptați, a fost efectuat numai în etapa de execuție (conceptul de prototip de funcție a apărut mai târziu).

1.4. Bazele și istoria abordării orientate pe obiecte a programării

Programarea orientată pe obiecte a apărut și s-a răspândit datorită recunoașterii a trei probleme majore de programare.

1 - dezvoltarea limbajelor și metodelor de programare nu a ținut pasul cu nevoile tot mai mari de programe. Singura modalitate reală de a răspunde acestor nevoi a fost metoda de reutilizare a software-ului deja dezvoltat, testat și depanat.

2 - necesitatea simplificarii intretinerii si modificarii sistemelor dezvoltate. (Faptul schimbării constante a cerințelor de sistem a fost recunoscut ca o condiție normală pentru dezvoltarea sistemului, și nu ca incapacitatea sau organizarea insuficient de clară a muncii dezvoltatorilor.) A fost necesar să se schimbe modul în care sistemele software au fost construite astfel încât că modificările locale nu ar perturba operabilitatea întregului sistem și ar fi mai ușor să se facă modificări în comportamentul sistemului .

3 este o facilitate de proiectare a sistemului. Nu toate sarcinile se pretează la descriere algoritmică și chiar mai multă descompunere algoritmică, așa cum este cerut de programarea structurată. A fost necesar să se apropie structura programelor de structura sarcinilor rezolvate și să se reducă așa-numitele decalaj semanticîntre structura problemei care se rezolvă şi structura programului. Un decalaj semantic apare atunci când conceptele care stau la baza limbajului problemei și mijloacele de rezolvare a acesteia sunt diferite. Prin urmare, alături de necesitatea notării soluției în sine, este necesară și traducerea unor concepte în altele. (Compară acest lucru cu traducerea dintr-o limbă naturală în alta. Tocmai pentru că nu existau astfel de concepte în limba rusă înainte, cuvinte precum broker, offshore sau investitor. Din păcate, în programare, împrumutul de cuvinte nu este posibil.)

Deci, simplificarea designului, viteza de dezvoltare datorită reutilizarii modulelor gata făcute și ușurința modificării sunt cele trei avantaje principale ale programării orientate pe obiecte, care au fost promovate de susținătorii săi.

Programarea orientată pe obiect presupune o abordare unificată a proiectării, construcției și dezvoltării sistemului.

Apariția metodei orientate pe obiecte a avut loc pe baza tuturor dezvoltării anterioare a metodelor de dezvoltare software, precum și a multor alte ramuri ale științei.

Următoarele progrese în tehnologie au contribuit la apariția unei abordări orientate pe obiecte a proiectării sistemului:

1 - Dezvoltarea tehnologiei informatice, în special suport hardware pentru conceptele de bază ale sistemelor de operare și construcția de sisteme orientate funcțional.

2 - Progrese în metodologia de programare, în special sisteme modulare și încapsularea informațiilor.

3 - Teoria construcției și modelării sistemelor de management al bazelor de date a introdus în programarea obiectelor ideile de construire a relațiilor între obiecte.

4 - Cercetările în domeniul inteligenței artificiale au făcut posibilă o mai bună înțelegere a mecanismelor abstractizării. Teoria cadrelor, propusă de Minsky pentru a reprezenta obiecte reale în sistemele de recunoaștere a modelelor, a dat un impuls puternic nu numai sistemelor de inteligență artificială, ci și mecanismelor de abstractizare din limbaje de programare.

5 - Dezvoltarea filozofiei și a teoriei cunoașterii. În multe feluri, construirea sistemelor orientate pe obiecte este un anumit mod de a privi lumea reală modelată. În acest aspect, filosofia și teoria cunoașterii au avut o influență puternică asupra modelului obiectual. Chiar și grecii antici considerau lumea sub formă de obiecte sau procese. Descartes a prezentat presupunerea că o analiză orientată pe obiect a lumii din jurul nostru pare naturală unei persoane. Minsky a sugerat că mintea se manifestă ca o interacțiune a agenților care nu pot gândi separat.

Abordarea orientată pe obiect a programării este susținută de limbaje de programare precum Smalltalk, C++, Java etc. Limbajele sunt principalele instrumente ale programării orientate pe obiecte, în timpul dezvoltării lor au apărut majoritatea ideilor care stau la baza metodei orientate pe obiecte.

Primul pas către crearea unui model de obiect ar trebui să fie considerat apariția unor tipuri de date abstracte. Se crede că prima implementare completă a tipurilor de date abstracte în limbaje de programare este limbajul Simula.

Au apărut apoi (și continuă să apară) alte limbaje orientate pe obiecte care definesc starea actuală a programării. Cele mai comune dintre ele sunt C++, CLOS, Eiffel, Java.

  • Structural
    • Divizia de responsabilitate:
  • Șablon: software, care se bazează pe reprezentarea programului sub forma unei structuri ierarhice de blocuri. Propus în anii 70 ai secolului XX de E. Dijkstroy, dezvoltat și completat de N. Wirth.

    Conform acestei metodologii

    1. Orice program este o structură construită din trei tipuri de structuri de bază:
      • executie secventiala- o singură executare a operaţiilor în ordinea în care sunt scrise în textul programului;
      • ramificare- o singură executare a uneia dintre două sau mai multe operaţii, în funcţie de îndeplinirea unei anumite condiţii date;
      • ciclu- executarea repetată a aceleiași operații până la îndeplinirea unei anumite condiții (condiția de continuare a ciclului).
      În program, structurile de bază pot fi imbricate una în alta în mod arbitrar, dar nu sunt furnizate alte mijloace de control al secvenței de operații.
    2. Repetarea fragmentelor de program (sau nerepetarea, dar reprezentând blocuri de calcul integrale logic) poate fi realizată sub forma unui așa-numit. subrutine (proceduri sau funcții). În acest caz, în textul programului principal, în locul fragmentului plasat în subrutină, se inserează instrucțiunea apel de subrutină. Când se execută o astfel de instrucțiune, se execută subprogramul apelat, după care execuția programului continuă cu instrucțiunea care urmează instrucțiunii de apelare a subrutinei.
    3. Dezvoltarea programului se realizează pas cu pas, folosind metoda „de sus în jos”.

    În primul rând, este scris textul programului principal, în care, în locul fiecărui fragment logic de text conectat, este inserat un apel către subrutina care va executa acest fragment. În loc de subrutine reale, funcționale, în program sunt inserate „stub-uri” care nu fac nimic. Programul rezultat este verificat și depanat. După ce programatorul este convins că subrutinele sunt apelate în ordinea corectă (adică structura generală a programului este corectă), rutinele stub sunt înlocuite secvenţial cu altele reale, iar dezvoltarea fiecărei subrutine se realizează în acelaşi mod. mod ca program principal. Dezvoltarea se termină atunci când nu a mai rămas un singur „gag” care să nu fi fost îndepărtat. O astfel de secvență asigură că, în fiecare etapă de dezvoltare, programatorul se ocupă simultan de un set vizibil și de înțeles de fragmente și poate fi sigur că structura generală a tuturor nivelurilor superioare ale programului este corectă. Atunci când mențineți și faceți modificări în program, devine clar care proceduri trebuie schimbate și acestea sunt realizate fără a afecta părțile programului care nu sunt direct legate de acestea. Acest lucru asigură că, atunci când faceți modificări și remediați erori, o parte a programului care este în prezent în afara zonei de atenție a programatorului nu va eșua.

    Teorema de programare structurata:

    Articolul principal: Teorema Bohm-Jacopini

    Orice schemă de algoritm poate fi reprezentată ca o compoziție de blocuri de început și de sfârșit imbricate, dacă, atunci, altfel, instrucțiuni condiționate, bucle cu o precondiție (while) și pot exista variabile logice suplimentare (steaguri).
    Această teoremă a fost formulată de matematicienii italieni C. Bohm și G. Jacopini în 1966 și ne spune cum să evităm utilizarea operatorului goto.

    Istorie

    Metodologia de programare structurată a apărut ca urmare a complexității tot mai mari a sarcinilor rezolvate pe computere și a complicației corespunzătoare a software-ului. În anii 1970, volumul și complexitatea programelor au atins un asemenea nivel încât dezvoltarea „intuitivă” (nestructurată, sau „reflex”) a programelor, care era norma într-o perioadă anterioară, a încetat să mai satisfacă nevoile practicii. Programele deveneau prea complexe pentru a fi întreținute corespunzător, așa că era necesară o anumită sistematizare a procesului de dezvoltare și a structurii programului.

    Cea mai puternică critică din partea dezvoltatorilor abordării structurale a programării a fost operatorul GOTO (operatorul de salt necondiționat), care era atunci disponibil în aproape toate limbajele de programare. Utilizarea incorectă și necugetată a tranzițiilor arbitrare în textul programului duce la programe confuze, prost structurate (așa-numitul cod spaghetti), din textul cărora este aproape imposibil de înțeles ordinea de execuție și interdependența fragmentelor.

    Urmărirea principiilor de programare structurată a făcut ca textele programelor, chiar și cele destul de mari, să poată fi citite în mod normal. Înțelegerea programelor a devenit mult mai ușoară, a devenit posibilă dezvoltarea programelor într-un mod industrial normal, când un program poate fi înțeles fără prea multe dificultăți nu doar de autorul său, ci și de alți programatori. Acest lucru a făcut posibilă dezvoltarea unor sisteme software destul de mari pentru acea vreme de către forțele echipelor de dezvoltare și menținerea acestor complexe timp de mulți ani, chiar și în fața schimbărilor inevitabile în componența personalului.

    Metodologia dezvoltării software structurale a fost recunoscută drept „cea mai puternică formalizare a anilor ’70”. După aceea, cuvântul „structural” a devenit la modă în industrie și a început să fie folosit peste tot acolo unde era necesar și acolo unde nu era necesar. Au fost lucrări la „proiectare structurală”, „testare structurală”, „proiectare structurală” și așa mai departe. În general, s-a întâmplat cam același lucru care s-a întâmplat în anii 90 și se întâmplă în prezent cu termenii „obiect”, „orientat pe obiect” și „electronic”.

    Iată câteva dintre avantajele programării structurate:

    1. Programarea structurală vă permite să reduceți semnificativ numărul de opțiuni pentru construirea unui program conform aceleiași specificații, ceea ce reduce semnificativ complexitatea programului și, mai important, facilitează înțelegerea acestuia de către alți dezvoltatori.
    2. În programele structurate, operatorii legați din punct de vedere logic sunt mai apropiați vizual, iar cei slab înrudiți sunt mai departe, ceea ce face posibil să se facă fără diagrame de flux și alte forme grafice de afișare a algoritmilor (de fapt, programul în sine este propria sa diagramă).
    3. Procesul de testare și depanare a programelor structurate este mult simplificat.

    Vezi si

    Legături


    Fundația Wikimedia. 2010 .

    • Mahajanapada
    • cămilă

    Vedeți ce este „Programare structurată” în alte dicționare:

      Programare structurată- metodologia si tehnologia de dezvoltare a sistemelor software, bazata pe principiile: programarii de sus in jos; programare modulară. În acest caz, logica algoritmului și a programului trebuie să utilizeze trei structuri principale: secvenţial ... ... Vocabular financiar

      programare structurată- struktūrinis programavimas statusas T sritis automatika atitikmenys: engl. codificare structurată; programare structurată vok. strukturelle Programierung, f rus. programare structurată, n; programare structurată, n pranc.… … Automatikos terminų žodynas

      Programare structurată- 46. Programare structurată Programare structurată Sursa: GOST 19781 90: Furnizare software a sistemelor de procesare a informaţiei. Termeni și definiții … Dicționar-carte de referință de termeni ai documentației normative și tehnice

      Programare- Acest articol trebuie rescris complet. Pot exista explicații pe pagina de discuții. Acest termen are alte semnificații, vezi Programe... Wikipedia

      PROGRAMARE- 1) procesul de elaborare a unui program, a unui plan de acţiune. 2) O secțiune de informatică care studiază metodele și tehnicile de programare. Cu un anumit grad de convenționalitate, P. ca disciplină se împarte în: teoretic, studiul matematicii. abstracții ale programelor (ca obiecte cu ...... Enciclopedia fizică

      Programare bazată pe prototip- Programarea prototipului este un stil de programare orientată pe obiecte în care nu există un concept de clasă, iar reutilizarea (moștenirea) se face prin clonarea unei instanțe existente a obiectului prototip. ... ... Wikipedia

      Paradigma (programare)- O paradigmă de programare este un set de idei și concepte care definește stilul de scriere a programelor. Paradigma, în primul rând, este determinată de unitatea de bază a programului și de însuși principiul realizării modularității programului. Deoarece această unitate... Wikipedia

      Programare pe calculator- Dezvoltare software Procesul de dezvoltare software Analiza etapelor procesului | Design | Implementare | Testare | Implementare | Modele / Metode de întreținere Agile | camera curata | Iterativ | Scrum | RUP | MSF | Spirala | ... Wikipedia

      Programare nestructurată- Metodologia de programare structurală a dezvoltării software, care se bazează pe reprezentarea programului sub forma unei structuri ierarhice de blocuri. Propus în anii 70 ai secolului XX de E. Dijkstroy, dezvoltat și completat de N. Wirth. În... Wikipedia

      Programare orientată pe componente- Paradigma de programare Orientat pe agent Orientat pe componente Concatenativ Declarativ (contraste cu imperativ) Constrângeri Funcțional Flux de date Orientat pe tabel (foi de calcul) Reactiv ... Wikipedia

    Cărți

    • Disciplina de programare, Dijkstra E.

    Programarea structurată reprezintă cea mai mare realizare în acest domeniu până în prezent. În timp ce aproape toată lumea are un concept general despre acesta, aproape nimeni nu poate da o definiție specifică și clară a acestui termen. Programarea structurată are ca scop principal să scrie programe de cea mai mică complexitate, forțând programatorul să gândească clar, făcând programul mai ușor de înțeles. Textul său trebuie făcut în așa fel încât să fie lizibil de sus în jos. Această condiție este încălcată dacă în codul programului există instrucțiuni Go to, deoarece acestea încalcă structura întregului segment de program. Deși acest indicator nu poate fi considerat cel mai convenabil, se poate spune totuși că prezența acestui operator în codul programului este cel mai evident tip de încălcare a structurii. Corpurile modulelor și structurile de bază aplicate trebuie să fie rezistente la defecțiuni hardware, erori în programe și distorsiuni ale datelor sursă.

    Principiile de bază ale programării structurate sunt următoarele. Orice program poate fi sintetizat cu ușurință pe baza construcțiilor elementare de trei tipuri principale:

    Secvență simplă;

    condiții sau alternative;

    Repetări, adică cicluri și iterații.

    Una sau două de orice tip pot fi folosite în același timp. Fiecare structură are o singură caracteristică - singurul punct de transfer al controlului către structură și singurul punct de intrare în structură. Acest tip de constructie are o valoare disciplinata si sistematizatoare.

    Simplitatea construcțiilor inițiale în programarea structurată împiedică apariția legăturilor de informații, precum și transferurile confuze de control. Complexitatea programelor este redusă considerabil odată cu creșterea structurii modulelor, vizibilitatea acestora crește, iar acest lucru ajută la reducerea numărului de erori. Cu toate acestea, structurarea are și un dezavantaj - pentru frumusețea și claritatea codului programului, trebuie să plătiți cu memorie suplimentară, precum și timpul necesar pentru implementarea lor pe computer.

    Programarea structurală, adică structura textelor programului în sine, depinde în întregime de limbajul folosit pentru aceasta. Desigur, se pune întrebarea care este cel mai potrivit. Instrumentele moderne de dezvoltare software sunt considerate cele mai bune limbaje care implementează o abordare structurată a programarii. Printre cele mai comune sunt Basic, Pascal și FoxBASE. De exemplu, este practic imposibil de implementat principiile încorporate în conceptul de programare structurată. Acest limbaj este axat pe scrierea codului la un nivel scăzut.

    Programarea structurală se referă în mod fundamental la a vorbi cu oameni, nu cu mașini, așa că încurajează scrierea de programe care oferă o soluție clară și simplă la o anumită problemă. Programatorul trebuie să gândească în termeni de constructe structurale de bază.

    În ceea ce privește poziția față de declarația Go to menționată anterior, aceasta ar trebui evitată ori de câte ori este posibil, dar aceasta nu ar trebui să afecteze în niciun fel claritatea programului. Uneori, utilizarea acestui operator se dovedește a fi pur și simplu necesară pentru a ieși dintr-un anumit segment al programului sau ciclului și, de asemenea, pentru a evita apariția unor furcături prea adânci, mai ales că tranziția este asociată cu niveluri inferioare de programe. În același timp, structura programului rămâne ușor de citit de sus în jos. Cel mai rău din acest operator este asociat cu tranziția de jos în sus.

    Pentru a face programele mai ușor de citit, sunt adesea adăugate linii goale între secțiuni. Merită să scrieți textul programului cu ture, astfel încât să puteți citi secvența acțiunilor și numărul de atașamente.

    software

    Abordarea structurală a programării este atât o metodologie, cât și o tehnologie pentru crearea de programe. La un moment dat, implementarea sa a asigurat o creștere a productivității programatorilor la scrierea și depanarea programelor; obtinerea de programe care constau din module si sunt potrivite pentru intretinere; crearea de programe de către o echipă de dezvoltatori; finalizarea creării programului în timpul specificat.

    Programarea structurată este o abordare care utilizează constructe pentru a transfera controlul într-un program care permite transferuri secvențiale, condiționate și iterative ale controlului. Transferul necondiționat al controlului prin declarația goto este interzis. Ca urmare, fiecare comandă complexă din program, care este o combinație de instrucțiuni secvențiale, condiționale și ciclice, are un singur punct de intrare și de ieșire, ceea ce asigură că programul este împărțit în fragmente relativ independente.

    Programarea structurată este rezultatul aplicării metodelor aplicative la programele imperative. Pentru aceasta, se folosesc limbaje orientate către procedura, în care este posibil să se descrie un program ca un set de proceduri. Procedurile se pot apela reciproc și fiecare poate fi apelată de programul principal, care poate fi considerat și ca o procedură.

    Structura programului este părțile care interacționează ale programului selectate artificial de programator. Utilizarea unei structuri raționale elimină problema complexității dezvoltării, face programul ușor de înțeles pentru utilizatori, crește fiabilitatea programului, reducând în același timp timpul de testare și dezvoltare.

    Foarte des, o anumită secvență de instrucțiuni trebuie repetată în diferite locuri din program. Pentru a preveni ca programatorul să-și petreacă timp și efort pentru a copia aceste instrucțiuni, multe limbaje de programare oferă facilități pentru organizarea subrutinelor. Programatorul este capabil să dea unei secvențe de instrucțiuni un nume arbitrar și să folosească acel nume ca abreviere în acele locuri în care apare secvența corespunzătoare de instrucțiuni. Deci, o subrutină este o secvență de instrucțiuni care poate fi apelată în mai multe locuri din program. Subrutinele se numesc proceduri și funcții.

    Descrierea unei subrutine constă din două părți: anteturi și corp. Antetul conține identificatorul subrutinei și variabilele utilizate în acesta. Corpul este format din una sau mai multe instrucțiuni. Identificatorul subrutinei este folosit ca abreviere în acele locuri din program în care are loc secvența corespunzătoare de instrucțiuni.

    Procedurile și funcțiile, numite subrutine, sunt unul dintre acele puține instrumente fundamentale din arta programarii care au o influență decisivă asupra stilului și calității muncii unui programator.

    O procedură nu este doar o modalitate de a reduce textul programului, ci și un mijloc de descompunere a unui program în elemente închise, conectate logic, care determină structura acestuia. Împărțirea programului în părți este esențială pentru înțelegerea programului, mai ales dacă programul este complex și greu de văzut din cauza lungimii mari a textului. Descompunerea în subrutine este necesară atât pentru documentarea, cât și pentru verificarea programului. Prin urmare, este de dorit să se aranjeze secvența de instrucțiuni ca subrutină, chiar dacă programul este utilizat o singură dată și, prin urmare, nu există niciun motiv asociat cu reducerea textului programului.

    Informațiile despre variabile sau condiții pe care trebuie să le îndeplinească argumentele sunt date în antetul procedurii. Utilitatea procedurii, în special, rolul său în structurarea programului, este evidentiată de încă două concepte în programare. Variabilele auxiliare sau locale utilizate în interiorul unei proceduri nu au nicio semnificație în afara procedurii. Programul creaturii este mai ușor de înțeles dacă domeniul de aplicare al unor astfel de variabile este specificat în mod explicit. Procedura acționează ca o unitate naturală de text, cu ajutorul căreia sfera de existență a variabilelor locale este limitată.

    Cea mai comună tactică de programare este descompunerea procesului în pași separați:

    • - descrierea functionala pe subfunctii;
    • - programe corespunzătoare instrucțiunilor individuale.

    La fiecare astfel de etapă de descompunere, este necesar să ne asigurăm că soluțiile unor probleme particulare conduc la rezolvarea problemei generale, succesiunea aleasă de acțiuni individuale este rezonabilă și permite obținerea de instrucțiuni care sunt într-un anumit sens mai apropiate de limbajul în care programul va fi implementat. Această cerință exclude posibilitatea unui progres direct de la formularea inițială a problemei până la programul final, care ar trebui să fie obținut în final. Fiecare etapă de descompunere este însoțită de formularea unor subrutine particulare. În cursul acestei lucrări, se poate dovedi că descompunerea aleasă nu are succes în sensul că este incomod să se exprime subprograme folosind mijloacele disponibile. În acest caz, unul sau mai multe dintre etapele anterioare de descompunere ar trebui revizuite.

    Dacă vedem în descompunerea în faze și dezvoltarea și detalierea simultană a programului un avans treptat în profunzime, atunci această metodă de rezolvare a problemelor poate fi caracterizată ca de sus în jos (de sus în jos). Și invers, o astfel de abordare a rezolvării unei probleme este posibilă, atunci când programatorul studiază mai întâi calculatorul sau limbajul de programare pe care îl are la dispoziție, apoi asamblează unele secvențe de instrucțiuni în proceduri elementare tipice problemei care se rezolvă. Procedurile elementare sunt apoi utilizate la nivelul următor al ierarhiei procedurilor. Această metodă de tranziție de la instrucțiunile mașinii primitive la implementarea necesară a programului se numește de jos în sus (de jos în sus).

    În practică, dezvoltarea unui program nu poate fi niciodată realizată strict într-o singură direcție - de sus în jos sau de jos în sus. Cu toate acestea, atunci când se construiesc algoritmi noi, metoda de sus în jos domină de obicei. Pe de altă parte, atunci când se adaptează un program la cerințe ușor modificate, metoda de jos în sus este adesea preferată.

    Ambele metode fac posibilă dezvoltarea programelor care au structură, o proprietate care le deosebește de secvențele liniare amorfe ale instrucțiunilor sau comenzilor mașinii. Este important ca limbajul folosit să reflecte pe deplin această structură. Numai atunci forma finală a programului rezultat ne va permite să aplicăm metode sistematice de verificare.

    Dacă un program este împărțit în subrutine, este adesea necesar să se introducă noi variabile care să reprezinte rezultatele și argumentele și astfel să se stabilească o legătură între subrutine. Astfel de variabile ar trebui introduse și descrise în stadiul de dezvoltare în care sunt necesare. Mai mult, detalierea descrierii procesului poate fi însoțită de detalierea descrierii structurii variabilelor utilizate. Prin urmare, limbajul trebuie să aibă mijloacele pentru a reflecta structura ierarhică a datelor. Aceasta arată cât de importante joacă conceptul de procedură, localitatea procedurilor și a datelor și structura datelor în dezvoltarea pas cu pas a unui program.

    Designul începe cu fixarea specificațiilor externe. Pe baza specificațiilor externe, este compilată o descriere a algoritmului intern al programului, în mod necesar cu structura datelor interne. În plus, funcțiile mari sunt împărțite în subfuncții până când se ajunge la o subfuncție de dimensiunea modulului - subrutine de limbaj de programare care au cerințe suplimentare speciale.

    Conceptul fundamental și elementul funcțional al tehnologiei de programare structurată este modulul.

    Un modul este o subrutină, dar formatată conform următoarelor reguli:

    • 1. modulul trebuie să aibă o intrare și o ieșire și să îndeplinească o funcție strict neambiguă, care este descrisă printr-o propoziție comună simplă a limbii naturale (rusă) sau chiar o propoziție fără predicat;
    • 2. modulul trebuie să ofere compilare independentă de alte module, cu „uitare” a tuturor valorilor interne ale modulelor;
    • 3. un modul poate apela alte module prin numele lor;
    • 4. Un modul bun nu folosește variabile globale pentru a comunica cu un alt modul, deoarece atunci este dificil să găsești un modul care corupă datele. Când utilizați variabile globale, trebuie să comentați clar acele module care citesc doar și acele module care pot modifica datele;
    • 5. Modulul este codificat doar cu structuri standard și este atent comentat.

    Conceptul structurii programului include compoziția și descrierea legăturilor tuturor modulelor care implementează funcțiile independente ale programului și descrierea purtătorilor de date implicați în schimb, atât între subprograme individuale, cât și de intrare și ieșire de la dispozitive externe.

    În cazul unui program complex, mare, este necesară stăpânirea unor tehnici speciale pentru obținerea unei structuri de program raționale. Structura rațională a programului oferă o reducere aproape de două ori a cantității de programare și o reducere multiplă a volumului și a timpului de testare, prin urmare, reduce în mod fundamental costurile de dezvoltare.

    Subordonarea modulelor este reprezentată convenabil printr-o diagramă ierarhică. Diagrama ierarhică reflectă doar subrutinele subrutinelor, dar nu ordinea în care sunt apelate sau funcționarea programului.

    Înainte de a întocmi diagrama ierarhică, este indicat să se întocmească specificații externe ale programului și să se întocmească descrieri funcționale ale programului, împreună cu o descriere a variabilelor - purtători de date. O atenție deosebită trebuie acordată ierarhiei tipurilor de date structurate și comentariilor acestora. Descompunerea programului în subprograme se realizează după principiul de la general la cel mai detaliat. Procesul de scriere a unei descrieri funcționale și de întocmire a diagramei ierarhice este iterativ. Alegerea celei mai bune opțiuni este multi-criterii.

    • - modularitatea programelor;
    • - codificarea structurală a modulelor programului;
    • - proiectarea de sus în jos a unei ierarhii raționale a modulelor de program;
    • - implementarea descrescătoare a programului folosind stub-uri;
    • - implementarea planificarii in toate etapele proiectului;
    • - controlul structural end-to-end al sistemelor software în general și al modulelor lor constitutive.

    Modularitatea programelor se caracterizează prin faptul că întregul program este format din module. Unele grupuri semantice de module sunt concentrate în fișiere separate. De exemplu, modulele de editor de text și modulele de meniu ierarhic pot fi concentrate în fișiere separate (Unitate).

    Codificarea structurală a modulelor de program constă în proiectarea specială a textelor acestora. Modulul ar trebui să aibă un titlu ușor de recunoscut, cu un comentariu care explică funcționalitatea modulului. Numele variabilelor trebuie să fie mnemonice. Esența variabilelor și ordinea în care informațiile sunt plasate în ele ar trebui explicate prin comentarii, codul modulului este codificat folosind structuri algoritmice tipice folosind indentări.

    Proiectarea de sus în jos a unei ierarhii raționale a modulelor de program constă în alocarea modulelor inițiale de cel mai înalt nivel al ierarhiei și apoi a modulelor subordonate.

    Implementarea de sus în jos a programului constă în implementarea primară a unui grup de module ale nivelurilor superioare, care sunt numite nucleul programului, iar apoi treptat, în conformitate cu planul, se implementează modulele nivelurilor inferioare. . Necesare pentru conectarea programelor, modulele lipsă sunt imitate de stub-uri.

    Implementarea planificării în toate etapele proiectului vă permite să planificați inițial atât compoziția etapelor, cât și durata tuturor etapelor de lucru. O astfel de planificare vă permite să finalizați dezvoltarea într-un timp dat la un cost de dezvoltare dat.

    Controlul structural end-to-end constă în urmărirea unui plan de testare prestabilit, care acoperă perioada de la elaborarea specificațiilor externe, apoi specificațiile interne și ajustarea acestora în perioada de implementare până la testele de recepție. Modulele care alcătuiesc programul sunt testate atât în ​​momentul scrierii codului lor, cât și în timpul testării de sine stătătoare, inspecția codului lor sursă, la testarea imediat după conectarea la kernel.

    În programarea structurată, programul este în mare parte implementat (asamblat și testat) de sus în jos. În primul rând, nucleul este scris din 20-30 de module. Pentru a începe testarea, modulele de nivel inferior lipsă sunt înlocuite cu stub-uri. La sfârșitul testării nucleului, stub-urile sunt înlocuite cu module noi gata făcute, dar dacă programul nu este încă terminat, atunci toate stub-urile noi ale modulelor lipsă vor fi necesare pentru a-l conecta cu succes. Apoi piesa asamblată este testată etc.

    Un stub este un aspect al unui modul. Cel mai simplu stub este o rutină sau o funcție fără nicio acțiune. Un stub mai complex poate afișa un mesaj care afirmă că un astfel de modul a fost finalizat. Chiar și mai multe stub-uri complexe pot scoate intrarea într-un fișier de depanare. În cele din urmă, și mai multe stub-uri complexe scot informațiile de testare necesare pentru a testa modulele deja implementate. Scrierea stub-urilor este o muncă redundantă, dar este nevoie de priceperea designerului pentru a păstra cât mai multe stub-uri cât mai simple posibil și pentru a testa bine partea deja construită a programului.

    Proiectarea structurii programului este precedată de dezvoltarea descrierilor funcționale externe. Descrierile funcționale (algoritmi de execuție a programelor) pentru a le atinge percepția trebuie descompuse de la general la particular. Acestea ar trebui să includă, de asemenea, descrieri ale formelor de prezentare și ale cantității de date interne.

    Pentru început, există prima versiune a schemei ierarhice, obținută prin simpla împărțire a funcțiilor programului în subfuncții, indicând variabilele necesare plasării datelor la diferite etape de procesare. Mai degrabă, această opțiune nu este optimă și sunt necesare iterații de proiectare pentru a îmbunătăți topologia circuitului.

    Fiecare variantă nouă este comparată cu varianta anterioară conform criteriilor descrise aici. Generarea variantelor se oprește atunci când nu sunt posibile îmbunătățiri suplimentare.

    Fondul de criterii pentru optimitatea schemelor ierarhice este un ajutor necesar în optimizarea schemelor ierarhice și constă din următoarele criterii:

    • - caracterul complet al îndeplinirii funcțiilor specificate;
    • - capacitatea de a completa rapid și ieftin cu funcții noi, nespecificate anterior;
    • - vizibilitate pentru proiectant a părților componente ale programului;
    • - independență maximă în funcție de datele părților individuale ale programului;
    • - capacitatea de a lega programul cu o schemă extinsă de ierarhie pe mai multe niveluri cu un editor de link specific (linker). Dacă începe lucrul la un program nou, atunci este foarte util să executați modelul acestuia pe un computer sub formă de stub-uri de module goale care nu conțin acțiuni;
    • - suficiența memoriei de lucru. Aici, opțiunile sunt luate în considerare cu descrierea variabilelor statice și dinamice special structurate la diferite niveluri ale diagramei ierarhice. Verificarea satisfacerii acestui criteriu se realizeaza prin calcule cu unele experimente pe calculator;
    • - evaluarea influenței topologiei schemei ierarhice asupra vitezei de execuție a programului la utilizarea suprapunerilor (încărcarea dinamică a programului) și a mecanismului de paginare la dezvoltarea unui program care nu poate fi plasat integral în RAM;
    • - absența modulelor diferite care efectuează acțiuni similare. În mod ideal, același modul este numit la diferite niveluri ale schemei ierarhice;
    • - realizarea pe parcursul implementarii programului a unui astfel de program de retea pentru munca echipei de programatori, care asigura un volum de munca uniform al echipei la datele cheie ale proiectului;
    • - toate modalitățile posibile de reducere a costurilor de testare a nucleului deja asamblat al programului în conformitate cu datele cheie ale programului de implementare a rețelei. Se caracterizează prin simplitatea stub-urilor utilizate și calitatea testării de-a lungul tuturor rutelor de calcul ale modulelor. Se realizează prin implementarea primară de sus în jos a modulelor de intrare și ieșire ale programului cu o întârziere în implementarea ramurilor rămase ale schemei ierarhice. De obicei, costul testării este de aproximativ 60% din costul întregului proiect. O schemă de ierarhie bună reduce costurile de testare de 2-5 ori sau mai mult comparativ cu versiunea originală;
    • - utilizarea în acest proiect a cât mai multor module și biblioteci dezvoltate în proiectele anterioare cu o cantitate minimă de piese refabricate;
    • - distribuirea cu succes a modulelor prin fișiere de program compilate și biblioteci;
    • - acumularea de module gata făcute și biblioteci de module pentru utilizare în toate noile dezvoltări.

    În concluzie, se poate observa că abordarea structurală a programării a adoptat și utilizează multe metode din domeniul proiectării sistemelor tehnice complexe. Printre acestea se numără abordarea bloc-ierarhică a proiectării sistemelor complexe, punerea în scenă a creării programelor, proiectarea de sus în jos, metodele de evaluare și planificare.

    Top articole similare