815338A Ohjelmointikielten periaatteet

Samankaltaiset tiedostot
Johdanto. 1. Mikä on ohjelmointikieli?

1. Olio-ohjelmointi 1.1

812341A Olio-ohjelmointi, I Johdanto

Ohjelmistojen mallintaminen, mallintaminen ja UML

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

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

4. Lausekielinen ohjelmointi 4.1

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

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

815338A Ohjelmointikielten periaatteet

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

Ohjelmointi 1. Kumppanit

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

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

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

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

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

Tietorakenteet ja algoritmit - syksy

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

2. Olio-ohjelmoinista lyhyesti 2.1

Tietorakenteet ja algoritmit

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Ohjelmistojen mallintaminen

Tutoriaaliläsnäoloista

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

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet

Ohjelmoinnin perusteet Y Python

2. Olio-ohjelmoinnin perusteita 2.1

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

Ohjelmointikielten kehityshistoriaa

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

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

11.4. Context-free kielet 1 / 17

Laskennan teoria

Kertausluento luennoista 1-3 1

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

TIE Principles of Programming Languages CEYLON

Sisällys. JAVA-OHJELMOINTI Osa 1: Ohjelmoinnin perusteita. Ohjelmoinnin kehityssuuntia. Ohjelmointi luvuilla. Ohjelmointi luvuilla

C++ Kuva 1-1. C- ja C++ kielien perustana olevat kielet.

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

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

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

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

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

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

4. Olio-ohjelmoinista lyhyesti 4.1

Kertausluento 1 (lu01, lu02, lu03) Tietokonejärjestelmän rakenne ttk-91 ja sillä ohjelmointi

7/20: Paketti kasassa ensimmäistä kertaa

Tietokoneen toiminta, Kevät Copyright Teemu Kerola Järjestelmän eri tasot Laitteiston nopeus

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

Ohjelmoinnista. Ohjelmien toteutukseen tarjolla erilaisia välineitä:

Esimerkki 1: Kahviautomaatti.

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

Teemun juustokakku Rekisterien, välimuistin, muistin, levymuistin ja magneettinauhan nopeudet suhteutettuna juuston hakuaikaan juustokakkua tehdessä?

Käännös, linkitys ja lataus

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Luento 1 Tietokonejärjestelmän rakenne

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

ITKP102 Ohjelmointi 1 (6 op)

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

ITKA203 Käyttöjärjestelmät, kesä Kesäkurssi Opettaja: Paavo Nieminen

T Ohjelmistotekniikan seminaari

1. Ohjelmoinnin peruskäsitteet ja -elementit

Algoritmit 1. Luento 3 Ti Timo Männikkö

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

TERO LAHTINEN FUNKTIONAALISTEN JA OLIO-IMPERATIIVISTEN OHJELMISTOKOMPONENTTIEN YHDISTÄMINEN. Diplomityö

Ohjelmoinnin peruskurssien laaja oppimäärä

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Ohjelmoinnin peruskurssien laaja oppimäärä

Luento 1 Tietokonejärjestelmän rakenne

Ohjeita Siemens Step7, Omron CX Programmer käyttöön

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

Ohjelmointiharjoituksia Arduino-ympäristössä

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

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Objective-C. Ryhmä 35: Ilpo Kärki Aleksi Pälä

Ohjelmoinnin peruskurssien laaja oppimäärä

Olio-ohjelmointi Johdanto olio-ohjelmointiin

Kemian tekniikan kandidaattiohjelman ohjelmointikurssi (5 op)

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

4. Lausekielinen ohjelmointi 4.1

Jakso 4 Aliohjelmien toteutus

Johdatus ohjelmointiin

Luento 4 Aliohjelmien toteutus

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

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

Common Lisp Object System

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

Tietueet. Tietueiden määrittely

Transkriptio:

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 vaikuttavia tekijöitä 815338A Ohjelmointikielten periaatteet, Johdanto 2

I.1 Ohjelmointikielen määritelmä Merkintäjärjestelmä, joka kuvaa laskentaa sellaisessa muodossa, että se on koneen ja ihmisen luettavissa. (Louden) Tyhjentävä määritelmä hankala keksiä, yo. riittää tässä Laskenta Määritellään usein formaalisti Turingin koneen avulla Tässä (epätarkasti): mikä tahansa tietokoneen suorittama toiminto Ohjelmointikieli koneen luettavissa Mahdollisuus kääntää automaattisesti konekielelle 815338A Ohjelmointikielten periaatteet, Johdanto 3

