Ohjelmointikielten kehityshistoriaa

Koko: px
Aloita esitys sivulta:

Download "Ohjelmointikielten kehityshistoriaa"

Transkriptio

1 Ohjelmointikielten kehityshistoriaa Tässä osassa tarkastellaan tavallisimpien ja ohjelmointikielten kehityksen kannalta merkittävien kielten kehityshistoriaa. Pääasiallisena lähteenä on käytetty Sebestan kirjan ([Seb]) lukua Ohjelmointikielten sukupolvijako Ohjelmointikielet jaetaan usein viiteen sukupolveen, vaikka onkin epäselvää, mistä jaottelu on saanut alkunsa. Ensimmäiset ohjelmointikielet olivat puhtaita konekieliä, ts. tietokoneen muistiin sijoitettuja binäärimuotoisia konekielisiä komentoja. Näillä kielillä ohjelmoiminen oli äärimmäisen työlästä ja virhealtista, joten jo 1950-luvun alkupuolella kehitettiin symboliset konekielet (assembler languages). Näissä kielissä yhtä konekielistä käskyä vastasi tekstimuotoinen symboli, joka ihmisen oli helpompi muistaa kuin konekielinen luku. Samoin muistipaikoille voitiin antaa symbolinen merkintä. Symbolinen konekieli käännettiin konekieleksi erityisen ohjelman (assembler) avulla. Konekielet muodostavat ohjelmointikielten ensimmäisen ja symboliset konekielet toisen sukupolven. Lähes kaikki sukupolvijaottelut ovat kahden ensimmäisen sukupolven osalta yhtenäisiä; sen sijaan kolmannen, neljännen ja viidennen sukupolven määrittely vaihtelee. Tässä esitetään varsin yleisesti esiintyvä jaottelu, mutta muitakin on olemassa. Ensimmäiset korkean tason ohjelmointikielet syntyivät 1950-luvun loppupuolella; näihin kolmannen sukupolven kieliin kuuluvat kaikki nykyiset valtakielet. Varsin yleisesti kolmannen sukupolven kieliksi kutsutaan korkean tason lausekieliä; useimpien jaottelujen mukaan myös yleisimmät nykyiset olio-ohjelmointikielet kuuluvat kolmanteen sukupolveen. Joittenkin jakojen mukaan ne sijoittuvat kuitenkin jo seuraavaan sukupolveen. Kolmannen sukupolven kielet tarvitsevat joko tulkin tai kääntäjän muodostamaan konekielisen ohjelman lähdekoodista. Neljännen ja viidennen sukupolven määritelmät eivät ole vielä selkiytyneet niinkään hyvin kuin kolmannen. Yleensä neljännen sukupolven kieliin lasketaan 1980-luvulta alkaen yleistyneet kielet, joita käytetään yleisesti verkkoympäristöissä ja tietokantojen kyselykielinä. Neljännen sukupolven kieltä on yleensä helpompi kirjoittaa, mutta kieli ei

2 myöskään anna ohjelmoijalle niin suurta kontrollia kuin perinteisemmät korkean tason kielet. Tämän sukupolven kielet ovat yleensä tehokkaita kirjoitettaessa lyhyitä ja yksinkertaisia ohjelmia ja niiden syntaksi on lähempänä luonnollista kieltä kuin kolmannen sukupolven kielillä. Viidennen sukupolven kielet ovat pääasiassa vielä kehitteillä; ne on tarkoitettu tyypillisesti jonkinlaista tekoälyä vaativiin sovelluksiin. Viidennen sukupolven kielen syntaksi muistuttaa yleensä luonnollista kieltä. Logiikkaan perustuva Prolog-kieli lasketaan yleensä viidennen sukupolven kieleksi. 2. Pääohjelmointikielten kehitys Seuraavaksi tarkastellaan melko lyhyesti ohjelmointikielten kehityksen pääpiirteitä merkittävimpien kielten osalta. Aihe on erittäin laaja eikä siitä voida tässä yhteydessä antaa kattavaa esitystä. Jatkossa palataan kielten kehityshistoriaan, kun käsitellään tarkemmin ohjelmointikielten piirteitä Kielten esihistoriaa Ensimmäiset tietokoneet, joita voitiin ohjelmoida sanan nykyisessä merkityksessä, rakennettiin John von Neumannin idean perusteella 1940-luvun loppupuolella. Neumann puolestaan perusti ajatuksensa koneen arkkitehtuurista Alan Turingin esittämään abstraktiin koneeseen. Neumannin arkkitehtuuriin perustuvissa koneissa ohjelmat talletettiin muistiin ja keskusyksikkö suoritti ohjelmat. Ensimmäinen askel tällaisen koneen valmistamiseksi otettiin Philadelphian yliopiston sähkötekniikan laitoksella vuonna 1945, kun elektroniputkea sisältänyt sähköinen digitaalinen laskukone ENIAC valmistui. ENIACia ohjelmoitiin yhdistelemällä johtoja kytkentätaululla. Hankkeeseen liittynyt von Neumann julkaisi kesäkuussa 1945 raportin, jonka esittämän mallin mukaan kaikki nykyiset tietokoneet toimivat (ks. [Dav], ss ). Kuitenkin jollain tavalla ohjelmoitavia laitteita oli ollut jo aiemmin; Charles Babbage suunnitteli ja 1840-luvuilla ohjelmoitavan laskukoneen (Analytical Engine), joka valmistettiin vain osittain (ks. [Lou], s. 32). Kreivitär Ada Lovelace ohjelmoi kuitenkin keskeneräiselle laitteelle joitakin esimerkkilaskutoimituksia, joten häntä voidaan pitää historian ensimmäisenä ohjelmoijana. Vuosina saksalainen tiedemies Konrad Zuse suunnitteli monimutkaisia elektronisia laskukoneita (ks. [Seb], kappale 2.1); sodan jälkeen Zusen tutkimusryhmä hajosi ja hän alkoi suunnitella ohjelmointikieltä laskutoimitusten

