Luentokalvot - Johdanto

*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