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

Aliases:

A design criterion for modular systems

A software design principle and tool

Program modularity

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.

Problem:

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:

The user should not know anything about how an interface or abstract class is implemented, they should only program to the abstract specification.

The implementor of a class or an interface should not know anything about how it will be used. The implementers should write the implementation code based solely on the abstract specification

Program modularity deals with the partitioning of a large program into small subprograms, namely modules performing one conceptual function. Such partitioning helps to decrease the complexity of a large system. A module being small and conceptually complete, it is easier to design, test, and can be well documented.

Provide simple interfaces

Ensure that modules hide information

Use appropriate tools

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.

Examples:

Resulting Context:

Effectively manage complexity

Save the development time

Simplifies Verification

Aid digestion (better than Pepto Bismol?)

Easier to change and to maintain the resulting system

Easier to understand and to explain

Rationale:

Related Patterns:

Known Uses:

Figure: *

References:


This page is missing something valuable without a big Thread Mode rant and argument... we could have a much better page here. Anyhow, I believe Pattern Mining, in a different context, is a primary means of developing Know Ledge and Expert Systems.

-Pattern Mining basically being a method, or set of methods, for discovering patterns in architecture, computer engineering, etc. The way(s) that Christopher Alexander and co. discovered the patterns in Pattern Language. Some kind of observational Scientific Method perhaps? or more creative? - naught101


See original on c2.com

~

Pattern mining concentrates on identifying rules that describe specific patterns within the data. Market-basket analysis, which identifies items that typically occur together in purchase transactions, was one of the first applications of data mining. For example, supermarkets used market-basket analysis to identify items that were often purchased together—for instance, a store featuring a fish sale would also stock up on tartar sauce. Although testing for such associations has long been feasible and is often simple to see in small data sets, data mining has enabled the discovery of less apparent associations in immense data sets. Of most interest is the discovery of unexpected associations, which may open new avenues for marketing or research. Another important use of pattern mining is the discovery of sequential patterns; for example, sequences of errors or warnings that precede an equipment failure may be used to schedule preventative maintenance or may provide insight into a design flaw. britannica