Tentin tekstisisältö

TIE-02400 Ohjelmoinnin tekniikat - 23.09.2015

Tentin tekstisisältö

Teksti on luotu tekstintunnistuksella alkuperäisestä tenttitiedostosta, joten se voi sisältää virheellistä tai puutteellista tietoa. Esimerkiksi matemaattisia merkkejä ei voida esitää oikein. Tekstiä käytetään pääasiassa hakutulosten luomiseen.

Alkuperäinen tentti
TIE-02400 Ohjelmoinnin tekniikat Tentti 23.9.2015

TIE-02400 Ohjelmoinnin tekniikat

(Matti Rintala)

Tentti 23.9.2015

Tentissä ei saa käyttää ylimääräistä kirjallista materiaalia, laskimia, tietokoneita tai muita lunttausvälineitä.
Muutama sana tenttivastauksen kirjoittamisesta:

 

+ Mieti etukäteen esim. ranskalaisilla viivoilla vastauksesi pääkohdat ja lajittele ne johdonmukaisen järjestykseen — älä
kirjoita yhteen pötköön kaikkea mieleen tulevaa, se on varma tapa unohtaa olennaista.

 

2. Muista vastata kaikkiin tehtävän kysymyksiin, täysiä pisteitä ei voi saada jos kaikkiin kysyttyihin asioihin ei ole vastattu.
3. Jos vastaus vaatii ohjelmakoodin kirjoittamista, sen ei tarvitse olla pilkulleen syntaksiltaan oikein.

 

 

1. Termit

Selitä (max. 6 riviä/kohta) seuraavat käsitteet ja mitä hyötyä/haittaa niistä on.

Älä selitä niistä pelkkää syntaksia tms, vaan kerro etupäässä, mitä ko. käsitteet
tarkoittavat.

a) Yksikkötestaus (unit testing)
b) Ot:n "signaalit"ja "slotit"(signals and

e) Haarat versionhallinnassa
slots in Rt) (branches)

d) Luokkainvariantti (class invariant)

c) Keskeytyskohta (breakpoint) f) CH:n nimiavaruus (namespace) sssusa

2. Periytyminen.

a) Mitä on periytyminen? Luettele 4 mielestäsi olennaisinta periytymiseen
liittyvää termiä ja selitä jokaisesta 2-3 lauseella, mitä termi tarkoittaa.

b) Mitä ovat rajapintaluokat (interface classes) ja miten ne eroavat tavallisista
luokista? Mihin niitä voi käyttää ja miksi niitä tarvitaan?

c) Miten periytyminen vaikuttaa sopimussuunnittelussa? (esi- ja jälkiehdot,
luokkainvariantti)

3. Modulaarisuus. Vastaa lyhyehkösti ja ytimekkäästi, mutta kuitenkin koko
kysymykseen.

a) Millä tavoin poikkeukset ja niitä käyttävä virheenkäsittely helpottaa
modulaarisuutta eli sitä, että ohjelma voidaan jakaa toisistaan mahdollisimman
riippumattomiin osiin?

b) Mitä on sopimussuunnittelu? Miten sopimussuunnittelu auttaa modulaa-

risuutta? Mitä hyötyä siitä saadaan ohjelman jakamisessa riippumattomiin
osiin?

c) Entä miten periytyminen helpottaa modulaarisuuden saavuttamista?

 
 

TIE-02400 Ohjelmoinnin tekniikat

4.

11
13
15
17
19
21
23
25
27
29

31

35
37

39

Koodinlukutehtävä

Tentti 23.9.2015

a) Alla oleva listaus kuvaan yksinkertaisen luokan, joka käsittelee etu- ja

sukunim.
puuttuu. Kirjoita puuttuvat osat.

 

Siinä on kerrottu osa operaatioiden esi- ja jälkiehdoista, mutta osa

b) Mitä virheitä niistä löydät valmiina annetuista esi- ja jälkiehdoista (koodiin
verrattuna) ja miten ne korjaisit? Huom, saat koskea vai esi- ja jälkiehtoihin, et

itse koodiin.

o) Kerro jokaisesta operaatiosta, minkä poikkeustakuun se tarjoaa ja miksi.

Tässä tehtävässä saa olettaa, että string: :

length ei heitä poikkeuksia ja että

muut käytetyt string:n operaatiot jättävät merkkijonon ennalleen, jos heittävät

 

 

// Tanne, koska viim. nimi ei lopu sanavaliin
return pituus;

J

// Esiehto: s ei ole tyhja merkkijono

// Jalkiehto: Sukunimi on vaihdettu annetuksi
// Poikkeukset: ????

void vaihda sukunimi(std::string const& s)

(

delete sukunimi ; sukunimi = nullptri;

sukunimi = new std::string(s);

// Esiehto:
// Jalkiehto: ????
// Poikkeukset: ????
std::string kokonimi ()
(

return *etunimet + '

J

277?

* + *sukunimi ;

// Esiehto:
// Jalkiehto: etunimi s lisatty muiden peraan
// Poikkeukset: muistin loppuminen

void lisaa etunimi (std::string const& s)

(

277?

if (etunimet == nullptr) (
etunimet = new std::string(s);
) else (
etunimet ->push back(' '); // Vali
etunimet ->append(s); // Etunimi
)
)

private:

tring* etunimet ;
tring* sukunim

 

poikkeuksen.
include <string> 41
include <stdexcept>
43
class Nimi
( 45
public:
/| Esiehto: Ei ole 47
// Jalkiehto: Olion etu- ja sukunimet
11 alustettu tyhjiksi 49
/| Poikkeukset: Ei tule
Nimi () : etunimet=(nullptr), sukunimi (SallptrY/ Tee kopio
(
] 53
// Esiehto: Ei ole 55
/| Jalkiehto: Olio siivottu
// Poikkeukset: Ei tule 57
-Nimi ()
( 59
)
61
// Esiehto:
// Jalkiehto: palauttaa n:nnen etunimen 63
|] — pituuden
[| Poikkeukset: ???? 65
unsigned int etunimen pituus(int n) const
( // Lasketaan etunimien pituuksia, 67
// lopetetaan n:nnen jalkeen
unsigned int pituus = 0; 69
for (unsigned int i 0;
1 < etunimet ->length(); ++i) 71
i
if (etunimet ->at(i) ==! ') 73
( // Etunimi loppui. Palaa, jos n:s,
/| muuten siirrytaan seuraavaan 75
17 (--n == 0) ( return pituus; )
else ( pituus = 0; )
J
else ( ++pituus; )

 


Käytämme evästeitä

Tämä sivusto käyttää evästeitä, mukaanlukien kolmansien puolten evästeitä, vain sivuston toiminnan kannalta välttämättömiin tarkoituksiin, kuten asetusten tallentamiseen käyttäjän laitteelle, käyttäjäistuntojen ylläpitoon ja palvelujen toiminnan mahdollistamiseen. Sivusto kerää käyttäjästä myös muuta tietoa, kuten käyttäjän IP-osoitteen ja selaimen tyypin. Tätä tietoa käytetään sivuston toiminnan ja tietoturvallisuuden varmistamiseen. Kerättyä tietoa voi päätyä myös kolmansien osapuolten käsiteltäväksi sivuston palvelujen tavanomaisen toiminnan seurauksena.

FI / EN