[comp.lang.smalltalk] Systematic OO development method

lawesn@SouthBank.UUCP (05/19/87)

Request for information from designers/developers
of object oriented systems:

A Systematic Method for Object-Oriented Development

Yes folks, thats the title of my MSc project.  I am working on some
sort of design methodology for OO systems.  I am particularly interested
in developing a requirements elicitation method targetted to the conceptual
categories of OO languages.  The conceptual categories identified are

	+ messages
	+ classes
	+ methods
	+ inheritance

The idea is to structure information about the target system at the earliest
possible stage.  I would particularly like to open a dialogue with people
who have experience of Object-Oriented design.  The questions I would like to
ask you are:

	+ what kind of approach did you take to the design of your system.
	+ how did you select your classes.
	+ how did you manage inheritance in your system.
	+ did you make use of the model-view-controller paradigm.
	+ based on your experience, how would you approach the same problem
	  if you had to start all over again.

And any other points that you feel are appropriate to OO system design.  I
would also be interested in references (I think I have access to the more
common ones, such as the smalltalk books).  Please reply to this if you have
experience in OO system design, I will summarise findings to the net.

Also I would like to reach people at Apple computer who as we know, have
made significant progress in providing OO tools 'for the rest of us'.  But
I am genuinely interested in discussing this area of design with anybody who
has input on the subject.  By the way, the two systems that I am using are
Smalltalk-80 on a Tek 4406 and MacApp/Object Pascal.

Please reply direct to the address below ( ..mcvax!ukc!idec!kbsc!lawesn )

Thanks in advance...........

Nick


Nick Thompson.                                     ..mcvax!ukc!idec!kbsc!lawesn
South Bank Poly & Imperial College, London.          Phone +44 1 858 4371
c/o 53 Maze Hill, Greenwich, London, SE10 8XQ, UK.
                   "A turkey with a PhD is still a turkey"


This message has been mailed by Nick Lawes on behalf of the forementioned.
-- 
/------------------------------------------=-------------------------------\
| Nick Lawes (South Bank Polytechnic, UK) | | ..mcvax!ukc!idec!kbsc!lawesn |
| "Where are my peril sensitive glasses?" | | Phone +44 1 928 8989 ex 2328 |
\------------------------------------------=-------------------------------/

hallett@macbeth.steinmetz (Hallett) (05/21/87)

I apologize to everyone who doesn't care about this.  I found myself unable 
to respond directly to the address below.  For some reason it came back.
Oh, well.  If Nick will send me mail directly, perhaps I can reply with
more info.

In article <623@SouthBank.UUCP> lawesn@SouthBank.UUCP (Nick Lawes) writes:
>
>Request for information from designers/developers
>of object oriented systems:
>
>The idea is to structure information about the target system at the earliest
>possible stage.
>
First, I salute him on his approach.  An excellent idea and very sound 
software engineering.
>
>	+ what kind of approach did you take to the design of your system.
>	+ how did you select your classes.
>	+ how did you manage inheritance in your system.
>	+ did you make use of the model-view-controller paradigm.
>	+ based on your experience, how would you approach the same problem
>	  if you had to start all over again.
>

There are several sources of O.O. design principles now on the market.  
If Nick writes me, I will be glad to relate those (if ANYONE writes ...).
One in particular advanced here goes something as follows:

1.  Identify the data abstractions for each subsystem.
	Most OO systems are obviously OO systems, ie. the majority of
the objects come straight from the requirements document and the rest are
often discovered when working in a top-down manner (refining).  These
objects are usually physical components of the system, but sometimes,
pseudo-objects or "control objects" must be introduced.

2.   Identify the attributes of each abstraction.
	Again, there are obvious ones, but only after refining the design 
will more become apparent.

3.  Identify the operations (methods) for each abstraction.

4.  Identify the communication between the abstractions.
	This involves identifying the messages required to activate the 
methods of #3.

5.  TEST the design with scenarios.
	This is the refining step mentioned above.  Draw pictures do what
ever is necessary to act out situations.  This is where the designer tests
if the system is matching the requirements.  Often, these scenarios will
point out objects, attributes and messages that are missing.

6.  Apply inheritance.
	Collapse classes that share attributes.  Don't attempt to do this
immediately unless it is terribly obvious.  Wait until all the objects are
established and then compare them to find similarities.

7.  REITERATE.  (Obviously... 8=))

I'm not an expert and don't claim to be.  I've just done some of this and
this method works well for me.  A rule of thumb I live by is that solutions
suggest implementations.  Don't try to force O.O. just because it is a good
buzz-word.  If you design suggests O.O. then do it; if it looks like O.O
will only give you problems, throw it out.  This goes for language choice,
data structures and other things as well.

One last note -- when doing scenarios, it is important to enact them as
stupidly as possible.  I mean that you shouldn't read in information
from your point of view.  You know more than the objects in the system,
so don't assume they know things.  Act it out entirely from their point
of view, working with only what they know.  This is the most difficult
thing to do and takes the most care and practice.  It is also where many
O.O. systems go wrong in designing.

Sorry about the long-windedness.  Again, if you have flames, send them to
me.  Let's not be stupid like me and tie up the net debating ;-).  I have
further references for interested people.

Jeffrey A. Hallett               (hallett@ge-crd.arpa   hallett@desdemona.uucp)
Software Technology Program
General Electric Corporate Research and Development

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"The needs of the few outweigh the needs of the many"

                                 -- Kirk  (STIII)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Disclaimer:  My opinions do not represent my employer's, but it is his fault 
             for giving me this thing.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~