3 suorittamiseen. Zuse nimesi kielensä Plankalküliksi käsikirjoituksessaan vuodelta 1945, mutta kirjoitusta ei julkaistu ennen kuin vuonna 1972 ja Plankalkül jäi implementoimatta. Kieli oli varsin monipuolinen ja Zuse kirjoitti sillä monia algoritmeja, mm. verkon yhtenäisyyden tutkivan algoritmin, liukulukuja käsitteleviä algoritmeja jne. Näin ollen nykytietojen mukaan Zusen Plankalkül oli ensimmäinen suunniteltu ohjelmointikieli luku: Ensimmäiset ohjelmointikielet Jo luvun tietokoneissa kehitettiin menetelmiä helpottaa konekielisten ohjelmien kirjoittamista. Tällöin syntyivät ns. pseudokoodit, joissa tietyillä lyhennysmerkinnöillä voitiin antaa hieman monimutkaisempia operaatioita luvun alkupuolella kehittyi myös toinen ohjelmointikielten sukupolvi, symboliset konekielet (assembly languages ). Ensimmäinen korkean tason (ja samalla ensimmäinen kolmannen sukupolven) ohjelmointikieli oli FORTRAN (FORmula TRANslator), jonka kehitti IBM:llä John Backuksen johtama työryhmä vuosien 1954 ja 1957 välisenä aikana. (Tosin ensimmäisen kielen asema on hieman kiistanalainen, ks. [Seb] kappale 2.3.1). FORTRANin merkitys ohjelmointikielten kehityksessä on suuri; kielen kehittäminen osoitti korkean tason ohjelmointikielten konstruoinnin mahdolliseksi käytännössä. Lisäksi FORTRANia käytetään edelleen kehittyneenä muunnelmana laajasti sen alkuperäiseen tarkoitukseen, tieteelliseen ja numeeriseen ohjelmointiin. Alkuperäisen FORTRANin ominaisuuksia olivat mm.: tulostuksen ja syötön muotoilu, looginen IF -lause, johon voitiin antaa algebrallisia vertailuoperaatioita, toistorakenne laskurimuuttujan suhteen DO -lausekkeella. Alkuperäisestä kielestä puuttui tietotyypin määrittely: Kirjaimilla I,J,K,L,M ja N alkavat muuttujat olivat automaattisesti kokonaislukuja ja muilla kirjaimilla alkavat liukulukuja. FORTRAN- kääntäjä kykeni tuottamaan ohjelmakoodista lähes yhtä tehokasta konekielistä koodia kuin kokenut ohjelmoija suoraan, mikä oli merkittävä saavutus. Kääntäjän optimointi veikin kielen suunnitteluajasta suurimman osan luvulla syntyi myös kieli, jota on luultavasti käytetty enemmän kuin mitään muuta ohjelmointikieltä (ks. [Seb] kappale 2.6) - COBOL (COmmon Business Oriented Language). Huolimatta laajasta käytöstä, COBOL ei ole juurikaan vaikuttanut

4 myöhempien kielten kehitykseen. Nimensä mukaisesti sitä käytetään pääasiassa liiketaloudellisiin sovelluksiin; kielellä on hyvin hankala kirjoittaa monimutkaisia algoritmeja, mutta erilaisten raporttien tuottamiseen se on omiaan. COBOLin syntaksi muistuttaa hyvin paljon englannin kieltä. ALGOL 60 kehitettiin luvun loppupuolella ja sekin on vaikuttanut suuresti myöhempien ohjelmointikielten kehitykseen. ALGOL 60 syntyi yrityksistä suunnitella yleisohjelmointikieli vastareaktiona sille, että useimmat tuohon aikaan käytetyt kielet oli suunniteltu erityisesti jollekin konetyypille. Kieltä suunnittelemaan ryhtyivät yhdessä Saksan soveltavien matemaatikkojen yhdistyksen GAMMin ja amerikkalaisen ACM:n (Association for Computing Machinery) perustama komitea. Komitean tavoitteena oli suunnitella kieli, joka toteuttaisi seuraavat ehdot: 1. Kielen syntaksin tulisi olla mahdollisimman lähellä standardia matemaattista merkintätapaa. 2. Kielen avulla pitäisi voida esittää laskentamenetelmiä julkaisuissa. 3. Kielellä kirjoitetut ohjelmat pitää voida kääntää mekaanisesti konekielelle. Tuloksena oli ALGOL 58, joka oli monessa suhteessa FORTRANin perillinen. ALGOL 58 yleisti FORTRANin merkintöjä ja toi kieleen uusia rakenteita ja käsitteitä. ALGOL 58:aa ei ollut tarkoitettu lopulliseksi versioksi, mutta ALGOL 58 -raporttia käytettiin silti joidenkin toteutuksien pohjana. Käydyn keskustelun ja kritiikin perusteella päätettiin järjestää tammikuussa 1960 kokous, jossa tehtiin merkittäviä muutoksia ALGOL 58:aan, vaikka kokous kestikin ainoastaan kuusi päivää. Merkittävimmät muutokset olivat: 1. Kieleen lisättiin lohkorakenne, mikä toi ohjelmoijien käyttöön näkyvyysalueen (scope). 2. Parametrien välitys aliohjelmille uudistettiin: sallittiin kaksi eri mekanismia, arvovälitys (pass by value) ja nimivälitys (pass by name). 3. Aliohjelmien rekursiivisuus sallittiin. 4. Pinodynaamisten taulukoiden käyttö sallittiin. Näin syntyi ALGOL 60, josta kehittyi nopeasti standardi tapa esittää algoritmeja tietojenkäsittelytieteen julkaisuissa. Esimerkiksi ACM vaati lähes kolmenkymmenen vuoden ajan sen julkaisuissa ilmestyvien algoritmien esittämisen ALGOLilla. Jokainen sittemmin kehitetty imperatiivinen ohjelmointikieli on saanut vaikutteita ALGOL 60:sta.

5 ALGOL 60 oli varsin laajassa käytössä Euroopassa, vaikka ei saavuttanutkaan valtakielen asemaa. Yhdysvalloissa kieltä käytettiin vain vähän. Tähän saattoi osaltaan vaikuttaa se, että ALGOL 60 oli liian moderni ohjelmointikieli. Hoaren mukaan "Here is a language so far ahead of its time that it was not only an improvement on its predecessors but also on nearly all its succeccors." ([Hoa], Appendix). ALGOL-kieltä kehitettäessä syntyi myös BNF (Backus-Naur Form)-merkintätapa, jota käytetään yleisesti kuvaamaan ohjelmointikielten ja muiden formaalien kielten syntaksia. Ensimmäiset funktionaaliset ohjelmointikielet luotiin myös luvulla, jolloin tekoälytutkimus alkoi heräillä. John McCarthy tutki 1958 symbolisen laskennan toteuttamista tietokoneella, yhdessä Marvin Minskyn kanssa he muodostivat tekoälyprojektin, jonka tuloksena syntyi lopulta LISP (List Processing language). LISPohjelmointi poikkeaa suuresti yleisemmästä imperatiivisesta ohjelmoinnista, joka pohjautuu muuttujiin ja sijoituslauseisiin. Puhdas LISP käsittelee vain kahdenlaisia tietorakenteita: atomeja ja listoja. Atomit ovat joko symboleita tai numeerisia literaaleja. Listat voivat sisältää atomeja ja toisia listoja. LISP on ALGOLin tapaan vaikuttanut ratkaisevasti myöhempiin ohjelmointikieliin: esimerkiksi roskien keruu oli ensimmäistä kertaa mukana juuri LISPissä luku: Räjähdysmäinen kehitys Tultaessa luvulle, ohjelmointikielten valtaa pitivät FORTRAN, COBOL ja ALGOL. Näistä FORTRAN ja ALGOL soveltuivat parhaiten tieteelliseen laskentaan ja COBOL kaupallisiin sovelluksiin. Vuosikymmenellä suunniteltiin satoja uusia ohjelmointikieliä, joista monet oli tarkoitettu erikoiskäyttöön; näistä useimmat ovat hävinneet. Kuka muistaa esimerkiksi seuraavia kieliä: AESOP, BASEBALL, COGO, DEACON, FLAP, GRAF, ICES, JOSS, LOLITA, MADCAP, NELIAC, OPS, PAT, QUIKTRAN, STRESS, TREET ja UNICODE? Kaikkia 1960-luvun kieliä ei suinkaan suunniteltu erikoistarkoituksiin, vaan jotkut haaveilivat todellisesta yleiskielestä, jota voitaisiin käyttää kaikkeen ohjelmointiin. Tällainen kieli oli IBM:llä vuosikymmenen puolivälissä kehitetty PL/I, jolla oli ensimmäisenä kielenä formaalisti määritelty semantiikka (merkitysoppi). Kieleen kerättiin suuri määrä piirteitä, joista osa oli joissakin olemassa olevista kielistä sekä paljon sellaista, jota ei vielä ollut toteutettu missään kielessä. Tällaisia piirteitä olivat esimerkiksi

