*x++=*y++
815338A
Ohjelmointikielten
periaatteet
2014 - 2015
I Johdanto
*x++=*y++
Sisältö
1.
2.
3.
4.
5.
Ohjelmointikielen määritelmä
Syitä tutkia ohjelmointikieliä
Ohjelmointiparadigmat
Suunnittelu- ja arviointikriteerit
Suunnitteluun vaikuttavia tekijöitä
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
2
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
3
*x++=*y++
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ä
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
4
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
5
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
6
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
7
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
8
*x++=*y++
I.3.1.1 Olio-ohjelmointi
Lasketaan joskus omaksi paradigmaksi
Ohjelma koostuu olioista ja toiminta niiden
kommunikaatiosta
Nykyiset oliokielet luonteeltaan enimmäkseen
imperatiivisia
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
9
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
10
*x++=*y++
I.3.2 Deklaratiivinen ohjelmointi
Paradigmaan lasketaan kuuluvaksi
1. Funktionaalinen ohjelmointi
2. Logiikkaohjelmointi
3. Tietokantakielet
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
11
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
12
*x++=*y++
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ä
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
13
*x++=*y++
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)
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
14
*x++=*y++
I.4.1 Loudenin kriteerit
1.
2.
3.
4.
5.
6.
7.
8.
9.
Tehokkuus (Efficiency)
Yleisyys (Generality)
Ortogonaalisuus (Orthogonality)
Sisäinen yhdenmukaisuus (Uniformity)
Yksinkertaisuus (Simplicity)
Ilmaisuvoima (Expressiveness)
Täsmällisyys (Preciseness)
Laiteriippumattomuus (Machine independence)
Turvallisuus (Security)
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
15
*x++=*y++
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)
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
16
*x++=*y++
I.4.1 Loudenin kriteerit (3)
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
17
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
18
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
19
*x++=*y++
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++);
}
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
20
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
21
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
22
*x++=*y++
I.4.2 Sebestan kriteerit
Ainoastaan arviointikriteerejä
Neljä pääkategoriaa, jakaantuvat alikategorioihin:
1. Luettavuus (Readibility)
i. Yksinkertaisuus (Simplicity)
ii. Ortogonaalisuus (Orthogonality)
iii. Tietotyypit (Data types)
iv. Syntaksi (Syntax design)
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
23
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
24
*x++=*y++
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, ...
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
25
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
26
*x++=*y++
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
Kielen kyky muodostaa eri muuttujia viittaamaan samaan
muistipaikkaan
Voi aiheuttaa virhetilanteita, mutta hankala karsia kokonaan
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
27
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
28
*x++=*y++
I.5 Suunnitteluun vaikuttavia tekijöitä
I.5.1 Tietokoneen arkkitehtuuri
Keskeisimpiä seikkoja - von Neumannin arkkitehtuuri
vallitseva:
Ohjelman
muistialue:
DATA
KÄSKYT
Laskennan
tulokset
.
.
.
Käskyt ja data
CPU
Aritmeettislooginen
yksikkö (ALU)
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
Kontrolliyksikkö
Käskyjen
dekoodaus
IO
815338A Ohjelmointikielten periaatteet , Johdanto
29
*x++=*y++
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 samoin kuin
dataa -> ohjelmointikielten synty
Imperatiiviset ohjelmointikielet pohjautuvat von
Neumannin arkkitehtuuriin
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
30
*x++=*y++
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
Ari Vesanen, Tietojenkäsitttelytieteiden laitos
815338A Ohjelmointikielten periaatteet , Johdanto
31
© Copyright 2025