Kevyttä ohjelmointikielten analyysiä · 2011. 2. 17. · Kevyttä ohjelmointikielten analyysiä...

Preview:

Citation preview

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Kevyttä ohjelmointikielten analyysiäTIEA255 Tietotekniikan teemaseminaari —

ohjelmointikielet ja kehitysalustat

Antti-Juhani Kaijanaho

TIETOTEKNIIKAN LAITOS

16. helmikuuta 2011

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Sisällys

Mikä se on?

Minkälaisia ne ovat?

Mitä ne ovat syöneet?

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Sisällys

Mikä se on?

Minkälaisia ne ovat?

Mitä ne ovat syöneet?

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Ohjelmointikieli?

programming language n. a system of preciselydefined symbols and rules devised for writingcomputer programs

Programming, n., in the Oxford English Dictionary. Third edition, October 2009; online version

November 2010. http://www.oed.com:80/Entry/152232; accessed 15 February 2011. An entry for

this word was first included in A Supplement to the OED III, 1982.

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Aspekteja

I syntaksi (kielioppi)I ohjelmointikieli formaalina kielenäI tunnistetaan kieleen kuuluvat ohjelmatI ks. TIEA241 Automaatit ja kieliopit

I semantiikka (merkitysoppi)I kieleen kuuluvien ohjelmien käyttäytyminenI yleensä toteutuksesta riippumaton (abstrakti?)I ks. TIES542 Ohjelmointikielten periaatteet

I pragmatiikka (käytäntö)I miten kieltä käytännössä käytetäänI ks. kielikohtaiset oppikirjat ja kurssit

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Sisällys

Mikä se on?

Minkälaisia ne ovat?

Mitä ne ovat syöneet?

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Ohjelmointikielten sukupolvet

Kyseenalainen mutta usein käytetty jaottelu!I konekielet

II symboliset konekielet (assembly)III yleiskäyttöiset (tavanomaiset)

ohjelmointikieletIV tietylle sovellusalueelle räätälöidyt

ohjelmointikielet (domain-specificlanguages, DSL)

V ongelman kuvaukseen (ei sen ratkaisuun)keskittyvät kielet

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Paradigmat

paradigm, n.1. A pattern or model, an exemplar; (also) a typical

instance of something, an example.2. . . .3. . . .4. A conceptual or methodological model underlying

the theories and practices of a science or discipline ata particular time; (hence) a generally accepted worldview.

The Oxford English Dictionary. Third edition, October 2009; online version November 2010.

http://www.oed.com:80/Entry/137329; accessed 15 February 2011. An entry for this word was

first included in New English Dictionary, 1904.

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Ohjelmointiparadigma

Ohjelmointiparadigma on nimetty kokoelmaohjelmointikäytänteitä, joiden taustalla on enemmän taivähemmän yhtenäinen näkemys siitä, mitä ohjelmoinninja ohjelien tulisi olla. Ohjelmointiparadigmat ovat yleensätoisensa poissulkevia (vaikkakin niissä voi olla yhteisiäpiirteitä).

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Ohjelmointiparadigmoja

olio-ohjelmointi (object-oriented programming) Ohjelmaon olioiden keskustelukerho.

funktio-ohjelmointi (functional programming) Ohjelmaon matemaattinen kuvaus syötteeltätulosteelle.

logiikkaohjelmolinti (logic programming) Ohjelma onlooginen pähkinä, jonka tietokone ratkaisee.

käskyohjelmointi (imperative programming) Ohjelma onkäskyjono.

toiminto-ohjelmointi (procedural programming)Ohjelma koostuu toiminnoista (procedures),jotka voivat koostua muista toiminnoista.

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Funktio-ohjelmointi

hello(_) = "Hello, World!"

sum1([]) = 0sum1(x : r) = x + sum1(r)

add(a, b) = a + b

sum2([]) = 0sum2(x : r) = add(x, sum1(r))

foldr(f , z, []) = zfoldr(f , z, (x : r)) = f (x, foldr(f , z, r))

sum3(`) = foldr(add, 0, `)

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Funktio-ohjelmoinnin piirteitä

I ohjelma rakentuu yhdistelemällä funktioitaisommiksi funktioiksi

I funktiot voivat ottaa parametrikseen ja palauttaafunktioita

I tällaiset funktiot ovat funktionaaleja (engl.higher-order functions, HOFs)

