**Programazio egituratua** programazio-paradigma bat da, eta ordenagailu-programa baten argitasuna, kalitatea eta garapen-denbora hobetzea du helburu, azpiprogramak eta oinarrizko hiru kontrol-egitura soilik erabiliz: sekuentzia, hautaketa (if eta switch) eta iterazioa (for eta while begiztak); era berean, baldintzarik gabeko transferentzia (GOTO) erabiltzea alferrikakotzat eta kaltegarritzat jotzen da; instrukzio horrek espageti kodea sortzen du azkenean, eta kode hori jarraitzea eta mantentzea askoz ere zailagoa da; gainera, programazio-akats ugari eragiten ditu.

1960ko hamarkadan sortu zen, batez ere Böhm eta Jacopini-ren lanetik, 1968ko idazki ezagun bat: «GOTO sententzia, kaltegarritzat jotzen da», Edsger Dijkstra. Haren postulatuak indartu egingo lirateke, maila teorikoan, programa egituratuaren teoremaren bidez, eta maila praktikoan, ALGOL bezalako lengoaiak agertzeari esker, kontrol-egitura sendo eta ondo trebatuekin.

Elementuak
----------

### Kontrol-egiturak

Programa egituratuaren teoremari jarraituz, programa guztiak kontrol-egituren konposatu gisa ikusten dira:

* *Sequence* (Sekuentzia): segidan egindako adierazpen ordenatuak edo azpirrutinak.
* *Selection* (Aukeraketa): jarraibide bat edo gehiago programaren egoeraren arabera exekutatzen dira. Hori, normalean, gako-hitzarekin adierazten da: `if..then..else..endif` Baldintzazko adierazpenak gutxienez egiazko baldintza bat izan behar du, eta baldintza bakoitzak irteera-puntu bat izan behar du gehienez.
* *Iteration* (Iterazioa): instrukzio edo bloke bat programa egoera jakin batera iritsi arte edo bilduma bateko elementu bakoitzari eragiketak aplikatu zaizkion arte exekutatzen da. Normalean, `while`, `repeat`, `for` edo `do..until`bezalako gako-hitzekin adierazten da hori. Sarritan, begizta bakoitzak sarrera-puntu bakarra izatea gomendatzen da (eta jatorrizko egitura-programazioan, irteera-puntu bakarra ere bai, eta hizkuntza batzuek ezartzen dute).
* *Recursion* (Errekurtsioa): adierazpen bat exekutatzen da, eta behin eta berriz deitzen zaio bere buruari, amaiera baldintzak bete arte. Praktikan iterazioaren antzekoa bada ere, errekurtsioa eraginkorragoa izan daitezke konputazioaren ikuspegitik, eta modu desberdinean inplementatzen da, ur-jauziko pila gisa.

Oinarrizko hiru patroien irudikapen grafikoa (sekuentzia, hautaketa eta errepikapena), NS diagramak (urdina) eta fluxu-diagramak (berdea) erabilita.
### Azpiprogramak

Zein unitateri dei dakiokeen, hala nola prozedurak, funtzioak, metodoak edo azpiprogramak, adierazpen bakar batek sekuentzia bati erreferentzia egiteko erabiltzen dira.

### Blokeak

Blokeak deklarazio taldeak deklarazio bakartzat hartzeko erabiltzen dira. Bloketan egituratutako lengoaiek sintaxi bat dute egiturak nolabait formalki ixteko, parentesi artean if adierazpen bat bezala. `if..fi` ALGOL 68an bezala, edo `BEGIN..END` kortxeteen arteko kode-sail bat, PL/I eta Pascal-en bezala, espazio zuriko koska, Python bezala, edo C eta ondorengo hizkuntza askoren "…" giltzak.

Programazio egituratuaren jatorria
----------------------------------

1970eko hamarkadaren amaieran, programatzeko modu berri bat sortu zen, programa fidagarri eta eraginkorrak garatzeko aukera emateaz gain, programa horiek idatziak zeuden, eta, hartara, errazago ulertzen ziren ondorengo hobekuntza-faseetan.

Programa egituratuaren teoremak, Böhm-Jacopinik proposatuak, frogatzen du programa oro hiru kontrol-jarraibide hauek soilik erabiliz idatz daitekeela:

* Sekuentzia.
* Baldintzapeko instrukzioa.
* Iterazioa (instrukzioen begizta), hasierako baldintzarekin.

