Opintojakson tärkein tavoite on oppia ymmärtämään abstraktion, yleisyyden ja ohjelmistokomponenttien merkitys ohjelmoinnissa ja oppia käyttämään niitä hyväksi. Opintojaksolla opitaan käyttämään ja rakentamaan ohjelmistokomponentteja. Opintojaksolla tutustutaan yleisten uudelleenkäytettävien ohjelmistokomponenttien problematiikkaan. Komponentteja rakennetaan sekä C-kielellä, jolloin käytetään ns. abstraktien tietotyyppien mallia ja C++ -kielellä, jolloin käytetään luokkamallia. Tarkoituksena on nähdä, miten C-kielellä voidaan toteuttaa yleisiä uudelleen käytettäviä komponentteja. Näiden välineiden puutteet havaitaan kokreettisesti ja omakohtaisesti. Näin opitaan perusteellisesti ymmärtämään mitä etuja olioperustainen lähestymistapa antaa perinteiseen ohjelmointikieleen nähden. C ja C++ kieliä siis verrataan toisiinsa niiden abstraktioon ja yleisyyteen tarjoamien välineiden osalta. Opintojaksolla käsitellään myös yleiseen käyttöön tarkoitetut ohjelmistokomponentit kuten listat, pinot, jonot ja puut. Algoritmien osalta käsitellään rekursio perusteellisesti. Opitaan, miten rekursiota käytetään määrittelyissä, ongelman ratkaisussa ja ohjelmointitekniikkana. Tutustutaan myös siihen, millä tavalla prosessori suorittaa rekursiivista aliohjelmaa. Opintojaksolla tutustutaan erilaisiin järjestämis- ja etsintämenetelmiin käyttäen lähestymistapana algoritmien analyysia. Myös näiden kohdalla on yhtenä tarkastelukulmana algoritmien yleisyys. Yllämainittuihin asioihin liittyen esiin tulevat lisäksi mm: template luokat, säiliöluokat, iteraattorit yms.
Yleistiedot
Sisällön
pääkohdat
Käsitellyt
asiat
KurssimateriaaliMoniste 1 ( Algoritmi ja abstraktio )
Harjoitukset
Ryhmätyöharjoitus
TenttiTentissä tutkitaan kurssilla käsiteltyjen aiheiden ymmärtäminen ja kyky niiden soveltamiseen. Opintojakson arvosana määräytyy pääsiassa kokeen perusteella (80%). Aktiivisuus labratehtävien tekemisessä vaikuttaa max 20% ( yksi askel numeroskaalassa). Tehtävien luonne noudattaa pitkälle labraharjoituksissa olleita tehtäviä, mutta labratehtävät eivät suinkaan anna suoria vastauksia kysymyksiin.
Seuraavassa muutamia tyypillisiä kysymystyyppejä. Kysymystyyppi 1) Tiettyjä reaalimaailman objekteja kuvataan seuraavilla ominaisuuksilla: ... ja niille on määritelty seuraavat operaatiot. Toteuta abstrakti tietotyyppi näille objekteille (s.o. kirjoita tietotyyppimäärittelyt ja operaatiofunktiot). Kysymystyyppi 2) Käytössäsi on abstrakti tietotyyppi xxx. Sen operaatiofunktiot ovat.... Interfacen kuvaus on tiedostossa xxx.h ja käännetty objektitiedosto on tiedostossa xxx.obj. Kirjoita ohjelma, joka tekee seuraavan tehtävän... käyttäen annettua abstraktia tietotyyppiä xxx. Kysymystyyppi 3) Käytössäsi on abstrakti tietotyyppi xxx. Sen operaatiofunktiot ovat.... Interfacen kuvaus on tiedostossa xxx.h ja käännetty objektitiedosto on tiedostossa xxx.obj. Toteuta abstrakti tietotyyppi yyy, jolla on seuraavat operaatiot... käyttäen abstraktia tietotyyppiä xxx (ADT xxx tulee siis olemaan ADT yyy:n alakomponentti). Kysymystyyppi 4) Kirjoita ohjelma, joka ratkaisee annetun probleeman rekursiivisesti. Kysymystyyppi 5) Alla on valmis ohjelma (todennäköisesti rekursiivinen). Minkä probleeman ohjelma ratkaisee tai minkä tehtävän se suorittaa. Mikä on maksimitila, joka on varattuna pinosta kerraallaan fucktiolle f. Kysymystyyppi 6) Alla on funktio, joka järjestää kokonaislukutaulukon. Mitkä muutokset funktioon tarvitaan tekemään siitä yleinen järjestämisfunktio. Yleisellä järjestämisfunktiolla tarkoitetaan funktiota, jonka lähdekoodia ei tarvitse muuttaa, kun taulukon alkion tyyppiä muutetaan vaikkapa kokonaisluvusta varaosatietueeksi tai kun järjestämiskriteeri vaihdetaan vaikka varaosan hinnan ja painon suhteeksi.
Muutamia mallikysymyksiä ja niiden vastaukset löydät näistä linkeistä.