Lankide:Manexatxa/Proba orria
Ada | |
---|---|
Paradigma | Multiparadigma |
Diseinatzailea | MIL-STD-1815/Ada 83: Jean Ichbiah
Ada 95: Tucker Taft Ada 2005: Tucker Taft Ada 2012: Tucker Taft |
Agerpena | 1980ko otsaila |
Kaleratze Egonkorra | Ada 2012 TC1[1][2] / 2016ko otsailaren 1a |
Kaleratze Ezegonkorra | Ada 2012 TC1[3] / 2015eko apirila |
Idazketa | estatikoa, sendoa, segurua, nominala |
Sistema Eragilea | Plataforma-anitz (multiplataforma) |
Luzapena | .adb, .ads |
Webgunea | www.adaic.org |
Inplementazioak | |
AdaCore GNAT (doako deskarga: http://libre.adacore.com/download),
Green Hills Software Optimising Ada 95 konpilatzailea, PTC, Inc. PTC ApexAda and PTC ObjectAda,[4] "MapuSoft Ada-C/C++ changer".,lehen "AdaMagic with C Intermediate" gisa ezagutua,[5] DDC-I Score | |
Dialektoak | |
SPARK, Ravenscar profile | |
Eragina | |
C++, Chapel,[6] "Drago"., Eiffel, "Griffin"., Java, Nim, ParaSail, PL/SQL, PL/pgSQL, Ruby, Seed7, "SPARforte"., Sparkel, SQL/PSM, VHDL | |
Eragindua | |
ALGOL 68, Pascal, C++ (Ada 95), Smalltalk (Ada 95), Modula-2 (Ada 95) Java (Ada 2005), Eiffel (Ada 2012) |
Ada helburu orokorreko programazio-lengoaia bat da, Pascal eta beste programazio-lengoaia batzuen hedapen moduan sortu zena.[1] Ameriketako Estatu Batuetako Defentsa Sailaren segurtasun beharrak asetzeko sortua izan zen 1977 eta 1983 artean. Jean Ichbiah informatikari frantsesak gidatutako lantaldeak garatu zuen.
Ada objektuei orientatutako programazio-lengoaia da, goi-mailakoa, konkurrentea, Pascalen erraztasuna eta C++en moldagarritasuna dituena. Zehaztasun metodologiko handiko lengoaia da; helburua erroreak ekiditea izanik, zorroztasun handia eskatzen du, eta ona da errorea gertatzeak ondorio latzak ekar ditzakeen denbora errealeko sistemak inplementatzeko, trenen eta hegazkinen trafikoa kontrolatzekoak, adibidez.[2] Adan idatzitako programak idazkera algoritmikotik gertu daudenez, ulerterrazak gertatzen dira.[3][4] Ada nazioarteko estandar bihurtu zen (ANSI estandar 1983an eta ISO estandar 1987an).
Lengoaiari Ada izena jarri zioten Ada Lovelace (1815–1852) emakumea omentzeko. Izan ere, historiako lehen programatzailea izan zela esan ohi da.
Historia
[aldatu | aldatu iturburu kodea]Ameriketako Estatu Batuetako Defentsa Sailak 70eko hamarkadan martxan zituen proiektu informatikoen garapenean programazio-lengoaia ezberdin gehiegi erabiltzen zituela ikusi zuen. Hori saihesteko eta defentsa sailaren beharrak beteko zituen lengoaia aurkitzeko helburuarekin, 1975ean "High Order Language Working Group" edo "Goi-mailako lengoaietarako Lantaldea" sortu zuen. Lantalde horrek Steelman dokumentua idatzi zuen, eta bertan zehaztu zituen bilatzen ari zen helburu orokorreko eta goi-mailako lengoaiak bete beharko zituen eskakizunak. Ondoren, programazio-lengoaia asko aztertu zituen, baina ez zuen arrakastarik izan, ez baitzuen Steelman dokumentuan zehaztutako eskakizunak betetzen zituen programazio-lengoaia bat bera ere aurkitu.
Hori dela eta, programazio-lengoaia berri bat garatu behar zela erabaki zuen lantaldeak. Lengoaia berri baten diseinurako proposamenak jaso ahal izateko, lehiaketa publiko bat antolatu zuen. Lehiaketara aurkeztu ziren proposamenak koloreen bidez izendatuak izan ziren: Gorria (Intermetrics), Berdea (CII Honeywell Bull), Urdina (SofTEch) eta Horia (SRI International). Lehiaketaren bigarren fasera Gorria eta Berdea pasa ziren 1978an, eta azkenean, Berdea izan zen hautatua 1979an, CII Honeywell Bull (Compagnie Internationale pour l'informatique Honeywell-Bull) enpresako Jean Ichbiah-ek eta bere lantaldeak diseinatutakoa. Ada izena jarri zioten programazio-lengoaia berriari.[5][6] Lantalde berberak aurretik garatutako LIS programazio-lengoaiaren eragin handia jaso zuen Adak. Lengoaia berriari buruzko lehenengo behin behineko eskuliburua 1979an argitaratu zen, eta 1980ko abenduaren 10ean onartu zen, Ada Lovelace-ren urtebetetze-egunean, hain zuzen ere.
Lehen urteetan, Ada lengoaiak programatzaileen komunitatearen arreta bereganatu zuen. Lengoaiaren sortzaileek bakarrik ez, askok pentsatu zuten defentsa sailaren segurtasun beharretarako erabiltzeaz gain, helburu orokorreko programazio-lengoaia moduan ere hedakuntza handikoa bihurtuko zela. Ichbiah-ek berak publikoki esan zuen hamar urteren buruan bi programazio-lengoaia soilik geratuko zirela: Ada eta Lisp.
Hasierako Ada konpilatzaileak erdipurdi moldatzen ziren, konpilazio- eta exekuzio-fasean motelak ziren eta eskaintzen ziren tresnak artean primitiboak. Adaren lehenengo inplementazioa NYU Ada/Ed itzultzailea izan zen, 1983an. Konpainia komertzial asko Ada konpilatzaileak eta garapenerako tresnak eskaintzen hasi ziren, Alsys, Telesoft, DDC-I, Advanced Computer Techniques, Tartan Laboratories, TLD Systems, Verdix, esaterako. 80ko hamarkadaren bukaeran eta 90ekoaren hasieran, Ada konpilatzaileen errendimendua asko hobetu zen, baina lengoaiaren gaitasun guztien ustiapena zaila egiten zuten arazoak baziren oraindik. Denbora errealeko sistemetan lanean aritzen ziren programatzaileak, esaterako, ohituta zeuden atazen kudeaketarako eredu jakin batera, baina Adak eskaintzen zuena desberdina zen.
1991. urtean, Ameriketako Estatu Batuetako Defentsa Sailak bere software-proiektu guztietan Ada lengoaia erabiltzera behartu zuen (Ada mandatu edo agindua), nahiz eta maiz ematen ziren salbuespenak. 1997. urtean mandatu hori baliogabetua izan zen. Prozesua antzekoa izan zen NATO/OTAN-eko hainbat herrialdeetan, hala nola, Alemanian, Suedian eta Kanadan; aplikazio motaren arabera, Ada derrigorrez erabili beharreko edo gomendatutako programazio-lengoaia bihurtu zen (kontrol eta defentsa sistemetan, batez ere).
Gaur egun, aplikazio militarretan erabiltzeaz gain, segurtasun-maila altua eskatzen duten bestelako proiektuetan ere erabiltzen da. Software-akats batek ondorio latzak izan ditzakeen egoerak anitzak dira: aire-trafikoaren kontrola, Ariane 4 eta 5 moduko suziri komertzialak, sateliteak, trenbideak, banku-zerbitzuak, etab. Garraioan, adibidez, Frantziako abiadura handiko trenetan eta Paris, Londres, Hong Kong eta New York hirietako metroetan erabiltzen da.
Ezaugarriak
[aldatu | aldatu iturburu kodea]Hasiera batean, denbora errealeko konputazio-sistemetan erabiltzeko pentsatua izan zen Ada programazio-lengoaia. Gerora ordea, Intermetrics enpresako S.Tucker Taft-ek objektuei orientatutako programaziorako, finantza-sistemetarako eta zenbakizko-sistemetarako aproposak ziren hobekuntzak gehitu eta Ada 95 bertsioa argitaratu zen 1995ean.
Software-sistema handiak garatzeko diseinatuta dago Ada. Ada-paketeak eta espezifikazio-paketeak beren aldetik konpila daitezke, inplementaziorik gabe, bateragarritasuna egiaztatzeko. Horrela, diseinu-fasean bertan erroreak aurki daitezke, inplementazioarekin hasi baino lehen.
Konpilazio-faseko egiaztapen asko egiten ditu Adak, beste programazio-lengoaia batzuetan exekuzio-fasera arte aurkituko ez liratekeen erroreak hautematen laguntzeko. Gainera, exekuzio-fasean ere egiaztapenak egiten ditu, esleitu gabeko memoriarako atzipena ekiditeko, adibidez, buffer-gainezkatzeak identifikatzeko, etab. Egiaztatze horiek guztiak desaktiba daitezke exekuzio garaian eraginkortasuna irabazteko eta azkartzeko, baina normalean gehiegi irauten ez duen prozesu bat da.
Estandarizaziorako Nazioarteko Erakundearen (ISO) estandar gehienak ez bezala, Ada programazio-lengoaia definitzen duen eskuliburua ("Ada Reference Manual" edo "The Language Reference Manual" izenez ezagutzen dena) eduki askekoa da. Horregatik, ohiko erreferentzia da Ada konpilatzaileak inplementatzen dihardutenentzat eta, oro har, Ada programatzaileentzat. Eskuliburuaz gain, lengoaiaren diseinua eta lengoaiaren hainbat egitura azaltzen dituen oinarrizko dokumentu zabal bat existitzen da. Azken dokumentu hori ere oso erabilia da programatzaileen artean. Hori dela eta, lengoaia berrikusi zenean oinarrizko dokumentua ere eguneratua izan zen.
Sintaxia
[aldatu | aldatu iturburu kodea]Adaren sintaxiak, operazio sinpleak egiterako orduan, aukerak murrizten ditu, baina gomendagarriagoa izaten da ingelesezko giltza hitzak erabiltzea (adibidez, “or else” edo “and then”) sinboloak (adibidez, “||” edo “&&”) baino. Batuketa “+”, kenketa “-”, biderketa “*” edo zatiketa “/” bezalako eragile matematiko sinpleak erabiltzen ditu. Kode-blokeak “begin”, “declare” edota “end” bezalako hitzen artean ematen dira, hau da, If baldintzapeko bat ipini nahi badugu, komandoa idatzi ondoren “end if” idatzi beharko dugu agindua bukatutzat emateko.
Programan bertan iruzkin bat egin nahi badugu, bi gidoiren (--) atzetik idatzi beharko dugu, iruzkin hori lerroaren amaieran bukatuko da. Beraz, iruzkin bat idatzi nahi dugun lerro bakoitzaren hasieran jarri beharko ditugu bi gidoiak. Puntu eta koma (";") esaldiak amaitzeko da eta balio nulua edo eragiketarik gabeko ekintza null;
da. Ezin da ;
bakarra erabili aurretik ekintzarik ez badugu.
Bestalde, literal, identifikadore, hitz erreserbatu eta banatzaile bakoitzak lerro berean idatzita egon behar du, hau da, ezin da bi lerrotan banatu. Karaktere eta kate motako literalek izan ezik beste guztiek ezin dute zuriunerik izan. Gainera, lerro berean elkarren ondoan dauden identifikadore, hitz erreserbatu eta zenbakizko literalek zuriunez bananduta egon behar dute. Honela sinplifikatu genezake Ada-ren sintaxia modu soil batean, bai programen eratzea eta baita aldagaien erazagupena ere:
Prozedura sinple bat erakustearren, hona hemen Kaixo mundua adibidea:
-- "Kaixo mundua" esaldia idatziko dugu
with Ada.Text_IO;
procedure Kaixo is
begin
Ada.Text_IO.Put_Line("Kaixo, mundua!");
end Kaixo;
Programatzeko garapen plataformak eta liburutegiak
[aldatu | aldatu iturburu kodea]Programazio-lengoaia guztiek dituzte bertan programak idazten laguntzeko sortuak izan diren programazio-inguruneak, Ada-z idaztean, laguntzeko ohikoena den softwaretako bat GNAT Programming Studio da. GNAT, software libreko konpilatzailea da. New York-eko unibertsitatean sortu zen. Gaur egun, AdaCorek mantentzen du konpilatzaile hori. Baina AdaGIDE bezalako beste hainbat konpilatzaile ere erabiltzen dira.
Datu-motak
[aldatu | aldatu iturburu kodea]Nahiz eta Ada ez dagoen pentsatuta aurrez definitutako aldagai mota batzuekin soilik funtzionatzeko, baditu horrelako mota batzuk. Hala ere, erabiltzaileak bere aldagai motak definitzeko askatasuna du.
Datu-mota eskalarrak edo bakunak
[aldatu | aldatu iturburu kodea]- Aldagai boolearrak (Boolean): Bi balio baino ez ditu onartzen True (egiazkoa) eta False (faltsua).
- Zenbaki errealak (Float): Adibidez, 3.14159 edo -9.3.
- Zenbaki osoak (Integer): Adibidez, 15 edo -3.
- Zenbaki naturalak (Natural): Zenbaki oso positiboak eta zeroa. Adibidez, 0 edo 78.
- Karaktereak (Character): Adibidez, 'R' edo 'd'.
- Kateak (String): Karaktere-kateak. Adibidez, "Kaixo" edo "24 urte".
Datu-mota konposatuak edo egituratuak
[aldatu | aldatu iturburu kodea]- Taulak edo bektoreak (Array): Adibidez, B1=(1,2,3,4,5,6,7,8,9,10) edo B2=(a,b,c,d,e,f,g,h,i,j).
- Erregistroak (Record): Aldagai-mota ezberdinak gordetzen dituen fitxa bat bezala imajinatu dezakegu. Adibidez, izen bat (kate bat) eta zenbaki bat (erreal bat) dituen erregistro bat definitu genezake.
Bestalde, norberak aldagai-mota bat definitzeko type idazten hasi beharko du. Esaterako, hamar gelaxka dituen bektore bat definituko dugu zeinaren gelaxka bakoitzean boolear bat eta zenbaki erreal bat dituen erregistro bat jarriko dugun:
type Gelaxka is record
Badago: Boolean;
Zenbakia: Float;
end record;
type Izen_Bektore is array (1 .. 10) of Gelaxka;
Adierazpenak
[aldatu | aldatu iturburu kodea]Adierazpen bat, balio bat kalkulatzeko arau edo formula bat da. Ada-ko adierazpenek eragigaiak, eragileak eta parentesiak edukitzen dituzte. Eragigaiak datuak beraiek dira eta horien arteko eragiketak eragileek egiten dituzte. Eragileen artean lehentasun ezberdinak dira, batzuek beste batzuk baino handiagoa dute. Esaterako, I+J/K adierazpena I+(J/K) adierazpenaren baliokidea da, zatiketak gehiketak baino lehentasun handiagoa duelako. Eragiketen lehentasuna gure modura moldatzeko, parentesiak erabiltzen dira, hau da, I/(K+J). Hauek dira Ada-ren eragileak lehentasunaren arabera mailakaturik, lehentasun handieneko eragileak goikoak direla:
Eragile didaktikoak | Eragile monadikoak | Lehentasuna |
---|---|---|
**
* / mod rem + - & = /= < <= >= > and or xor |
abs not
+ -
|
handiena
txikiena |
Bestalde, esleipenak egiteko ":=" ikurra erabiltzen da. Horrekin, ikurraren ezkerreko aldagaiari eskuinaldeko adierazpena esleituko diogu. Esaterako, Adina1 eta Adina2 aldagaien batura egingo dugu horiei balio bat esleitu ostean eta, ondoren batez bestekoa kalkulatuko dugu zati 2 eginez:
function Adinen_Batura (Adina1, Adina2: in Natural) return Float is
Emaitza: Float;
begin
Adina1:=18;
Adina2:=24;
Emaitza:=(Adina1 + Adina2)/2;
return Emaitza;
end Adinen_Batura;
Kontrol-egiturak
[aldatu | aldatu iturburu kodea]Ada programazio-lengoaia egituratua da, hau da, kontrol-aginduak egitura estandarren baitan ordenatzen dira. Programazioan kontrol‑egitura oinarrizkoenak hautaketa eta errepikapena (edo iterazioa) dira.
Hautaketa gauzatzeko, "if" agindua erabiliko dugu. Lehenengo, baldintza bat jarri beharko dugu eta baldintza betetzen bada, programak agindu bat gauzatuko du, betetzen ez bada beste bat.
if <Baldintza> then
<baldintza betetzen den kasuetan burutuko den agindua>;
else
<baldintza betetzen ez den kasuetan burutuko den agindua>;
end if;
Hona hemen, if baldintzapekoarekin sortutako programa baten adibidea, pertsona bat jubilatua den hala ez esango digu programak. Pertsona baten adina 65 zenbakiarekin konparatuko du; pertsona hori jubilatua bada, emaitzak "True" balioa hartuko du, bestela "False". "Bestela" hori adierazteko, hau da, hasierako agindu hori betetzen ez denerako "else" komandoa erabili dezakegu, bertan agindu ezberdin bat betetzeko eskatuz.
procedure Jubilatua (Adina: in Natural; Emaitza: out Boolean) is
begin
if Adina > 65 then
Emaitza := True;
else
Emaitza := False;
end if;
end Jubilatua;
Iterazioari dagokionez, bi agindu ditugu hau gauzatzeko: "while" eta "for". Lehenengoan, baldintza bat betetzen den bitartean, programa begizta batean sarturik egongo da, harik eta baldintza ez bete arte. Horregatik, begiztaren barruan halako batean baldintza ez betetzea eragingo duen aldaketaren bat egon behar da. Bigarrenean, aldiz, aurrez determinatutako tarte batean mantenduko da begizta.
while <Baldintza> loop
<Baldintza betetzen den bitartean burutuko den ekintza(k)>;
end loop;
--Baldintza betetzen ez denean, iteraziotik atera eta hona etorriko da programa>;
Adibidez, beheko programak N zenbakia baino handiagoa den 3 zenbakiaren lehenengo multiploa emango digu, "while" agindua erabiliz.
procedure Hiruren_Lehen_Multiploa (N: in Integer; Z: out Integer ) is
X, Y: Natural
begin
X := 1;
Y := 3;
while X * Y < N loop
X := X + 1;
end loop;
Z := X * Y;
end Hiruren_Lehen_Multiploa;
Bigarren adibide honek "for" kontrol-egitura bat erabiliko du bektore bateko osagai guztiak batzeko, non B'First bektoreko lehenengo osagaiaren indizea den (1 zenbakia), eta B'Last azkenarena (10):
type Oso_Bektore is array (1 .. 10) of Integer;
function Batura (B: in Oso_Bektore) return Integer is
Batura: Integer;
begin
Batura := 0;
for I in B'First .. B'Last loop
Batura := Batura + B(I);
end loop;
return Batura;
end Batura;
Azpiprogramak
[aldatu | aldatu iturburu kodea]Azpiprogramak idazterako orduan, bi atal nagusi bereizi ditzakegu, funtzioak (function) eta prozedurak (procedure). Hauek, gure programa nagusia ordenatuagoa eta ulergarriagoa egiten laguntzen digute, programan zehar funtzio zehatz bat kalkulatu behar dugun bakoitzean aparte definitu den funtzioari egiten zaion dei sinple bat eginda amaitu baitezakegu.
Funtzioak (function)
[aldatu | aldatu iturburu kodea]Funtzioen ezaugarri nagusia honakoa da, erantzun bakarra itzuli dezaketela, hau da, funtzio baten barruan nahi beste eragiketa egiteko baimena eduki arren, emaitza gisa balio bakarra aterako dugu azpiprogramatik. Horrek, abantaila bat du, funtzioari erreferentzia zuzena egin diezaiokegu aldagai baten balio baten erantzun moduan jarri dezakegu.
function Adina_2019an (Jaio_Urtea: in Natural) return Natural is
Urteak: Natural;
begin
Urteak := 2019 - Jaio_Urtea;
return Urteak;
end Adina_2019an;
Pertsona baten jaiotze-urtearen baitan 2019an zuen adina kalkulatzen duen azpiprograma hori dugunez, ez daukagu zertan azpiprograman egindako eragiketak behin eta berriz idatzi beharrik, Adina_2019 funtzioari dei sinple bat egitea nahikoa da.
type Oso_Bektore is array (1 .. 10) of Integer;
procedure Adinak_Kalkulatu (B1_Urteak, B2_Urteak: in Oso_Bektore; B1_Adinak, B2_Adinak: out Oso_Bektore) is
begin
for I in 1..10 loop
B1_Adinak(I) := Adina_2019an(B1_Urteak(I));
B2_Adinak(I) := Adina_2019an(B2_Urteak(I));
end loop;
end Adinak_Kalkulatu;
Prozedurak (procedure)
[aldatu | aldatu iturburu kodea]Prozeduren kasuan, ez dugu emaitza kopuru mugatu bat edukiko. Baina prozedura bati deitzeko modua ere ezberdina izango litzateke. Adibidez, bi sarrera eta bi irteerako prozedura bat badaukagu, prozedura horri deitzeko orduan, parentesi artean, lehenengo bi datuentzako balioak jarri beharko ditugu eta gero bi irteera-parametroak jasotzeko bi aldagaien izenak.
procedure Jaiourtetik_Adinera is
Lesakakoak, Berakoak, Ad_Lesa; Ad_Bera: Oso_Bektore;
begin
-- Irakurri bi bektoreen 10na balioak
Irakurri_Balioak(Lesakakoak); -- prozedura honek 10 zenbaki oso irakurri eta bektorean jarriko ditu
Irakurri_Balioak(Berakoak);
-- Horien adinak kalkulatu Ad_Lesa eta Ad_Bera bektoreetan
Adinak Kalkulatu (Lesakakoak, Berakoak, Ad_Lesa, Ad_Bera);
-- Lortutako adinak inprimatu
Idatzi (Ad_Lesa); -- prozedura honek bektoreko 10 zenbaki osoak idatziko ditu
Idatzi (Ad_Bera);
end Jaiourtetik_Adinera;
Ikus, gainera
[aldatu | aldatu iturburu kodea]- Programazio-lengoaien arteko konparazioa
- Python (programazio-lengoaia)
- Pascal (programazio-lengoaia)
- ALGOL (programazio-lengoaia)
- Programazio
- Programazio-lengoaia
- Programazio-paradigma
- Programazio-lengoaien teoria
- Programazio-lengoaia konpilatua
Erreferentziak
[aldatu | aldatu iturburu kodea]- ↑ (Ingelesez) Levenez. (PDF) Programazio-lengoaien bilakaera grafikoki. (Noiz kontsultatua: 2019-10-11).
- ↑ Watt, David Anthony.. ([1996]). ADA lengoaia eta metodologia. Servicio Editorial de la Universidad del País Vasco = Euskal Herriko Unibertsitateko Argitalpen Zerbitzua ISBN 8475858651. PMC 434213410. (Noiz kontsultatua: 2019-10-11).
- ↑ Díaz de Ilarraza Sánchez,, Arantza; Sarasola, Kepa. (1999). Oinarrizko programazioa : ariketa bilduma. Udako Euskal Unibertsitatea ISBN 8484380025. PMC 52408737. (Noiz kontsultatua: 2019-10-11).
- ↑ «Ikastaroa: Konputagailuen programazioa [2012/05 [eus]»] ocw.ehu.eus (Noiz kontsultatua: 2019-12-17).
- ↑ Iturralde, Asier. (2016-03-07). «Emakumeok ere kodea ulertzen dugu» Iametza Interaktiboa (Noiz kontsultatua: 2019-12-17).
- ↑ Irazustabarrena, Nagore. (2013-09-22). Ada Lovelace, lehen programatzailea. .
Kanpo loturak
[aldatu | aldatu iturburu kodea]- (Ingelesez) Ada-Europe Erakundea
- (Ingelesez) Ada Programming tutorialak Wikibooks-en.
- (Ingelesez) http://d.feneuille.free.fr/enseignerada.htm (Hainbat material frantzesez)
- (Ingelesez) Adan programatzen ikasteko testuliburu elektronikoak
- (Ingelesez) Adan estilo ulergarriarekin programatzeko liburua (Ada Style Guide)
- (Ingelesez) ICPC Adan programatzeko ikasleentzako lehiaketa
- (Ingelesez) Programazio-lengoaien bilakaera historikoa grafikoki, , Levenez
- «Ikastaroa: Konputagailuen programazioa [2012/05 [eus]»] ocw.ehu.eus