What is the opposite of decoupled (computer science)

The image of decoupled (two train cars separated) is clear. In computer science, writing "decoupled" code is a Good Thing, it implies breaking code into discrete pieces that can be tested independently, but put together easily.

What would be the opposite, in this context? Coupled is an obvious answer, but that seems to be more the fact of pieces being put together. I'm looking for something that represents bad design, such that pieces are too tightly integrated and can't be split apart.

Monolithic is the best I can come up with, but isn't great. Monolithic could be something that can/should be broken up, but could also mean something that can't/shouldn't be broken up. I'd ideally like something that is unambiguously negative, if possible.


Solution 1:

I had considered suggesting spaghetti coding as accurately characterising something which was hugely entangled and not easily disentangled, but I found that it appears as part of an even better term.

Jeff Attwood quoted a 1997 paper by Brian Foote and Josef Yoder:

The architecture that actually predominates in practice is the Big Ball of Mud.

A Big Ball of Mud is haphazardly structured, sprawling, sloppy, duct-tape and bailing wire, spaghetti code jungle. We've all seen them. These systems show unmistakable signs of unregulated growth, and repeated, expedient repair. Information is shared promiscuously among distant elements of the system, often to the point where nearly all the important information becomes global or duplicated. The overall structure of the system may never have been well defined. If it was, it may have eroded beyond recognition. Programmers with a shred of architectural sensibility shun these quagmires. Only those who are unconcerned about architecture, and, perhaps, are comfortable with the inertia of the day-to-day chore of patching the holes in these failing dikes, are content to work on such systems.

"Big Ball of Mud" and "spaghtetti coding" are unambiguously negative and rather pejorative; calling something "entangled" is probably a diplomatic understatement.

Solution 2:

I've only ever heard "tightly coupled", used as a criticism of systems like this, usually to justify the integration of some "dependency injection" framework.

Solution 3:

Coupled is indeed the opposite. More commonly, however, one speaks of the different degree of coupling (Wikipedia) between given pieces of code. A and B are loosely coupled. C and D are tightly coupled. E and F are completely decoupled.

Search for "coupled" on the same Wikipedia page, to see how it is used.

Solution 4:

Blob
It is a well known antipattern and sounds unambiguously negative.

http://www.antipatterns.com/briefing/sld024.htm
https://sourcemaking.com/antipatterns/the-blob