decomposition
Määritelmä
Hajauttaminen (engl. decomposition) on ajattelun ja suunnittelun perusliike, jossa monimutkainen kokonaisuus — ongelma, järjestelmä tai prosessi — jaetaan osiin, joita voidaan tarkastella, ymmärtää tai ratkaista erikseen. Sana tulee latinan verbistä decomponere ("erottaa osiin").
Hajauttaminen on yksi tietojenkäsittelyn, tekniikan ja systeemiajattelun perustyökaluista. Sen ydinajatus on, että kokonaisuus voidaan ymmärtää osiensa kautta, kunhan osien väliset vuorovaikutukset tunnistetaan. Se on abstraction:in vastapari: siinä missä abstraktio nostaa yleistyksiä, hajauttaminen erittelee yksityiskohtia.
Hajauttamisen tyypillisiä muotoja:
- Funktionaalinen hajauttaminen — järjestelmä jaetaan toimintoihin (syöte, käsittely, tuloste).
- Rakenteellinen hajauttaminen — järjestelmä jaetaan komponentteihin (käyttöliittymä, tietokanta, logiikka).
- Ongelma-analyyttinen hajauttaminen — pääongelma jaetaan alaongelmiin, kunnes kukin on ratkaistavissa.
- Aikajänteeseen perustuva hajauttaminen — prosessi jaetaan vaiheisiin (suunnittelu, toteutus, testaus, käyttöönotto).
Hajauttamiseen liittyy keskeinen riski: osat eivät välttämättä summaudu takaisin kokonaisuudeksi. Tätä ilmiötä systeemiajattelu kutsuu emergence:ksi — kokonaisuuden ominaisuudet eivät palaudu yksinomaan osiensa ominaisuuksista. Hyvä hajauttaminen säilyttää näkyvissä myös osien väliset interconnection:it ja coupling:in.
Alkuperä
Hajauttaminen on vanha ajattelun periaate. Renée Descartesin Discourse on the Method (1637) esitti sen säännön muodossa: "jakaa kutakin vaikeutta niin moneen osaan kuin mahdollista ja kuin tarvitaan sen ratkaisemiseksi." Tämä cartesiolainen hajauttaminen on länsimaisen tieteen ja tekniikan perusta.
1900-luvulla hajauttaminen sai tieteellisen muotonsa. Reductionism tieteenfilosofisena ohjelmana nojasi hajauttamiseen: selittää ilmiöitä palauttamalla ne peruskomponentteihinsa. Vastareaktiona syntynyt holism ja systeemiajattelu korostivat, ettei hajauttaminen yksin riitä — tarvitaan myös synteesiä.
Ohjelmistotekniikassa hajauttaminen formalisoitui structured analysis -menetelmässä (Yourdon, DeMarco 1970-luvulla) ja top-down design -periaatteessa. Niklaus Wirth esitti kuuluisan kaavan Algorithms + Data Structures = Programs (1976), joka on hajauttamisen tiivistys. Modularity ja modularity ovat hajauttamisen suoraa soveltamista.
Systeemiajattelussa Donella Meadows ja Dennis Meadows korostivat, että hajauttaminen on välttämätöntä, mutta sen on aina oltava tietoinen valinta: mitä jaetaan, miten, ja mitkä vuorovaikutukset säilytetään näkyvissä.
Yhteydet muihin käsitteisiin
- abstraction — hajauttamisen vastapari.
- modularity — hajauttamisen periaatteen sovellus: järjestelmä jaetaan itsenäisiin moduuleihin.
- hierarchy — hajauttaminen tuottaa usein hierarkkisia rakenteita.
- reductionism — äärimmäinen hajauttaminen perusosiin.
- holism — vastapaino: kokonaisuus ei palaudu osiin.
- emergence — ominaisuuksia, jotka katoavat liiallisessa hajauttamisessa.
- coupling — osien välinen kytkentä, joka on hajauttamisen suurin haaste.
- subsystem — hajauttamisen tuottama osakokonaisuus.
- modeling — hajauttaminen on usein mallintamisen ensimmäinen vaihe.
Missä oppitunneissa käsitellään
Käsite esitellään Ongelman hajauttaminen -oppitunnilla, jossa käydään läpi Descartesin menetelmä ja sen sovellukset. Syventävä käsittely Modulaarinen suunnittelu -oppitunnilla, jossa hajauttaminen yhdistetään modularity:iin ja coupling:iin.
Lähteet
Renée Descartes — Discourse on the Method (1637). Edward Yourdon & Larry Constantine — Structured Design (1979). Niklaus Wirth — Algorithms + Data Structures = Programs (1976). Donella Meadows — Thinking in Systems: A Primer (2008). Herbert Simon — The Sciences of the Artificial (1969), hajauttamisen rajat.
Aiheeseen liittyy
- decomposition — tämä käsite
- abstraction
- modularity
- hierarchy
- reductionism
- holism
- emergence
- coupling
- modeling