6 1. Ohjelmat saattoivat sisältää rinnakkaisesti suoritettavia toimintoja 2. Poikkeusten käsittely 3. Aliohjelmat saattoivat olla rekursiivisia, mutta valinnan mukaan rekursio voitiin kytkeä pois 4. Osoitintietotyypin ottaminen käyttöön 5. Useampiulotteisen taulukon alitaulukoihin voitiin viitata suoraan (esimerkiksi matriisin riviin vektorina). Kielen suunnittelutavoitteet olivat liian kunnianhimoiset ja kielestä tuli erittäin laaja ja vaikeasti hallittava. Kuitenkin kieltä käytettiin ja luvuilla varsin laajasti ja se on käytössä IBM-ympäristössä edelleen, vaikka ei yleinen olekaan. Myös ALGOL-kieltä kehitettiin 1960-luvulla; näin syntyi ALGOL 68, jonka kohtalo oli samantapainen kuin PL/I:n: Laajana ja monimutkaisena se jäi lähes käyttämättä. ALGOL 68:aa rasitti vielä vaikealukuinen määrittely. Kielen tärkeimpänä suunnitteluperiaatteena oli ortogonaalisuus, ts. piirteiden maksimaalinen riippumattomuus muista piirteistä ja niiden mahdollisimman suuri yhdisteltävyys. Tämä koski erityisesti tietotyyppejä. Vaikka ALGOL 68 ei saavuttanutkaan suosiota, sen ideoita, esimerkiksi operaattoreiden ylikuormitusta, on käytetty muissa ohjelmointikielissä. ALGOLista kehitettiin rinnakkain myös toinen, yksinkertaisempi versio ALGOL W. Sekään ei tullut yleiseen käyttöön, mutta toimi myöhemmin pohjana erittäin suositulle Pascal-kielelle. BASIC (Beginner's All-purpose Symbolic Instruction Code) on ollut yksi yleisimpiä mikrotietokoneiden ohjelmointikieliä. Se kehitettiin Dartmouthin Collegessa työkaluksi humanististen alojen opiskelijoille. Tämän vuoksi kielestä tehtiin varsin yksinkertainen ja esimerkiksi lohkorakenne jätettiin pois, mikä teki ohjelmista hankalasti strukturoitavia. Kielten kehityksen kannalta BASICin merkittävin piirre on, että se oli ensimmäinen yleisesti käytetty menetelmä hoitaa etäpääteyhteys keskustietokoneeseen (reikäkorttien ja paperinauhojen sijaan). Myös BASICin kehitys on jatkunut ja siitä on useita versioita, joista yleisimmin käytetään VisualBASICiä. Olio-ohjelmointikin syntyi jo luvulla. Jo 1962 norjalaiset Kristen Nygaard ja Ole- Johan Dahl suunnittelivat ensimmäisen version simulointiin tarkoitetusta Simula - kielestä. Olioparadigma tuleekin luonnollisesti mukaan reaalimaailman mallintamisessa. Yleisimmin tunnettu on vuonna 1967 valmistunut Simula 67, joka sai

7 suuresti vaikutteita ALGOL 60:stä. Oliomalli kieleen tuli itse asiassa rinnakkaisten tapahtumien toteuttamistarpeesta: Simulassa oli mahdollista suorittaa aliohjelmia (näennäisesti) rinnakkain käyttämällä ns. vuorottaisaliohjelmia (coroutines); näin sai alkunsa datan abstrahointi ja johti myöhemmin moderniin olio-ohjelmointiin. Jo Simulassa oli luokkakäsite; luokka yhdisti datan ja niitä käsittelevät funktiot. Myös periytyminen (Simulassa prefixing) oli jo mahdollinen. Simulan roskienkerääjä vapautti myös ohjelmoijan itse tuhoamasta luomiaan olioita. Simulasta ei koskaan tullut suosittua kieltä, vaikka se epäilemättä olisi ansainnut laajempaa huomiota luku: Rakenteinen ohjelmointi 1960-luvun kielellisen sekamelskan jälkeen, uudelle vuosikymmenelle siirryttäessä, jouduttiin tekemään uudelleenarviointeja kielten suunnittelussa. Nyt avainsanoiksi tulivat yksinkertaisuus, johdonmukaisuus ja rakenteellisuus. Muotikäsitteitä oli rakenteinen ohjelmointi (structured programming). Useat 1970-luvun kielet suunniteltiin nimenomaan rakenteiseen ohjelmointiin. Niklaus Wirth oli ollut mukana jo ALGOL W:n suunnittelussa; tämän kielen pohjalta hän kehitti aivan vuosikymmenen alussa (1971) Pascal -kielen nimenomaan vastareaktiona 1960-luvun monimutkaisille kielille. Hänen tarkoituksensa oli osoittaa, että yksinkertainenkin kieli voi olla ilmaisuvoimainen. Pascalin tietotyyppijärjestelmä perustui muutamiin alkeistietotyyppeihin ja mahdollisuuteen määritellä uusia, rakenteisia tietotyyppejä. Pascal suunniteltiin heijastamaan Wirthin ajatusta ohjelmistokehityksestä askeleittain tarkentamisella; tämä näkyykin Pascalin rakenteesta selvästi. Kielen pääasiallinen tarkoitus oli toimia ohjelmoinnin opetuksessa, missä se menestyikin hyvin: aina 1970-luvun puolivälistä 1990-luvun puoliväliin Pascal oli yleisin ohjelmoinnin opetuskieli. Kieli oli kuitenkin liian yksinkertainen saavuttaakseen laajaa suosiota sovelluskehityksessä; siitä puuttui monia olennaisia piirteitä tätä varten. Pascalista on kehittynyt kuitenkin murteita, joita on käytetty myös sovellusten kehittämiseen. Lisäksi Pascal on vaikuttanut merkittävästi uudempiin ohjelmointikieliin, vaikka ei tuonutkaan merkittäviä uutuuksia silloisiin ohjelmointikieliin. Myös kaikkien ohjelmoijien tuntema C-kieli kehitettiin 1970-luvulla. Sen loi Dennis Ritchie järjestelmäohjelmointitarkoituksiin. C-kielen nykyinen suosio perustuukin ainakin osaksi siihen, että UNIX -käyttöjärjestelmä uudelleenohjelmoitiin sillä. Näin

8 UNIXin suosio johti myös C-kielen yleistymiseen. Sinänsä C ei tuonut juurikaan uutta ohjelmointikieliin, se on kuitenkin erittäin joustava ja sopii siten monenlaiseen ohjelmointiin. Kieli perustuu pieneen joukkoon alkeiskäsitteitä, esimerkiksi merkkijonoja käsitellään merkkitaulukkoina ja niiden manipulointi perustuu osoitinaritmetiikkaan. Yksinkertaisuutensa vuoksi C:tä voidaan kääntää helposti ja tehokkaasti konekielelle, mikä onkin ollut kielen tärkeimpiä suunnittelukriteerejä. Huolimatta siitä, että C ei voi ylpeillä omaperäisyydellä, se on suosionsa ansiosta vaikuttanut erittäin vahvasti muihin ohjelmointikieliin. Vuosikymmenen alkupuolella sai myös alkunsa uusi ohjelmointiparadigma, kun ensimmäinen logiikkaohjelmointikieli Prolog näki päivänvalon. Samoin kuin funktionaalinen ohjelmointi, myös logiikkaohjelmointi syntyi tekoälytutkimuksen piirissä. Prologin perusrakenteen suunnittelivat Colmerauer, Roussel ja Kowalski ja ensimmäinen Prolog-tulkki implementoitiin Marseillessa vuonna Nykyiset logiikkaohjelmointikielet käyttävät Prologin tapaan predikaattikalkyyliä (rajoitetussa muodossa) esitystapanaan. Toistaiseksi logiikkakieliä vaivaa tehottomuus, eikä niille ole löydetty juuri tarkoituksenmukaisia sovelluskohteita tekoälysovellusten ulkopuolelta. Olio-ohjelmointi yleistyi vasta 1980-luvulla, mutta jo 1970-luvulla syntyi Smalltalk - ehkä kaikkein puhtain oliokieli, ja joidenkin mielestä edelleen yksi parhaista. Kielen kehitys sai alkunsa Alan Kayn ideoista ja hänen kehitystyöstään Xeroxin Palo Alton tutkimuskeskuksessa, jossa suunniteltiin tietokoneen graafista käyttöliittymää. Alan Kay oli saanut vaikutteita sekä LISPistä että Simulasta. Dan Ingalls teki kielen ensimmäisen implementoinnin BASICillä vuonna Simula on vaikuttanut Smalltalkiin merkittävästi, mutta Smalltalk vei oliomallin huomattavasti pidemmälle. Smalltalkissa kaikki asiat ovat olioita ja oliot kommunikoivat keskenään lähettämällä ja vastaanottamalla viestejä. Luokkien perusluokkana on Object-luokka (vertaa Javaan), joten kaikki luokat perivät suoraan tai epäsuorasti tämän luokan. Voidaan sanoa, että Smalltalk on ensimmäinen oliokieli, jossa on kaikki modernin oliokielen piirteet. Smalltalk ei myöskään ole pelkkä ohjelmointikieli, vaan täydellinen ohjelmointiympäristö. Ikkunoihin pohjautuva käyttöliittymä on myös Smalltalkin peruja; näin ollen Smalltalk ei ole ainoastaan vallitsevan ohjelmointiparadigman, vaan myös vallitsevan käyttöliittymäparadigman, uranuurtaja.

9 luku: Olio-ohjelmointi yleistyy luvulla olio-ohjelmointi nousi ohjelmointimenetelmien vallitsevaksi metodiksi ja on sellaisena toistaiseksi säilynytkin. Vuosikymmenen alussa Bjarne Stroustrup alkoi suunnitella Bellin laboratoriossa C-kielen laajentamista oliokieleksi työnimenä C with classes. Hän sai vaikutteita sekä Simula 67:stä että Smalltalkista. Pääasiallinen suunnittelutavoite oli luoda C-kieleen pohjautuva ohjelmointikieli, jossa toteutettaisiin ohjelman organisointi luokkiin ja niiden periytymiseen samaan tapaan kuin Simula 67:ssä. Lisäksi kielen tuli säilyttää C-kielen tehokkuus. Siksi esimerkiksi taulukoiden rajojen tarkastaminen hylättiin heti suunnitteluvaiheessa. Kieleen lisättiin vielä joitakin kehittyneempiä olio-ohjelmoinnin piirteitä ja vuonna 1985 ensimmäinen toteutus valmistui. Kieli kehittyi kuitenkin koko 1980-luvun ajan ja merkittäviä uudistuksia on tehty nykypäivään saakka. C++-kielestä tuli erittäin suosittu monestakin syystä. Ensinnäkin kieli pohjautui yleisesti käytettyyn C-kieleen ja oli lähes täysin yhteensopiva C -kielen kanssa, joten C-kieliset ohjelmat saatettiin helposti muuttaa C++ -ohjelmiksi. Lisäksi kieltä varten on saatavissa tehokkaita ja edullisia kääntäjiä. Ennen Javan läpimurtoa C++ oli yleisimmin käytetty olio-ohjelmointikieli maailmassa; se olikin suunniteltu nimenomaan ohjelmoinnin ammattilaisten työkaluksi ([Strou], preface). Vaikka kieli peri C-kielen turvattomia piirteitä ja on lisäksi laaja ja monimutkainen, sen suosio on pysynyt suurena. C++ myös kehittyy koko ajan; vuonna 2011 julkaistiin laaja uudistus, jossa kieleen on liitetty mm. rinnakkaisen ohjelmoinnin tuki ja säännöllisten ilmausten tuki. Muita luvulla kehitettyjä oliokieliä ovat Eiffel ja Delphi. Eiffel on puhdas ohjelmointikieli, jonka on suunnitellut ranskalainen Bertrand Meyer. Eiffel on suppeampi ja yksinkertaisempi kuin C++, mistä huolimatta sen ilmaisuvoima on lähes sama. Kuitenkaan Eiffel ei ole saavuttanut läheskään samaa suosiota kuin C++, osittain varmasti siitä syystä, että C-kielisten ohjelmoijien oli helpompi siirtyä olio-ohjelmointiin C++ -kielellä. Delphi on puolestaan Pascal -kielestä kehitetty olio-ohjelmointikieli. Myös se on yksinkertaisempi kuin C++, mutta sitäkään ei ole samassa mitassa käytetty ohjelmistosuunnittelussa. Yhdysvaltain puolustusministeriön yrityksestä yhtenäistää sen sulautetuissa järjestelmissä käytetyt ohjelmistot syntyi Ada-kieli. Kielen suunnittelu on ollut ohjelmointikielten historian laajin ja kallein suunnitteluprojekti. Hanke pantiin alkuun jo

10 1970 -luvun puolivälissä, mutta ensimmäinen kielen manuaali ilmestyi Suunnittelu eteni kilpailuttamalla eri vaihtoehtoja toisiaan vastaan; Ada onkin ensimmäinen ohjelmointikieli joka suunniteltu tällä tavoin. Kieli nimettiin historian ensimmäisen ohjelmoijan Augusta Ada Byronin, Lovelacen kreivittären, mukaan. Adan syntaksi perustuu Pascal-kieleen. Yksi kielen merkittävistä piirteistä olivat pakkaukset, joiden avulla voitiin kapseloida datatyyppejä ja aliohjelmia. Kielessä voitiin siten käyttää data-abstraktiota, vaikka Ada ei olekaan oliokieli. Kieli salli myös monipuolisen poikkeusten käsittelyn. Edelleen Ada-kielellä voitiin kirjoittaa geneerisiä (eli tyyppiriippumattomia) ohjelmia, esimerkiksi kirjoittaa lajittelualgoritmi etukäteen määrittelemättömälle tietotyypille. Lopulta Ada salli ns. tehtävien (tasks) rinnakkaisen suorittamisen. Vakiintuneesta kielen versiosta käytetään yleisesti nimitystä Ada 83. Vuonna 1995 julkaistiin Adasta parannettu versio Ada 95, joka oli jo olioohjelmointikieli. Adaa on laajennettu vielä vuonna Vuosikymmenellä syntyi myös monia skriptikieliä (juontokieli, scripting language), esimerkkinä mainittakoon Larry Wallin kehittämä Perl, joka on yleistynyt 1990-luvulla WWW:n ansiosta. Perl sopii nimittäin erinomaisen hyvin CGI (Common Gateway Interway)-ohjelmointiin. CGI oli ensimmäinen menetelmä, jolla HTML-sivuja voitiin luoda dynaamisesti palvelimella asiakkaan pyynnöstä riippuen luku: WWW-ohjelmointi Java suunniteltiin alun perin sulautettujen järjestelmien ohjelmointikieleksi, mutta siitä tuli tunnettu vasta 1990-luvun puolivälissä Internetin käytön yleistyessä. Tällöin havaittiin, että Java soveltuu hyvin juuri WWW-ohjelmointiin. Javan pääsuunnittelijana toimi James Gosling; suunnittelussa pidettiin luotettavuutta pääkriteerinä. Tämän vuoksi alkujaan harkitut kielet C ja C++ hylättiin ja päätettiin kehittää kokonaan uusi kieli. Syntaksiltaan ja monilta ominaisuuksiltaan Java pohjaa C++-kieleen, mutta on suunniteltu yksinkertaisemmaksi ja luotettavammaksi. Osoittimista tietotyyppinä on kokonaan luovuttu; myös moniperiytyminen on jätetty pois. Javaan toteutettiin kuitenkin tuki rinnakkaiselle ohjelmoinnille, mikä tuolloin puuttui C++ -kielestä. Edelleen automaattinen roskien keruu on osa Javaa, näin ohjelmoijan ei tarvitse vapauttaa varaamaansa muistia. Sinänsä Java ei sisällä juurikaan sellaisia piirteitä, joita

11 ei joissakin muissa kielissä esiintyisi. Sen suuri ja alati kasvava suosio tekee kuitenkin kielestä merkittävän. WWW:n kehittyminen on myös edesauttanut skriptikielien yleistymistä, koska niiden avulla voidaan luoda WWW-sivuille dynaamista sisältöä luvulla kehitettiin mm. PHP ja JavaScript. Näistä PHP:tä käytetään palvelinpuolella; JavaScriptiä ajetaan yleisimmin selaimessa. PHP:n suunnitteli Rasmus Lerdorff vuonna Alkuperäinen tarkoitus oli seurata sen avulla WWW-sivun vierailijoita. JavaScriptin kehitti puolestaan Brendan Eich Netscapella; tällöin sen nimi oli vielä Mocha. Myöhemmin nimi muuttui LiveScriptin kautta JavaScriptiksi. JavaScript on käynyt läpi huomattavia muutoksia olemassaolonsa aikana. Nimestään huolimatta JavaScriptillä ei ole Javan kanssa syntaksin lisäksi paljonkaan yhteistä luvulla julkaistiin myös monen tyyppiseen ohjelmointiin soveltuva Python, joka on nykyisin yksi yleisimmistä skriptikielistä. Kieli tukee monia ohjelmointiparadigmoja, mm. olio-ohjelmointia. Sen ulkoasu on sikäli omaperäinen, että kielen näkymäalueet määräytyvät koodirivin sisennyksen perusteella. Pythonin suunnitteli hollantilainen Guido van Rossum, mutta nykyisin sen kehityksestä vastaa Python Software Foundation. Uusimpia tulokkaita suosittujen skriptikielien joukossa on Ruby, jonka suunnitteli Yukihiro Matsumoto 1990-luvun alkupuoliskolla. Ruby on puhdas oliokieli; kaikki ohjelmissa esiintyvät entiteetit ovat olioita. Vuosikymmenellä kehitettiin myös funktionaalisia kieliä. Yksi nykyisin suosituimmista funktionaalisista kielistä on Haskell, joka julkaistiin vuonna Haskell nimettiin amerikkalaisen matemaatikon ja loogikon Haskell Curryn ( ) mukaan. Haskell on puhtaasti funktionaalinen kieli, jonka perusrakenne on lista. Kielessä voidaan esittää periaatteessa äärettömiä rakenteita sen käyttämän laiskan laskennan (lazy evaluation) ansiosta. Rakennetta konstruoidaan ainoastaan kulloisenkin tarpeen mukaan. Tällä vuosituhannella on saatettu julkisuuteen ainakin yksi merkittävä ohjelmointikieli. Microsoftin kehittämä C# muistuttaa monessa suhteessa Javaa ja on osa Microsoftin.NET -arkkitehtuuria. C# on hieman Javaa puhtaampi oliokieli ja sisältää joitakin Javaan kuulumattomia C++:n ominaisuuksia, kuten operaattoreiden ylikuormittamisen. C# on saanut jonkin verran vaikutteita myös Delphistä, mikä voi johtua siitä, että kielen pääsuunnittelija Anders Hejlsberg suunnitteli myös Turbo Pascalin ja Delphin. Myös D -

12 kieli on julkaistu aivan 2000-luvun alussa. D on tarkoitettu vaihtoehdoksi C++ -kielelle käytännön olio-ohjelmointityöhön. (Ks. [D]) Lähteet [D] D Programming Language, URL: Viitattu [Dav] Davis, M. Tietokoneen esihistoria Leibnizista Turingiin, Art House, 2003 [Hoa] Hoare, C.A.R. Hints on Programming Language Design, in C.A.R: Hoare and C.B. Jones, Essays in Computer Science, Prentice Hall 1989 [Lou] Louden, Kenneth C. Programming Languages, Principles and Practice, PWS-KENT [Seb] Sebesta, Robert W. Concepts of Programming Languages 10th edition, Pearson [Strou] Stroustrup, Bjarne. The C++ Programming Language, 3rd edition, Murray Hill 1997.

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 II Ohjelmointikielten kehityshistoriaa Sisältö 1. Ohjelmointikielten sukupolvet 2. Pääohjelmointikielten kehitys 815338A Ohjelmointikielten periaatteet,

Lisätiedot

812341A Olio-ohjelmointi, I Johdanto

812341A Olio-ohjelmointi, I Johdanto 812341A Olio-ohjelmointi, 2016 I Johdanto Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden kertausta 812341A Olio-ohjelmointi, Johdanto 2 1 Abstraktiosta

Lisätiedot

1. Olio-ohjelmointi 1.1

1. Olio-ohjelmointi 1.1 1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja

Lisätiedot

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin 812347A Olio-ohjelmointi, 2015 syksy 2. vsk II Johdanto olio-ohjelmointiin Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden esittely 2 II.1 Abstraktiosta

Lisätiedot

Johdanto Meta Kielten jaotteluja Historia. Aloitusluento. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho

Johdanto Meta Kielten jaotteluja Historia. Aloitusluento. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho Aloitusluento TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 8. tammikuuta 2007 Luennoija Antti-Juhani Kaijanaho

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 I Johdanto Sisältö 1. Ohjelmointikielen määritelmä 2. Syitä tutkia ohjelmointikieliä 3. Ohjelmointiparadigmat 4. Suunnittelu- ja arviointikriteerit 5. Suunnitteluun

Lisätiedot

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

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages Tampere University of Technology Department of Pervasive Computing TIE-20306 Principles of Programming Languages Ruby Ryhmä 8 Juho Rintala Sami Paukku Sisällysluettelo 1 Johdanto... 3 2 Paradigma... 3

Lisätiedot

Olio-ohjelmointi Johdanto olio-ohjelmointiin

Olio-ohjelmointi Johdanto olio-ohjelmointiin Olio-ohjelmointi Johdanto olio-ohjelmointiin Ohjelmistoa kehitettäessä voidaan tunnistaa ainakin kaksi abstraktiota: prosessiabstraktio ja dataabstraktio. Prosessiabstraktio huomattiin jo varhain, koska

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

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

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki PERL TIE-20306 Principles of Programming Languages Ryhmä 4: Joonas Lång & Jasmin Laitamäki 1. Johdanto Perl on ohjelmointikielten perhe, johon kuuluu Perl 5 ja Perl 6. Kielet ovat kuitenkin erilliset ohjelmointikielet

Lisätiedot

Johdatus ohjelmointiin

Johdatus ohjelmointiin Johdatus ohjelmointiin Ohjelmistot tietokonejärjestelmissä Jaana Holvikivi Ohjelmistojen tehtävät Sovellusohjelmat tekstinkäsittely ja muut toimistosovellukset kirjanpito, tuotannonohjaus selaimet, mediaohjelmat

Lisätiedot

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen. historia Imperatiivisten ohjelmien organisointiparadigmojen historia Timo Tapanainen Helsingin yliopisto, tietojenkäsittelytieteen laitos Tietojenkäsittelytieteen historia -seminaari, kevät 2007 Sisältö Paradigma,

Lisätiedot

Imperatiivisten ohjelmien organisointiparadigmojen historia

Imperatiivisten ohjelmien organisointiparadigmojen historia Imperatiivisten ohjelmien organisointiparadigmojen historia Timo Tapanainen Helsingin yliopisto, tietojenkäsittelytieteen laitos Tietojenkäsittelytieteen historia -seminaari, kevät 2007 Sisältö Paradigma,

Lisätiedot

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

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011 TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. helmikuuta 2011 Sisällys Sisällys Ohjelmointikieli? programming language n. a

Lisätiedot

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010 kielenä 9. joulukuuta 2010 Historia kielenä Historia Sovelluksia kehitettiin vuonna 1972 Kehittäjinä ranskalaiset Pääkehittäjä Alain Colmerauer Philippe Roussel programmation en logique Robert Kowalski

Lisätiedot

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

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015

815338A Ohjelmointikielten periaatteet 2014-2015 815338A Ohjelmointikielten periaatteet 2014-2015 X Skriptiohjelmointi Sisältö 1. Johdanto 2. Skriptikielten yleispiirteitä 3. Python 815338A Ohjelmointikielten periaatteet, Skriptiohjelmointi 2 X.1 Johdanto

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Hyvä ohjelmointitapa. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen

Lisätiedot

Käyttöjärjestelmien historia. Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen

Käyttöjärjestelmien historia. Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen Käyttöjärjestelmien historia Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen Käyttöjärjestelmien jaottelu Voidaan jaotella erilaisin menetelmin Aikajana (määrä,

Lisätiedot

Ohjelmoinnista. Ohjelmien toteutukseen tarjolla erilaisia välineitä:

Ohjelmoinnista. Ohjelmien toteutukseen tarjolla erilaisia välineitä: Ohjelmien toteutukseen tarjolla erilaisia välineitä: perinteiset ohjelmointikielet eri tyyppisiä eri paradigmat eri tarkoituksiin ohjelmointiympäristöt kieli + tukiympäristö (kieliherkkä toimitin, debuggeri,

Lisätiedot

Maarit Harsu. O h j e l m o i n t i k i e l e t Periaatteet, käsitteet, valintaperusteet

Maarit Harsu. O h j e l m o i n t i k i e l e t Periaatteet, käsitteet, valintaperusteet Maarit Harsu O h j e l m o i n t i k i e l e t Periaatteet, käsitteet, valintaperusteet 6. elokuuta 2012 c 2012 Maarit Harsu Tämän Ohjelmointikielet-teoksen käyttöoikeutta koskee Creative Commons Nimeä-

Lisätiedot

Haskell ohjelmointikielen tyyppijärjestelmä

Haskell ohjelmointikielen tyyppijärjestelmä Haskell ohjelmointikielen tyyppijärjestelmä Sakari Jokinen Helsinki 19. huhtikuuta 2004 Ohjelmointikielten perusteet - seminaarityö HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 1 Johdanto 1 Tyyppien

Lisätiedot

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

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli Dart Ryhmä 38 Ville Tahvanainen Juha Häkli 1.LYHYESTI Dart on luokkapohjainen, yksiperintäinen, puhdas olio-ohjelmointikieli. Dart on dynaamisesti tyypitetty. Sovellukset on organisoitu modulaarisiksi

Lisätiedot

.NET ajoympäristö. Juha Järvensivu 2007

.NET ajoympäristö. Juha Järvensivu 2007 .NET ajoympäristö Juha Järvensivu juha.jarvensivu@tut.fi 2007 Käännösprosessi C# lähdekoodi C# kääntäjä CILtavukoodi JITkäännös Ajettava natiivikoodi Kehitysympäristössä ohjelmoijan toimesta Ajonaikana.NET

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Pienen ohjelmointikielen tulkki (ohjelmoitava laskin) (mm. SICP 4-4.1.5 osin) Riku Saikkonen 15. 11. 2012 Sisältö 1 Nelilaskintulkki, globaalit muuttujat

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset 815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä TIE-20306 Principles of Programming Languages Seminaariesityksen essee Ryhmä 18: Heidi Vulli, Joni Heikkilä SISÄLLYSLUETTELO 1. Johdanto... 1 2. Ohjelmointikielen perusperiaatteet... 1 2.1 Paradigmat...

Lisätiedot

.NET ja C# Virtuaalikone. Common Language Infrastructure (CLI) Periaate. Etuja. Haittoja. Mikä on CLI. CLI standardin merkitys (CLS, Ecma)

.NET ja C# Virtuaalikone. Common Language Infrastructure (CLI) Periaate. Etuja. Haittoja. Mikä on CLI. CLI standardin merkitys (CLS, Ecma) .NET ja C# Virtuaalikone Periaate Virtuaalikone on tapa abstrahoida allaoleva toteutus yhteisen rajapinnan taakse. Virtuaalikoneet muodostavat hierarkian. Hierarkiassa ylempänä oleva käyttää alemman tarjoamaa

Lisätiedot

Common Lisp Object System

Common Lisp Object System Common Lisp Object System Seminaarityö Tomi Vihtari Ohjelmointikielten periaatteet kevät 2004 Helsingin Yliopisto Tietojenkäsittelytieteen laitos Järvenpää 5. huhtikuuta 2004 Sisältö 1 Johdanto... 1 2

Lisätiedot

TIE542 Ohjelmointikielten periaatteet, syksy Antti-Juhani Kaijanaho. 6. syyskuuta 2010

TIE542 Ohjelmointikielten periaatteet, syksy Antti-Juhani Kaijanaho. 6. syyskuuta 2010 TIE542 periaatteet, syksy 2010 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 6. syyskuuta 2010 Sisällys Esia Oppimistavoitteet arvolauseelle 1 Kurssin suorittanut opiskelija kykenee vertailemaan ohjelmointikieliä

Lisätiedot

Johdantoa ohjelmointikielten periaatteisiin

Johdantoa ohjelmointikielten periaatteisiin Johdantoa ohjelmointikielten periaatteisiin Antti-Juhani Kaijanaho 12. tammikuuta 2009 1 Kurssin järjestelyitä 1.1 Opettajat Luennot Antti-Juhani Kaijanaho (antti-juhani.kaijanaho@jyu.fi), Ag C416.1, vastaanotto

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

Johdanto. 1. Mikä on ohjelmointikieli?

Johdanto. 1. Mikä on ohjelmointikieli? Johdanto Ohjelmoinnin opetteluun ei välttämättä tarvitse opiskella lainkaan ohjelmointikieliä: algoritmeja voidaan suunnitella ja analysoida käyttäen matemaattista tai muuta formaalia merkintätapaa. Käytännössä

Lisätiedot

Varhaiset oliokielet Modula, CLU ja Smalltalk. T : Seminar on the History of Programming Languages Kari Koskinen Otaniemi 29.9.

Varhaiset oliokielet Modula, CLU ja Smalltalk. T : Seminar on the History of Programming Languages Kari Koskinen Otaniemi 29.9. Varhaiset oliokielet Modula, CLU ja Smalltalk T-106.5800: Seminar on the History of Programming Languages Kari Koskinen Otaniemi 29.9.2009 Luennon sisältö Modula CLU (CLUster programming language) Smalltalk

Lisätiedot

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

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen D-OHJELMOINTIKIELI AA-kerho, 33 Antti Uusimäki Arto Savolainen 2 D-OHJELMOINTIKIELI D-kielen historia alkaa vuodesta 1999, kun Walter Bright aloitti uuden ohjelmointikielen kehittämisen. Ensimmäinen versio

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 VI Funktionaalinen ohjelmointi Sisältö 1. Johdanto ja peruskäsitteitä 2. LISP- ja Scheme-kielet 3. Haskell 4. IO funktionaalisissa kielissä 5. Muita funktionaalisia

Lisätiedot

Lisää pysähtymisaiheisia ongelmia

Lisää pysähtymisaiheisia ongelmia Lisää pysähtymisaiheisia ongelmia Lause: Pysähtymättömyysongelma H missä H = { w111x w validi koodi, M w ei pysähdy syötteellä x } ei ole rekursiivisesti lueteltava. Todistus: Pysähtymisongelman komplementti

Lisätiedot

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen, mallintaminen ja UML 582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti

Lisätiedot

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö Tekijät: Eemeli Honkonen Joni Metsälä Työ palautettu: SISÄLLYSLUETTELO: 1 SEMINAARITYÖN KUVAUS... 3 2 TIETOKANTA... 3 2.1 MITÄ TIETOKANNAT SITTEN OVAT?... 3

Lisätiedot

TIE Principles of Programming Languages CEYLON

TIE Principles of Programming Languages CEYLON TIE-20306 Principles of Programming Languages CEYLON SISÄLLYSLUETTELO 1. YLEISTIETOA KIELESTÄ JA SEN KEHITTÄMISESTÄ... 1 2. CEYLONIN OMINAISUUKSIA... 2 2.1 Modulaarisuus... 2 2.2 Tyypit... 2 2.3 Muita

Lisätiedot

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla ohjelmoida useita komponenteiltaan ja rakenteeltaan

Lisätiedot

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen ohjelmointiin Jukka Talvitie Valvoja: Professori Jorma Jormakka Paikka: TietoEnator oyj Ongelma Ideologia Lifebelt

Lisätiedot

Tietojenkäsittelyn historiaa

Tietojenkäsittelyn historiaa Tietojenkäsittelyn historiaa 1.1 Ensimmäiset tietokoneet PC:t 1960 2001 1950 Suuret tietokoneet laskentaan, tilastoihin, tutkimukseet 1970-luku Sovellukset Henkilökohtai set työasemat ESIHISTORIAA 1.2

Lisätiedot

Clojure, funktionaalinen Lisp murre

Clojure, funktionaalinen Lisp murre Clojure, funktionaalinen Lisp murre Principles of Programming Languages, S2015 Jukka Pekka Venttola & Pietari Heino Taustaa Clojuren pohjana on käytetty Lisp ohjelmointikieltä, jonka historia ulottuu 1950

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka

Lisätiedot

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

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet Koka Ryhmä 11 Juuso Tapaninen, Akseli Karvinen 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet 1 1. Taustoja Koka on Daan Leijenin ja Microsoft:n kehittämä

Lisätiedot

Ohjelmointikielien kehittyminen

Ohjelmointikielien kehittyminen hyväksymispäivä arvosana arvostelija Ohjelmointikielien kehittyminen Hannu-Pekka Rajaniemi Helsinki 28.4.2006 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET

Lisätiedot

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

ADA. Ohjelmointikieli. Ryhmä 5 Henna Olli, Päivi Hietanen 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

Lisätiedot

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012 OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012 Luento 11: Ohjelmointi Tekijät: Antti Virtanen, Timo Lehtonen, Matti Kujala, Kirsti Ala-Mutka, Petri M. Gerdt et al. Luennon aiheet Ohjelmoinnin historia

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19 Ohjelmointikieli TIE-20306 Principles of Programming Languages Syksy 2017 Ryhmä 19 Juho Kärnä Ville Mäntysaari 1. Johdanto D on yleiskäyttöinen, strukturoitu, staattisesti tyypitetty, käännettävä ohjelmointikieli

Lisätiedot

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen

Lisätiedot

11.4. Context-free kielet 1 / 17

11.4. Context-free kielet 1 / 17 11.4. Context-free kielet 1 / 17 Määritelmä Tyypin 2 kielioppi (lauseyhteysvapaa, context free): jos jokainenp :n sääntö on muotoa A w, missäa V \V T jaw V. Context-free kielet ja kieliopit ovat tärkeitä

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 10: Aliohjelmat, foreign function interface Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 25. 3. 2013 Sisältö 1 Aliohjelmien käyttäminen

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton 2015 syksy 2. vsk IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton Sisältö 1. Johdanto luontimalleihin 2. Proxy 3. Factory Method 4. Prototype 5. Singleton Suunnittelumallit Proxy et.

Lisätiedot

Tällä kurssilla tarkastellaan ohjelmointikieliä. Lienee tarpeen yrittää rajata, mitä

Tällä kurssilla tarkastellaan ohjelmointikieliä. Lienee tarpeen yrittää rajata, mitä Luku 1 Johdanto Ohjelmointi on ongelmien ratkaisemista. Asiaa voi katsoa kahdelta kannalta: voi keskittyä ymmärtämään ongelmaa tai ratkaisumalleja. Voidaan ajatella, että maailma jakautuu kahteen osaan,

Lisätiedot

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Luento 1 (verkkoluento 1) Tietokonejärjestelmä Luento 1 (verkkoluento 1) Tietokonejärjestelmä Järjestelmän eri tasot Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä This image cannot currently be displayed.

Lisätiedot

Käännös, linkitys ja lataus

Käännös, linkitys ja lataus Luento 10 (verkkoluento 10) Käännös, linkitys ja lataus Ohjelmasta prosessiin Käännösyksikkö Kääntämisen vaiheet Makrot, literaalit Staattinen ja dynaaminen linkitys Nimien sidonta Lausekielestä suoritukseen

Lisätiedot

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008 TIEA341 Funktio-ohjelmointi 1, kevät 2008 Aloitusluento Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 7. tammikuuta 2008 Aikataulu Luennot salissa Ag C231.1: ma klo 10 12, to klo 14-16

Lisätiedot

815338A Ohjelmointikielten periaatteet: Logiikkaohjelmointi. Logiikkaohjelmointi

815338A Ohjelmointikielten periaatteet: Logiikkaohjelmointi. Logiikkaohjelmointi Logiikkaohjelmointi Tässä osassa käsitellään toista deklaratiivisen ohjelmoinnin paradigmaa eli logiikkaohjelmointia. Pääasiallisena lähteenä on käytetty Sebestan ([Seb]) lukua 16. Maarit Harsun teoksen

Lisätiedot

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä olevilla komponenteilla? Voisiko jollakin ohjelmointikielellä

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n

Lisätiedot

Sisällys. JAVA-OHJELMOINTI Osa 1: Ohjelmoinnin perusteita. Ohjelmoinnin kehityssuuntia. Ohjelmointi 50-60 luvuilla. Ohjelmointi 80-90 luvuilla

Sisällys. JAVA-OHJELMOINTI Osa 1: Ohjelmoinnin perusteita. Ohjelmoinnin kehityssuuntia. Ohjelmointi 50-60 luvuilla. Ohjelmointi 80-90 luvuilla JAVA-OHJELMOINTI Osa 1: Ohjelmoinnin perusteita Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto Sisällys Ohjelmoinnin kehityssuuntia Ohjelman kehittäminen Algoritmin käsite Muuttujan käsite

Lisätiedot

Ohjelmointikielten periaatteiden taustaa

Ohjelmointikielten periaatteiden taustaa Ohjelmointikielten periaatteiden taustaa Antti-Juhani Kaijanaho 8. tammikuuta 2007 How many times do I have to tell you? The right tool for the right job! Scotty elokuvassa Star Trek V Ohjelmointi on ongelmien

Lisätiedot

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus Luento 1 (verkkoluento 1) Tietokonejärjestelmä Järjestelmän e eri tasot Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus 1 Tietokone- järjestelmäj ä Käyttäjä Tietokonelaitteisto Oheislaitteet

Lisätiedot

8. Kieliopit ja kielet

8. Kieliopit ja kielet 8. Kieliopit ja kielet Suomen kielen sanoja voidaan yhdistellä monella eri tavalla. Kielioppi määrää sen, milloin sanojen yhdistely antaa oikein muodostetun lauseen. "Mies räpyttää siipiään" on kieliopillisesti

Lisätiedot

Sisällys. Ratkaisumallien historia. Ratkaisumalli. Ratkaisumalli [2] Esimerkki: Composite [2] Esimerkki: Composite. Jaakko Vuolasto 25.1.

Sisällys. Ratkaisumallien historia. Ratkaisumalli. Ratkaisumalli [2] Esimerkki: Composite [2] Esimerkki: Composite. Jaakko Vuolasto 25.1. Sisällys Ratkaisumallien historia Jaakko Vuolasto 25.1.2001! Ratkaisumalli! Christopher Alexander! Ohjelmistotuotannosta arkkitehtuuriin! Henkilöhistoriaa! Ensimmäisiä käyttökokemuksia! Yhteenveto 25.1.2001

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, tietorakenteen muuttaminen (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 6. 11. 2012 Sisältö 1 Muuttujan arvon muuttaminen:

Lisätiedot

Järjestelmäarkkitehtuuri (TK081702)

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri (TK081702) yleistyvät verkkopalveluissa Youtube Google... Avaavat pääsyn verkkopalvelun sisältöön. Rajapintojen tarjoamia tietolähteitä yhdistelemällä luodaan uusia palveluja,

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Luento

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 VII Logiikkaohjelmointi Sisältö 1. Johdanto 2. Predikaattilogiikan käsitteistöä 3. Prolog 815338A Ohjelmointikielten periaatteet, Logiikkaohjelmointi 2

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

JS-kehitys - yleiskuvaus. TIEA255 - Juho Vepsäläinen

JS-kehitys - yleiskuvaus. TIEA255 - Juho Vepsäläinen JS-kehitys - yleiskuvaus TIEA255 - Juho Vepsäläinen Taustaa Basic, Pascal, C (PC, AVR), Java, Object Pascal (Delphi), PHP, Python, Lua, AS2, C++ (Qt) JavaScript,... Avoimen lähdekoodin proj. kehitystä

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A. Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta

Lisätiedot

Kertausluento luennoista 1-3 1

Kertausluento luennoista 1-3 1 Kertausluento 1 (lu01, lu02, lu03) Tietokonejärjestelmän rakenne ttk-91 ja sillä ohjelmointi Järjestelmän eri tasot Laitteiston nopeus ttk-91 rakenne ja käskykantaarkkitehtuuri Konekielinen ohjelmointi

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 19. tammikuuta 2012 Sisällys Sisällys Muistathan A B -konstruktion 0 k 1 i 2 s 3 s 4 a 5 0 k 1 o 2 i 3 r 4

Lisätiedot

Apuja ohjelmointiin» Yleisiä virheitä

Apuja ohjelmointiin» Yleisiä virheitä Apuja ohjelmointiin» Yleisiä virheitä Ohjelmaa kirjoittaessasi saattaa Visual Studio ilmoittaa monenlaisista virheistä "punakynällä". Usein tämä johtuu vain siitä, että virheitä näytetään vaikket olisi

Lisätiedot

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

Lisätiedot

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia Antti-Juhani Kaijanaho 16. helmikuuta 2009 Tyypitetyt ohjelmointikielet sisältävät paljon muitakin konstruktioita kuin yksinkertaisesti tyypitetyn lambda-kielen,

Lisätiedot

1. Ohjelmoinnin peruskäsitteet ja -elementit

1. Ohjelmoinnin peruskäsitteet ja -elementit 1. Ohjelmoinnin peruskäsitteet ja -elementit 1. ohjelmoinnin periaatteet 2. ohjelmointikielet 3. algoritmien suunnittelu 1 1.1 Ohjelmoinnin periaatteet Vaatimukset Määrittely Suunnittelu Toteutus Integrointi

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Keskeneräinen luento 3: Listat (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Linkitetyt listat (SICP 2.1.1, 2.2.1) funktionaalinen

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015 TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 30. marraskuuta 2015 Sisällys t Väitöstilaisuus 4.12.2015 kello 12 vanhassa juhlasalissa S212 saa tulla 2 demoruksia

Lisätiedot

Ohjelmointi 1 / syksy /20: IDE

Ohjelmointi 1 / syksy /20: IDE Ohjelmointi 1 / syksy 2007 10/20: IDE Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/8 Tämän luennon rakenne

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

Tieto- ja tallennusrakenteet

Tieto- ja tallennusrakenteet Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)

Lisätiedot