top-down vs bottom-up ApproachAlgoritmeja suunnitellaan kahdella lähestymistavalla, jotka ovat top-down- ja bottom-up-lähestymistapa. Ylhäältä alas -lähestymistavassa monimutkainen moduuli jaetaan alamoduuleihin. Toisaalta bottom-up-lähestymistavassa aloitetaan alkeismoduuleista ja yhdistellään niitä edelleen. Algoritmin ensisijainen tarkoitus on käyttää tietorakenteeseen sisältyviä tietoja. Toisin sanoen algoritmia käytetään suorittamaan operaatioita tietorakenteiden sisällä oleville tiedoille.

Monimutkainen algoritmi jaetaan pieniin osiin, joita kutsutaan moduuleiksi, ja jakoprosessi tunnetaan nimellä modularisointi. Modularisointi vähentää merkittävästi algoritmin suunnittelun monimutkaisuutta ja tekee sen prosessista helpomman suunnitella ja toteuttaa. Modulaarinen ohjelmointi on tekniikka, jossa ohjelma suunnitellaan ja kirjoitetaan funktioiden muodossa, jossa jokainen funktio eroaa toisistaan ja toimii itsenäisesti. Funktioiden sisältö on tavallaan yhtenäinen, ja moduulien välinen kytkentä on vähäistä.

Sisältö: Top-down Approach Vs Bottom-up Approach

    1. Vertailukaavio
    2. Määritelmä
    3. Keskeiset erot
    4. Johtopäätös

Vertailukaavio

Vertailun lähtökohdat Top-down Approach Bottom-up Approach
Basic Purkaa massiivinen ongelma pienempiin osaongelmiin. Ratkaisee perustavanlaatuisen matalan tason ongelman ja integroi ne suuremmaksi ongelmaksi.
Prosessi Alamoduulit analysoidaan yksinäisesti. Tarkastellaan, mitä tietoja on kapseloitava, ja implikoidaan informaation kätkemisen (information hiding) konsepti.
Kommunikaatio Ei vaadita ylhäältä-alas-lähestymistavassa. Tarvitaan tietty määrä kommunikaatiota.
Redundanssi Sisältää tarpeetonta tietoa. Redundanssi voidaan poistaa.
Ohjelmointikielet Rakenne/proseduuripainotteiset ohjelmointikielet (esim. C) noudattavat ylhäältä alaspäin suuntautuvaa lähestymistapaa. Objektipainotteiset ohjelmointikielet (kuten C++, Java, jne.) noudattavat alhaalta ylöspäin suuntautuvaa lähestymistapaa.
Käytetään pääasiassa Moduulien dokumentoinnissa, testitapausten luomisessa, koodin toteuttamisessa ja virheenkorjauksessa. Testauksessa

Ylhäältä alas -lähestymistavan määritelmä

Ylhäältä alas -lähestymistapa periaatteessa jakaa monimutkaisen ongelman tai algoritmin useisiin pienempiin osiin (moduuleihin). Näitä moduuleja puretaan edelleen, kunnes tuloksena oleva moduuli on olennaisesti ymmärrettävä perusohjelma, jota ei voida edelleen purkaa. Kun tietty modulaarisuuden taso on saavutettu, moduulien purkaminen lopetetaan. Ylhäältä alas -lähestymistapa on vaiheittainen prosessi, jossa suuri ohjelmamoduuli hajotetaan yksinkertaisempiin ja pienempiin moduuleihin ohjelman organisoimiseksi ja koodaamiseksi tehokkaalla tavalla. Ohjausvirta on tässä lähestymistavassa aina alaspäin suuntautuva. Ylhäältä alas -lähestymistapa on toteutettu C-ohjelmointikielessä funktioiden avulla.

Ylhäältä alas -menetelmä alkaa siis abstraktista suunnittelusta, ja sitten tätä suunnittelua tarkennetaan peräkkäin konkreettisempien tasojen luomiseksi, kunnes ei enää tarvita lisäparannuksia.

Alhaalta ylös -lähestymistavan määritelmä

Alhaalta ylös -lähestymistapa toimii juuri päinvastaisella tavalla kuin ylhäältä alas -lähestymistapa. Aluksi siinä suunnitellaan kaikkein perustavanlaatuisimmat osat, jotka sitten yhdistetään korkeamman tason moduulin muodostamiseksi. Tämä osamoduulien ja moduulien yhdistäminen korkeamman tason moduuliin suoritetaan toistuvasti, kunnes saadaan haluttu täydellinen algoritmi.

Alhaalta ylös -lähestymistapa toimii abstraktiotasojen avulla. Alhaalta ylös -lähestymistavan ensisijainen sovellus on testaus, sillä jokainen perusmoduuli testataan ensin ennen sen yhdistämistä suurempaan moduuliin. Testauksessa käytetään tiettyjä matalan tason funktioita.

Top-down- ja Bottom-up-lähestymistavan keskeiset erot

  1. Top-down-lähestymistapa hajottaa suuren tehtävän pienempiin osatehtäviin, kun taas bottom-up-lähestymistapa valitsee ensin tehtävän eri perusosien suoran ratkaisun, jonka jälkeen yhdistetään nuo osat kokonaiseksi ohjelmaksi.
  2. Jokaista alamoduulia käsitellään ylhäältä alaspäin suuntautuvassa lähestymistavassa erikseen. Sitä vastoin bottom-up-lähestymistapa toteuttaa tiedon kätkemisen käsitteen tarkastelemalla kapseloitavaa tietoa.
  3. Top-down-lähestymistavassa eri moduulit eivät vaadi paljoa kommunikointia. Sitä vastoin bottom-up-lähestymistapa tarvitsee vuorovaikutusta erillisten perusmoduulien välillä, jotta ne voidaan yhdistää myöhemmin.
  4. Top-down-lähestymistapa voi tuottaa redundanssia, kun taas bottom-up-lähestymistapa ei sisällä redundanttia tietoa.
  5. Proseduraaliset ohjelmointikielet, kuten Fortran, COBOL ja C, noudattavat top-down-lähestymistapaa. Sen sijaan oliokeskeiset ohjelmointikielet, kuten C++, Java, C#, Perl ja Python, noudattavat alhaalta ylös -lähestymistapaa.
  6. Alhaalta ylös -lähestymistapaa käytetään ennen kaikkea testauksessa. Sitä vastoin ylhäältä alas -lähestymistapaa hyödynnetään moduulin dokumentoinnissa, testitapausten luomisessa, virheenkorjauksessa ja niin edelleen.

Johtopäätös

Ylhäältä alas -lähestymistapa (top-down approach) ja alhaalta ylös -lähestymistapa (bottom-up approach) ovat algoritmisuunnittelumenetelmiä, joissa ylhäältä alas -lähestymistapa (top-down approach) on perinteinen lähestymistapa, jossa järjestelmä puretaan korkean tason spesifikaatioiden pohjalta matalan tason spesifikaatioiden pohjalta. Toisaalta alhaalta ylös -lähestymistapa on tehokkaampi ja toimii käänteisellä tavalla, jossa alkeiskomponentit suunnitellaan ensin ja edetään sitten korkeammalle tasolle.

Ylhäältä alas -lähestymistapa painottaa alamoduulien eristämistä (tarkoittaa vähäistä kytkentää moduulien välillä), kun taas se jättää huomiotta kommunikaation tunnistamisen ja uudelleenkäytettävyyden käsitteen. Kun taas alhaalta ylös -lähestymistavassa tiedon kätkeminen ja uudelleenkäytettävyys ovat keskeisiä tekijöitä.