I.1 Ohjelmointikielen määritelmä (2) Ohjelmointikieli ihmisen luettavissa Epätarkempi vaatimus Kielessä oltava koneen toimintaa kuvaavia abstraktioita, jotta kielen käyttäminen ei vaadi koneen syvällistä ymmärtämistä Ohjelmointikielet muistuttavat usein jossain määrin luonnollista kieltä 815338A Ohjelmointikielten periaatteet, Johdanto 4

I.2 Syitä tutkia ohjelmointikieliä 1. Ohjelmointitaito kehittyy Ohjelmointi-ideoiden ilmaisuvalmius kasvaa Konstruktiot kielelle ominaisia Käytettävän kielen valinta helpottuu Kielen syvempi ymmärtäminen auttaa virhetilanteissa Oheistyökalujen käyttö tehostuu 2. Valmius oppia uusia kieliä kasvaa Perusperiaatteiden tuntemus auttaa 3. Periaatteita tarvitaan ohjelmoinnin opettamisessa 815338A Ohjelmointikielten periaatteet, Johdanto 5

I.2 Syitä tutkia ohjelmointikieliä (2) 4. Uusien kielten suunnittelu helpottuu Olemassaolevat kielet tunnettava Suunnitteluperiaatteet tunnettava 5. Tietojenkäsittely edistyy yleisesti Parhaat ratkaisut yleistyvät, jos tunnetaan periaatteet 815338A Ohjelmointikielten periaatteet, Johdanto 6

I.3 Ohjelmointiparadigmat Ohjelmointikielen tyyppi läheisessä yhteydessä ohjelmointitapaan (paradigmaan) Paradigman osat: 1. laskennallinen malli, 2. käsitteistö ja 3. välineistö Yleisjako: Imperatiivinen ohjelmointi vs. deklaratiivinen ohjelmointi 815338A Ohjelmointikielten periaatteet, Johdanto 7

I.3.1 Imperatiivinen ohjelmointi Luonnollisin ohjelmointiparadigma von Neumanntietokoneympäristössä Tunnuspiirteet: 1. Muistia mallintavat muuttujat, 2. Muistia manipuloivat sijoituslauseet 3. Komentojen peräkkäinen suorittaminen Suurin osa nykyisistä ohjelmointikielistä pääosin imperatiivisia 815338A Ohjelmointikielten periaatteet, Johdanto 8

I.3.1.1 Olio-ohjelmointi Lasketaan joskus omaksi paradigmaksi Ohjelma koostuu olioista ja toiminta niiden kommunikaatiosta Nykyiset oliokielet luonteeltaan enimmäkseen imperatiivisia 815338A Ohjelmointikielten periaatteet, Johdanto 9

I.3.1.2 Rinnakkainen ohjelmointi Viitataan usein ohjelmointimallina (peräkkäinen vs. rinnakkainen) Voidaan myös laskea ohjelmointiparadigmaksi Voidaan määritellä samanaikaisesti suoritettavia toimenpiteitä -> huolehdittava operaatioiden kommunikoinnin synkronoimisesta Monet nykyiset ohjelmointikielet tukevat 815338A Ohjelmointikielten periaatteet, Johdanto 10

I.3.2 Deklaratiivinen ohjelmointi Paradigmaan lasketaan kuuluvaksi 1. Funktionaalinen ohjelmointi 2. Logiikkaohjelmointi 3. Tietokantakielet 815338A Ohjelmointikielten periaatteet, Johdanto 11

I.3.2.1 Funktionaalinen ohjelmointi Perustaa laskennan funktioiden soveltamiseen Perusmekanismi on funktiokutsu Muuttujat ja toistorakenteet puuttuvat Kielet tunnetaan myös nimellä applicative languages Tunnettuja kieliä LISP ja Haskell 815338A Ohjelmointikielten periaatteet, Johdanto 12

I.3.2.2 Logiikkaohjelmointi Pohjautuu symbolisen logiikan käyttöön Ohjelma koostuu väitteistä (statements) Ei tarvita kontrollirakenteita Käyttää muuttujia, mutta eivät mallinna muistialueita vaan muistuttavat matematiikassa käytettäviä muuttujia Prolog harvoja yleisesti tunnettuja logiikkaohjelmointikieliä 815338A Ohjelmointikielten periaatteet, Johdanto 13

I.4 Suunnittelu- ja arviointikriteerit Yksi kurssin päätavoitteista: arvioida olemassa olevia ohjelmointikieliä -> periaatteita, joiden avulla kieliä voidaan arvostella 1950-luvulla kielet mahdollisimman yksinkertaisia 1970-luvun alkupuolella Hoaren kriteerit: 1.Yksinkertaisuus (Simplicity) 2.Turvallisuus (Security) 3.Nopea käännettävyys (Fast translation) 4.Käännetyn ohjelmakoodin tehokkuus (Efficient object code) 5. Luettavuus (Readibility) 815338A Ohjelmointikielten periaatteet, Johdanto 14

I.4.1 Loudenin kriteerit 1. Tehokkuus (Efficiency) 2. Yleisyys (Generality) 3. Ortogonaalisuus (Orthogonality) 4. Sisäinen yhdenmukaisuus (Uniformity) 5. Yksinkertaisuus (Simplicity) 6. Ilmaisuvoima (Expressiveness) 7. Täsmällisyys (Preciseness) 8. Laiteriippumattomuus (Machine independence) 9. Turvallisuus (Security) 815338A Ohjelmointikielten periaatteet, Johdanto 15

I.4.1 Loudenin kriteerit (2) 10.Yhdenmukaisuus yleisesti käytettyjen merkintöjen ja sopimusten kanssa (Consistency with accepted notations and conventions) 11. Laajennettavuus (Extensibility) 12. Rajoitettavuus (Restrictability) 815338A Ohjelmointikielten periaatteet, Johdanto 16

I.4.1 Loudenin kriteerit (3) *x++=*y++ Tehokkuus Käännetyn koodin tehokkuus: yksi tärkeimpiä mittareita (varsinkin aiemmin) Käännöksen tehokkuus Kielellä ohjelmoimisen tehokkuus Yleisyys Kielen piirre koota ominaisuutensa muutamista peruskäsitteistä Esimerkki: Pascalissa kahdentyyppisiä aliohjelmia (proseduuri ja funktio), C:ssä vain funktio. Samat toiminnot mahdolliset -> C yleisempi 815338A Ohjelmointikielten periaatteet, Johdanto 17

I.4.1 Loudenin kriteerit (4) Ortogonaalisuus Kielen piirteiden riippumattomuus toisistaan, mahdollisimman vähän perusrakenteita, joita voidaan yhdistellä riippumattomasti ALGOL 68-kielen suunnittelun pääperiaate Yhdenmukaisuus Johdonmukaisuus kielen rakenteiden ulkoasussa ja käyttäytymisessä Rikotaan kahdella tavalla: 1. Samankaltaisesti käyttäytyvät asiat näyttävät erilaisilta 2. Samalta näyttävät asiat käyttäytyvät eri lailla 815338A Ohjelmointikielten periaatteet, Johdanto 18

I.4.1 Loudenin kriteerit (5) Yksinkertaisuus Aikoinaan yksi tärkeimmistä suunnitteluperiaatteista Pascalissa tärkeä Sotii monia muita tavoiteltavia asioita vastaan Yksinkertaisen kielen käyttäminen voi olla vaikeata Täsmällisyys Kielellä tarkka määrittely Lisää kielen luotettavuutta 815338A Ohjelmointikielten periaatteet, Johdanto 19

I.4.1 Loudenin kriteerit (6) Ilmaisuvoima Kuinka helppoa kielessä on ilmaista monimutkaisia toimintoja ja rakenteita Auttaa tuottamaan ohjelmia tehokkaammin Yleensä ristiriidassa yksinkertaisuuden kanssa Nykyään lisätään luokkakirjastojen tai pakkausten avulla Esimerkki C:n ilmaisuvoimasta: strcpy(char *s, char *t){ } while( *s++ = *t++); 815338A Ohjelmointikielten periaatteet, Johdanto 20

I.4.1 Loudenin kriteerit (7) Laiteriippumattomuus Saavutetaan pääasiassa käyttämällä tietotyyppejä, jotka eivät vaadi koneen sisäisten ominaisuuksien tuntemusta Esimerkki: C-kielen int voi olla 16- tai 32-bittinen, Javassa aina 32-bittinen -> Java laiteriippumattomampi Turvallisuus Estää ohjelmointivirheiden (sekä syntaktisten että semanttisten) syntymistä Edistää ohjelmointivirheiden havaitsemista Turvallisuusperiaate -> tyypintarkistus 815338A Ohjelmointikielten periaatteet, Johdanto 21

I.4.1 Loudenin kriteerit (8) Yhdenmukaisuus yleisesti käytettyjen merkintöjen ja sopimusten kanssa Edistää kokeneen ohjelmoijan mahdollisuuksia oppia ja käyttää ohjelmointikieltä Laajennettavuus Mekanismi, jonka avulla kieleen voidaan lisätä ominaisuuksia Rajoitettavuus Ei tarvitse tuntea kaikkia kielen ominaisuuksia, jotta pystyisi käyttämään kieltä hyödyllisesti 815338A Ohjelmointikielten periaatteet, Johdanto 22

