UML näide: Positiivsete arvude massiivi salvestamine

Ülesande püstitus

Koostada UML tegevusdiagramm järgmisele ülesandele

  • Kasutajalt loetakse N täisarvu
  • Leida ja salvestada kõik positiivsed täisarvud eraldi massiivi ning need väljastada.

Küsimusi diskussiooniks

K1: Kust tuleb N?

Antud ülesande puhul on N määramata suurusega konstant, mis kirjeldab arvude hulka mida meie lahendus töötlema peaks. Olenevalt ülesandest võib olla tegu olulise suurusega, mis tuleks kliendilt ehk tellijalt järele pärida.

Meie ülesande raames saame käsitleda N-i kui tundmatut konstanti ning kuniks me programmi realiseerima ei hakka saame me ka selle jätta määramata. Kui soovid proovida programmi läbi kirjutada määra selleks mõni väiksem täisarv.

K2: Mitut massiivi ülesande lahendamiseks vaja on?

Antud ülesannet saab lahendada  ühe või kahe massiiviga. Mõlemal on omad eelised ning puudujäägid.

Ühe massiiviga lahenduse puhul saame me kätte püstituses nõutud tulemuse, kuid meil puudub võimalus taasesitada kogu sisestatud massiivi.

Kahe massiiviga lahenduse puhul tekib meil võimalus taasesitada kogu sisestatud jada, kuid kõige selle meelespidamine vajab täiendavat programmi loogikat ning suurendab ressursside kasutust.

K3: Mis on massiivi(de) pikkus(ed)?

Kuna tegu on pelgalt algoritmiga, siis massiivi suurust algväärtustama ei pea. Küll aga kui tahta võimalikult lähedast mõtlemist C keelsele koodile võib kasutada massiivi pikkuseks konstanti N. Pikkus on sama olenemata kas tegu on ühe või kahe massiiviga lahendusega – “Halvimal juhul” on kõik sisestatud numbrid positiivsed ning vajavad salvestamist.

K4: Kas 0 on positiivne täisarv?

Tegu on jällegi olulise küsimusega, mis tasub alati kliendilt üle täpsustada. Tegu on sageli kriitilise piirjuhuga.

Antud ülesande lahendamisel vaatame juhtu kus positiivseteks loeme kõik nullist suuremad arvud.

Näidislahendus ühe massiiviga

Näidise puhul tasub tähele panna, et tegu ei ole ainuõige lahendusega. Näiteks:

  • Massiivi luues võib ka selle suuruse fikseerida, kuid ei pea. Lahendus peaks olema keelest sõltumatu ja arendaja enda mure kuidas realiseerida. Oluline on, et algoritm on loetav.
  • Arusaadava sõnastusega võib jätta loenduri i kasutamata andmete sisestuse osas ning asendada need täielikult tekstiliste selgitustega.

Programmeerimise aine raames jääb oluliseks näidata massiivide indekseerimist!

Näidislahendus kahe massiiviga

Selle näidise raames eraldame me sisestuse ja töötluse üksteisest, muutes lahenduse klassikalisemaks “sisestus-töötlus-väljastus” tüüpi algoritmiks. Ühest küljest annab tükeldamine parema modulaarsuse ja korduvkasutuse võimalused, kuid samal ajal nõuab rakenduselt ka suuremat ressursikasutust.