ADA Ohjelmointikieli Ryhmä 5 Henna Olli, Päivi Hietanen
1 JOHDANTO Ada on käännettävä ohjelmointikieli, joka kehitettiin vähentämään sulautettujen ja reaaliaikaisten järjestelmien käyttökustannuksia. Kieli suunniteltiin täyttämään kolme vaatimusta: ohjelman luotettavuus ja ylläpidettävyys, ihmiskeskeinen ohjelmointi ja tehokkuus. Näiden vaatimusten pohjalta voidaan sanoa, että Ada on hyvä työkalu kontrolloimaan reaaliaikajärjestelmiä sekä sopiva ohjelmointikieli isojen ja monimutkaisten ohjelmistojen suunnitteluun, niin rakenteista, oliopohjaista kuin geneeristäkin ohjelmointiparadigmaa käyttäen. Adan luotettavuusominaisuudet näkyvät varsinkin kielen vahvassa tyypityksessä, tiedon abstrahoinnissa ja kapseloinnissa, poikkeusten hallinnassa, rinnakkaisten tehtävien moniajon ja samanaikaisuuden hallinnassa. (T. Wu 1990) 2 HISTORIA 1970-luvun alussa Yhdysvaltojen puolustusministeriö huomasi puolustusjärjestelmien kulujen kasvavan ja luotettavuuden heikkenevän. Vuonna 1975 perustetiin työryhmä selvittämään vaatimukset puolustusministeriön ohjelmointikielille. Työryhmä suositteli uuden ohjelmointikielen kehittämistä, jota käytettäisiin kaikissa puolustusjärjestelmien kehitysvaiheissa. Ohjelmointikielen kehittämisessä käytettiin kansainvälistä kilpailua, kilpailun voitti Jean Ichbiah johtama ranskalainen joukkue. Kehitystyön tuloksena syntyi Ada. Adan nimi tulee ensimmäisenä ohjelmoijana pidetystä englantilaisesta matemaatikosta Ada Lovelacesta. Ada-kieli standardoitiin vuonna 1983. Adasta on olemassa useita eri versioita: Ada 83, Ada 95 ja Ada 2012. Alkuperäistä kieltä kutsutaan nykyään Ada 83:ksi. Alkuperäistä kieltä lähdettiin kehittämään vuonna 1988, lopullinen versio kielestä julkaistiin vuonna 1995. Ada 95 on ensimmäinen ISOstandardoitu oliokieli. Uusin versio standardista julkaistiin vuonna 2012, Ada 2012. (Wikipedia; D. C. S. Clair 1985) 3 ADAN PERIAATTEET 3.1 RAKENNE Ada on modulaarista ja sillä kirjoitettu ohjelma koostuu yhdestä tai useammasta ohjelmayksiköstä, joista jokainen voidaan kääntää erikseen. Käytettyjä yksiköitä ovat: aliohjelmat (subprogram), pakkaukset (packages) ja tehtävät (tasks). Paketointi tarjoaa
käytännöllisen tavan ryhmitellä aliohjelmia. Adan paketointi on samankaltainen kuin Fortranin ja Pascalin kirjastot. Tehtävät ovat tärkeitä järjestelmissä joissa prosesseja esiintyy rinnakkain. Rinnakkaisten prosessien hallinta on tehty Adassa helpoksi, jokaiselle rinnakkaiselle tehtävällä luodaan oma ohjelmayksikkö ja Ada huolehtii automaattisesti muusta. (D. C. S. Clair 1985) 3.2 SYNTAKSI Adan syntaksi on suunniteltu helposti luettavaksi, koska kehittäjien mukaan ohjelma kirjoitetaan kerran, mutta luetaan tuhannesti. Syntaksi on melko verboosia. (Wikibooks) Adan ohjelmalla on kaksi osaa: määrittelyosa ja runko. Kaikki ohjelman muuttujat pitää määritellä, muuttujat määritellään määrittelyosassa. Ohjelman rungossa suoritetaan halutut operaatiot. procedure DEMO is -- määrittelyosa begin -- runko end DEMO (D. C. S. Clair 1985) Moduuleita kutsutaan Adassa pakkauksiksi. Pakkaukset sisältävät määrittelyosan ja rungon. Määrittelyosa voidaan jakaa näkyvään ja yksityiseen osaan, yksityinen osa määritellään varatulla sanalla private. (Harsu 2005) 3.3 TYYPITYS JA TYYPIT Ada on vahvasti ja staattisesti tyypitetty kieli. Tietotyyppi voidaan luonnehtia joukkona tieto-olioita ja niille määriteltyjä operaatioita. Ada jakaa tieto-oliot omiin luokkiinsa, joilla on jokaisella omat operaationsa. Tämä takaan ohjelman luotettavuuden estäen operaatiot eri tyyppisten muuttujien välillä. Ohjelmoijat eivät voi suoraan yhdistää tai sijoittaa erityyppisiä muuttujia. (T. Wu 1990) 3.4 ALIOHJELMAT Adassa aliohjelmat jaotellaan proseduureihin ja funktioihin. Proseduurikutsu ei palauta arvoa, kun taas funktiokutsu palauttaa. Adassa parametreja voidaan välittää aliohjelmille kolmella eri tavalla: arvo-, tulos- ja arvo-tulos-parametreina. Sivuvaikutuksia on pyritty välttämään käyttämällä out ja in out tapoja parametrien välityksessä viiteparametrien
sijaan. Aikaisemmin Adassa funktioiden parametreiksi sallittiin vain arvoparametreja. Kielen versiossa Ada 2012 tämä rajoitus poistettiin. Parametrit voivat olla nimettyjä tai nimeämättömiä. Parametreille voidaan määrittää myös oletusarvot, jolloin niille ei tarvitse kutsuttaessa antaa arvoa. (Wikibooks.org; T. Wu 1990) 3.5 OHJAUSRAKENTEET Ada kielestä löytyvät tyypilliset kontrollirakenteet. Ada tarjoaa lisäksi ominaisuudet: exit ja when others, joilla voidaan hallita paremmin silmukkarakenteita. Adassa voidaan lohkorakennetta käyttäen luoda paikallinen ympäristö, ilman että tarvitsee määritellä aliohjelma. Ada ei käytä moniehtolauseissa oikosulkuevaluointia oletuksena, jos tämä halutaan käyttöön pitää ehtojen väliin lisätä and then tai or else. Ehdottomat lauseet taas (unconditionals) antavat ohjelmoijalle mahdollisuuden muuttaa ohjelman kulkua ilman ehtoa. Adassa on useita silmukkarakenteita: päättymätön silmukka, while-silmukka ja forsilmukka. Lisäksi silmukoiden ehdot voivat sijaita silmukan alussa, lopussa tai keskellä. Adassa silmukalle voi antaa nimen, mutta se ei ole pakollista. Päättymättömän silmukan suoritus voidaan keskeyttää vain pakotetusti. While-silmukassa ehto voi olla silmukan alussa, jolloin voi käydä niin ettei silmukkaa suoriteta koskaan. Kun silmukan ehto on sijoitettu silmukan loppuun, silmukka suoritetaan ainakin kerran. Silmukan ehto voi Adassa sijoittua myös silmukan keskelle. Exit ehtoa voidaan käyttää minkä tahansa silmukkarakenteen kanssa. For-silmukassa silmukkamuuttuja ei ole olemassa silmukan ulkopuolella. Silmukkamuuttujaa voidaan muuttaa vain silmukan kontrollirakenteessa. For-silmukalla voidaan käydä myös taulukon elementit läpi. (Wikibooks) (T. Wu 1990) 3.6 POIKKEUSTEN HALLINTA Sulautettujen järjestelmien pitää pysyä ajossa pitkiä aikoja itsenäisesti. Ada-kielen täytyy tästä syystä pystyä käsittelemään odottamattomia tilanteita. Kieli tarjoa ennalta määriteltyjä poikkeuksia näiden tilanteiden käsittelyyn. Ennalta määriteltyjä poikkeuksia ovat: constraint_error, numeric_error, storage_error, tasking_error ja program_error. Poikkeukset esitellään lohkon lopussa tai aliohjelman rungossa.
exception when poikkeuksen_nimi => statement_sequence (T. Wu 1990) 3.7 RINNAKKAISUUS Reaaliaikajärjestelmissä useita itsenäisiä tehtäviä suoritetaan samanaikaisesti. Adan tehtävät ovat rinnakkaisia prosesseja. Tehtävät voivat kommunikoida keskenään kohtaamisten (rendezvous) avulla. Kohtaamistapahtuman osapuolina ovat palvelija ja palveltava. Kommunikointi käyttää accept lauseketta, joka kuvaa tehtävän porttia (entry). Portti määrittelee ne palvelut, joita tehtävä tarjoaa. Yksi palveltava prosessi kerrallaan pääsee kohtaamistapahtumaan palvelijanprosessin kanssa, jos jompikumpi osallistujista ei ole vielä valmis, toinen joutuu odottamaan. Kohtaamisessa tiedonvälitys voi tapahtua molempiin suuntiin, suunta ilmaistaan kielen tavallisilla parametrinvälitysvaihtoehdoilla (in, out, in out). Portin valinta tapahtuu siinä järjestyksessä, kun kohtaamislauseet on kirjoitettu koodiin, parempi tapa olisi mahdollistaa portin valinta tarpeen mukaan. Adassa tämä on mahdollistettu valikointilauseella select. task body MUISTI is i: Integer; begin loop select accept Kirjoita (x: in Integer) do i:=x; end Kirjoita; or accept Lue (x: out Integer) do x:=i; end Lue; end select; end loop; end MUISTI; Kohtaamislauseeseen voidaan liittää ehtoja, jolloin lause on mahdollista valita vain, kun lauseen ehto täyttyy. Ada 83 käyttää synkronista viestien välittämistä (esimerkit yllä). Ada 95:ssä viestien välittäminen muutettiin asynkronisiksi, tämän vuoksi Ada 95:een on lisätty suojatut oliot.
Suojatut oliot ovat enemmin monitoreita kuin tehtäviä, niihin päästään käsiksi porttien tai suojattujen aliohjelmien kautta. (T. Wu 1990; Harsu 2005)
4 LÄHTEET D. C. S. Clair (1985). Ada: A new programming language: The Department of Defense developed an incredible new programming language and named it in honor of Ada Lovelace, the world's first programmer, IEEE Potentials, Vol. 4(3), pp. 26-29. Harsu, M. (2005). Ohjelmointikielet: periaatteet, käsitteet, valintaperusteet, Talentum, Helsinki,. T. Wu (1990). Built-in reliability in the Ada programming language, Aerospace and Electronics Conference, 1990. NAECON 1990., Proceedings of the IEEE 1990 National, pp. 599-602 vol.2. Wikibooks.org, web page. Available (accessed 11/17): https://en.wikibooks.org/wiki/ada_programming.