3

I have seen Martin Fowler using the term "collaborators" as some sort of synonym of "dependencies". Unfortunately, Martin Fowler does not seem to define the term anywhere, so it is unclear whether he means this term to have a slightly different meaning from "dependencies".

Others use the term too, for example someone has found that they can be classified as "external" or "internal" here: https://timross.wordpress.com/2009/09/02/internal-and-external-collaborators/ -- but again, no definition.

In Wikipedia I found:

  • Collaborator (software), an enterprise-grade software tool for development teams conducting peer code reviews" -- nope, that's not it.

  • Collaborative software, applications or services that facilitate collaboration between users, mostly on the internet -- nope, that's not it, either.

(The term is problematic because any internet search for this term is bound to be hindered by the overwhelming majority of the results being about human collaborators.)

So, can someone please point me to the definition of this term in the context of Software Architecture or at least to the original source of the term so that I can infer the definition?

(Even if the definition is just to confirm that "Collaborator" is a synonym for "Dependency")

AMENDMENT

Many thanks to user candied_orange for pointing me with his answer to what is in almost all certainty the original definition. As it turns out, the original definition is very old, and slightly problematic, so I thought I should provide a modern definition, along with notes about various subtleties (for example the precise relation between collaborators and dependencies) which can be found here: michael.gr - Definition: Collaborator

4
  • 3
    Many terms in software engineering don’t have a formal definition. Why do you think Fowler means anything other than objects working together?
    – Rik D
    Dec 29, 2022 at 16:55
  • 1
    @RikD I don't, but I am about to write a paper about this topic, and I want to use a new term that is like "dependency" but not exactly a dependency, and "collaborator" seems like a good choice, so then I have to wonder whether I should first define the term as such, or whether it has already been defined, and whether its existing definition is compatible or not with what I want to define it as.
    – Mike Nakis
    Dec 29, 2022 at 18:36
  • 2
    @MikeNakis If it's for a paper and it's a fairly important concept within the context of the subject you're covering, you should define it anyway ("In this work, a collaborator is defined to be xyz.", or something like that), especially if the term doesn't have a widely accepted precise definition. In some disciplines, giving a definition for the sake of clarity is common practice (and also serves as a bit of a courtesy to those readers that don't yet have an in-depth knowledge of the subject), even if the term is widely known (or if there are several, but subtly different definitions). Dec 29, 2022 at 20:31
  • I'm not that old, but I was sure I had heard about "collaborators" at some point in my education. Back then, it was explained via Collaboration Diagram (UML 1) which I think, has been revamped to Communication Diagram (UML 2). Apparently, to simplify the original model. As @candied_organe says, it's all about classes or objects other classes or objects communicate with. (with or w/o dependency among them)
    – Laiv
    May 20, 2023 at 7:40

3 Answers 3

10

The etymology of using the word collaborators to mean the classes with which a class interacts comes from Class Responsibility Cards.=

enter image description here=

They were originally proposed by Ward Cunningham and Kent Beck as a teaching tool in their paper A Laboratory For Teaching Object-Oriented Thinking.= This was all the way back in 1989. Things have changed since then so the term isn't as common as it once was.

Even if the definition is just to confirm that "Collaborator" is a synonym for "Dependency"

Well no. Collaborators cover ANY interaction. A dependency is explicitly this class knowing about and (usually) talking to another. Some other class knowing about and using this class doesn't create a dependency in this class. This turned out to be a very important distinction. Generally, classes don't care who's talking to them.

0
5

For lack of consensus I think we should stick to the English dictionary's definition.

Dependency just means "it needs something else to be available to function". And that goes one way, the dependency typically does not need the depending entity.

A collaborator works with another entity to achieve a mutual goal.

That is different, there is not necessarily a dependency one way or the other. It is cooperation.

You may want to consider the secondary meaning as a reason to avoid the term altogether: working with the enemy. In some languages (certainly in Dutch) this is the first meaning and the one thing people think of when they hear the word.

3
  • 1
    "You may want to consider the secondary meaning as a reason to avoid the term altogether: working with the enemy." -- I had no idea the word collaborator had a negative meaning. I will keep that in mind. I frequently use collaborator in my answers to mean "cooperating objects". I just wish there was a less-loaded term that was as terse as "collaborator". Dec 29, 2022 at 19:31
  • 2
    +1, though I tend to disagree a little bit on the final paragraph. In German, the secondary meaning is exactly the same as in Dutch. Still when I think of the english word "collaboration" or "collaborator", the first thing which comes into my mind is "cooperation", and not the literal translation "Kollaborateur". English native speakers should not have to bend their language just because in German or Dutch the literal analogon has a different focus.
    – Doc Brown
    Dec 29, 2022 at 19:40
  • To clarify, I am aware the connotation I brought forward is not strong in English. I myself, as a Dutchman, would not hesitate to use the word in English in the cooperative sense. But my English is quite good, as is Doc's. And it is a big word. I don't think you're going to offend anybody by using it, I just think it may puzzle some less fluent speakers from some countries and it is good to be aware of. Dec 29, 2022 at 20:43
1

There is a formal definition of the term Collaboration in the Unified Modeling Language (UML).

From the summary of chapter 11.7 Collaborations (from version 2.5.1):

The primary purpose of Collaborations is to explain how a system of communicating elements collectively accomplish a specific task or set of tasks without necessarily having to incorporate detail that is irrelevant to the explanation. Collaborations are one way that UML may be used to capture design patterns.

One interesting aspect from later in the definition:

[…] Thus, a given object may be simultaneously playing collaborationRoles in multiple different Collaborations, but each Collaboration would only represent those aspects of that object that are relevant to its purpose.

As an example the well known observer pattern is described as being a Collaboration having two roles, subject and observer. The Collaboration is then used (i.e. applied in a given context) with a CallQueue playing the role of the subject and a SlidingBarIcon as the observer.

The Collaboration in the sense of UML is not just used to describe technical patterns but also for elements working together to solve business tasks: Another example given is a BrokeredSale with a producer, a consumer and a broker in between of the other two.


I don't know if Martin Fowler uses the the term with this definition in mind or if he uses some other definition or if he uses the term just loosely without a formal definition.

Personally when I read about a collaboration without a definition given, I just think of "some objects working together to do something" but without a "concrete picture" in mind. The UML definition is a good basis for a more formal use though, in my opinion.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.