Connascence is a term used to describe the relationship and taxonomy of dependency between two software components. Connascence was used Meilir Page-Jones in the 90’s in the book What Every Programmer Should Know About Object Oriented Design (later updated to use UML instead of Page-Jones’s own modelling language in Fundamentals of Object-oriented Design in UML (Object Technology Series)) but has not seen widespread popularity in the development community outside of specific areas such as this talk by Jim Weirich and a series of blog posts and a talk by Kevin Rutherford.
Connascence provides a taxonomy for dependency and coupling, allowing developers to reason about the quality of their code. There are two broad categories of connascence, and 9 different types or levels. Connascence also has three properties which can help us decide how bad the particular level of connascence is.
But we have to know what connascence is first- how to spot it, how to classify it, and how to decide whether it actually is a problem or not given the level and properties of the connascence we’ve identified.
That’s where this series of posts come in. We’re going to go over the different levels of connascence and how to spot them in the wild, as well as touch on the different properties of connascence to decide when we need to act.
We’re going to cover the following areas:
- Connascence of Name
- Connascence of Type
- Connascence of Meaning
- Connascence of Position
- Connascence of Algorithm
- Connascence of Execution
- Connascence of Timing
- Connascence of Value
- Connascence of Identity
Properties of Connascence