Aloitusluento TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 8. tammikuuta 2007
Luennoija Antti-Juhani Kaijanaho <antti-juhani.kaijanaho@jyu.fi> IRC: ibid AgC416.1 vastaanotto ke 12-14 (ei ajanvarausta) ohjelmistotekniikan assistentti tutkimusaiheena ohjelmointikielet (Jyväskylän käräjäoikeuden lautamies)
Sisältö Johdanto Meta Kielten jaotteluja Historia
Kurssi syventävä valinnainen ohjelmistotekniikka 5 opintopistettä (133 h) 3 opintoviikkoa (120 h) luentoja, demoja, seminaari tentti tai oppimispäiväkirja WWW: http://www.mit.jyu.fi/antkaij/opetus/okp/2007/ IRC: #ties542 (IRCnet), kanava-avain okp2007
Luennot 20 luentoa (40 h) maanantaisin kello 12 14 tiistaisin kello 10 12 AgC234.1 läsnäolo ei pakollista mutta suositeltavaa poikkeuksia luentoaikoihin tarvittaessa luennoija istuu käräjiä ainakin ma 22.1.
Demot Ville Tirronen <aleator@jyu.fi> pitää alkaa ensi viikon tiistaina (16.1.) tiistaisin kello 12 14 AgC234.1 demotehtävät julkistetaan viimeistään edellisenä keskiviikkona tekeminen erittäin suotavaa demohyvitys: 50 % +1, 80 % +2
Seminaari maanantaina 23.4. kello 10 16 Ag Beeta läsnäolo pakollista (force majeure -poikkeuksin) seminaarityö n. 10 sivua 2 hengen ryhmissä seminaariesitelmä n. 30 minuuttia aiheista myöhemmin
Oppimispäiväkirja korvaa tentin, suositeltava http://www.mit.jyu.fi/antkaij/opetus/okp/2007/opk
Tentti vaihtoehto oppimispäiväkirjalle muistitentti, materiaalia ei saa ottaa tenttiin 4 5 tehtävää (kukin 6 pistettä) lineaarinen arvosteluasteikko, minimi 50 % maksimista ilmoittautuminen pakollista lopputentti 27.4. uusinta 27.6. kolmas tenttimahdollisuus syyskuussa
Arviontikriteerit 1 heikko (hylätty) Opitussa on merkittäviä puutteita tai opiskelija kykenee pelkästään kurssilla esitettyjen määritelmien, esimerkkien yms. toistamiseen. välttävä (1) Opiskelija kykenee ilmaisemaan keskeiset kurssilla esitetyt asiat omin sanoin. tyydyttävä (2) Opiskelija kykenee ilmaisemaan keskeiset kurssilla esitetyt asiat omin sanoin sekä antamaan niistä esimerkkejä.
Arviontikriteerit 2 hyvä (3) Opiskelija kykenee soveltamaan useimpia kurssilla esitettyjä asioita opiskelijalle tutuissa mutta kurssilla käsittelemättä jääneissä tilanteissa. kiitettävä (4) Opiskelija kykenee käsittelemään useimpia kurssin asioita analyyttisesti eli luokittelemalla niitä ja purkamalla niitä osiin. Lisäksi tämä analyysi on perusteltua ja onnistunutta. erinomainen (5) Opiskelija kykenee käsittelemään useimpia kurssin asioita niiden toimivuutta, käyttökelpoisuutta perusteellisesti arvioiden ja arviotaan perustellen. erinomainen (5) Opiskelija kykenee rakentamaan kurssin sisältöjen tuella onnistuneesti omaa teoriaansa, ohjelmointikieltään tms.
Näkökulmia syntaksi staattinen semantiikka dynaaminen semantiikka kuvaus konekielelle
Kysymyksiä kurssin järjestelyistä?
I sukupolvi konekielet ohjelma on oktettijono helppo koneelle vaikea ihmiselle koostuu käskyistä konekielistä lisää tiistaina
II sukupolvi symboliset konekielet, assembly (assembler) yksinkertainen rivipohjainen esitysmuoto yksi rivi vastaa yhtä konekielen käskyä lisää tiistaina
III sukupolvi yleiskäyttöiset ohjelmointikielet käytännössä kaikki nykykielet lisää jatkossa...
IV sukupolvi markkinointitermi ei yleisessä käytössä olevaa sisältöä erikoiskielet (SQL) sovelluskehittimet (Delphi) ohjelmoitavat sovellukset (Excel)
V sukupolvi myös markkinointitermi usein päättelypohjaiset tekoälykielet
Käskyohjelmointi imperatiivinen ohjelmointi von Neumann -koneen abstraktio tyypillistä tiedon muuttaminen paikallaan (in place) kontrollivuon ohjaus keskeistä koodi yli tiedon
Kuvausohjelmointi deklaratiivinen ohjelmointi kuvataan ongelma täsmällisesti tietokone (kääntäjä, tulkki) hoitaa loput ei eksplisiittistä kontrollivuon ohjausta tyypillistä tiedon kopiointi tieto yli koodin
Toiminto-ohjelmointi proseduraalinen ohjelmointi aliohjelma perusabstraktiona yleensä käskyohjelmoinnin alalaji vrt. rakenteinen ohjelmointi
Olio-ohjelmointi oliot ja niiden välinen kommunikaatio yleensä käskyohjelmoinnin alalaji huom! olio-ohjelmointi, ei luokkaohjelmointi
Funktio-ohjelmointi toiminto-ohjelmoinnin yleistys yleisin kuvausohjelmoinnin sovellus voi olla myös käskyohjelmoinnin sovellus keskeisin abstraktiokeino matemaattinen funktio tyypillistä funktion käyttäminen datana
Logiikkaohjelmointi periaatteessa kuvausohjelmointia käytännössä käskyohjelmointia keskeinen metafora: ongelma on väite, ratkaisu on todistus
Kieliparadigmat yleinen luokittelutapa ei kovin toimiva kieli kuuluu paradigmaan, jos se taipuu siihen kieli kuuluu paradigmaan, jos se taipuu vain siihen useimmat kielet oikeasti moniparadigmakieliä useimmilla kielillä kuitenkin kotiparadigma
Käskykielet sijoituslause peräkkäistys eksplisiittinen kontrollivuon ohjaus Algol-kielet (C, Pascal, C++, Java, BASIC, Fortran)
Kuvauskielet käskykielen vastakohta Perlis: purely applicative languages are poorly applicable λ-kalkyyli Backusin FP
Toimintokielet tukevat aliohjelmarakennetta useimmat käskykielet kuuluvat tähän
Oliokielet tukevat olioita: identiteetti, tila, käyttäytyminen tukevat käyttäytymisen inkrementaalista muutosta (perintä tai prototyypit) Smalltalk, Python, Java, C++
Funktiokielet tukevat täysivaltaisia funktioita tukevat tiedon halpaa kopiointia suosivat puurakenteita suosivat rekursiota Lisp, Standard ML, O Caml, Haskell, Clean
Ousterhoutin jaottelu järjestelmäohjelmointikielet juontokielet (skriptikielet)
1955 konekielet, symboliset konekielet koodaaminen erittäin vaikeaa
1955 1960 automaattinen ohjelmointi Forteran (1957) LISP (1958) Algol (1958)
1960-luku kielien räjähdysmäinen lisääntyminen Algol 60 (1960), Algol W (1966), Algol 68 (1968) Simula (1960), Simula 68 (1968) Snobol (1962) BASIC (1963) PL/I (1964)
1970-luku modernismi: opitaan menneestä Pascal C Smalltalk ML Scheme Prolog
1980-luku oliokielten nousu, postmodernismi C with classes, C++ Eiffel Ada Tcl Perl Miranda
1990-luku Intenet Java Haskell Python Ruby PHP ECMAScript
2000-luku C# Links???