comp.lang.ada
 help / color / mirror / Atom feed
From: djones@megatest.UUCP (Dave Jones)
Subject: Re: Good Design Strategies <Was comments on comments>
Date: 25 Feb 89 01:07:02 GMT	[thread overview]
Message-ID: <2344@goofy.megatest.UUCP> (raw)
In-Reply-To: 6100@medusa.cs.purdue.edu

From article <6100@medusa.cs.purdue.edu>, by rjh@cs.purdue.EDU (Bob Hathaway):
> 
> The standard argument for top-down design is that design errors are caught
> early.  A top level change could make all the work done at the bottom level
> unnecessary and major rewriting or complete scrapping could occur.  That
> is the advantage of top-down design with bottom-up implementation, the
> overall design should be close to correct and the implementation is direct
> and fast because the objects and procedures don't depend on anything not
> yet implemented.  I think the advantage of "building blocks" should be
> evident in any design since code which is designed to be easy to modify
> will consist of reusable and parameterized components which correspond
> to a loosly coupled and highly cohesive modular design.
> 

If you end up with "reusable and parameterized components ... loosely
coupled... modular", then it doesn't matter how you got there.
My argument is that in most cases, you are more likely to end up
in such a software ecstacy if you use bottom-up design techniques,
and you'll get there quicker.

The argument for top-down design is based on some assumptions that are 
seldom met.  If the project has these properties, top-down design
can be the best order of business.

   1. Design and implementation are distinct and separate activities.

      If they are not, you can't do one from one direction, and the
      other from the other direction.

   2. A "correct design" can be identified without benefit of prototyping,
      and it will inevitably be error free.


You say, "A top level change could make all the work done at the bottom level
unnecessary and major rewriting or complete scrapping could occur."

HATE IT when that happens!  

That is one reason why I design the low-level objects first.  If they are 
designed without knowledge of the specifics of the higher levels, high 
level changes cannot effect them.  The disaster happens when somebody 
"finishes" the high level design and then designs the bottom level around 
that, and then Ooops! -- it turns out that the high level design had a flaw
in it. Then you discover that the change propogates right down through
all the levels.

Or maybe somebody thinks up an entirely different kind of top-end that 
deals with the same kinds of objects.  Either way, you are likely SOL 
because those low level routines knew too much for their own good.  Now 
if the design at the low level is good, all is well.  Like I said, if you
get there, it doesn't much matter how you got there. But which technique
is less error-prone?

I gave a case history of using the parts of a Pascal compiler in
a mouse-clicky kind of editor. I'll reply to one comment.
You said, "It sounds like the bottom-up implementation provided them 
with the working software early."

I say, The bottom-up design provided them with software that didn't
"know it was in a compiler".  Recall, I did not even know about that
project when I started the compiler. 

And I meant it literally when I said, "Try doing that with a Pascal
compiler that was designed top-down to be a Pascal compiler."

Actually try it.  

I have tried to use the parts of other production compilers
to do things other than pre-runtime compilation. Not as an academic
exercise, but to produce real commercial products.  That's why I'm
writing this one!  I would rather buy the source for one off the self.
Better yet, what I would really like is what I am writing: a library of
low and mid level Pascal object Adt's. Then I wouldn't even need the 
source, except to fix bugs and port it to new platforms. But try to
find such a thing: an open architecture compiler.  So far as I know, I 
am writing the first one.

  reply	other threads:[~1989-02-25  1:07 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1813@goofy.megatest.UUCP>
1989-02-10 21:16 ` comments on comments Bob Hathaway
     [not found] ` <20233@agate.BERKELEY.EDU>
     [not found]   ` <9689@ihlpb.ATT.COM>
1989-02-23  2:15     ` Bob Hathaway
1989-02-23  7:22       ` Dave Jones
1989-02-23 22:50         ` Good Design Strategies <Was comments on comments> Bob Hathaway
1989-02-25  1:07           ` Dave Jones [this message]
1989-02-26 19:34             ` Rob Jellinghaus
1989-02-27  0:58               ` William Thomas Wolfe,2847,
1989-02-27 15:29                 ` John Baugh
1989-02-27 18:29                 ` Reuseable Ada components William Thomas Wolfe,2847,
1989-02-28  0:53             ` Good Design Strategies <Was comments on comments> Bob Hathaway
1989-02-28 22:13               ` Dave Jones
1989-03-03  5:45                 ` Bob Hathaway
1989-03-08 17:14                   ` David P. Schneider
1989-03-11 11:15                   ` Stuart H. Ferguson
1989-02-24  1:57         ` comments on comments William Thomas Wolfe,2847,
1989-02-23 20:41       ` comments on comments on reusability Rick Farris
1989-02-24  2:15         ` comments on comments on comments William Thomas Wolfe,2847,
1989-02-24  3:31           ` William A. Bralick
1989-02-24  9:24           ` Rick Farris
1989-02-25 14:28           ` Robert Claeson
1989-03-09 21:12           ` Rick Clements
1989-02-27  9:09 Good Design Strategies <Was comments on comments> Erland Sommarskog
1989-02-27 15:46 ` William Thomas Wolfe,2847,
1989-02-27 17:07   ` Mike Coffin
1989-02-28  4:16     ` Steven D. Litvintchouk
1989-02-28  4:11   ` Steven D. Litvintchouk
1989-03-04  1:25     ` Robert A. Agnew
1989-02-28 11:23   ` Mikael Eriksson
1989-03-01 22:25     ` William Thomas Wolfe,2847,
1989-03-02 22:14       ` Michael Schwartz
1989-02-28 12:22   ` Robert Claeson
1989-02-28  1:16 ` Bob Hathaway
1989-02-28  4:55   ` Rob Jellinghaus
1989-02-28 22:35     ` Dave Jones
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox