Összesítés vs összetétel
On február 12, 2021 by adminMegértem, hogy mi az OOP összetétele, de nem tudom világos képet kapni arról, hogy mi az összesítés. Tud valaki magyarázatot adni?
Válasz
Egyszerű szabályok:
- A “tulajdonosa” B = Összetétel: B-nek nincs jelentése vagy célja a rendszerben A nélkül.
- A “felhasználja” B = összesítés: B függetlenül (fogalmilag) létezik A-tól
1. példa:
A vállalat az Emberek összesítése. A Társaság a Számlák összetétele. Amikor egy vállalat megszünteti az üzleti tevékenységét, a számlái megszűnnek, de az emberei továbbra is léteznek.
2. példa: (nagyon leegyszerűsítve)
A szövegszerkesztő puffert (összetételt) birtokol. A Szövegszerkesztő egy Fájlt (összesítést) használ. Amikor a szövegszerkesztő bezárul, a puffer megsemmisül, de maga a fájl nem pusztul el.
Megjegyzések
- Tehát egy autó egy aggregátum vagy egy alkatrészeinek összetétele?
- És miben különbözik az összesítés a kétféle entitás bármilyen más viszonyától?
- @reinierpost A valóságban az autó egy az alkatrészek összesítése, és az alkatrészek egyszerűen a molekulák összesítése … Azonban egy modell ben minden az Ön igényeitől függ. Fontos-e a motort különálló egységként kezelni, hogy az élettartamát az autótól függetlenül is nyomon tudja követni? Újra felhasználhatja ugyanazt a motort egy másik autóban? Ha igen, akkor valószínűleg összesítést szeretne. Egyébként azért szeretne összetételt, mert nem ‘ nem érdekli azokat a motorokat, amelyek nem az autók ‘ részei, és nem érdekli a motorok újrafelhasználása sem. .
- ami hiányzik, az egy megvalósítási példa a teljes megértéshez …
- Mi a helyzet az alkalmazottal, ha egy vállalat megszűnik üzleti tevékenységet folytatni? Az alkalmazottak és az emberek különböző entitások, igaz? Tehát mondhatom, hogy a vállalat az alkalmazottak összetétele?
Válasz
Feladó: http://en.wikipedia.org/wiki/Object_composition
Az összesítés abban különbözik a szokásos összetételtől, hogy nem jelenti tulajdonjog. Összetételben, ha a tulajdonban lévő tárgy megsemmisül, akkor a benne lévő tárgyak is. Összegezve ez nem feltétlenül igaz. Például egy egyetem különféle tanszékekkel (pl. Kémia) rendelkezik, és mindegyik tanszéknek számos professzora van. Ha az egyetem bezár, a tanszékek már nem léteznek, de a tanszék professzorai továbbra is léteznek. Ezért az egyetem a tanszékek összetételének tekinthető, míg a tanszékeken a professzorok összesítve vannak. Ezenkívül egy professzor több tanszéken is dolgozhat, de egy tanszék nem lehet egynél több egyetem része.
Tehát – amíg van tulajdonjogi viszony a kompozícióval a tulajdonban lévő objektum akkor is megsemmisül, ha a tulajdonos – az összesítés (és a benne lévő objektumok) önállóan is létezhetnek.
–
Frissítés: Bocsánatkérés – ez a válasz utólag túl egyszerű.
@Curtis Batt kitűnő meghatározást ad a válaszában: Összesítés vs összetétel
Megjegyzések
- Az idézett példában a kompozíció egy-a-sokhoz tartozik, és az összesítésnek van egy-sok-sok kapcsolata is, bár itt ez is lehetséges legyen sok-sok kapcsolat az összesítéshez (feltételezhetjük, hogy egy tanár több tanszéken taníthat). Míg egy tanszék nem lehet több egyetem része. A kompozíció tulajdonjogot jelent, míg az összesítés nem lépi túl a kapcsolatot. Az idézet helyes, de a megjegyzés nem.
- Ennek semmi köze a pusztuláshoz! Az UML nem határozza meg a szemétszedési rendszert.
- szerintem a wikipédia link reflexív pozitív szavazatokat kap, de ez egy szörnyű definíció – amint @bold rámutatott, ezeknek a kapcsolatoknak semmi közük a GC-hez. Ez akkor is szétesik, ha egy tárgy két másik tárgy alkotóeleme, például a két mesterséges végtagot összekötő gömbcsuklóban lévő labda. A Komponens kapcsolat a funkcionális függőségről szól.
- Egyetértek azzal, hogy a válaszom erősen hiányzik – de a WikiPedia cikk is …
- A kompozíció és az összesítés közötti különbség egyértelmű. Az összesítés problémája, hogy ‘ nem világos, hogy miben különbözik a hétköznapi társítástól.
Válasz
-
A kompozíció egy társulás
-
Az összesítés asszociáció
-
A kompozíció erős asszociáció (Ha a tárolt objektum élettartama teljesen függ a tárolóobjektumtól, akkor erős asszociációnak hívják).
-
Az összesítés gyenge társítás (Ha a tárolt objektum élettartama nem függ a tároló objektumtól, akkor gyenge társulás)
Példa:
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); } }
megjegyzések
- Mi a különbség az összesítés és az asszociáció között, amely nem összetétel és nem összesítés?
Válasz
Nincs egyetlen magyarázat. A különböző szerzők különböző dolgokat értenek összesítés alatt. A legtöbb nem igazán jelent semmi konkrétat.
Megjegyzések
- Ez a helyes válasz. Két könyvet olvastam ‘, egyikük Martin Fowler ‘ s UML desztillált .
- martinfowler.com/bliki/AggregationAndComposition.html
Válasz
A (keverék) összetétel az egyszerű objektumok vagy adattípusok kombinálásának módja. bonyolultabbá. A kompozíciók számos alapvető adatstruktúra kritikus építőelemei annyiban nem jelenti a tulajdonjogot. Összetételben, ha a tulajdonban lévő tárgy megsemmisül, akkor a benne lévő tárgyak is. Összegezve ez nem feltétlenül igaz.
╔═══════════╦═════════════════════════╦═══════════════════════╗ ║ ║ 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 ║ ╚═══════════╩═════════════════════════╩═══════════════════════╝
Mindkettő az objektum közötti kapcsolatot jelöli, és csak erősségében különbözik.
UML jelölések kétféle típusú különböző függőséghez
Összetétel : Mivel a motor az autó része, a köztük lévő kapcsolat összetétel. Így valósíthatók meg a Java osztályok között.
public class Car { //final will make sure engine is initialized private final Engine engine; public Car(){ engine = new Engine(); } } class Engine { private String type; }
Összesítés : Mivel a szervezet munkatársaként Személy van, a kapcsolat köztük az összesítés. Így néznek ki a Java osztályok szempontjából
public class Organization { private List employees; } public class Person { private String name; }
Megjegyzések
- ez nem ‘ tűnik úgy, hogy bármi lényegeset kínálna a korábbi 12 válaszban elhangzott és kifejtettekkel szemben. / li>
- Egészen biztos könyvek létezhetnek könyvtárak nélkül. Rossz példa!
- Itt az Alkalmazottak listája a Organization Object része. Hogyan lehet ez az összesítés?
- Miben különbözik az asszociáció az összesítéstől?
- Szeretem ezt a választ. Végül jól elmagyarázta nekem, mi a különbség az összesítés és az összetétel között.
Válasz
az összesítés egyszerű a gyűjtés, mint egy zacskó golyó
a kompozíció belső / funkcionális függőségeket feltételez, mint például a doboz pántjai
az autók összesítik az utasokat; be- és kiszállnak, anélkül, hogy megszakítanák az autó funkcionalitását.
a gumiabroncsok alkotóelemek; távolítsa el az egyiket, és az autó már nem működik megfelelően. ]
Válasz
Mindig úgy tekintek az összetételre, hogy “szükség van rá”, azaz egy autónak kell egy motor, és az összesítést “valamilyen céllal kapcsolatos dolognak” tekintem. Tehát maradva az autó analógiáján, az összesítésem egy utazást jelenthet, amely magában foglalhatja az autó és az utasok összehozását. Az utazás nem az autó tulajdonosa, vagy az utasokat, egy adott forgatókönyvhöz kapcsolódó adatokat összesítem. Amikor az út befejeződött, az autó és az utasok továbbmennek. Amikor egy autónak vége van, az autó és annak motorja általában együtt pusztul el.
Válasz
Mit szólna ehhez az egyszerű példához :
Az objektumok tömbje egy kompozíció. Az objektumokra mutató mutatók tömbje egy összesítés.
Ha az elsőt törlöm, annak tartalma eltűnik vele. A második, másrészt eltűnhet anélkül, hogy a tagok létét befolyásolná, hacsak nincs olyan speciális módszer, amely minden objektumot töröl, mivel a mutatója törlődik.
Megjegyzések
- úgy tűnik, hogy ez ‘ nem jelent semmit lényegeset az előző 11 válaszban elhangzott és elmagyarázott pontok felett.
- Tisztelettel nem értek egyet, @gnat. Ez hasznos példa arra, hogy kettőt lehetne megvalósítani: Az emberek példákkal jobban tanulnak.(Azért jöttem ide, hogy ellenőrizzem, megértettem-e, hogy a mutató tag valószínűleg összesítés, az objektum tag pedig összetétel. Ez az egyetlen válasz arra, hogy ezt közvetlenül kezeljük.)
Válasz
Szemantikailag minden halmaz részhalmazokból áll, igaz? Ezért:
-
Az összesítés akkor történik, amikor ezek az alhalmazok az apa halmazától függetlenül léteznek. Mivel a monitort ki lehet húzni a számítógépről, hogy egy másikhoz csatlakoztatható legyen.
-
A kompozíció akkor áll rendelkezésre, amikor ezek az alhalmazok az apa készlet létezésétől függenek. Mivel a levél egy fa része, vagy a máj a test része.
Ezek a fogalmak két objektum vagy osztály közötti függőségről beszélnek fogalmilag. Közvetlenül egy programban, egy összesítésben, amikor az apa objektum rendelkezik, az összesített objektumokat is el kell dobni. A kompozíció ugyanazon forgatókönyvén belül az összetett fiaobjektumok fennmaradnak, majd az apaobjektum eloszlik
Vélemény, hozzászólás?