Näissä harjoituksissa on tarkoitus harjoitelle isomman(useampi kuin yksi tiedosto)
projektin käsittelyä C++BuilderX-ympäristössä. Sekä makefilen tekoa
Unix/Linux-ympäristössä. Jos C++BuilderX kysyy rekisteröintiä
katso viime pääteohjaukset.
1. C++BuilderX ja usean tiedoston sisältävät projektit.
Harjoitellaan ohjelman kääntämistä, joka sisältää useita tiedostoja.
- Luo uusi projekti. Anna projektille nimeksi kassa.
- Kopioi
kassa2.cpp ja
mjonot.c samaan hakemistoon projektisi kanssa.
- Lisää
kassa2.cpp ja
mjonot.c projektiisi(Project->Add Files).
- Avaa
kassa2.cpp ja katso mitä otsikkotiedostoja(.h) se tarvitsee.
Hae tarvittavat otsikkotiedostot
täältä ja kopioi ne samaan hakemistoon projektisi kanssa.
- Avaa
mjonot.c ja tee sama kuin edellä.
- Kokeile kääntää projekti.
2. Ohjelman hajoittaminen useampaan tiedostoon.
Isommissa projekteissa on hyödyllistä jakaa ohjelma useampaan tiedostoon, jolloin
koodia on selkeämpi lukea ja jos projektin parissa työskentelee useampi ihminen,
niin voivat eri ihmiset työstää eri osia ohjelmasta. Näin vältytään tilanteelta,
jossa kaksi ihmistä on editoinut samaa tiedostoa saman aikaisesti. Harjoitellaan
nyt yksinkertaisen ohjelman hajottamista useampaan tiedostoon.
- Tee uusi projekti ja anna sille nimeksi tietokanta.
- Avaa tietokantaiso.cpp C++BuilderX:llä.
- Lisää projektiin uudet tiedostot alkio.h, alkiot.h, tietokanta.h,
alkiot.cpp, alkio.cpp ja tietokanta.cpp
- Hajoita tietokantaiso.cpp näihin
tiedostoihin siten, että jokaiseen .h tiedostoon tulee vastaava luokka
ja .cpp tiedostoon luokan metodien toteutus. Jokaiselle luokalle on
siis oma tiedostopari .cpp ja .h.
Huom. On hyvä lisätä jokaisen
otsikkotiedoston(.h) alkuun ehto sille, että onko koodi käyty jo
läpi. Esimerkiksi tiedostoon alkio.h:
#if !defined(alkio_H)
#define alkio_H
//tähän väliin ohjelmakoodi
#endif
Tällä varmistetaan ettei tule ongelmia, jos otsikkotiedosto jostain syystä
tulisi sisällytettyä useammin kuin kerran.
- Kokeile lopuksi kääntää ohjelma ja testaa sitä.
3. Unix/Linux ja makefile.
- Siirrä edellisessä tehtävässä tekemäsi ohjelma jollekkin atk-keskuksen
Linux-koneista(itu, silmu, verso) ssh file transfer-ohjelmalla.
TAI
Ota ssh-yhteys johonkin atk-keskuksen Linux-koneista ja ota tiedostot alkio.cpp,
alkiot.cpp, tietokanta.cpp,
alkio.h, alkiot.h,
tietokanta.h wget-ohjelmalla. Wget toimii käskyllä
wget URL. Eli esim. wget http://www.mit.jyu.fi/vesal/kurssit/ohjelmointi2004/paate/alkio.cpp jne.
- Yritä kääntää ja linkittää ohjelma käyttäen g++-kääntäjää.
Katso tästä
ohjeita miten käännetään useamman tiedoston ohjelma Unix/Linux-ympäristössä.
Ensiksi siis pitää kääntää .cpp tiedostot objektitiedostoiksi ja sen jälkeen
linkittää ne.
- Testaa ohjelmaa.
- Kirjoita nyt makefile ohjelmalle siten, että kirjoittamalla make -f tietokanta.mak
ohjelma kääntyy ja linkittyy ajettavaksi ohjelmaksi tietokanta. Voit käyttää
mitä tahansa editoria(esim. pico, emacs, vim). Ohjeita voit taas katsoa
tästä.
Tee makefileen myös clean-optio, joka poistaa käännetyn ohjelman,
objektitiedostot ja mahdollisen core-tiedoston.
- Testaa makefilen toimintaa ja aja syntynyt ohjelma käskyllä ./tietokanta.
Testaa lopuksi vielä clean-optiota käskyllä make -f tietokanta.mak clean.
Tarkasta ls-käskyllä, että käännetty ohjelma, objektitiedostot ja
mahdollinen core-tiedosto hävisivät.
4. C++ ja perintä.
- Tee uusi projekti ja anna nimeksi perinta.
- Olet saanut käyttöösi tiedoston henkilo.h.
Lisää projektiin uusi .cpp
tiedosto ja anna sille nimeksi henkilo.cpp. Lisää tähän tiedostoon seuraava
main funktio:
int main(void)
{
cOpiskelija p=cOpiskelija("Kalle",1979,75); //nimi,syntymävuosi,opintoviikot
cTyontekija t=cTyontekija("Teppo",1970);
p.protestoi();
t.protestoi();
p.tulosta();
t.tulosta();
t.elake();
return 0;
}
Ohjelman pitäisi tulostaa seuraava:
Opintotuki on liian pieni!
Verot ovat liian korkeat!
Kalle 1979 75ov
Teppo 1970
Teppo pääsee eläkkeelle 31 vuoden päästä
Täydennä ohjelma toimivaksi tekemällä cOpiskelija- ja cTyontekija-luokat. Älä
muuta main funktiota ja kaiken tulostuksen pitää tapahtua protestoi(),
tulosta() ja elake()-metodeissa. Käytä ohjelmassasi henkilo.h-tiedostoa.
Huomaa että cHenkilo on abstraktiluokka. Siitä siis ei voida tehdä esiintymää,
koska siinä on pelkkä virtuaalinen(pure virtual) metodi protestoi().
Apua saat tästä,
sekä luentomoniseesta.
5. STL:n tietorakenteet.
- Tee uusi projekti ja anna nimeksi vaikka rekisteri. Tee uusi .cpp tiedosto ja anna
sille nimeksi kurssit.cpp.
- Olet saanut käyttöösi tiedoston kurssi.h ja main funktion:
int main(void)
{
cKurssit kurssit;
cKurssi ohj2("Ohjelmointi 2",4);
cKurssi alg1("Algoritmit 1",1);
cKurssi vema("Vektorit ja Matriisit",4);
kurssit.lisaa(ohj2);
kurssit.lisaa(alg1);
kurssit.lisaa(vema);
kurssit.tulosta();
kurssit.poista(alg1);
cout<<endl;
kurssit.tulosta();
return 0;
}
Täydennä ohjelma toimivaksi tekemällä cKurssit-luokka. Käytä ohjelmassasi
kurssi.h-tiedostoa. Käytä cKurssit-luokassa jotain STL:n
valmista tietorakennetta. Voit katsoa toisen tehtävän ohjelmasta vinkkejä
tai apua saat myös luentomonisteesta.