Asociace vs. agregace – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Asociace vs. agregace – Java – Fórum – Programujte.comAsociace vs. agregace – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Radek
~ Anonymní uživatel
123 příspěvků
23. 8. 2013   #1
-
0
-

Ahoj, dokázal by mi někdo vysvětlit, jaký je rozdíl mezi asociací / agregací v OOP?

Oba vztahy mi připadají, co se implementace týká shodné.

Příklad agregace:

    public class Person  
    {  
        private Costume currentClothes;  
      
        public void setClothes(Costume clothes)  
        {  
            currentClothes = clothes;  
        }  
       
    }  
Nahlásit jako SPAM
IP: 82.99.140.–
Reklama
Reklama
Matrix17
~ Anonymní uživatel
293 příspěvků
23. 8. 2013   #2
-
0
-

Google (asociace oop), druhej odkaz:

http://blog.renestein.net/UML+O+Agregaci+Kompozici+A+Asociaci+A+Jako+Bonus+Spole%C4%8Densk%C3%A1+Aktualitka.aspx

Nahlásit jako SPAM
IP: 213.226.237.–
Radek
~ Anonymní uživatel
123 příspěvků
23. 8. 2013   #3
-
0
-

#2 Matrix17
Samozřejmě, že Google jsem použil jako první a teorii přečetl, ale jaksi mi pořád uniká rozdíl v implementaci asociace vs agregace.

Nahlásit jako SPAM
IP: 82.99.140.–
Radek
~ Anonymní uživatel
123 příspěvků
23. 8. 2013   #4
-
0
-

Může být implementace asociace i agregace shodná, ale liší se pouze pojmenováním vztahu podle konrétního případu?

V případě, kdy je jeden objekt "celek" a druhý objekt "částí" celku pojmenuji vztah agregací. A když jsou si svou nadřazeností oba objekty rovny nazvu jejich vztah asociací, chápu to takto správně?

Nahlásit jako SPAM
IP: 82.99.140.–
liborb
~ Redaktor
+18
Guru
23. 8. 2013   #5
-
0
-

Asociace je obecná vazba. Agregace je tato vazba (nebo-li je to asociace) s určitým omezením. A pak je tu ještě kompozice, která je opět asociací, ale s ještě větším omezením.

A co se týká implementace, tak je to nakonec všechno na jedno brdo :). Nejvíce se potkáš s agregací, méně často s kompozicí. Často se můžeš hodiny přít o to, jestli je daná vazba kompozice nebo agregace .... prostě, je to jenom slovíčkaření :).

Nahlásit jako SPAM
IP: 188.75.135.–
NeregistrovanyHookyns
~ Anonymní uživatel
62 příspěvků
16. 6. 2016   #6
-
0
-

Jsem si vědom toho, že obnovuji relativně staré téma, ale hledal jsem něco ohledně agregací a našel jsem tohle, takže je možné, že sem přijde i někdo jiný a bude hledat jasné vysvětlení.

Dle mého je implementační rozdíl jasný.

Asociace je vztah, kdy se instance předává, používá se, ale neukládá se.  

class Foo {
	private byte booSize = 0;

	public void bar(Boo b) {
		booSize = b.size;
	}
}

Co přiložil zakladatel topicku, je agregace, přijímám instanci a ukládám si ji do sebe, poté s ní můžu dělat cokoliv.

    public class Person  
    {  
        private Costume currentClothes;  
      
        public void setClothes(Costume clothes)  
        {  
            currentClothes = clothes;  
        }  
       
    } 

Kompozice je vztah, kdy je třída přímo závislá na ostatních, př:  

class Auto {
	private Motor motor;

	public Auto(/*Motor m*/) {
		motor = new Motor();
	}
}

Instance, na kterých je závislá, si může vytvořit sama nebo přijmout v konstruktoru, ale po ukončení konstruktoru musejí být všechny kompoziční vlastnosti nastavené.

Nahlásit jako SPAM
IP: 77.95.192.–
Daniel
~ Anonymní uživatel
69 příspěvků
29. 1. 2017   #7
-
0
-

Píšu do tohoto starého vlákna, protože se mi při vyhledávání o agregaci a asociaci vyskytlo na prvním místě. Reaguji na poslední příspěvek, protože mám podezření, že obsahuje chybu. Vycházím z knížky UML 2 a unifikovaný proces vývoje aplikací (2. vydání). Nechť mě někdo opraví, pokud jsem něco špatně pochopil, ale takto jsme se to učili i na univerzitě.

V kapitole 9.4.4 se píše: "Asociací zdrojové a cílové třídy vyjadřujeme skutečnost, že objekty zdrojové třídy mohou nést objektový odkaz na objekty cílové třídy." dále se píše: "Neexistuje žádný běžně používaný objektově orientovaný programovací jazyk, který má specifickou jazykovou příkazovou strukturu pro práci s asociacemi. Proto jsou při tvorbě kódu automaticky generovaného z modelu UML všechny relace 1:1 převáděny na atributy zdrojové třídy." Toto neodpovídá tvrzení anonymního uživatele. To, co anonymní uživatel označil jako asociaci je podle knížky jen závislost typu use. Cituji kapitolu 9.5.1.1: "Na obrázku 9.24 jsou znázorněny dvě třídy, A a B, mezi nimiž je závislost <<use>>. Zmiňovaná závislost vzniká v jakémkoli z následujících případů. 1. Operace třídy A potřebuje argument třídy B. 2. Operace třídy A vrací hodnotu třídy B. 3. Operace třídy A používá objekt třídy B v libovolném místě své implementace, ovšem nikoli jako atribut." Na obrázku jsou pak v diagramu třídy A uvedeny tyto operace: foo(b:B), bar():B, doSomething(). Dále je uvedena implementace metody doSomething(), ve které je lokálně vytvořena instance třídy B a komentář o jejím používání.

Co se týče agregace a kompozice, v kapitole 18.5 se o kompozici píše: "Klíčovým rozdílem vůči agregaci je skutečnost, že v kompozici nemohou součásti existovat mimo celek. V tomto typu relace patří navíc každá součást jen jedinému celku, zatímco u agregace bylo možné součásti sdílet více celky."

Nahlásit jako SPAM
IP: 89.103.150.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 19 hostů

Podobná vlákna

Asociace se soubory — založil Colpik

UML to Java - asociace — založil pedro.cze

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý