Acumulați și trageți

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Acumulați și declanșați este un termen englezesc (redat aproximativ prin expresia „încărcare și foc”) care denotă un stil specific de programare.

Stilul de acumulare și declanșare se caracterizează prin prezența instrucțiunilor care actualizează un număr de variabile globale sau obiecte înainte de a invoca un subrutină sau o metodă a cărei funcționare depinde de aceste valori globale.

Dezavantaje

De regulă, acest stil de programare este considerat problematic din mai multe motive:

  • comportamentul subrutinei care depinde de valorile globale este mai puțin transparent, deoarece nu toate intrările reale apar în lista argumentelor;
  • datorită vizibilității globale a variabilelor care conțin valorile de intrare, modificarea acestor variabile poate schimba comportamentul unei părți a programului departe de punctul de modificare (efect de acțiune la distanță );
  • programul este mai predispus la erori dificil de detectat, cum ar fi
    • este posibil să uitați să modificați o anumită variabilă globală înainte de o invocație,
    • efectul nemodificării poate fi dificil de identificat și poate provoca disfuncționalități în părți ale programului care sunt îndepărtate în timp;
  • dacă execuția programului continuă în fire paralele, există riscul ca starea unora dintre variabile să fie modificată de un alt fir într-o clipă între modificarea valorilor și invocare.

În cele mai grave cazuri, variabilele globale în cauză sunt definite cu singurul scop de a transmite informații subrutinei sau metodei invocate. În aceste cazuri, informațiile conținute în variabile riscă să fie valabile, actualizate și semnificative numai într-o zonă restricționată a programului, în cel mai rău caz imediat înainte de invocații. În aceste cazuri, starea generală a programului este ambiguă, deoarece este parțial nedefinită în unele domenii și faze de execuție a programului.

Cauze și motive

Stilul de acumulare și foc este încurajat de câțiva factori:

  • prezența unui număr mare de variabile globale pentru a reprezenta starea sistemului;
  • complexe și foarte dependente de subrutinele sau metodele de stat globale.

Utilizarea variabilelor globale în locul argumentelor explicite este adesea motivată de dorința de a evita listele de parametri excesiv de lungi. Prezența a numeroase variabile globale care să reprezinte starea programului poate rezulta din lipsa de grijă în definirea abstracțiilor valabile pentru a descrie starea generală a sistemului.

Soluții

Cel mai simplu mod de a evita stilul de acumulare și declanșare este să treceți toate valorile de intrare ale subrutinei, inclusiv cele globale, ca argumente explicite. Această abordare, care este adesea impracticabilă din cauza numărului mare de argumente care trebuie adoptate, nu elimină cauzele reale ale problemei. Pentru a elimina cauzele care duc la stilul de acumulare și foc , este necesar să se intervină mai radical asupra programului. O abordare posibilă este gruparea variabilelor globale afectate într-o structură de date și apoi trecerea structurii ca argument. În contextul programării orientate pe obiecte, structura datelor poate fi rafinată într-un obiect de fațadă . Soluțiile de acest tip sunt adecvate dacă grupările sunt dotate cu coerență internă, adică parametrii globali sunt interdependenți sau legați între ei prin relații logice. O altă abordare este de a sparge subrutina în subrutine mai simple, care necesită doar câteva dintre argumente.

O soluție directă la problema firelor paralele care schimbă aceleași variabile globale în mod neașteptat înainte de o invocație este introducerea unui mecanism de control al accesului, cum ar fi semaforele .

Atunci când nu se datorează substituirii banale a parametrilor locali cu variabile globale definite special, stilul de acumulare și foc poate fi un simptom al defectelor la un nivel mai ridicat de abstractizare. Măsurile corective în aceste cazuri sunt:

  • definiți structuri de date sau obiecte globale care grupează valorile de stare aferente,
  • evitați definițiile globale pentru variabilele care sunt valabile doar într-o parte a programului,
  • restructurați subrutine complexe și metode care depind de mulți parametri de intrare în părți mai simple care depind de mai puține argumente.

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT