Ohjelmoinnista. Ohjelmien toteutukseen tarjolla erilaisia välineitä:

Samankaltaiset tiedostot
1. Olio-ohjelmointi 1.1

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

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

11/20: Konepelti auki

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Ohjelmoinnin peruskurssien laaja oppimäärä

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Johdatus ohjelmointiin

14. Hyvä ohjelmointitapa 14.1

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

4. Lausekielinen ohjelmointi 4.1

13. Hyvä ohjelmointitapa (osa 1) 13.1

4. Lausekielinen ohjelmointi 4.1

Käännös, linkitys ja lataus

815338A Ohjelmointikielten periaatteet

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

1. Omat operaatiot 1.1

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Tutoriaaliläsnäoloista

815338A Ohjelmointikielten periaatteet

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

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

Sisällys. 15. Lohkot. Lohkot. Lohkot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Algoritmit 1. Luento 3 Ti Timo Männikkö

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Ohjelmoinnin peruskurssien laaja oppimäärä

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

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

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Oleelliset vaikeudet OT:ssa 1/2

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

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

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

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

811120P Diskreetit rakenteet

Java-kielen perusteet

Rinnakkaistietokoneet luento S

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

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

Ohjelmoinnin perusteet Y Python

TIE Principles of Programming Languages CEYLON

A TIETORAKENTEET JA ALGORITMIT

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Sisällys. 16. Lohkot. Lohkot. Lohkot

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

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

Tietorakenteet (syksy 2013)

ASM-kaavio: reset. b c d e f g. 00 abcdef. naytto1. clk. 01 bc. reset. 10 a2. abdeg. 11 a3. abcdg

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

Ohjelmoinnin peruskurssien laaja oppimäärä

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

5. HelloWorld-ohjelma 5.1

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

815338A Ohjelmointikielten periaatteet

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

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

samalla seuraavaan puoliavaruuteen (sukupolveen), jota siivotaan harvemmin.

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin peruskurssien laaja oppimäärä

Simulointi. Tapahtumapohjainen

Tietotekniikan valintakoe

815338A Ohjelmointikielten periaatteet

Muistutus aikatauluista

Ohjelmistojen suunnittelu

815338A Ohjelmointikielten periaatteet

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

Jakso 4 Aliohjelmien toteutus

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmistojen mallintaminen, mallintaminen ja UML

ITKP102 Ohjelmointi 1 (6 op)

Lisää pysähtymisaiheisia ongelmia

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

Ehto- ja toistolauseet

Jakso 4 Aliohjelmien toteutus

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Jakso 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Ohjelmointi Linuxissa. Sisällysluettelo. 1. Mitä tarvitaan sovellusten tuottamiseen? Tehnyt: Antti Martikainen ( )

Jakso 4 Aliohjelmien toteutus

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Ctl160 Tekstikorpusten tietojenkäsittely Kolmas luento,

Ohjelmointi 1 / syksy /20: IDE

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Java-kielen perusteet

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

13. Loogiset operaatiot 13.1

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

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

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

Transkriptio:

Ohjelmien toteutukseen tarjolla erilaisia välineitä: perinteiset ohjelmointikielet eri tyyppisiä eri paradigmat eri tarkoituksiin ohjelmointiympäristöt kieli + tukiympäristö (kieliherkkä toimitin, debuggeri, analysoijat, rakenneselaimet, avustus, kirjastotliittymät, ) kehittimet kieli + tukiympäristö + sovelluskehys Kielen valinta: sovellusalueperustainen tietty kieli havaittu hyväksi ja käytetty sovellusalueella, jolloin on saatavissa valmisosia systeemiohjelmointi <- C tosiaikajärjestelmät <- C, Ada hallinnollinen <- COBOL, 4GL-kehitinkielet matemaattiset <- FORTRAN käyttöliittymät <- Visual Basic henkilökohtaiset <- Visual Basic tekoäly <- Lisp, Prolog Harri Laine 1/9

erikoissovelluksiin erikoiskieli tietoliikenne <- SDL, ANS.1, Estelle kääntäjät <- YACC, LEX tietokannat <- SQL www-sivut <- HTML, JavaScript ohjelmistotuotantomallia tukeva kieli prototyyppimalli <- 4GL kehitinkielet, Prolog, LISP oliopohjainen kehitys <- C++, Smalltalk, Java, Eiffel kokeileva <- Prolog, Smalltalk, 4GL kehitinkielet tehokkuusnäkökohdat huomioiva valinta C, assembler toteutusympäristö Windows <- Visual Basic, Delphi/Pascal UNIX <- C WWW/Internet <-Java toteuttajien osaaminen vanhempi polvi <- COBOL, FORTRAN Harri Laine 2/9

kilet perustuvat johonkin paradigmaan. eri tapoja luokitella Imperatiivinen ohjelmointi (imperative programming) ohjelma muodostuu joukosta peräkkäin suoritettavia lauseita (käskyjä), ohjelmoija kontrolloi täysin suoritusjärjestystä voidaan jaotella edelleen kielen rakenteellisuuden mukaan alkeelliset -> konekielet, Fortran rakenteiset» kootut rakenteet» lohko - paikalliset rakenteet ja näkyvyyssäännöt» aliohjelma - toiminnallisuuden abstraktiot» Algol 60, Pascal, C, (Fortran, COBOL) modulaariset» lohko, joka on mahdollista liittää muihin lohkoihin erillään tuotettuihin lohkoihin» julkiset ja yksityiset osat» Modula-2. Ada oliopohjaiset» modulaarinen +» perinnän hyväksikäyttö, monimuotoisuus ja dynaaminen sidonta» C++, Smalltalk, Java, Eiffel Harri Laine 3/9

tapahtumaperustainen ohjelmointi (event based programming) jos luokitusta tehdään kontrollin hallinnnan perusteella tätä voidaan pitää omana paradigmana vaikka lisäksi tarvitaankin imperatiivista ohjelmointia ohjelma koostuu joukosta tapahtumankäsittelijöitä, jotka on kytketty reagoimaan tietyn tyyppiseen tapahtumaan. tapahtuma voi käynnistää useita reaktioita tapahtumankäsittelijän aktivointi voi olla automaattinen (SQL:n triggerit ja assertiot) tai ohjelmoijan on tuotettava aktivointimekanismi Funktionaalinen ohjelmointi (functional programming) ohjelma koostuu joukosta matemaattisia funktioita funktioilla voi olla useita parametreja, mutta se tuottaa yhden tuloksen (voi olla rakenteinen) sivuvaikutoksettomuus - ei tuhoavaa sijoituslausetta funktio kuvataan toisten funktioiden ja niiden tuloksia yhdistävien operaatioiden avulla ohjelman suoritus on funktion evaluointia jos f(x) halutaan ratkaista on annettava x:lle arvo, jolla ratkaisu halutaan, esim arvolla 5 evaluoidaan f(5) evaluoidaan vain se, mikä on tarpeen tuloksen saamiseksi (lazy evaluation) kieliä: LISP, ML, Scheme Harri Laine 4/9

Logiikkaohjelmointi (logic programming) ohjelma muodostuu joukosta matemaattisen logiigan lauseita (päättelysääntöjä) on_rahaa(x,y) and Y>100000 => rikas(x). ehdot johtopäätös logiikka: lausekkeiden tulkittataan määrittelevän predikaatin proseduraalinen tulkinta: predikaatin määrittevä lauseke tulkitaan predikaatin laskevaksi ohjelmaksi evaluointi perustuu ns samastukseen (unification) esim. tietämyskannassa: on_rahaa(kalle, 200). on_rahaa(liisa, 150000). on_rahaa(x,y) samastuu kumpaankin, mutta vain yhtä samastuvaa käytetään samanaikaisesti (se kumpaa käytetään valitaan (ainakin teoriassa) satunnaisesti) => epädeterministisyys evaluoinnin toteutuksiin liittyy yleensä peruutus, jolloin kokeillaan seuraavaa samastuvaa vaihtoehtoa ellei edellinen johda ratkaisuun. Harri Laine 5/9