Hiru egitura horiekin bakarrik idatz daitezke programa eta aplikazio posible guztiak. Programazio-lengoaiek kontrol-egituren errepertorio handiagoa duten arren, hiru oinarrizko horien bidez eraiki daitezke.

Historia
--------

### Oinarri teorikoa

Programa egituratuaren teoremak programazio egituratuaren oinarri teorikoa ematen du. Adierazten du oinarrizko hiru egituren konbinazioa, sekuentzia, hautaketa eta iterazioa, nahikoak direla edozein funtzio konputagarri adierazteko. Behaketa hori ez zen sortu programazio egituratuaren mugimenduarekin. Egitura horiek nahikoak dira prozesatzeko unitate zentral baten instrukzio-zikloa eta Turing makina baten funtzionamendua deskribatzeko. Beraz, prozesadore bat beti ari da «programa egituratu» bat exekutatzen, baita memoriatik irakurtzen dituen jarraibideak programa egituratu baten zati ez badira ere. Hala ere, autoreek, normalean, Böhmek eta Jacopinik 1966an idatzitako dokumentu baten bidez egiaztatzen dute emaitza, ziurrenik Dijkstrak idatzi duelako. Programa egituratuaren teoremak ez du erantzuten programa egituratu bat modu erabilgarrian nola idatzi eta analizatu behar den. Gai horiek 1960ko hamarkadan eta 1970eko hamarkadaren hasieran landu ziren, Dijkstra, Robert W. Floyd, Tony Hoarey eta David Griesen ekarpen garrantzitsuekin.

### Eztabaida

P. J. Plauger-ek, programazio egituratua hartu zuen lehenengoetariko batek, programa egituratuaren teoremarekin zuen erreakzioa deskribatu zuen:

Guk, elkarrizketetan, hizkera mihiztatzaileko programatzaile gogorrei buruzko albiste-sorta interesgarri hau zabaldu genuen. Izan ere, logikazko bit bihurriak aurreratzen jarraitu zuten, eta hau esan zuten: 'Apustu egiten dizut ezin duzula hau egituratu'. Ez Böhm eta Jacopiniren proba, ez eta kode egituratua idazten behin eta berriz izandako arrakastak ere, konbentzitzeko prest zeudenak baino egun bat lehenago eraman zituzten.

Donald Knuth-ek onartu egin zuen programak asertibitatez egokitu behar direla dioen printzipioa, baina ez zegoen ados (eta oraindik ere ez dago ados) GOTO epaia ezabatzearekin. 1974ko idazkian, «Goto epaiekin egituratutako programazioa», adibideak eman zituen, non uste baitzuen jauzi zuzen batek kode argiago eta eraginkorrago batera garamatzala, frogagarritasuna sakrifikatu gabe. Knuth-ek egitura-murrizketa malguagoa proposatu zuen: posible izan behar du programaren fluxu-diagrama bat ezartzea, aurrerantz ezkerrerantz doazen adarkatze guztiekin, atzerantz eskuinerantz doazen adarkatze guztiekin, eta elkarren artean gurutzatzen diren adarkatzerik gabe. Grafoen eta konpiladoreen teorian aditu diren askok fluxu murriztuko grafoak bakarrik baimendu dituzte.

Programazio egituratuko teorialariek aliatu garrantzitsu bat irabazi zuten 1970eko hamarkadan, IBM Harlan Mills-eko ikertzaileak programazio egituratuaren teoriaren interpretazioa aplikatu ondoren, New York Times-eko ikerketa-artxiborako indexazio-sistema bat garatzeko. Proiektua oso arrakastatsua izan zen ingeniaritzan, eta beste enpresa batzuetako zuzendariek programazio egituratua onartzearen alde egin zuten, nahiz eta Dijkstrak kritikatu zituen Millsen interpretazioa eta argitaratutako lana bereizteko moduak.

1987ra arte itxaron beharko litzateke programazio egituratuaren kontuak konputazioaren zientziari buruzko aldizkari baten arreta erakar zezan. Frank Rubinek urte horretan egin zuen, idazki honekin: "GOTO epaia kaltegarritzat jotzen da". Ondoren, eragozpen ugari izan zituen, hala nola Dijkstraren beraren erantzuna, Rubin gogor kritikatzen zuena, eta beste autore batzuek erantzun zutenean emandako kontzesioak.

