🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.lang.eiffel
Article #1222

Re: OOA [was:Re: Beware of "C" Hackers -- A rebuttal to Bertrand Meyer]

#1222
From: dbshapco
Date: Sun, 14 Apr 1996 14:13
295 lines
11758 bytes
In article <goochb.334.0015B418@rwi.com>, goochb@rwi.com says...
>
>Kazimir Kylheku (c2a192@ugrad.cs.ubc.ca) wrote:
> 
>>The OO arena is a philosophical one. I don't particularly subscribe to the 
 
>>view
>>that there ought to be a naive correspondence between software entities and
>>some ``real world'' entities,  ....
>
>Nor do I.  The (apparently widespread) idea that such correspondence 
>is in some way significant to the basis of object-oriented <whatever>
>is, IMO, a gross misconception.  Object technology has a sound basis 
>without it, and in programming, one is rarely modelling the "real world"
>directly (except in UI, when building upon spatio-temporal "real world"
>metaphors to bridge the gap between the abstractions a program is 
>based on and the user, and even then, the models used are abstract).

Many cooked examples for OO tend to use hyperbolic real world correspondence 
which leads people with superficial understanding of OOA to assume that OO 
demands modeling 'real world' objects.  In some problem domains this is 
possible and convenient, but many problem domains are abtract and have no 
real world correspondences.

OOA however should produce a nomenclature and taxonomy for the problem domain 
that permits the problem to be described to people sophisticated in the 
problem domain but not in software development (violation to this rule is of 
course when the problem domain IS software development in some form).  This 
step is fundamental to communicating elements of the problem statement from 
users to developers using common and accepted terminology (rather than the 
jargon of either community) AND to limiting communication to the problem 
domain (and NOT the solution domain -- that is, how the problem is solved 
using software).

Since sound SE demands high traceability through analysis, design, 
implementation and even testing (OO or NOT), the nomenclature and taxonomy 
should appear in later stages of software development.  One should be able to 
pick out an entity in the analysis and trace through to see how it affected 
design and implementation, or conversely to pick a piece of implementation 
and trace up through design to the analysis that motivates that software.  
IME, A&D aren't much worth pursuing when they do not produce traceability.
(The A&D then are practically throw-away, and little use to enhancing and 
maintaining the software.)

The largest problem I see in SE A&D (and we still aren't speaking 
specifically to OO) is using A&D as alternate ways of describing 
implementation.  There is very little value in this and it is often 
frustrating to developers who in fact end up producing descriptions of the 
same thing several times, only the last of which compiles.  (As with most 
things the strongest criticisms for A&D and OO and OOA&D seem to arise from 
misunderstanding and abuse, rather than inherent flaws.)  This improper level 
of abstraction also leads to throw-away A&D, because it is IMPOSSIBLE to 
synchronize a high-level description of an implementation with an actual 
implementation.

(As this suggests, it is possible to commit or learn to OO in stages, 
although it would seem to be easier to start with analysis and move to 
implementation, while unfortunately most practioners go through the reverse 
and pick up bad habits along the way.)

Now back to OO.  Given that the developer (or even better, a domain 
specialist) has produced a sound analysis of the problem domain, it is fairly 
straightforward to move through OOD and OOP by converting the nomenclature 
and taxonomy into classes and a class hierarchy.  The problem, as mentioned 
earlier, is getting a good nomenclature and taxonomy that describes the 
problem domain.  If there is no real world correspondence that suggests a 
decomposition of the problem domain, then conventions from the problem domain 
or any appropriate metaphor can be employed (most problem domains have 
conventional terminology to describe 'entities' in that domain -- finding a 
good metaphor is more challenging and might even require a degree of 
imagination and creativity in the analyst).  A common metaphor, as mentioned 
by the previous poster, is 'windows' in the GUI domain (although most 
metaphors used in software are far from pure -- what has a 'mouse' to do with 
'windows', and how did 'menus' get mixed up with either!).

Two problems seem to appear here.  First, entities from the solution domain 
appear in an analysis of the problem domain, caused by anticipation (the 
analyst is subconsciously solving the problem domain in her head even as she 
analyses it), wrong expertise (using developers with high knowledge of the 
solution domain and low knowledge of the problem domain to perform analysis), 
and re-engineering (the problem and solution domains are so interwoven in 
legacy software that they are difficult to differentiate), or recursion (the 
problem domain is connected somehow with software engineering or 
development, and so it is difficult to separate terminology from the problem 
domain and solution domain -- most often the concept of META-languages or 
META-models becomes employed to differentiate the domains).  Second, when 
metaphors must be used in analysis, the analyst becomes obsessed with the 
metaphor and detaches from the problem domain (this problem seems most common 
to people who deal mostly in abstract domains, or have a tendency to try to 
make the world fit their aesthetically pleasing theoretical models -- 
symptomatically the analyst goes looking for something in the problem 
domain to correspond to some term suggested by the metaphor).

