comp.lang.ada
 help / color / mirror / Atom feed
From: Alan Lovejoy <alovejoy@concentric.net>
Subject: Re: Interesting but sensitive topic to discuss (HELP: - OOP and CASE tools)
Date: 1996/11/12
Date: 1996-11-12T00:00:00+00:00	[thread overview]
Message-ID: <328903AD.2786@concentric.net> (raw)
In-Reply-To: 32875B03.3729@iconcomp.com


Bill Gooch wrote:
> 
> Alan Lovejoy wrote:
> >
> > I think you've hit the nail on the head.  I do distinguish between "design" and "coding".
> >
> > To me, the "design" of a program is a language-independent abstraction.  Implementation
> > inheritance is a coding issue....
> 
> I'd like to hear more about how you think design can be done
> independent of language, and what such a "design" would look
> like.  I can see that the most abstract levels of design can
> be language-independent, but refinement from this level is an
> essential aspect (IMO) of doing good design.  Such refinement
> necessarily goes down through layers including language, frame-
> work, database,... dependencies; in fact, it takes into account
> *all* requirements, including hardware constraints.
> 
> If you don't agree that all of this is important in producing
> good designs, then I have a question: what do you call a
> program specification, not involving code, which does take
> these issues into account?

Oh dear.  I think what we have here is merely :-) a terminology problem.

There is a difference between design methodology, the process of producing a design, 
and the result of that process.  Unfortunately, the term "design" (without modifiers)
can be applied to any or all of these things.

Please believe that I am well aware of the fact that one absolutely must take the 
idiosyncracies of the implementation technology (such as the programming language)
into account in desgining and coding a program. I'm sorry that so many people seem
to think I have suggested otherwise!

Any "program specification" that could be used to actually execute a program,
or generate an executable program, is by definition a program text, and the notation
in which it is written is in effect a programming language.

"Programming languages" such as C or Smalltalk are designed so that human beings
find it convenient to write program texts in them, and also so that computer programs
can translate such texts into equivalent programs that execute efficiently on typical 
hardware.

Design notations have a different purpose: to communicate what the design of the
program is to human readers--often ommitting details that should be specified
if the program actually needs to be executed by a computer.  However, those
details should be **optionally** specifiable, so that those cases in which
such details are important at the "design level" can be dealt with there.

My thesis is that a design **methodology** should be able to handle designing
a program regardless of language, although it will certainly need to take the
differences between langauges into account.  If I have to use a completely
different methodology for each part of the system that is implemented in a
different language, something is wrong.

Similarly, the design notation should be flexible enough to handle any and
all implementation languages.  One may use different capabilities of the
notation and/or and specify different designs due to the intended target
language.  But if the notation becomes completely worthless in the face of
an implementation language such as Self, perhaps there is something wrong with 
the notation (and/or its underlying object metamodel) at a fundamental level.

> I think it is impossible to progress very far from a domain
> model into design without considering target language, and
> the other things I've mentioned.  A very abstract design, not
> considering these issues, may be useful some of the time, but
> the design one actually implements *must* consider them.
> 
> > Many seem to think that the class hierarchy **is** the design! ...
> 
> Well, I do not.  But there are many levels of design, and
> it is important to ultimately be specific.

Agreed.  I am reacting to all the times I've seen people start their design process
by drawing class hierarchies.

> > The issues that a design methodology should address with respect to implementation inheritance
> > would be questions such as the following:
> >
> > * Just because two objects have the same behavior may or may not mean that they should
> > inherit the shared behavior.  The methodology should provide the guidance needed to
> > resolve this issue (is the fact that the behavior is the same simply accidental, or
> > does it depend upon some reliable invariant?  How likely is it that a changed requirement
> > will necessitate changing the behavior of one of the objects, but not the other?).
> >
> > * When should delegation be used instead of inheritance?
> >
> > * When should the Strategy pattern be used instead of inheritance?
> 
> I agree that IWBNI methods could help with these things.
> I don't know of any method that even comes close, however.
> This is why design remains largely a black art - not the
> best situation, but it's the way things are.  I'd really
> like to hear from anyone who can suggest how to address
> questions such as the ones Alan has raised here in a
> method(olog)ical or systematic fashion.

Yep.  The methodologists have some work to do.  I think patterns have started the right
things happening in this regard.

> > However, implementation inheritance should be treated as a refinement of the design, not
> > as the body and soul of it.
> 
> From the last, I gather that in some sense, we are in
> agreement.  But again, what do you call this refinement,
> if it isn't another (more specific, closer to code) layer
> of design?

Implementation?  But again, I think we are arguing terminology, not substance.

My practice has been to use the term "design" in way that is apparently more abstract
than those who have read and objected to my posts.  

--
Alan L. Lovejoy		|==============================================| 
Smalltalk Consultant	|	Beware of Geeks bearing GIFs!	       |
alovejoy@concentric.net |==============================================|




  parent reply	other threads:[~1996-11-12  0:00 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-11-06  0:00 Interesting but sensitive topic to discuss (HELP: - OOP and CASE tools) Dong Oh Kim
1996-11-06  0:00 ` Paul_Gover
1996-11-06  0:00   ` Snowball
1996-11-13  0:00     ` Peter Pflaum
1996-11-13  0:00       ` David N. Smith
1996-11-06  0:00   ` Alan Lovejoy
1996-11-07  0:00     ` Piercarlo Grandi
1996-11-10  0:00       ` Vlastimil Adamovsky
1996-11-11  0:00         ` Piercarlo Grandi
1996-11-11  0:00           ` Anthony Menio
1996-11-18  0:00             ` Piercarlo Grandi
1996-11-20  0:00               ` Anthony Menio
1996-11-27  0:00                 ` Piercarlo Grandi
1996-11-12  0:00           ` Anthony Menio
1996-11-18  0:00             ` Piercarlo Grandi
1996-11-19  0:00               ` Anthony Menio
1996-11-27  0:00                 ` Piercarlo Grandi
1996-11-10  0:00       ` drs
1996-11-12  0:00         ` Piercarlo Grandi
1996-11-11  0:00       ` Daniel Drasin
1996-11-12  0:00         ` Anthony Menio
1996-11-08  0:00     ` Paul_Gover
1996-11-08  0:00       ` Alan Lovejoy
     [not found]         ` <6KZQfjK-3RB@herold.franken.de>
1996-11-10  0:00           ` Interesting but sensitive topic to discuss (HELP: - OOP and CASE t Chris
1996-11-10  0:00             ` Vlastimil Adamovsky
1996-11-11  0:00         ` Interesting but sensitive topic to discuss (HELP: - OOP and CASE tools) Bill Gooch
1996-11-12  0:00           ` Jan Steinman
1996-11-12  0:00             ` Alan Lovejoy
1996-11-13  0:00               ` Nick Thurn
1996-11-13  0:00                 ` Alan Lovejoy
1996-11-14  0:00                   ` Nick Thurn
1996-11-12  0:00           ` Alan Lovejoy [this message]
1996-11-13  0:00             ` Ell
1996-11-13  0:00             ` Nick Thurn
1996-11-14  0:00             ` Bill Gooch
1996-11-19  0:00               ` Tim Ottinger
1996-11-08  0:00       ` Ell
1996-11-08  0:00         ` Alan Lovejoy
1996-11-13  0:00           ` Ell
1996-11-10  0:00       ` vlad
1996-11-12  0:00     ` Robert C. Martin
1996-11-12  0:00       ` Alan Lovejoy
1996-11-14  0:00         ` David N. Smith
1996-11-14  0:00           ` Bill Gooch
1996-11-20  0:00         ` Robert C. Martin
1996-11-20  0:00           ` Michael Malak
1996-11-20  0:00             ` Robert Dewar
1996-11-20  0:00           ` Robert Dewar
1996-11-26  0:00           ` Tucker Taft
1996-12-03  0:00             ` Robert C. Martin
1996-12-08  0:00               ` Tucker Taft
1996-11-06  0:00   ` Jan Steinman
1996-11-07  0:00     ` Paul_Gover
1996-11-12  0:00     ` Robert C. Martin
1996-11-12  0:00       ` Snowball
1996-11-15  0:00         ` Soren Skogstad Nielsen
1996-11-28  0:00         ` Piercarlo Grandi
1996-11-28  0:00         ` Piercarlo Grandi
1996-11-12  0:00       ` Alan Lovejoy
1996-11-07  0:00 ` Interesting but sensitive topic to discuss (HELP: - OOP and CASE t Joachim Durchholz
1996-11-08  0:00   ` Richard A. O'Keefe
1996-11-09  0:00     ` Piercarlo Grandi
1996-11-13  0:00       ` Richard A. O'Keefe
1996-11-27  0:00         ` Piercarlo Grandi
1996-11-08  0:00 ` Jon S Anthony
1996-11-08  0:00 ` Alan Lovejoy
1996-11-08  0:00 ` Joachim Durchholz
1996-11-12  0:00   ` Alaric B. Williams
1996-11-13  0:00   ` Richard A. O'Keefe
1996-11-08  0:00 ` Nick Thurn
1996-11-08  0:00   ` Alan Lovejoy
1996-11-11  0:00     ` Nick Thurn
1996-11-11  0:00       ` Paul_Gover
1996-11-11  0:00         ` Anthony Menio
1996-11-11  0:00         ` Interesting but sensitive topic to discuss (HELP: - OOP and CASE tools) David N. Smith
1996-11-12  0:00           ` Anthony Menio
1996-11-11  0:00 ` Cesar A. Gonzalez Perez
1996-11-12  0:00 ` Interesting but sensitive topic to discuss (HELP: - OOP and CASE t Joachim Durchholz
1996-11-20  0:00   ` Piercarlo Grandi
replies disabled

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