Pääteohjaus C2

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 (tai C++Builder 2005) ja usean tiedoston sisältävät projektit.

Harjoitellaan ohjelman kääntämistä, joka sisältää useita tiedostoja.

  1. Luo uusi projekti. Anna projektille nimeksi kassa.
  2. Kopioi kassa2.cpp ja mjonot.c samaan hakemistoon projektisi kanssa.
  3. Lisää kassa2.cpp ja mjonot.c projektiisi(Project->Add Files).
  4. Avaa kassa2.cpp ja katso mitä otsikkotiedostoja(.h) se tarvitsee. Hae tarvittavat otsikkotiedostot täältä ja kopioi ne samaan hakemistoon projektisi kanssa.
  5. Avaa mjonot.c ja tee sama kuin edellä.
  6. 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.

  1. Tee uusi projekti ja anna sille nimeksi tietokanta.
  2. Avaa tietokantaiso.cpp C++BuilderX:llä.
  3. Lisää projektiin uudet tiedostot alkio.h, alkiot.h, tietokanta.h, alkiot.cpp, alkio.cpp ja tietokanta.cpp
  4. 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.
  5. Kokeile lopuksi kääntää ohjelma ja testaa sitä.

3. Unix/Linux ja makefile.

  1. 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.
  2. 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.
  3. Testaa ohjelmaa.
  4. 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.
  5. 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ä.

  1. Tee uusi projekti ja anna nimeksi perinta.
  2. 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.

  1. Tee uusi projekti ja anna nimeksi vaikka rekisteri. Tee uusi .cpp tiedosto ja anna sille nimeksi kurssit.cpp.
  2. 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.

Santtu Salmi 28.4.2004