I silmukatkin ilmaistaan rekursiona taifunktionaaleina (esim. foldr

I puutietorakenteetI funktioiden määrittely paloittain yhtälöillä

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Logiikkaohjelmointi

lapsi(vappuTuomioja, erkkiTuomioja).lapsi(hellaWuolijoki, vappuTuomioja).

lapsi(taunoPalo, eskoSalminen).lapsi(eskoSalminen, kristoSalminen).lapsi(eskoSalminen, kreetaSalminen).

lapsi(rafaelPaasio, perttiPaasio).lapsi(perttiPaasio, heliPaasio).

lapsenlapsi(X, Y)⇐ lapsi(X, Z), lapsi(Z, Y).

Kiitokset muutamalle Facebook-tuttavalleni esimerkki-ihmisten ehdottamisesta.

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

lapsenlapsi(taunoPalo, X) =⇒ X = kristoSalminen;X = kreetaSalminen.

lapsenlapsi(X, heliPaasio) =⇒ X = rafaelPaasio.lapsenlapsi(X, Y) =⇒ X = hellaWuolijoki,

Y = erkkiTuomioja;X = taunoPalo,Y = kristoSalminen;X = taunoPalo,Y = kreetaSalminen;X = rafaelPaasio,Y = heliPaasio.

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Logiikkaohjelmoinnin piirteitä

I ohjelma rakentuu faktatietokannasta ja joukostapäättelysääntöjä

I päättelysäännöillä määritellään ”aliohjelmia”I ohjelma on väite, ja sen suoritus on yritys todistaa se

oikeaksiI aliohjelmassa syöte- ja tulostiedot riippuvat

käyttötavasta, ei (yleensä) määritelmästäI puutitetorakenteet

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Kieliparadigma

I Kieliparadigma on ohjelmointikielten joukko, jonkaalkioita yhdistää jonkin merkityksellinensamankaltaisuus.

I Kieliparadigmassa on yleensä paradigmaattinenkieli, jota pidetään kyseisen paradigmanesimerkillisenä edustajana.

I Usein (mutta ei aina) paradigman paradigmaattinenkieli on ollut muiden paradigmaan kuuluvienkielten esikuva.

I Kieliparadigmaan liittyy usein jokinohjelmointiparadigma.

I Jos paradigmaattinen kieli on muiden paradigmankielten esikuva, puhutaan tavallisesti kieliperheestätai -suvusta.

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Kieliparadigmoja

I Algol, Pascal, C, . . .I C, C++, Java, C#, . . .I Simula, Smalltalk, Objective-C, C++, Java, C#,

Delphi, . . .I Lisp, Scheme, Clojure, . . .I ML, SML, O’Caml, Haskell, Miranda, Clean, . . .I Lazy ML, Miranda, Clean, Haskell, . . .I Prolog, Mercury, . . .

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Sisällys

Mikä se on?

Minkälaisia ne ovat?

Mitä ne ovat syöneet?

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Syntaksi – semantiikka

I syntaksi eli kielioppi määrittelee, mitkä merkkijonotovat kielen ohjelmia

I (dynaaminen) semantiikka kertoo, mitä kielenohjelmat tekevät

I välissä on ns. staattinen semantiikka eli rajoitteet(constraints)

I Pitääkö muuttujat esitellä ennen käyttöä?I Pitääkö ohjelma todistaa tyyppiviheettömäksi ennen

suoritusta?

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Staattinen – dynaaminen

I Ohjelman ominaisuus on staattinen (elikäännösaikainen), jos se on selvitettävissä ennensuorituksen alkua.

I ohjelmatekstin kokoI muuttujan nimi· · ·

I Ohjelman ominaisuus on dynaaminen (elisuoritusaikainen), jos se riippuu ohjelmansuorituskerrasta ja sen etenemisestä

I ohjelman suorituksen kestoI muuttujan arvo (yleensä)· · ·

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Arvo – olio

I arvo on muuttumaton, ajaton, identiteetitön,reagoimaton

I oliolla onI tila, joka voi muuttuaI identiteetti, joka erottaa sen muista olioista

muutoksista huolimattaI käyttäytyminen, sillä se reagoi sille tuleviin

ärsykkeisiin

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Tyyppi, tyyppivirhe

I olion tyyppi kertoo, mihin ärsykkeisiin se osaareagoida

I arvon tyyppi kertoo, mitä arvolle voi tehdäI niiden olioiden ja arvojen joukkoa, joilla on yhteinen

tyyppi, sanotaan tuon tyypin ekstensioksiI tyyppivirhe on ohjelman suorituksen aikana

esiintyvä tilanne, jossa oliolle annetaan sellainenärsyke, johon se ei osaa reagoida, tai jossa arvolletehdään jotain sellaista, jota sille ei voi tehdä

I tyyppivirhe aiheuttaa ohjelman sekoamisen

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Tyypitys

I Kieli onI vahvasti tyypitetty, jos se estää kaikki tyyppivirheetI heikosti tyypitetty, jos se estää vain osan

tyyppivirheistäI tyypitön jos se ei estä mitään tyyppivirhettä

I Usein myös vertaillaan kahden heikosti tyypitetynkielen vahvuutta.

I Vahva tai heikko tyypitys voi ollaI staattinen, jos se estää kaikki tyyppivirheet ennen

suorituksen alkuaI dynaaminen, jos se estää tyyppivirheen silloin kun se

tulee suorituksen aikana käsille

I Kieli voi olla yhtä aikaa staattisesti ja dynaamisestityypitetty.

Kevyttäohjelmointikielten

analyysiä

Mikä se on?

Minkälaisia neovat?

Mitä ne ovatsyöneet?

Poikkeavia näkemyksiä

I Jotkut tarkoittavat vahvalla tyypityksellä staattistatyypitystä.

I Jotkut tarkoittavat tyypittömyydellä dynaamistatyypitystä.

I Jotkut tarkoittavat staattisella tyypityksellä, ettämuuttujan tyyppi on staattinen ominaisuus.

Recommended