Yhdistelmä vs. koostumus
On helmikuu 12, 2021 by adminYmmärrän, mikä koostumus on OOP: ssa, mutta en pysty saamaan selvää käsitystä aggregaatiosta. Voiko joku selittää?
Vastaa
Yksinkertaiset säännöt:
- A ”omistaa” B = Koostumus: B: llä ei ole merkitystä tai tarkoitusta järjestelmässä ilman A: ta.
- A ”käyttää” B = aggregaatiota: B esiintyy A: sta riippumatta (käsitteellisesti)
Esimerkki 1:
Yritys on ihmisryhmä. Yritys on koostumus tileistä. Kun yritys lopettaa liiketoiminnan, sen tilit lakkaavat olemasta, mutta sen ihmiset ovat edelleen olemassa.
Esimerkki 2: (hyvin yksinkertaistettu)
Tekstieditori omistaa puskurin (kokoonpano). Tekstieditorissa käytetään tiedostoa (yhdistäminen). Kun tekstieditori suljetaan, puskuri tuhoutuu, mutta itse tiedostoa ei tuhota.
Kommentit
- Joten auto on aggregaatti tai sen osien kokoonpano?
- Ja miten aggregaatio eroaa kaikista muista kahden tyyppisten entiteettien välisistä suhteista?
- @reinierpost todellisuudessa auto on osien ja osien yhdistäminen on yksinkertaisesti molekyylien aggregaatiota … mallissa kaikki riippuu kuitenkin vaatimuksistasi. Onko tärkeää kohdella moottoria erillisenä kokonaisuutena, jotta voit seurata sen käyttöikää autosta riippumatta? Voitteko käyttää samaa moottoria uudelleen toisessa autossa? Jos näin on, haluat todennäköisesti yhdistämisen. Muuten haluat koostumuksen, koska et ’ välitä moottoreista, jotka eivät ole ’ osia autoista, etkä välitä moottoreiden uudelleenkäytöstä. .
- puuttuu toteutusesimerkki täydellisestä ymmärryksestä …
- Entä työntekijä, kun yritys lopettaa liiketoiminnan? Työntekijät ja ihmiset ovat erilaisia yhteisöjä, eikö? Voinko siis sanoa, että yritys koostuu työntekijöistä?
Vastaa
Lähettäjä http://en.wikipedia.org/wiki/Object_composition
Yhdistelmä eroaa tavallisesta koostumuksesta siinä, että se ei tarkoita omistusoikeus. Koostumuksessa, kun omistava esine tuhoutuu, samoin ovat sisältyvät esineet. Kaiken kaikkiaan tämä ei välttämättä ole totta. Esimerkiksi yliopisto omistaa useita laitoksia (esim. Kemia), ja jokaisella laitoksella on useita professoreita. Jos yliopisto sulkeutuu, osastoja ei enää ole, mutta näiden laitosten professorit ovat edelleen olemassa. Siksi yliopistoa voidaan pitää osastojen kokoonpanona, kun taas laitoksilla on professoreita. Lisäksi professori voi työskennellä useammassa kuin yhdessä laitoksessa, mutta laitos ei voi olla osa useampaa kuin yhtä yliopistoa.
Joten – kun sinulla on omistussuhde koostumuksen kanssa omistettu objekti tuhoutuu myös silloin, kun omistaja on – aggregaatti (ja sisältämät objektit) voi olla olemassa itsenäisesti.
–
Päivitys: Anteeksipyyntö – tämä vastaus on jälkikäteen aivan liian yksinkertainen.
@Curtis Batt antaa erinomaisen määritelmän vastauksessaan: Yhdistelmä vs. kokoonpano
Kommentit
- Lainatessasi esimerkissä sävellys on yksi moniin ja aggregaatilla on myös yksi suhde moniin -suhde, vaikka tässä se voisi myös olla moni-moni-suhde yhdistämistä varten (voimme ajatella mahdollista, että opettaja voi opettaa useissa osastoissa). Laitos ei voi olla osa useita yliopistoja. Kokoonpano merkitsee omistusta, kun taas yhdistäminen ei ylitä suhdetta. Lainaus on oikea, mutta kommentti ei ole.
- sillä ei ole mitään tekemistä tuhon kanssa! UML ei määrittele roskien keräysjärjestelmää.
- Luulen, että wikipedia-linkki saa refleksiivisiä ääniä, mutta tämä on kauhea määritelmä – kuten @bold huomautti, näillä suhteilla ei ole mitään tekemistä GC: n kanssa. Tämä hajoaa myös, kun esine on komponentti kahdelle muulle esineelle, kuten pallo pallonivelessä, joka yhdistää kaksi keinotekoista raajaa. Komponenttisuhde koskee toiminnallista riippuvuutta.
- Olen samaa mieltä siitä, että vastauksestani puuttuu vakavasti – mutta niin on myös WikiPedia-artikkelista …
- Sommittelun ja aggregaation välinen ero on selvä. Yhdistämisen ongelma on, että ’ on epäselvää, miten se eroaa tavallisesta assosiaatiosta.
vastaus
-
Sävellys on yhdistys
-
Aggregaatio on assosiaatio
-
Koostumus on vahva assosiaatio (Jos sisällytetyn objektin elämä riippuu täysin konttiobjektista, se kutsutaan vahvaksi assosiaatioksi)
-
Aggregaatio on heikko assosiaatio (Jos sisältämän objektin elämä ei riipu säilöobjektista, sitä kutsutaan heikko yhteys)
Esimerkki:
class Contained { public void disp() { System.out.println("disp() of Contained A"); } } public class Container { private Contained c; //Composition Container() { c = new Contained(); } //Association public Contained getC() { return c; } public void setC(Contained c) { this.c = c; } public static void main(String[] args) { Container container = new Container(); Contained contained = new Contained(); container.setC(contained); } }
kommentit
- Mikä on ero aggregaation ja assosiaation välillä, joka ei ole koostumus eikä aggregaatio?
Vastaa
Ei ole olemassa yhtä selitystä. Eri kirjoittajat tarkoittavat eri asioita aggregaatilla. Useimmat eivät tarkoita sillä mitään erityistä.
Kommentit
- Tämä on oikea vastaus. Olen ’ lukenut sen kahdessa kirjassa, joista toinen on Martin Fowler ’ s UML tislattu .
- martinfowler.com/bliki/AggregationAndComposition.html
Vastaa
Koostumus (seos) on tapa yhdistää yksinkertaisia objekteja tai tietotyyppejä monimutkaisemmiksi. Koostumukset ovat kriittinen rakennuspalikka monille perustietorakenteille.
Yhdistelmä (kokoelma) eroaa tavallisesta koostumuksesta sillä se ei tarkoita omistusta. Koostumuksessa, kun omistava esine tuhoutuu, samoin ovat sisältyvät esineet. Yhteenvetona tämä ei välttämättä ole totta.
╔═══════════╦═════════════════════════╦═══════════════════════╗ ║ ║ Aggregation ║ Composition ║ ╠═══════════╬═════════════════════════╬═══════════════════════╣ ║ Life time ║ Have their own lifetime ║ Owner"s life time ║ ║ Relation ║ Has ║ part-of ║ ║ Example ║ Car has driver ║ Engine is part of Car ║ ╚═══════════╩═════════════════════════╩═══════════════════════╝
Molemmat merkitsevät kohteen välistä suhdetta ja eroavat toisistaan vain vahvuudellaan.
UML-merkinnät kahden luokan erilaisille riippuvuuksille
Koostumus : Koska moottori on auton osa, niiden välinen suhde on koostumus. Näin ne toteutetaan Java-luokkien välillä.
public class Car { //final will make sure engine is initialized private final Engine engine; public Car(){ engine = new Engine(); } } class Engine { private String type; }
Yhdistelmä : Koska organisaation työntekijöinä on Henkilö, heidän välinen suhde on aggregaatiota. Näin ne näyttävät Java-luokilta
public class Organization { private List employees; } public class Person { private String name; }
Kommentit
- tämä ei ’ näytä tarjoavan mitään merkittävää yli edellisissä 12 vastauksessa annettujen ja selitettyjen kohtien
- Melko varma, että kirjoja voi olla ilman kirjastoja. Huono esimerkki!
- Tässä työntekijäluettelo on organisaatioobjektin osa. Kuinka tämä voi olla yhdistämistä?
- Miten assosiaatio eroaa yhdistämisestä?
- Rakastan tätä vastausta. Lopulta se selitti minulle oikein, mikä on yhdistämisen ja koostumuksen ero.
Vastaus
yhdistäminen on yksinkertaista kokoelma, kuten marmoripussi
koostumus merkitsee sisäisiä / toiminnallisia riippuvuuksia, kuten laatikon saranat
autot kokoavat matkustajia; ne pääsevät sisään ja ulos rikkomatta auton toimintoja.
renkaat ovat komponentteja; poista yksi eikä auto enää toimi oikein.
[Huomaa: vararengas on aggregaatti! ]
Vastaa
Katson aina kokoonpanoa ”tarvitsevana”, eli auto tarvitsee moottori, ja pidän aggregaatiota ”tarkoitukseen liittyvinä asioina”. Joten pysyessäni auton analogian kanssa, yhdistelmänäni voi olla edustaa matkaa, johon saattaa liittyä auto ja matkustajat. Matka ei omista autoa tai matkustajat, kootaan yhteen tietyn skenaarion liittyvät tiedot. Kun matka on valmis, auto ja matkustajat menevät eteenpäin. Kun auto loppuu, auto ja sen moottori tavallisesti tuhoutuvat yhdessä.
Vastaa
Entä tämä yksinkertainen esimerkki :
Objektijoukko on sommitelma. Objektien viitteiden taulukko on yhdistelmä.
Jos poistan ensimmäisen, sen sisältö katoaa sen mukana. Toinen, Toisaalta se voi kadota vaikuttamatta sen jäsenten olemassaoloon, ellei ole olemassa tiettyä menetelmää, joka poistaa jokaisen objektin, kun sen osoitin poistetaan. tämä ei ’ näytä lisäävän mitään merkittävää yli aiemmissa 11 vastauksessa esitettyjen ja selitettyjen kohtien yli.
Vastaa
Semanttisesti kaikki sarjat koostuvat alijoukoista, eikö? Siksi:
-
Yhdistäminen on silloin, kun nämä alajoukot ovat olemassa isäsarjasta riippumatta. Koska näyttö voidaan irrottaa tietokoneesta, jotta se voidaan liittää toiseen.
-
Koostumus on silloin, kun nämä osajoukot riippuvat isäsarjan olemassaolosta. Koska lehti on osa puuta tai maksa on osa kehoa.
Nämä käsitteet puhuvat kahden objektin tai luokan välisestä riippuvuudesta käsitteellisesti. Suoraan ohjelmassa, aggregaatissa, kun isäobjekti hävittää, myös aggregaattikohteet tulisi hävittää. Samassa sävellysskenaariossa yhdistetyt poikakohteet jatkuvat, kun isäobjekti luovuttaa.
Vastaa