Ohjelmointi

Yhdistyminen, yhdistäminen ja kokoonpano OOP: ssa selitti

Unified Modeling Language (UML) on tosiasiallinen standardi olio-järjestelmien mallintamiseen. UML: ssä on viisi erilaista suhdetyyppiä: assosiaatio, aggregaatio, koostumus, riippuvuus ja perintö. Tämä artikkeli esittelee keskustelun näistä kolmesta ensimmäisestä käsitteestä ja jättää loput toiselle blogiviestille.

Assosiaatio olio-ohjelmoinnissa

Assosiaatio on semanttisesti heikko suhde (semanttinen riippuvuus) muuten toisistaan ​​riippumattomien objektien välillä. Yhdistys on kahden tai useamman objektin välinen "käyttävä" suhde, jossa esineillä on oma elinikä eikä omistajaa ole.

Kuvittele esimerkiksi lääkärin ja potilaan suhde. Lääkäri voi olla yhteydessä useisiin potilaisiin. Samaan aikaan yksi potilas voi käydä useiden lääkäreiden luona hoitoa tai kuulemista varten. Jokaisella näistä esineistä on oma elinkaarensa, eikä omistajaa tai vanhempaa ole. Assosiointisuhteeseen kuuluvat objektit voidaan luoda ja tuhota itsenäisesti.

UML: ssä assosiaatio-suhdetta edustaa yksi nuoli. Assosiaatio-suhde voidaan esittää yksi-yhteen, yksi-moniin tai monet-moniin (tunnetaan myös nimellä kardinaalisuus). Pohjimmiltaan kahden tai useamman objektin välinen assosiaatio-suhde merkitsee niiden välistä kommunikaatioreittiä (jota kutsutaan myös linkiksi), jotta yksi esine voi lähettää viestin toiselle. Seuraava koodinpätkä kuvaa kuinka kaksi luokkaa, BlogAccount ja BlogEntry, liitetään toisiinsa.

julkisen luokan BlogAccount

   {

yksityinen BlogEntry [] blogEntries;

// Muut BlogAccount-luokan jäsenet

   }

julkisen luokan BlogEntry

   {

Int32 blogId;

merkkijono kuvateksti;

merkkijono teksti;

// Muut BlogEntry-luokan jäsenet

   }

Yhdistäminen olio-ohjelmoinnissa

Yhdistäminen on kahden tai useamman objektin välinen erikoistunut yhdistämismuoto, jossa kullakin objektilla on oma elinkaarensa, mutta on olemassa myös omistusoikeus. Yhdistäminen on tyypillinen kokonaisuus / osa tai vanhempien / lasten suhde, mutta se voi tai ei välttämättä tarkoita fyysistä eristystä. Yhdistelmäsuhteen olennainen ominaisuus on, että koko tai vanhempi (ts. Omistaja) voi olla olemassa ilman osaa tai lasta ja päinvastoin.

Esimerkiksi työntekijä voi kuulua yhteen tai useampaan osastoon organisaatiossa. Jos työntekijän osasto kuitenkin poistetaan, työntekijän esine ei tuhoutuisi, vaan elää edelleen. Huomaa, että aggregaattiin osallistuvien objektien väliset suhteet eivät voi olla vastavuoroisia - toisin sanoen osasto voi "omistaa" työntekijän, mutta työntekijä ei omista osastoa. Seuraavassa koodiesimerkissä yhdistämissuhde on ilmeinen BlogAuthor- ja BlogAccount-luokkien välillä.

julkisen luokan BlogAuthor

   {

yksityinen Int32 authorId;

yksityinen merkkijono etunimi;

yksityinen merkkijono sukunimi;

// Muut BlogAuthor-luokan jäsenet

   }

julkisen luokan BlogAccount

   {

yksityinen BlogEntry [] blogEntries;

// Muut BlogAccount-luokan jäsenet

   }

Kokoonpano esitetään yleensä UML: ssä käyttäen linjaa, jossa ontto timantti. Yhdistämisen tavoin yhdistäminen voi liittyä osallistuvien objektien väliseen suhteeseen yksi yhteen, yksi moniin tai monet moniin. Suhteessa "yksi moniin" tai "moniin moniin" voimme sanoa, että se on turha suhde.

Sommittelu olio-ohjelmoinnissa

Koostumus on erikoistunut yhdistämismuoto. Jos vanhempi esine tuhoutuu, myös lapsiobjektit lakkaavat olemasta. Sommittelu on itse asiassa vahva aggregaatiotyyppi, ja sitä kutsutaan joskus "kuoleman" suhteeksi. Esimerkiksi talo voi koostua yhdestä tai useammasta huoneesta. Jos talo tuhoutuu, tuhotaan myös kaikki huoneeseen kuuluvat huoneet. Seuraava koodinpätkä kuvaa kahden luokan, talon ja huoneen, sommittelusuhdetta.

julkisen luokan talo

{

oma huone;

julkinen talo()

   {

huone = uusi huone ();

   }

}

Yhdistämisen tavoin sommittelu on myös kokonaisuus / osa tai vanhemman / lapsen suhde. Kuitenkin koostumuksessa osan tai lapsen elinkaarta ohjaa koko tai vanhempi, joka sen omistaa. On huomattava, että tämä ohjaus voi olla joko suora tai transitiivinen. Eli vanhempi voi olla suoraan vastuussa lapsen luomisesta tai tuhoamisesta tai vanhempi voi käyttää jo luotua lasta. Vastaavasti vanhemman objekti saattaa siirtää valvonnan jollekin toiselle vanhemmalle tuhoamaan lapsiobjektin. Sommittelu esitetään UML: ssä käyttäen viivaa, joka yhdistää objektit kiinteällä timantilla objektin päässä, joka omistaa toisen objektin.

Toivon, että tämä keskustelu yhdistämisestä, yhdistämisestä ja sävellyssuhteista on auttanut sinua ymmärtämään, miten nämä kolme käsitettä eroavat toisistaan. Muista, että yhdistäminen ja koostumus ovat molemmat assosiaatioryhmiä. Sekä yhdistelmänä että koostumuksena yhden luokan esine voi olla toisen luokan objektin omistaja. Sekä yhdistelmänä että koostumuksena lapsiobjektit kuuluvat yksinhuoltajaobjektiin, toisin sanoen niillä voi olla vain yksi omistaja.

Lopuksi, aggregaatiosuhteessa vanhempien ja lapsiobjektien elinkaaret ovat riippumattomia. Sävellyssuhteessa vanhemman kohteen kuolema tarkoittaa myös sen lasten kuolemaa.

$config[zx-auto] not found$config[zx-overlay] not found