ADA. Ohjelmointikieli. Ryhmä 5 Henna Olli, Päivi Hietanen

Samankaltaiset tiedostot
Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

812341A Olio-ohjelmointi, I Johdanto

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

TIE Principles of Programming Languages CEYLON

811120P Diskreetit rakenteet

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

811120P Diskreetit rakenteet

ELM GROUP 04. Teemu Laakso Henrik Talarmo

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

Muistutus aikatauluista

Ohjelmointiharjoituksia Arduino-ympäristössä

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

UML -mallinnus TILAKAAVIO

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Tutoriaaliläsnäoloista

TIES542 kevät 2009 Yhteismuistisamanaikaisuus

Ehto- ja toistolauseet

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

1. Olio-ohjelmointi 1.1

1. Omat operaatiot 1.1

11/20: Konepelti auki

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

Rinnakkaistietokoneet luento S

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

TAMPEREEN TEKNILLINEN YLIOPISTO

1. Mitä tehdään ensiksi?

Java-kielen perusteet

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

5/20: Algoritmirakenteita III

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

13. Loogiset operaatiot 13.1

Erlang. Miika Heinonen ja Lassi Uosukainen (Group 92) TIE Principles of Programming Languages Seminaariessee. Yleistä

automaattisen tietotyypin tunnistamisen osalta, minkä Smith koki olevan avaintekijä onnistuneen rinnakkaisen ohjelmointikielen toteuttamisessa.

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Kielioppia: toisin kuin Javassa

Ohjelmointi 1 C#, kevät 2013, 2. tentti

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Harjoitustyö: virtuaalikone

ITKP102 Ohjelmointi 1 (6 op)

TAMPEREEN TEKNILLINEN YLIOPISTO

Monipuolinen esimerkki

HELIA 1 (17) Outi Virkki Tietokantasuunnittelu

Luento 4 Aliohjelmien toteutus

Verilogvs. VHDL. Janne Koljonen University of Vaasa

Ohjelmoinnin peruskurssien laaja oppimäärä

Jakso 4 Aliohjelmien toteutus

VHDL/Verilog/SystemC. Jukka Jokelainen

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Ohjelmoinnin peruskurssien laaja oppimäärä

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

abba 1. Perusrakenteita

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011

ITKP102 Ohjelmointi 1 (6 op)

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Common Lisp Object System

Java-kielen perusteet

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

815338A Ohjelmointikielten periaatteet

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Ohjelmoinnin peruskurssien laaja oppimäärä

7. Oliot ja viitteet 7.1

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmoinnin peruskurssien laaja oppimäärä

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

Ohjelmistojen mallintaminen, mallintaminen ja UML

815338A Ohjelmointikielten periaatteet

lausekkeiden tapauksessa. Jotkin ohjelmointikielet on määritelty sellaisiksi,

Sisältö. 2. Taulukot. Yleistä. Yleistä

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Tietueet. Tietueiden määrittely

Python-ohjelmointi Harjoitus 5

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Transkriptio:

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.