One of FrankLloydWright
principles, this seems to prefigure the fractal concept of "scale symmetry", one of the most striking and beautiful aspects of SystemsAsLivingThings
From the OrganicArchitecture page:
ORGANIC denotes in architecture not merely what may hang in a butcher shop, get about on two feet, or be cultivated in a field. The word organic refers to "entity"; perhaps integral or intrinsic would therefore be a better word to use. As originally used in architecture, organic means PartToWholeAsWholeIsToPart
. So "entity as integral" is what is really meant by the word organic. INTRINSIC.
Err, can you explain this a bit more? Do you mean that my eye is made from lots of little copies of itself? -- DaveHarris
Not quite, though you might design, say, a theatre, using the arrangement of rods and cones in an eye as a metaphor. A better example is the structure of ferns. MichaelBarnsley
cut his teeth producing tiny and most elegant algorithms for generating images of fern leaves and branches. He generalized his work into the concept of IterativeFunctionSystems?
and seems to be making a fair buck using them as a compression and image analysis/explication techniques - see http://www.cis.ohio-state.edu/hypertext/faq/usenet/sci/fractals-faq/faq.html
for lots more on this.
In our context, we might pursue the design of a large-scale distributed system by extending the patterns designed into each of its elements. This is not always sensible - economies of scale have a habit of biting hard. It is, however, a good way to think about scaling - even if different patterns apply, the effect may still be made consistent by way of PartToWholeAsWholeIsToPart
Yes, I know what fractals are. Basing a theatre on an eye metaphor might be a good idea, but surely is not relevant to whether it has fractal design. And scaling issues do bite, to the point where I think the guideline is misleading.
It usually seems that scaling issues bite us when they deal with physical constraints like time and space. In logic intensive problems, scaling usually works okay. --MichaelFeathers
I suspect that what Wright is getting at is better expressed by Alexander's notion of a generative grammar. For example, your two eyes have a lot in common because they are generated from the same part of the grammar of human bodies (and not because they have the same function). The two things are in physically different places, but the grammar unifies them and we sense this unity. Where the grammar is recursive we get fractals, but that's just a special case.
In OO we use generalization/specialization as a mechanism of extension. If the specializations do not break any guarantees of the general stuff we can have substitutability. It seems to me that generative things may forego substitutability because the generated item is meant to be used in a different context. Different eye socket for instance. Perhaps there is something in this in software. Patterns are specializations that are not necessarily substitutable. DesmondDSouza calls them refinements, I think. -- MichaelFeathers
What truly comes across as organic is (a) the commonality in design of different things, coupled with (b) adaptations to local circumstance. (The adaptations might be extreme, as when the hand is a modified foot.)
Are there any non-recursive
bit ::= 0 | 1
The question is whether there are any interesting
is the essence of PartToWholeAsWholeIsToPart
in OO design.
I find that the introduction of the CompositePattern
often has a dramatic
and almost mystical impact on the composability of a set of objects. And
sometimes a deleterious effect on its understandability.
I've noticed that the CompositePattern
is especially good when you are
describing man-made things, and not so good when you are
describing natural things. It is good for describing math, organizations,
VLSI chips, and programs. It is not so good at describing plants, animals,
or ecosystems. I have wondered whether PartToWholeAsWholeIsToPart
so much a property of nature as it is of humans; we want
things to be
that way and so we force nature into our box.
I think CompositePattern
is capable of describing any recursively composable structure. When one tries to describe natural systems like plant etc, one is dealing with a depth and breadth which is mind-boggling. Just what would the primitives be in such a composite? Quarks? How would we represent the 'irreversible composites' (chemical reactions). Also how can we represent the temporal aspects of such composites.
In any case, I feel that CompositePattern
, being a generative pattern, is capable of grasping the temporal aspects of changing structure of objects. An object realized through some CompositePattern
can be thought of as a point-in-time view. The structural evolution (SchemaEvolution
) of such an object can be traced by the CompositePattern
. There may be cases when a structural change in the object requires the CompositePattern
itself to change ie it requires creation of new types of components.
can represent changes in behavior too.