This is a great talk at a Ruby conference by Jim Weirich about his attempt to frame all object-oriented design (OOD) principles as special cases of an underlying principle called “connascence”. Connascence is a term co-opted by Meilir Page-Jones in the ‘90s for use in OOD; below is the definition from his book with Larry Constantine entitled, “Fundamentals of Object-Oriented Design in UML” (page 214):
Connascence between two software elements A and B means either
- that you can postulate some change to A that would require B to be changed (or at least carefully checked) in order to perserve overall correctness, or
- that you can postulate some change that would require both A and B to be changed together in order to preserve overall correctness.
UPDATE: Jim Weirich's talk can be found here.