A naive and simplistic approach to *forcing* problem domains to be described 
in terms of unrealistic real world correspondences is wrong, and adds nothing 
to software engineering.  It may be easy to derive classes and a class 
hierarchy from such an analysis, but it won't aid understanding or 
communication of the problem or its solution.  Such misapplication of OOA I 
think results most often in criticism of OOA (and then when the poorly 
thought out classes and class hierarchy are converted to implementations, OOP 
et criticized for being puerile and simplistic).

In a nutshell, any anticipation of the solution domain pollutes analysis, to 
the worst case in which analysis is nothing more than an alternate way of 
describing implementation (ditto design).  OOP should generate objects which 
correspond to entities in the problem domain and the relationships suggested 
by a well defined taxonomy, and the quality of the classes and class 
hierarchy vary directly with the quality of analysis.  Puerile and 
simplisitic analysis based on inappropriate or forced correspondences usually 
results in crippled and incomprehensible classes and class hierarchies.

--

Brad Shapcott
Lockheed-Martin's Advanced Concepts Center, Ottawa, Canada
Ph: (613) 592-8744 x227 1-800-43-TRAIN

[If some junk follows this signature, pls e-mail me -- this is the first time 
I've used this particular posting program.] 
; winvn.ini
[Personal]
UserName=dbshapco
MailAddress=dbshapco@fox.nstn.ca
Organization=iSTAR Navigator User
ReplyTo=dbshapco@fox.nstn.ca
[Communications]
UseSocket=1
NNTPHost=news.nstn.ca
SMTPHost=fox.nstn.ca
NNTPService=nntp
MailDemandLogon=1
MailForceType=2
DebugComm=1
GenSockDLL=genasync.dll
ConnectAtStartup=1
[Authorization]
NNTPUserName=
NNTPPassword=
NNTPSavePassword=0
[Preferences]
EnableThreading=1
SignatureFile=C:\NAVIGATR\NEWS\WinVn.ini
EnableSignature=1
MailLog=0
MailLogFile=MAIL.LOG
PostLog=0
PostLogFile=POST.LOG
DoList=2
FullNameFrom=1
ArticleThreshold=50
ShowUnsubscribed=1
ShowReadArticles=1
ConfirmBatchOps=1
NewWndGroup=1
NewWndArticle=0
SaveArtAppend=1
ConnectAtStartup=1
ConfirmExit=1
ConfirmReplyTo=1
CcByMail=0
ThreadFullSubject=0
GroupMultiSelect=0
ShowUnreadOnly=0
[Coding]
CodingStatusVerbose=0
DumbDecode=0
ArticleSplitLength=50000
EncodingTable=
SubjectTemplate=%s  -  %f [%p/%t]
MIMEBoundary=*-*-*- Next Section -*-*-*
BlankBeforeMIME=0
DecodePath=C:\NAVIGATR\NEWS\download
BlockCodingStatusAlwaysOnTop=0
ReviewAttach=1
AttachInNewArt=0
ExecuteDecodedFiles=0
KeepArticleHeaderVisible=0
UseSmartFiler=1
EncodingType=Base-64
GenerateMIME=1
MIMEUsageSuggestions=1
MIMEUUType=x-uue
MIMEXXType=x-xxe
MIMECustomType=x-custom3to4
DefaultContentType=Other
AlsoDecodeOpenArticles=0
MinimizeStatusWindows=0
[Interface]
ListFontFace=Courier
ListFontSize=10
ListFontStyle=Regular
ArticleFontFace=Courier
ArticleFontSize=10
ArticleFontStyle=Regular
StatusFontFace=Times New Roman
StatusFontSize=11
StatusFontStyle=Regular
PrintFontFace=Arial
PrintFontSize=12
NetUnSubscribedColor=0,0,200
NetSubscribedColor=0,0,0
ArticleUnSeenColor=0,0,0
ArticleSeenColor=0,0,200
ArticleTextColor=0,0,0
StatusTextColor=0,0,0
ArticleBackgroundColor=255,255,255
ListBackgroundColor=255,255,255
StatusBackgroundColor=255,255,255
ThumbTrack=1
WinVnFontFace=MS Sans Serif
WinVnFontSize=8
WinVnFontStyle=Bold
CompositionFontFace=Courier
CompositionFontSize=10
CompositionFontStyle=Regular
UseInverseSelections=0
[winvn]
Notice1=**** The [winvn] section is no longer needed unless    ****
Notice2=**** you want compatibility with old versions of WinVn ****
[Admin]
Newsrc=C:\NAVIGATR\NEWS\NEWSRC
Version=WinVN 0.93.14
[Searches]
LastArticleTextFind=
LastArticleHeaderFind=
LastGroupNameFind=
[Smart Filer]
OnDupeName=0
OnNameTooLong=0
MaxFileNameLen=8
MaxFileExtLen=3
EnableExtensionConversion=1
[Mail Addresses]
Address1=dbshapco@fox.nstn.ca
[Logging]
MailLog=0
MailLogFile=MAIL.LOG
PostLog=0
PostLogFile=POST.LOG
[Confirmation]
ConfirmBatchOps=1
ConfirmDisconnect=0
ConfirmSaveOnExit=0
ConfirmReplyTo=1
[Group List]
DoList=2
ShowUnsubscribed=1
GroupListMultiSelect=0
UsenetWindowPos=0,0,400,540
[Article List]
ArticleThreshold=50
MinArticlesToRetrieve=50
FullNameFrom=0
EnableThreading=1
ShowUnreadOnly=0
NewWndGroup=0
ThreadFullSubject=0
ThreadDepthIndicator=
SaveArtAppend=1
ArtListMultiSelect=1
GroupWindowPos=1,0,800,300
[Article]
NewWndArticle=0
WrapIncomingArticleText=0
WrapIncomingArticleTextLength=80
TrimHeaders=1
ScrollPastHeaders=1
ItalicizeQuotes=1
ArticleWindowPos=130,259,640,362
[Compose]
WordWrap=1
PrefillCcAddress=1
ShowOrgHdr=0
ShowReplyToHdr=0
ShowKeywordsHdr=0
ShowSummaryHdr=0
ShowDistributionHdr=0
ShowFromHdr=0
FollowupSaysTemplate=In article %i, %a says...
ReplySaysTemplate=In article %i, you say...
SignatureFile=C:\NAVIGATR\NEWS\WinVn.ini
EnableSignature=1
[Attachments]
DefaultAttachInNewArt=0
ArticleSplitLength=50000
SubjectTemplate=%s  -  %f [%p/%t]
GenerateMIME=1
MIMEUsageSuggestions=1
MIMEBoundary=*-*-*- Next Section -*-*-*
MIMEUUType=x-uue
MIMEXXType=x-xxe
MIMECustomType=x-custom3to4
DefaultEncodingType=Base-64
DefaultContentType=Other
EncodingTable=
Technical Details
Message-ID: <4kr166$1ep@news.nstn.ca>
Path: arc1-ca.pugleaf.net!news.nstn.ca!news
References: <1995Jul3.034108.4193@rcmcon.com> <bksDoFwBA.Eut@netcom.com> <jmaling-2303960413010001@slwol1p47.ozemail.com.au> <4kkkbm$4ld@news4.digex.net> <4kku1gINN7me@keats.ugrad.cs.ubc.ca> <4kma54$11m@news4.digex.net> <goochb.334.0015B418@rwi.com>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.nstn.ca!news
From: dbshapco@fox.nstn.ca (dbshapco)
Newsgroups: comp.lang.eiffel,comp.lang.c,comp.lang.c++,comp.object,comp.software-eng
Subject: Re: OOA [was:Re: Beware of "C" Hackers -- A rebuttal to Bertrand Meyer]
Date: 14 Apr 1996 14:13:26 GMT
Organization: iSTAR Navigator User
Message-ID: <4kr166$1ep@news.nstn.ca>
References: <1995Jul3.034108.4193@rcmcon.com> <bksDoFwBA.Eut@netcom.com> <jmaling-2303960413010001@slwol1p47.ozemail.com.au> <4kkkbm$4ld@news4.digex.net> <4kku1gINN7me@keats.ugrad.cs.ubc.ca> <4kma54$11m@news4.digex.net> <goochb.334.0015B418@rwi.com>
Reply-To: dbshapco@fox.nstn.ca
NNTP-Posting-Host: ts6-11.ott.istar.ca
Mime-Version: 1.0
X-Newsreader: WinVN 0.93.14