OHJELMOINNIN PERUSTEET (2ov) Bioinformatiikan koulutusohjelma 15.11.2004-31.5.2004
1. Yleistä työpäivät työtavat suoritustapa ma 15.11, ti 16.11, ti 30.11, ke 1.12 ja ti 14.12 työtavat Aamupäivä luentoa, iltapäivä käytäntöä, lisäksi kotitehtävät (aamulla teoriasta käytäntöön) suoritustapa Harjoistustyö, jonka ratkaisu ja toiminta pitää selittää
Kurssin sisältöä keskeiset termit ja käsitteet ohjelmoinnista yleensä, algoritmiikasta ja tietorakenteiista perl yleensä ja active-perl ohjelmoinnin perusaskeleita perlillä harjoitustyö jostain bioinformatiikan tyypillisestä ohjelmointitehtävästä
Kirjallisuutta Opeta itsellesi PERL-ohjelmointi Perl tehokäyttäjän opas Beginning Perl for Bioinformatics
2. OHJELMOINNIN KÄSITTEITÄ
Ohjelmointi Ohjelmointi yleisesti: jokin ohjataan suorittamaan jonkin toisen antamat ohjeet reitin neuvonta, videoiden ajastus, aivopesu Tietokoneen ohjelmointi: ohjelmoija ohjaa koneen tekemään joukon operaatioita ongelman ja tuloksen ymmärtäminen (ajatus) ratkaisu (algoritmi) ratkaisun selittäminen koneelle (koodaus) testataan ohjelmaa
Kieli Kieli: ohjelmoijan keino selittää tehtävät operaatiot koneelle Konekieli: alkeellinen ja kohtuuttoman työläs tapa selittää tehtävät koneelle Skriptikieli: tulkataan ajon aikana (esim. perl) Ohjelmointikieli: käännetään, jonka tuotos on ajokelpoinen tiedosto (esim. c++)
Lisää keskeisiä käsitteitä Syntaksi: kieleen liittyvä kielioppi Virhe: looginen, semanttinen, syntaktinen Varatut sanat: kielessä näille sanoille valmis merkitys ei voi käyttää muuttujan nimenä Ajo = suoritus = laskenta Syöte: ohjelman tarvitsemat lähtötiedot Tulos: ohjelman suorituksen tuottama informaatio
Käsitteitä… Koodi: ohjelmoinnin tuotos, joka tulkataan/käännetään Kommentti: koodin osa, jonka kääntäjä/tulkki ohittaa ja joka mahdollisesti selittää koodin toimintaa Lause: koodin peruspalikka
käsitteitä… muuttuja skalaari, skalaarimuuttuja, skalaarioperaattori tietorakenne: lista, puu moduli
käsitteitä… Funktio: toiminnallinen kokonaisuus, joka vuorovaikuttaa pääohjelman kanssa parametreilla Editori: ohjelma/ympäristö, jossa ohjelma/koodi kirjoitetaan (esim. notepad tai emacs) Parametri(t) Kirjasto: joukko funktioita
käsitteitä Maalaisjärki: tärkee Jäsentäminen: ongelman hahmottaminen Testaus: tekeekö ohjelma, mitä oli tarkoitus Pseudokoodi: irti konkreettisesta kielestä, algoritmien havainnollistaminen Lohkokaavio: algoritmien havainnollistaminen
3. OSAKOKONAISUUKSIA OHJELMOINNISSA vaatimukset ilmiön abstrahointi algoritmit ympäristö kieli ohjelmointi testaus
Vaatimuksista yleensä lähdetään mitä halutaan haluaisimme työkalun jolla… miten käytetään vaatimusmäärittely virallinen työkalu voi olla jo valmiina!!
Ilmiön abstrahoinista poimitaan mallinnettavan ilmiön tärkeät osat Tällöin pitäisi löytyä luonnollisin paradigma informaation kulku mahdolliset funktiot (laskennan osakokonaisuudet)
Algoritmitmeista miten laskenta lopullisessa ohjelmassa menee miten laskenta moduleissa menee tietorakenteet aikavaatimukset, kompleksisuudet pseudokoodi, lohkokaavio
esimerkki lohkokaaviosta
Ympäristöstä Missä on data vuorovaikutus muiden ohjelmien kanssa missä ympäristössä ohjelmaa tarvitaan
Ohjelmointikielistä korkean vai matalan tason kieli käytettävä kieli ohjelmointikielessä (riippuu hieman paradigmasta) (Kommentointi, syntaksi)
Testauksesta tekeekö ohjelma, mitä oli vaatimuksissa virheiden etsiminen haravointi metsästys ääritapaukset
4. OHJELMOINTIPARADIGMAT miten maailmaa luonnollisesti mallinnetaan miten ohjelmoija systeemin näkee selvä prosessi alusta loppuun esim. laske lukujen mediaani jatkuva vuorovaikutus käyttäjän, jonkun ympäristön tai jonkun toisen ohjelman kanssa esim. tarkkaile anturin tilaa
Proseduraalinen ohjelmointi ohjelman toiminta pilkotaan osiin -> funktioita (=proseduureja) painopiste algoritmilla
Funktionaalinen ohjelmointi talo voitaisiin rakentaa proseduraalisesti seuraavasti: 1) laske perustus, 2) rakenna seinät, 3) tee lattia 4) pystytä katto. funktionaalisest sama määritys voisi olla talo koostuu 1) seinistä, joita perustukset tukevat, 2) lattiasta, jota perustukset tukevat sekä 3) katosta, jota seinät tukevat
Rakenteellinen ohjelmointi Ongelma ja ohjelma pilkotaan moduleiksi ja modulin laskenta funktioiksi
Olioperustainen ohjelmointi (1) tietojen ja toiminnan kasaaminen samojen vahvojen ”seinien” sisään Luokka olion prototyyppi, olio on luokan instanssi Periytyminen luokan ominaisuuksien jalostaminen Monikäyttöisyys
Olioperustainen ohjelmointi (2) jäsenfunktiot rakennin Atribuutit näkyvyysaspekti
Muita paradigmoja geneerinen ohjelmointi logiikkaohjelmointi
5. OHJELMOINTIKIELISTÄ useimmat sisältävät samanlaisen ilmaisuvoiman kysymys on yleensä käyttökohteesta, eli tarvitaanko tiettyä paradigmaa grafiikkaa, audiota erityisalan toimintoja nopeutta jne…
Perl (1) skriptikieli (esim c++ ei ole) (tulkataan) erinomainen tekstimuotoisen datan käsittelyyn (mm. säännöllinen kielioppi) myös internetohjelmointi, järjestelmien hallintaan jne.
Perl (2) eri ympäristöihin: unix/linux, windows paljon käytetty bioinformatiikassa paljon kirjastoja (esim bioperl)
6. KOODI JA SEN AJO (1) perli-skriptin (koodin) sisältävän tiedoston pääte on kontekstista ja ympäristöstä riippuen .pl, .plx, pm. vrt. c++:ssa cpp, h jne. perl-skripti ajetaan kutsumalla tulkkia ja antamalla tiedosto perl TulostaTervehdys.plx
KOODI JA SEN AJO (2) skriptin ensimmäisellä rivillä voi myös olla tulkin automaattinen kutsu (unix) #!/usr/bin/perl tällöin ohjelman ajo: TulostaTervehdys.plx esim. c++-ohjelma käännetään ja tämä tuottaa tietyssä ympäristössä ajokelpoisen tiedoston
KOODI JA SEN AJO (3) lauseet erotellaan erottimella tavallisesti ; -merkki (puolipiste) koodilohkot erotellaan yleensä {}-merkeillä (joissakin myös sisennys) tyhjiä rivejä selkeyttämiseksi sisennyksiä struktuurin hahmottamiseen kommentteja selittämiseen
7. MUUTTUJAT (1) ojelman käsittelemä tieto tallennetaan ja manipuloidaan muuttujissa muuttujan tyyppi ilmoittaa, minkä muotoista dataa sinne voidaan laittaa perl: skalaarimuuttuja on yksinkertaisin tietotyyppi (alkaa $-merkillä, loppuosa riippuu mielikuvitusta) numero tai merkkijono
MUUTTUJAT (2) muissa ohjelmointikielissä yleensä tarkemmat tietotyypit esim. C ja C++ int = kokonaisluku float = liukuluku char = merkki
MUUTTUJAT (3) esittely ja alustaminen (perl) $Nimi = ”Jussi” $ViikonpäivienLukumaara = 7; esittely ja alustaminen (C, C++, java) int ViikonpaivienLukumaara; ViikonpaivienLukumaara = 7;
MUUTTUJAT (4) vältä muuttujien nimissä muotoja testi, testi1, muuttuja, luku, jne… kirjoita mahdollisimman kuvaava nimi $TyoYhteisonJasen = ”Tytti”; yhteisön vaatimuksia (kieli, termit) $NumberOfDaysInOneMonth = 31; $file_name = ”Genes.txt”;
MUUTTUJAT (5) Perlin oletusmuuttuja $_ operaatio tehdään tälle, jos muuttujaa ei ole erikseen annettu
MUUTTUJAT (6) skalaari operaatioita,operaattoreita laskuoperaatioita: +, -, *, /, **, % merkkijonoille: .-operaattori numerovertailu: ==, !=, <, >, <=, >= merkkijonovertailu: eq, ne, lt, gt, le, ge muissa kielissä paljon samaa (paitti merkkijonon kanssa)
MUUTTUJAT (7) Debuggaus on muuttujien arvojen tutkiskelua ja ohjelmansuorituksen tarkkailua debuggerit tulostus debuggauksessa virheiden etsiminen
8. TYYLISEIKKOJA syntaksi kommentointi ei goto lauseita (ilmaisuvoima) funktioihin jakaminen moduleihin jakaminen