Ada (programazio-lengoaia)

Wikipedia, Entziklopedia askea
Ada (programazio lengoaia)» orritik birbideratua)
Jump to navigation Jump to search
Ada
Ada Mascot with slogan.png
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 (18151852) 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.

Ada Lovelace (1815-1852)

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.

Programazio-lengoaia batzuen bilakaera

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:

ADA programen sintaxia (sinplifikatua)

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;

Erreferentziak[aldatu | aldatu iturburu kodea]

  1. (Ingelesez) Levenez (PDF), Programazio-lengoaien bilakaera grafikoki, . Noiz kontsultatua: 2019-10-11.
  2. 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.
  3. 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.
  4. «Ikastaroa: Konputagailuen programazioa [2012/05 [eus]»] ocw.ehu.eus . Noiz kontsultatua: 2019-12-17.
  5. Iturralde, Asier (2016-03-07) «Emakumeok ere kodea ulertzen dugu» Iametza Interaktiboa . Noiz kontsultatua: 2019-12-17.
  6. Irazustabarrena, Nagore (2013-09-22) Ada Lovelace, lehen programatzailea.

Ikus, gainera[aldatu | aldatu iturburu kodea]

Kanpo estekak[aldatu | aldatu iturburu kodea]