I.4.2 Sebestan kriteerit *x++=*y++ Ainoastaan arviointikriteerejä Neljä pääkategoriaa, jakaantuvat alikategorioihin: 1. Luettavuus (Readibility) i. Yksinkertaisuus (Simplicity) ii. Ortogonaalisuus (Orthogonality) iii. Tietotyypit (Data types) iv. Syntaksi (Syntax design) 815338A Ohjelmointikielten periaatteet, Johdanto 23

I.4.2 Sebestan kriteerit (2) 2. Kirjoitettavuus (Writability) i. Luettavuuden kriteerit ii. Abstraktiotuki (Support for abstraction) iii. Ilmaisuvoima (Expressivity) 3. Luotettavuus i. Luettavuus ja kirjoitettavuus ii. Tyypin tarkistus (Type checking) iii. Poikkeusten käsittely (Exception handling) iv. Moninimisyys (Aliasing) 4. Resurssivaatimukset 815338A Ohjelmointikielten periaatteet, Johdanto 24

I.4.2 Sebestan kriteerit (3) Luettavuus Yksi tärkeimmistä kriteereistä Arvioi kuinka hyvin ihminen ymmärtää kirjoitettua ohjelmakoodia Tietotyypit liittyvät ilmaisuvoimaan Syntaksin vaikutus: Varsinkin erikoissanat, kuten while, if, for,... 815338A Ohjelmointikielten periaatteet, Johdanto 25

I.4.2 Sebestan kriteerit (4) Kirjoitettavuus Arvioi, kuinka helposti kielellä voi tuottaa valitun sovellusalueen ohjelmia Yksinkertaisuus ja ortogonaalisuus edesauttavat Tapa tukea abstraktiota vaikuttaa suuresti kirjoitettavuuteen Erityisesti tuki tietorakenteille Ilmaisuvoima monitahoinen käsite Kielessä mahdollisuus ilmaista operaatioita lyhyesti Lisääminen edistää kirjoitettavuutta, ei aina luettavuutta 815338A Ohjelmointikielten periaatteet, Johdanto 26

I.4.2 Sebestan kriteerit (5) Luotettavuus Kieli käyttäytyy määritellyllä tavalla kaikissa tilanteissa Tyypin tarkistus Tyyppivirheiden tarkistus ohjelmassa (käännöksen tai ohjelman ajon aikana) Poikkeusten käsittely Kielen kyky havaita ajonaikaiset virheet ja mahdollisesti toipua niistä Moninimisyys (aliasing) Kielen kyky muodostaa eri muuttujia viittaamaan samaan muistipaikkaan Voi aiheuttaa virhetilanteita, mutta hankala karsia kokonaan 815338A Ohjelmointikielten periaatteet, Johdanto 27

I.4.2 Sebestan kriteerit (6) Resurssivaatimukset Resurssit kouluttamaan ohjelmoijia Ohjelman kirjoittamisen vaatimat resurssit Kääntämisen tehokkuus Ohjelmien suorittamisen tehokkuus Implementointijärjestelmän kustannukset 815338A Ohjelmointikielten periaatteet, Johdanto 28

I.5 Suunnitteluun vaikuttavia tekijöitä I.5.1 Tietokoneen arkkitehtuuri Keskeisimpiä seikkoja - von Neumannin arkkitehtuuri vallitseva: Ohjelman muistialue: DATA KÄSKYT... CPU Aritmeettislooginen yksikkö (ALU) Laskennan tulokset Käskyt ja data Kontrolliyksikkö Käskyjen dekoodaus IO 815338A Ohjelmointikielten periaatteet, Johdanto 29

I.5.1 Tietokoneen arkkitehtuuri (2) von Neumannin arkkitehtuurin perusominaisuudet: Data ja ohjelma samassa muistissa, ei voi erottaa toisistaan Keskusyksikkö muistista erillään, suorittaa käskyt -> käskyt ja data siirrettävä muistista keskusyksikköön von Neumannin arkkitehtuurin käyttöönotto -> mahdollisuus manipuloida tietokoneohjelmia samalla tavalla kuin dataa -> ohjelmointikielten synty Imperatiiviset ohjelmointikielet pohjautuvat von Neumannin arkkitehtuuriin 815338A Ohjelmointikielten periaatteet, Johdanto 30

I.5.2 Ohjelmistojen suunnitteluperiaatteet 1950-luvulla automaattinen ohjelmointi FORTRAN lähellä konekieltä 1960-luvulla eri periaatteiden kokeilua Satoja kieliä suunniteltiin 1970-luvulla rakenteinen ohjelmointi Top-down suunnittelu ja askeleittain tarkentaminen Monet merkittävimmistä ideoista 1970-luvulla 1980-luvulta alkaen abstraktit tietotyypit ja olioohjelmointi Dataorientoitunut suunnittelumalli Nykyään vallitseva 815338A Ohjelmointikielten periaatteet, Johdanto 31