### Emaitza

XX. mendearen amaieran, ia zientzialari guztiak ziur daude programazio egituratuaren kontzeptuak ikastea eta aplikatzea baliagarria dela. Hasieran programazio-egiturarik ez zuten goi-mailako programazio-lengoaiak, hala nola FORTRAN, COBOL eta BASIC, orain badituzte.

Programazio egituratuaren abantailak
------------------------------------

Programazio egituratuak aurreko ereduaren aldean dituen abantailen artean (gaur egun espageti kodea deitua), honako hauek aipa daitezke:

* Programak errazago ulertzen dira, modu sekuentzialean irakur daitezke eta ez dago kode-blokeen barruan lerro-jauziak (GOTO) arakatu beharrik barne-logika ulertzen saiatzeko.
* Programen egitura argia da, jarraibideak elkarri lotuago baitaude.
* Esfortzua optimizatzen da proben eta arazketaren faseetan. Programaren akats edo akatsen jarraipena (debugging) eta, horrekin batera, akats horiek atzeman eta zuzentzea izugarri errazten da.
* Mantentze-kostuak murriztu egiten dira. Arazketaren antzera, mantentze-fasean, errazagoa da programak aldatzea edo zabaltzea.
* Programak errazagoak eta azkarragoak dira.
* Programatzaileen errendimendua handitzen da.

Programazio egituratuko lengoaiak
---------------------------------

Programazio egituratua edozein programazio lengoaiatan gara badaiteke ere, prozedurazko programaziorako lengoaia egokiagoa da. Programazio egituraturako hasiera batean erabilitako lengoaia batzuek ALGOL, Pascal, PL/I eta Ada hartzen dituzte, baina, ordutik, prozedura-programazioko lengoaia berri gehienek programazio egituratua sustatzeko ezaugarriak barneratu dituzte, eta, batzuetan, nahita, ez dituzte ezaugarriak uzten, egituratu gabeko programazioa zailago egiteko ahaleginean.

Paradigma berriak
-----------------

Programazio egituratuaren ondoren, paradigma berriak sortu dira, hala nola programazio modularra, objektuetara bideratutako programazioa, geruzakako programazioa eta beste batzuk, eta aplikazio eta sistema handien programazioa errazten duten programazio ingurune berriak.

Erreferentziak
--------------

1. ↑   **(Ingelesez)** Böhm, Corrado; Jacopini, Giuseppe.  (1966-05). «Flow diagrams, turing machines and languages with only two formation rules» *Communications of the ACM* 9 (5): 366–371. doi:10.1145/355592.365646. ISSN 0001-0782. (Noiz kontsultatua: 2022-10-22).
2. ↑   **(Ingelesez)** Dijkstra, Edsger W..  (1968-03). «Letters to the editor: go to statement considered harmful» *Communications of the ACM* 11 (3): 147–148. doi:10.1145/362929.362947. ISSN 0001-0782. (Noiz kontsultatua: 2022-10-22).
3. ↑   Wilson, Leslie B..  (2001). *Comparative programming languages.*  (3rd ed. / rev. and updated by Robert G. Clark. argitaraldia) Addison-Wesley ISBN 0-201-71012-9. PMC 44702119. (Noiz kontsultatua: 2022-11-27).
4. ↑   Plauger, P. J..  (1993). *Programming on purpose : essays on software design.*  PTR Prentice Hall ISBN 0-13-721374-3. PMC 27266527. (Noiz kontsultatua: 2022-11-27).

Bibliografia
------------

* *Letters to the editor: Go to statement considered harmful.* , 147–148 or. ISBN 0001-0782..[*Betiko hautsitako esteka*]

Ikus, gainera
-------------

* Programa egituratuaren teorema
* Diseinu egituratua
* Kode-blokea
* Kontrol egiturak
* Prozeduren araberako programazioa
* Programazio modularra
* Objektuei bideratutako programazioa

Kanpo estekak
-------------

|  |  |
| --- | --- |
| Autoritate kontrola | 
* **Wikimedia proiektuak**
* Wd Datuak: Q223335
* **Identifikadoreak**
* BNE: XX531013
* BNF: 11966709k (data)
* GND: 4058133-0
* LCCN: sh85129214
* NKC: ph126154

 |

* Wd Datuak: Q223335