Pattern Mining

Inspirational Quotes:

"We propose instead that one begins with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others." Parnas, D.L. "On the Criteria To Be Used in Decomposing Systems Into Modules"

Pattern Name:

Information Hiding


Context: A large system requires decomposition. One way to decompose a system is to segment it into collaborating objects. In large systems a first-cut rough model might produce hundreds or thousands of potential objects. Additional refactoring typically leads to object groupings that provide related types of services. When these groups are properly segmented, and their interfaces consolidated, the result is a layered architecture.


How to manage a complex system as a set of distinct components that can be developed independently and then combined together? How do we decompose a software solution to obtain the best set of modules? - Roger S. Pressman. Software Engineering, Fifth Edition

How to develop coding techniques which makes a modular system easier to write, to explain, to maintain, to test, and to verify in other way with as little reference as possible to other modules?

Forces: Solution: Improve simplicity by segmenting from high-level to simple-level issues. Complex problems can be broken into smaller more manageable pieces. Then use a combination of abstraction and information hiding to take advantage of our solution to these smaller problems. The specification of a particular problem says nothing about its implementation, the implementation details of a particular problem are hidden (abstracted) from other problems.


Resulting Context: Rationale:

Related Patterns:

Known Uses:

Figure: *


This page is missing something valuable without a big ThreadMode rant and argument... we could have a much better page here. Anyhow, I believe PatternMining, in a different context, is a primary means of developing KnowLedge and ExpertSystems.

-PatternMining basically being a method, or set of methods, for discovering patterns in architecture, computer engineering, etc. The way(s) that ChristopherAlexander and co. discovered the patterns in PatternLanguage. Some kind of observational ScientificMethod perhaps? or more creative? - naught101


View edit of July 9, 2010 or FindPage with title or text search