Article View: comp.lang.eiffel
Article #1222Re: OOA [was:Re: Beware of "C" Hackers -- A rebuttal to Bertrand Meyer]
From: dbshapco
Date: Sun, 14 Apr 1996 14:13
Date: Sun, 14 Apr 1996 14:13
295 lines
11758 bytes
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!newsReferences:
<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