File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes OO, Patterns, UML and Refactoring and the fly likes Association and dependency Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Engineering » OO, Patterns, UML and Refactoring
Bookmark "Association and dependency" Watch "Association and dependency" New topic
Author

Association and dependency

Pradeep bhatt
Ranch Hand

Joined: Feb 27, 2002
Posts: 8919

Hi,
Is association a form of dependency relation?


Groovy
Lasse Koskela
author
Sheriff

Joined: Jan 23, 2002
Posts: 11962
    
    5
I would say the opposite. Association is really the loosest term there is while dependency gives more details, such as the direction of "this particular association."


Author of Test Driven (2007) and Effective Unit Testing (2013) [Blog] [HowToAskQuestionsOnJavaRanch]
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
They are two different concepts in UML:
An association is a channel to send messages object to object. (Well, actually a link - and instance of an association - is the channel.)
A dependency exists between two elements if changes to the definition of one element may cause chagnes to the other. (quoted from UML distilled, 2nd ed.)


The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
Pradeep bhatt
Ranch Hand

Joined: Feb 27, 2002
Posts: 8919

A dependency exists between two elements if changes to the definition of one element may cause chagnes to the other. (quoted from UML distilled, 2nd ed.)

Doesn't that mean that there will be method invocations on the depended object?
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
Originally posted by Pradeep Bhat:
Doesn't that mean that there will be method invocations on the depended object?

Not necessarily. It could simply use a declared constant. Or hold a reference to an object without ever calling a method on it, for example.
cyril vidal
Ranch Hand

Joined: Jul 02, 2003
Posts: 247
HI,
To put it in a nutshell, an association is more persistant than a dependency( so I totally disagree with Lasse's point of view. By the way, a dependencie is definitely not "a particular" association, - dependencie, association and generalization are three different concepts-, and you may also specify a direction with an association: that's called navigation...).
For example, consider the two following simple classes O1 and O2:

Here, every object of type 01 will include a reference to one object of type 02, and these two objects will be closely linked. That's an association (more precisely here, an aggregation).

Now, an exemple of dependency (parameter):


Here, at the end of the execution of method01, link between the two objects will be broken.
Another example of dependency (local object):

Here, when method01 exits, object link02 will die.
So, I would say that an association relationship is stronger than a simple dependency one, in the sense that each object involved is closer to the other one. In the first case, the relation is permanent but not in the second case, where the relation is temporary.
Now, to my sense, there is a more subtil difference to grasp, the one between two forms of association, i.e aggregation and composition.
In both cases, one of the object consitutes a type of attribute for the second one. In our example, link02 of class 02 will be an attribute of object 01. But in the case of composition, the object 02 will born and die with object 01, which is not the case in aggregation relationship. Translated into Java code, it could give somewhat like this:


Both link02 and link03 objects state as attribute for object 01, but in the case of aggregation, link03 object has a somewhat independant life and will not die when 01 will do so.
So if a dependency is not a "particular" association, on the contrary, we may say that composition is a "particular" aggregation.
Hope this helps
Cyril
[ November 30, 2003: Message edited by: cyril vidal ]
[ November 30, 2003: Message edited by: cyril vidal ]
[ November 30, 2003: Message edited by: cyril vidal ]
[ November 30, 2003: Message edited by: cyril vidal ]
[ November 30, 2003: Message edited by: cyril vidal ]
[ November 30, 2003: Message edited by: cyril vidal ]

SCJP 1.4, SCWCD, SCBCD, IBM XML, IBM Websphere 285, IBM Websphere 287
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
Originally posted by cyril vidal:

Here, every object of type 01 will include a reference to one object of type 02, and these two objects will be closely linked. That's an association (more precisely here, an aggregation).

I don't see how we would know wether the above is an aggregation.

Now, an exemple of dependency (parameter):

In UML 1.x, a parameter could also be modeled as an association (using the parameter stereotype). As far as I know, this changed in UML 2.
Another example of dependency (local object):

Ditto.
So, I would say that an association relationship is stronger than a simple dependency one,

Yes, of course.
But in the case of composition, the object 02 will born and die with object 01

That's not fully true: the composition relationship allows for the whole to give responsibility for a "part" to another "whole".
cyril vidal
Ranch Hand

Joined: Jul 02, 2003
Posts: 247
Hi Hilja,

I don't see how we would know wether the above is an aggregation.

You're right, we don't know whether the above is an aggreagation or a simple association, with no semantic of "whole/part".

In UML 1.x, a parameter could also be modeled as an association (using the parameter stereotype). As far as I know, this changed in UML 2.


Yes. But an association with "local" or "parameter" stereotype specified still remains different from an dependencie with a local or parameter object. In the first case, a type of one object stands as an attribute type for the other one, which is no true in the second case.
Regards,
Cyril.
Gavin Bong
Ranch Hand

Joined: Apr 25, 2003
Posts: 56
I would think that aggregation and composition are modelling concepts and
how that translates to Java code is something entirely different. I think it's certainly difficult to ascertain the difference b/w an association and aggregation from code (as Ilja pointed out) and whether it's necessary at all.
Fowler blogged on this in May.
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
Originally posted by cyril vidal:
Yes. But an association with "local" or "parameter" stereotype specified still remains different from an dependencie with a local or parameter object.

The usage in the community is not very consistent, though.
In the first case, a type of one object stands as an attribute type for the other one, which is no true in the second case.

I am not sure I follow you here. Would you like to elaborate, please? Thanks!
cyril vidal
Ranch Hand

Joined: Jul 02, 2003
Posts: 247
Hi Ilja,

I am not sure I follow you here. Would you like to elaborate, please? Thanks!

Perhaps I'm wrong, but up to now I thought that a association relationship meant a structural relationship, i.e. one object holds permanently the adress of the other one, so includes the type of this object as attrbute type.
For me, that's the great difference with the dependencie, as this last one doesn't require this permanently 'inclusion'. Here, one object is just using another object, most often only during the time of execution of a method. But, when this time elapsed, the first object (dependant) doesn't know anything more about the used one (independant object).
Isn't it the case?
Regards,
[ December 02, 2003: Message edited by: cyril vidal ]
Pradeep bhatt
Ranch Hand

Joined: Feb 27, 2002
Posts: 8919

Not necessarily. It could simply use a declared constant. Or hold a reference to an object without ever calling a method on it, for example.

If it just holds a reference without calling a method why is that called a dependency.
[ December 02, 2003: Message edited by: Pradeep Bhat ]
Pradeep bhatt
Ranch Hand

Joined: Feb 27, 2002
Posts: 8919

Can I say Aggregation is a subclass of Association?
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
Originally posted by Pradeep Bhat:
Can I say Aggregation is a subclass of Association?

Well, neither Aggregation nor Association are classes in any sense I am aware of, I wouldn't say so...
But if you meant to ask wether Aggregation is a special form of Association - yes, that's correct.
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
Originally posted by Pradeep Bhat:

If it just holds a reference without calling a method why is that called a dependency.

Well, it's at least a compile time dependency.
If A holds a reference to an object of type B, A needs B to be present to be compilable. In fact, most compilers will recompile A every time you change B.
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
Originally posted by cyril vidal:
Perhaps I'm wrong, but up to now I thought that a association relationship meant a structural relationship, i.e. one object holds permanently the adress of the other one, so includes the type of this object as attrbute type.

I think it's rather more abstract a relationship. For example, an association might also be implemented by simply holding a unique identifier for the object referenced.
Pradeep bhatt
Ranch Hand

Joined: Feb 27, 2002
Posts: 8919

Well, neither Aggregation nor Association are classes in any sense I am aware of, I wouldn't say so...

I meant some sort of conceptual classes and not real one
Pradeep bhatt
Ranch Hand

Joined: Feb 27, 2002
Posts: 8919

Is it true that association notation is not supported in UML 2.0?
Ilja Preuss
author
Sheriff

Joined: Jul 11, 2001
Posts: 14112
Originally posted by Pradeep Bhat:
Is it true that association notation is not supported in UML 2.0?

That would be quite surprising to me.
As far as I know, there were some thoughts to drop Aggregation from UML 2.0. But finally it survived.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Association and dependency