Ompi Jaavaa ompi Ceetä,
Adaa ompi Pascalia.
Kieltä vanhaa, kieltä uutta
ne kaukaa sekä läheltä.
Monta kieltä monta mieltä,
kummajaisilla ku noilla,
voi koodia väänneskellä,
kaikellailla keikistellä.
Mitä tässä luvussa käsitellään?
· katsotaan mitä syntaktista eroa on eri ohjelmointikielillä yksinkertaisessa esimerkissä
Jossakin vaiheessa ohjelmoinnin opiskelua tullaan siihen, että ohjelma pitäisi toteuttaa jollakin olemassa olevalla ohjelmointikielellä (on tosin ohjelmointikursseja, joilla käytetään keksittyä ohjelmointikieltä).
Seuraavassa esitämme ohjelman jonka ainoa tehtävä on tulostaa teksti:
Terve! Olen ??–kielellä kirjoitettu ohjelma.
Itse ohjelman suunnittelu on tällä kertaa varsin triviaali ja tehtävä ei tarvitse varsinaista tarkennustakaan, kaikki on sanottu tehtävän määrityksessä. Siis valitaan vain käytetyn kielen tulostuslause.
Jotta lukija ymmärtäisi, ettei eri kielten välillä ole kuin pieni ero, esitämme ohjelman useilla eri kielillä. Ohjelman lopun jälkeen olevan poikkiviivan alapuolella on mahdollisesti esitetty miten ohjelmaa voitaisiin kokeilla MS–DOS–koneessa:
{ Pascal–kieli }
PROGRAM olen(OUTPUT);
BEGIN
WRITELN('Terve! Olen Pascal–kielellä kirjoitettu ohjelma.');
END.
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
– käynnistä vaikkapa Turbo Pascal
TP OLEN.PAS
– kirjoita ohjelma
– paina [Ctrl–F9]
/* C–kieli */
#include <stdio.h>
int main(void)
{
printf("Terve! Olen C–kielellä kirjoitettu ohjelma.\n");
return 0;
}
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
– käynnistä vaikkapa Turbo C
TC OLEN.C
– kirjoita ohjelma
– paina [Ctrl–F9]
// C++ –kieli
#include <iostream.h>
int main(void)
{
cout << "Terve! Olen C++ –kielellä kirjoitettu ohjelma.\n";
return 0;
}
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
– käynnistä vaikkapa Turbo C++
TC OLEN.CPP
– kirjoita ohjelma
– paina [Ctrl–F9]
– huomattakoon, että myös OLEN.C kelpaisi sellaisenaan C++ ohjelmaksi
// Java -kieli
public class Olen {
public static void main(String[] args) {
System.out.println("Terve, Olen Java-kielella kirjoitettu ohjelma.");
}
}
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
- Kirjoita Olen.java jollakin editorilla
- käännä: javac Olen.java
- aja: java Olen
C Fortran–kieli
PRINT*,'Terve! Olen Fortran–kielellä kirjoitettu ohjelma.'
STOP
END
–– ADA–kieli
with TEXT_IO; use TEXT_IO;
procedure ADA_MALLI is
pragma MAIN;
begin
PUT("Terve! Olen ADA–kielellä kirjoitettu ohjelma."); NEW_LINE;
end ADA_MALLI;
REM BASIC–kieli
PRINT "Terve! Olen BASIC–kielellä kirjoitettu ohjelma."
END
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
– käynnistä vaikkapa Quick Basic
QBASIC OLEN.BAS
– kirjoita ohjelma
– paina [Alt–R][Return]
Ç
APL–kieli
o ç 'Terve! Olen APL–kielellä kirjoitettu ohjelma.'
(* Modula–2 –kieli *)
MODULE olen;
FROM InOut IMPORT WriteString, WriteLn;
BEGIN
WriteString("Terve! Olen Modula–2 –kielellä kirjoitettu ohjelma.");
WriteLn;
END olen.
; AutoLisp
(prin1 "Terve! Olen AutoLisp–kielellä kirjoitettu ohjelma.")
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
– Kirjoita rivi AutoCadissä (rivi tosin tulostuu 2x)
( FORTH–kieli )
: Olen
" Terve! Olen FORTH–kielellä kirjoitettu ohjelma." TYPE CR
;
; 8086 assembler
DOSSEG
.MODEL TINY
.STACK
.DATA
viesti DB 'Terve! Olen 8086–assemblerilla kirjoitettu ohjelma.',0DH,0AH,'$'
.code
olen PROC NEAR
MOV AX,@@DATA
MOV DS,AX ; Viestin segmentti DS:ään
MOV DX,OFFSET viesti ; Viestin offset osoite DX:ään
MOV AH,09H ; Funktiokutsu 9 = tulosta merkkijono DS:DX
INT 21H ; Käyttöjärjestelmän kutsu
MOV AX,4C00H ; Funktiokutsu 4C = ohjelman lopetus
INT 21H ; Käyttöjärjestelmän kutsu
olen ENDP
END olen
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
– kirjoita ohjelma jollakin ASCII–editorilla nimelle OLEN.ASM
– anna käyttöjärjestelmässä komennot (oletetaan että TASM on polussa):
TASM OLEN
TLINK OLEN
OLEN
Siis erot eri kielten välillä ovat hyvin kosmeettisia (Pascalin BEGIN on C:ssä { jne.). Jollakin kielellä asia pystyttiin esittämään hyvin lyhyesti ja jossakin tarvitaan enemmän määrittelyjä. Ainoastaan assembler–versio on sellaisenaan epäselvä, suoritettavia lauseita on täytynyt kommentoida enemmän.
Kullakin ohjelmointikielellä on omat etunsa. Pascal on hyvin tyypitetty kieli ja sillä ei ole aloittelijankaan niin helppo tehdä eräitä tyypillisiä ohjelmointivirheitä kuin muilla kielillä. Standardi Pascal on kuitenkin hyvin suppea ja siitä puuttuu esim. merkkijonojen käsittely.
Turbo Pascalin laajennukset tekevät kielestä erinomaisen ja nopean kääntäjän ja UNIT–kirjastojen ansiosta se on todella miellyttävä käyttää. Nykyisin lisäksi Delphi–sovelluskehittimen kielenä on juuri Turbo Pascalista laajennettu Object Pascal. Delphi on eräs merkittävimmistä ja helppokäyttöisimmistä työkaluista Windows–ohjelmointiin. Borlandin julkaistua Kylix-sovelluskehittimen, tarjotaan myös Linux-ohjelmoijille samaa helppoutta..
BASIC–kieli on yleensä suppea kieli ja siksi helppo oppia. Lukuisten eri murteiden takia ohjelmien siirtäminen ympäristöstä toiseen on lähes mahdotonta. Microsoftin Visual Basic on kuitenkin Windows–ympäristössä nostanut Basicin jopa ohjelmankehittäjien työkaluksi. Alkuperäiset Basic-murteet olivat huonoja opiskelukieliä rajoittuneiden rakenteiden ja automaattisen muuttujanluomisen vuoksi. Visual Basicin uusimmissa versioissa on jo mukana yleisimmin tarvittavat rakenteet.
Fortran on luonnontieteellisissä sovelluksissa eniten käytetty kieli ja siihen on saatavissa laajat aliohjelmakirjastot useisiin numeriikan ongelmiin. Mikroissa kääntäjät ovat kuitenkin hitaita. Fortran–77 standardi on eräs parhaista standardeista, jota seuraamalla ohjelma toimii lähes koneessa kuin koneessa. Fortranin uusin standardi –90 tarjoaa ennen kielestä puuttuneet rakenteet.
ADA on Pascalin kaltainen vielä tarkemmin tyypitetty kieli, jossa on joitakin olio–ominaisuuksia. Se on Yhdysvaltain puolustusministeriön tukema kieli, joten se lienee tulevaisuuden kieliä. Sopii erityisesti raskaiden reaaliaikatoteutusten kirjoittamiseen (esim. ohjusjärjestelmät). GNU ADA tuo kääntäjän käyttämisen mahdolliseksi jokaiselle. Lisäksi ADA-95 tuo kieleen olio-ominaisuudet.
C–kieli on välimuoto Pascalista ja konekielestä. Ohjelmoijalle sallitaan hyvin suuria vapauksia, mutta toisaalta käytössä on hyvät tietotyypit ja rakenteet. Hyvä kieli osaavan ohjelmoijan käsissä, mutta aloittelija saattaa saada aikaan katastrofin. ANSI–C on suhteellisen hyvin standardoitu ja sitä seuraamalla on mahdollista saada ohjelma toimimaan pienin muutoksin myös toisessakin laiteympäristössä. Lisäksi ANSI–C:n tuoma funktioiden prototyypitys ja muutkin tyyppitarkistukset poistavat suuren osan ohjelmointivirheiden mahdollisuuksista, eivät kuitenkaan kaikkia. UNIX –käyttöjärjestelmän leviämisen myötä C on kohonnut erääksi kaikkein käytetyimmistä kielistä.
C++ on C–kielen päälle kehitetty oliopohjainen ohjelmointikieli. Aikaisemmin C–kielellä oli niin suuri merkitys, että se kannatti ehkä opetella aluksi. Nykyisin jokainen merkittävä C–kääntäjä on myös C++–kääntäjä. Oliopohjaisen ohjelmoinnin kannalta on parempi mitä aikaisemmin olio–ohjelmointi opetellaan. Valitettavasti C++ ei ole hybridikielenä (multi paradigm) paras mahdollinen ohjelmoinnin opetteluun. Kuitenkin paremmin opetteluun soveltuvat kielet ovat usein "leikkikieliä", kuten alkuperäinen Pascalkin oli. Delphi olisi mahtavan graafisen kirjastonsa ja kehitysympäristönsä ansiosta loistava opettelutyökalu, valitettavasti vaan lehti–ilmoituksissa harvoin haetaan Delphi–osaajia! Kohtuullisena kompromissina C++:kin voidaan valita opettelukieleksi, kunhan ei heti yritetä opetella kaikkia kielen kommervenkkeja.
Java on verkkoympäristössä tapahtuvaan ohjelmointiin kehitetty oliokieli. Javan erikoisuus on se, että se käännetään siirrettävään Java-tavukoodimuotoon. Tätä tavukoodia voidaan sitten suorittaa lähes missä tahansa ympäristössä Java-virtuaalikoneen avulla. Javaa on sanottu C++:aa yksinkertaisemmaksi, mutta kuitenkin Java kirjat ovat yhtä paksuja kuin C++ kirjatkin. Nykyisin onkin monesti niin, ettei itse kieli ole ongelma, vaan sille kehitettyjen aliohjelmakirjastojen opettelu ja käyttö. Javan suurimpana etuna on sen lähes kaikissa koneissa toimiva graafinen kirjasto. Java-työkalut kehittyvät kovaa vauhtia, valitettavasti käyttöliittymän graafiseen suunniteluun tarkoitetut työkalut eivät ole keskenään yhteensopivia.
Tämän kurssin eri versioissa on käytetty esimerkkikielenä Pascalia, C:tä, C++:aa ja nyt tässä versiossa Javaa. Kielen valinta ei suuria merkitse, ohjelmointi on kuitenkin perusteiltaan samanlaista. Joitakin vivahde-eroja kuitenkin tulee valitun kielen mukana.