esim. kysymys on_rikas(kalle) evaluoitaisiin evaluoimalla on_rikas predikaatin ehdot on_rahaa(kalle,y) ja Y>100000, ensimmäinen predikaatti samastuu predikaattiin on_rahaa(kalle,200) eli Y samastuu 200:n, jolloin toinen ehto 200>100000 ei toteudu (eikä koko predikaatti) ratkaisua voidaan kysyä joko sidotuin parametriarvoin (on_rikas(kalle)) tai vapain parametriarvoin (on_rikas(x)), jälkimmäisessä tapauksessa saadaan kaikki samastuvat arvot. rekursiiviset määrittelyt ovat yleisiä, samoin listarakenteiden käyttö määrittelyissä kieliä Prolog, Goedel rinnakkaisohjelmointi (concurrent programming) ohjelma muodostuu joukosta rinnakkain toimivia prosesseja prosessilla on oma koodi ja oma paikallinen muisti prosessien välinen kommunikointi perustuu prosessien väliseen viestinvälitykseen (vrt. tapahtumapohjainen) prosesseja voi joutua synkronoimaan prosessi tarvitsee toisen palveluja poissulkeminen: estetään yhteisten tietorakenteiden samanaikainen käsittely kieliä: Modula-2, Ada, Occam, Java Harri Laine 6/9

Yleisiä ohjeita Kuvaavat nimet - vaikuttavat ohjelman luettavuuteen ohjelmia luetaan useammin kuin kirjoitetaan:optimoi lukijan äläkä kirjoittajan työtä Yhdenmukaiset nimet kieli - ei sekakieltä yhtenäinen nimirakenne jos lyhennetään, niin aina samoin ei average_freq, frequency, frequency_maximum, min_fr, frq_totl osasanat aina samassa järjestyksessä ei average_freq, frequency_maximum ohjelmassa esiintyvät vakiot on syytä nimetä, mikäli ne voivat jossain ohjelman elinkaaren vaiheessa muuttua tietorakenteille ja metodeille tulisi sopia löytämistä helpottava esittelyjärjestys, esim. aakkosjärjestys parametrit tulisi välittää yhdenmukaisesti (ei tarpeetonta vaihtelua osoittimen ja arvon välillä) sisäkkäiset if lauseet voivat aiheuttaa ymmärtämisongelmia toisaalta myös monimutkaiset loogiset lausekkeet - näihin on kiinnitettävä erityistä huomiota pyrittävä mahdollisimman ymmärrettävään koodin - vältettävä kaikkea kikkailua Harri Laine 7/9

Kommentointi koodi on kommentoitava otsakekommenttiin käyttötarkoitus liittymän kuvaus parametrit & globaalit rakenteet miten moduulia käytetään mitä ulkopuolisia moduuleja itse käyttää rajoitukset tärkeimmät rakenteet ja toimintaperiaate kehityshistoria (laatija, hyväksyntä, muutokset) nykytila pseudokielen lauseet kommenteiksi: kytkee koodin vastaavaan moduulisuunnitelmaan ei kommentoida itsestäänselvyyksiä (kuten: muuttujan a arvoa kasvatetaan yhdellä) vaan syitä ja perusteita tietorakenteiden (ja niiden kenttien) merkitys oikeellisuustarkistusten vaatimat kommentit tarvittavien kommenttien määrä riippuu ohjelmointikielestä muuttujanimien valinnasta ym. lisäinformaatiosta kommentti kertoo, mitä koodin on tarkoitus tehdä - ei välttämättä mitä todella tehdään kommenttejakin täytyy ylläpitää Harri Laine 8/9

Sijoittelu (layout) useimmissa kielissä sijoittelu on ohjelmoijan päätettävissä (vrt. sarakesidonnaiset kielet) huomattava vaikutus luettavuuteen usein standardoitu, jopa automatisoitu koko ohjelmistossa on syytä käyttää yhdenmukaista sijoittelua: sisennykset, tyhjät rivit lauseiden sijoittelu riveille, alku ja loppusulut begin end, { } kommenttien sijoittelu tyhjä tila on halpaa, mutta sen puute voi tulla kalliiksi! Harri Laine 9/9