soft-eng@MITRE.MITRE.ORG (Alok C. Nigam) (08/08/89)
------- Forwarded Message Received: from CALSTATE.BITNET by CUNYVM.CUNY.EDU (IBM VM SMTP R1.2.1MX) with BSMTP id 2303; Thu, 03 Aug 89 16:15:37 EDT Received: by CCS.CSUSCC.CALSTATE.EDU from Mail by CSUMailer (1.3); Thu, 3 Aug 89 13:16:15 PDT Date: Thu, 03 Aug 89 13:15:42 PDT From: PAAAAAR%CALSTATE.BITNET@CUNYVM.CUNY.EDU Subject: Re: Attempts to connect SA/D and OOPS(2) To: soft-eng Cc: <PAAAAAR> (Dick Botting), <SBAILIN@NSSDCA.GSFC.NASA.GOV> There has been some recent discussion on the soft-eng mailing list The Communications of the ACM have published a paper that has specific proposals for a modification to DFDs etc that makes them more suitable for object-oriented programming. (CACM May 1989, Volume 32, Number 5, pp608-623) "An Object-Oriented Requirements Specification Method" by Sidney C. Bailin <SBAILIN@NSSDCA.GSFC.NASA.GOV> (CACM May 1989, Volume 32, Number 5, pp608-623) Abstract "Analyzing requirements for Object Oriented Software is examined in an alternative methodology from the more standard structred analysis approach. Through parallel processes of decomposing objects and allocating functions, the method is explained in detail". Review This excelent paper makes a clear distinction between Structured Analysis(SA) (organised by function) and an object oriented(OO) design (organised by data) and argues for the replacement of SA by OO at the requirements stage. As an example he shows that SA separates the reading, sorting, and writing of some data into separate processes and a data store, whereas an OO structure gathers these inside an object with three actions and some data. The 2 approaches have been recognised since Parnas's original papers on decomposing programs into modules was published in the 60s and/or 70s. The author presents and illustrates a step by step methodology for designing systems. He replaces Entity-Relationship-Attribute (ERA) diagrams by simpler Entity-Relation-Diagram(ERD). He also proposes changing DFDs to an EDFDs (Entity-Data-Flow-Diagrams) which show the types of entity and how dat flows between them. He makes clear the existance of strong rules of correspondence that will hold in a correct OO design: External entities --- Internal Objects ERA Entity --- EDFD Entity ERA Rel ation --- EDFD Flow He has a program to check these rules. He notes (p619) that a common problem in Structured Analysis(SA) is naming some processes since fuzzy names like "control", "manage", "handle", "monitor" are discouraged or even verbotten. He claims that such "processes" are actually entities in disguise. He argues that they should be shown as objects that automatically and invisibly keep their state up to date. In my opinion this paper marks the conscious acceptance of ideas that have been repressed by the hierachical and sequential paradigm that has been the prevailing doctrine since the late 60s. Possibly we should go further - subsume relations as entities (as in SSADM) and removing ALL processes from DFDs. This paper is required reading for anyone wanting to keep up with Software Engineering. Dick Botting CSUSB ------- End of Forwarded Message
eberard@ajpo.sei.cmu.edu (Edward Berard) (08/08/89)
In article <8908071747.AA03249@mitre.arpa>,SBAILIN@NSSDCA.GSFC.NASA.GOV (Dick Botting) writes: > > There has been some recent discussion on the soft-eng mailing list > > The Communications of the ACM have published a paper > that has specific proposals for a modification to DFDs etc > that makes them more suitable for object-oriented programming. > > "An Object-Oriented Requirements Specification Method" > by Sidney C. Bailin <SBAILIN@NSSDCA.GSFC.NASA.GOV> > (CACM May 1989, Volume 32, Number 5, pp608-623) > > Abstract > "Analyzing requirements for Object Oriented Software is examined in an > alternative methodology from the more standard structred analysis approach. > Through parallel processes of decomposing objects and allocating functions, > the method is explained in detail". > > Review > This excelent paper makes a clear distinction between Structured Analysis(SA) > (organised by function) and an object oriented(OO) design (organised by data) ^^^^ Please, object-oriented systems do _not_ organize by data. Objects encapsulate: - knowledge of state information (which may deal with "data," but is more likely to be concerned with objects) - operations (and their associated methods) - [optionally] other objects, i.e., you may have: - homogeneous composite objects - heterogeneous composite objects - [optionally] exceptions - [optionally] constants - concepts To say that "objects are data" is like saying "people are houses." Houses may contain people, but people and houses are decidedly different. Some people begin to migrate away from a functional viewpoint, an towards an object-oriented viewpoint, by saying something equivalent to: "Systems are made up of objects and functions. Since functions do not appear to be objects, I guess data must be objects." The next stage is often the improved, but still not correct: "Objects are functions and data together." Sometimes you hear all kinds of strange things such as: "data objects," "function objects," and "controller objects." These are usually the result of people trying to reconcile their functional outlook with objects, e.g., since data is passive (inert) and objects are data (or highly data-like), objects must be passive -- but then, how does work get done? > and argues for the replacement of SA by OO at the requirements stage. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ I very much agree. > As an example he shows that SA separates the reading, sorting, > and writing of some data into separate processes and a data store, > whereas an OO structure gathers these inside an object with > three actions and some data. This seems strange from an object-oriented point of view, because: - Reading is a composite operation involving several objects (the input object, the actual object being read, and at least one other object), see, e.g., the discussions on "objectification" on comp.lang.ada, comp.lang.c++, and others. - Sorting is also a composite operation, involving the object being sorted and the composite object which contains these objects, and operations from both classes. - The same is true for the writing operation. At best, you will have a massive amount of undesirable "object coupling." Reusability and software reliability will be diminished. > The 2 approaches have been recognised since Parnas's original papers on > decomposing programs into modules was published in the 60s and/or 70s. D.L. Parnas's paper ("On the Criteria To Be Used In Decomposing Systems Into Modules," Communications of the ACM, Vol. 5, No. 12, December 1972, pp. 1053-1058) Was a landmark paper which emphasized "information hiding." Information hiding is probably one of the most fundamental tenets of object-oriented thinking, e.g., "objects are black boxes." > The author presents and illustrates a step by step methodology for designing > systems. > He replaces Entity-Relationship-Attribute > (ERA) diagrams by simpler Entity-Relation-Diagram(ERD). > He also proposes changing DFDs to an EDFDs (Entity-Data-Flow-Diagrams) which > show the types of entity and how data flows between them. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Object-oriented systems don't have "data" flows. If the concept of something flowing is important to you, you can talk about "object flows," although this would seem strange to some object-oriented folks. > He makes clear the existance of strong rules of correspondence that will > hold in a correct OO design: > External entities --- Internal Objects > ERA Entity --- EDFD Entity > ERA Relation --- EDFD Flow > He has a program to check these rules. I appreciate the effort that has been expended, but I have to ask, "What does any of this have to do with an object-oriented approach?" > He notes (p619) that a common problem in Structured Analysis(SA) is naming > some processes since fuzzy names like "control", "manage", "handle", "monitor" > are discouraged or even verbotten. He claims that such "processes" are > actually entities in disguise. I strongly agree that names like "control", "manage", "handle", and "monitor" are fuzzy and should be discouraged. I would have a hard time agreeing with calling such "processes," "entities in disguise." They may be "large composite operations accomplished by a system of cooperating objects." > He argues that they should be shown as > objects that automatically and invisibly keep their state up to date. There is some truth to this. Somewhere within the "system of cooperating obejcts" there is very likely at least one "object with life," i.e., an object which is capable of spontaneously changing its own state. Objects with life (also known as "active objects," and "actor objects") do "automatically and invisibly" alter their state. ("Keeping the state up to date" is anohter discussion entirely.) > In my opinion this paper marks the conscious acceptance of ideas that > have been repressed by the hierachical and sequential paradigm that > has been the prevailing doctrine since the late 60s. Possibly we should > go further - subsume relations as entities (as in SSADM) and removing > ALL processes from DFDs. I find this a strange, but interesting analysis. I would dismiss the recommendation, and suggest that people consider adopting an object-oriented approach. > > This paper is required reading for anyone wanting to keep up > with Software Engineering. It is my opinion (and, yes, I know I'm biased) that this article will do more to confuse people attempting to understand what object-oriented thinking is all about, more than it will help them. I can offer a piece of advice to those attempting to understand what an object-oriented approach is. You will usually find two kinds of people: those who have developed a number of systems in a funtional decomposition manner, and those who have written code using a so-called object-oriented programming language. Some of these people actually understand what an object-oriented approach is all about. However, watch out for the following people: - The people with the functional decomposition background who often describe what their "fantasy" of an object-oriented system or approach might be. These people have usually not done much reading on the topic, and often provide their own interpretations of what object-oriented buzzwords mean. They tend to freely mix concepts from a number of different paradigms, e.g., data flow diagrams and objects. - People who have written code in an object-oriented programming language are often unable to separate concepts from implementations, e.g., they seem unable to discuss anything without talking about how it is done in programming language X. Some of these people claim that methodolgies are harmful, and that an object-oriented approach obviates the need for methodologies. > Dick Botting > CSUSB -- Ed Berard (301) 353-9652
goss@ese.essex.ac.uk (Gossain Sanjiv) (08/08/89)
In a recent posting, <538@ajpo.sei.cmu.edu> Edward Berard comments: Topic: (CACM May 1989, Volume 32, Number 5, pp608-623) "An Object-Oriented Requirements Specification Method" by Sidney C. Bailin <SBAILIN@NSSDCA.GSFC.NASA.GOV> >> As an example he shows that SA separates the reading, sorting, >> and writing of some data into separate processes and a data store, >> whereas an OO structure gathers these inside an object with >> three actions and some data. > This seems strange from an object-oriented point of view, because: > - Reading is a composite operation involving several objects > (the input object, the actual object being read, and at > least one other object), see, e.g., the discussions on > "objectification" on comp.lang.ada, comp.lang.c++, and > others. > > - Sorting is also a composite operation, involving the object > being sorted and the composite object which contains these > objects, and operations from both classes. > > - The same is true for the writing operation. > > At best, you will have a massive amount of undesirable "object > coupling." Reusability and software reliability will be diminished. Yes, it seems to defeat the object (pardon the pun) to have an object oriented approach and yet still adhere to the same, inappropriate principles of a functional approach! I would agree here with Mr. Berard whole-heartedly. It seems to me that too many people try to evolve OO design methods from existing design approaches, when what is really required, IMHO, is to wipe the slate clean and start proposing design approaches that reflect the paradigm shift required when moving to OOP. Methods that arise from peoples experiences in OOD are far better than those that are derived from existing approaches. Sanjiv Gossain goss%ese.essex.ac.uk@nsfnet-relay.ac.uk ---------------------------------------------------------- Sanjiv Gossain Dept. of ESE Universtiy of Essex Colchester CO4 3SQ ENGLAND +44 206 873333 xt:2820
soft-eng@MITRE.MITRE.ORG (Alok C. Nigam) (08/12/89)
------- Forwarded Message Gossain Sanjiv <mcvax!ukc!servax0!ese!goss@uunet.uu.net> Organization: University of Essex, Colchester, UK States >It seems to me that too many people try to evolve OO design methods from >existing design approaches, when what is really required, IMHO, is to >wipe the slate clean and start proposing design approaches that reflect >the paradigm shift required when moving to OOP. Earlier in Vol 6, Issue 37, Edward Berard <sei!ajpo!eberard@pt.cs.cmu.edu> w rote >Subject: Re: Integrating SA/SD & DA/DD >Although object-oriented programming has been around (formally) for >almost twenty years, its practitioners unfortunately spent most of >their time focusing on coding and programming language issues. Until >the early 1980s very little work was done in the area of life-cycle >methodologies. Hence, we see the structured methodologists now >migrating to an object-oriented approach and bringing their largely >inappropriate methods, tools, and graphics with them. There is a problem here (1) Object Oriented Programming exists and has advantages(IMHO) (2) There is a a hefty investment in Analysis and Design Methods that don't fit Object Oriented Programming. (3) Programming technology and methodology have not (alone) consistently produced valuable pieces of software (4) Something has to be done prior to writing code. But what? In Vol 6, Issue 40, Edward Berard <sei!ajpo!eberard@pt.cs.cmu.edu> wrote: >Subject: Re: Attempts to connect SA/D and OOPS(2) >Please, object-oriented systems do _not_ organize by data. Objects >encapsulate: > - knowledge of state information (which may deal with "data," > but is more likely to be concerned with objects) > - operations (and their associated methods) > - [optionally] other objects, i.e., you may have: > - homogeneous composite objects > - heterogeneous composite objects > - [optionally] exceptions > - [optionally] constants > - concepts [...] >Object-oriented systems don't have "data" flows. If the concept of >something flowing is important to you, you can talk about "object >flows," although this would seem strange to some object-oriented folks. Forgive my ignorance but is it ok to assume that in an object oriented piece of software (1) there are things that we can call 'objects' which are separated from each other. (2) separate object have some means of communication with each other. (is this always one-one by the way?) (3) designing and documenting which communications should occur might save money - in the long run. (How much? - to the programmer, the designer, the maintainer,...) Given these - what language independant ways exist for (1) Recording existing communication patterns (Ideally in 4 forms: text, mathematical, automated, and graphic) (2) Deriving patterns of communication from existing software (3) Evaluating a pattern of communication. (4) Designing a pattern suitable for given situation. Dick Botting, Department computer science, California State University, San Bernardino, CA 92407 PAAAAAR@CCS.CSUSCC.CALSTATE paaaaar@calstate.bitnet PAAAAAR%CALSTATE.BITNET@CUNYVM.CUNY.EDU ------- End of Forwarded Message
eberard@ajpo.sei.cmu.edu (Edward Berard) (08/13/89)
In article <8908120353.AA14861@mitre.arpa>, Dick Botting wrote: > > Gossain Sanjiv <mcvax!ukc!servax0!ese!goss@uunet.uu.net> > States > >It seems to me that too many people try to evolve OO design methods from > >existing design approaches, when what is really required, IMHO, is to > >wipe the slate clean and start proposing design approaches that reflect > >the paradigm shift required when moving to OOP. > > Earlier in Vol 6, Issue 37, Edward Berard <sei!ajpo!eberard@pt.cs.cmu.edu> > wrote > >Subject: Re: Integrating SA/SD & DA/DD > >Although object-oriented programming has been around (formally) for > >almost twenty years, its practitioners unfortunately spent most of > >their time focusing on coding and programming language issues. Until > >the early 1980s very little work was done in the area of life-cycle > >methodologies. Hence, we see the structured methodologists now > >migrating to an object-oriented approach and bringing their largely > >inappropriate methods, tools, and graphics with them. > > There is a problem here > (1) Object Oriented Programming exists and has advantages(IMHO) > See, for example, some of the recent discussions I and Ralph Johnson have had on comp.lang.smalltalk. > (2) There is a a hefty investment in Analysis and Design Methods that > don't fit Object Oriented Programming. I recognize this as a real problem. Say, for a minute, you believe two things. First, that an object-oriented approach provides many worthwhile benefits _when_ _correctly_ _and_ _properly_ _applied_. Second, that an object-oriented approach is a significant departure from the more traditional (e.g., functional decomposition) approaches. So much so, that very little can be migrated from the traditional to the object-oriented. You now have a very typical "real world" problem on your hands. Do you continue to use inappropriate techniques, methods, and tools with the new technology, thereby both minimizing the promised benefits, and lengthening the time (and thus the costs) for the transition, or do you make a clean (and what may be costly) break? This is something that software people usually don't do, or don't do very well, i.e., make a meaningful assessment of costs of each alternative. Consider the following simple (incomplete and not very detailed) cost comparison: 1. Cost to acquire current technology: - training costs - hardware (e.g., workstations) costs - CASE software costs - hiring costs - costs to develop in-house policies, procedures, standards, guidelines, bidding and estimating strategies, and in-house training - consulting costs - cost for conferences 2. Cost to acquire the new technology: - all of the above costs - cost of creating and executing a transition plan 3. Quantification of cost benefits of new technology, i.e., cost savings per period of time. 4. Payback period estimation, i.e., the length of time before the new technology will actually pay for itself. 5. The impact, both positive and negative, of not moving to the new technology immediately. Note that, in this analysis, costs are not only financial costs. There are human costs, corporate image costs, and corporate capability costs. There are hidden psychological costs. For example, being in the technology transition business, I frequently hear things like: - I don't trust this new stuff. Therefore I'm going to act like I'm using it, but I'm really going to keep doing things the way I always have done them. - I really like this new technology, but management insists that we use inappropriate tools, techniques, and procedures, simply because they have made such a large investment in these items. I'm looking for a new job, i.e., one that will let me use the new technology in the right way. - I don't know. All these technologies are the same. You just get comfortable with one when a new one comes along. We don't get any work done here. We just change technologies. > (3) Programming technology and methodology have not (alone) > consistently produced valuable pieces of software Human beings, as a rule, have a great deal of difficulty differentiating between a bad idea, and a bad implementation of a good idea. Further, few people willing accept blame. So when something goes wrong, inanimate objects (e.g., programming languages, methodologies, and standards) are easy targets for blame. In essence, one of the hardest things for someone involved in a technical activity to do is to recognize the human part of the technology. Ask any one who has ever attempted to educate or train two, or more, people. Not everyone is equally capable. Of all the items which have an impact on the success or failure of a project, people have, by far, the largest impact. However, good people with poor tools are not as productive as good people with good tools. Yet, this is not enough. To get maximum benefits we must consider the whole picture, i.e., good people, good tools, good methodologies, good standards, good management, good training, etc. > (4) Something has to be done prior to writing code. But what? Here we begin to differentiate between computer science and software engineering. One of the things an engineer must do is to take the knowledge provided by the scientist, and apply it in a practical manner to everyday, "real world" problems, to produce cost-effective, pragmatic solutions. There are many different life-cycle models, e.g.: - flowchart model - sequential waterfall - iterative waterfall - b-model - spiral - recursive/parallel Each of these models is further divided into steps (stages). Some of these life-cycle models provide more than one place where coding can occur. However, to keep things simple, let's use traditional terms: 0. Going on in parallel with the life-cycles of many different software products, is object-oriented domain analysis (OODA). 1. Ignoring the (real) possibility of a feasibility study, one might begin with object-oriented requirements analysis (OORA). 2. There is, of course, object-oriented design (OOD). 3. Object-oriented implementation or coding is often referred to as object-oriented programming (OOP). Please note that OORA is _not_ merely structured analysis (SA) with a few object-oriented terms, nor is object-oriented design a variation on structure design (SD). To oversimplify, object-oriented software engineering involves: - Identifying relevant objects and classes - Documenting these objects and classes - Applying configuration management to the objects and classes of interest. - Producing both static and dynamic object-oriented models of the system. [I would very much like to avoid a detailed discussion of the processes involved with OORA, OOD, and OODA, although I have detailed, e.g., 600 slides worth of OORA, presentations on each.] > In Vol 6, Issue 40, Edward Berard <sei!ajpo!eberard@pt.cs.cmu.edu> wrote: > >Subject: Re: Attempts to connect SA/D and OOPS(2) > >Please, object-oriented systems do _not_ organize by data. Objects > >encapsulate: > > - knowledge of state information (which may deal with "data," > > but is more likely to be concerned with objects) > > - operations (and their associated methods) > > - [optionally] other objects, i.e., you may have: > > - homogeneous composite objects > > - heterogeneous composite objects > > - [optionally] exceptions > > - [optionally] constants > > - concepts > [...] > >Object-oriented systems don't have "data" flows. If the concept of > >something flowing is important to you, you can talk about "object > >flows," although this would seem strange to some object-oriented folks. > > Forgive my ignorance but > is it ok to assume that in an object oriented piece of software > (1) there are things that we can call 'objects' > which are separated from each other. This is true. There are also things like classes, systems of objects, and subsystems. > (2) separate object have some means of communication with each other. > (is this always one-one by the way?) There are many mechanisms by which objects can communicate. Smalltalk, for example, allows objects to "pass messages" in all directions. If you wish you can generalize the "message passing" concept. However, remember that messages are themselves composite objects. > (3) designing and documenting which communications should occur might > save money - in the long run. > (How much? - to the programmer, the designer, the maintainer,...) Documenting the interactions of objects, including how they exchange information, is important. However, things like "data flows" don't don't make sense in an object-oriented approach. One technique that is roughly equivalent is an "object-message diagram." This documents flows of messages among objects. > > Given these - what language independent ways exist for > (1) Recording existing communication patterns > (Ideally in 4 forms: text, mathematical, automated, and graphic) Before I begin to answer these questions, I must point out the following: - In addition to communication among objects, we must also provide a mechanism to describe the composition of a given object. - We must also have a mechanism for describing the dynamic behavior of the object - Any and all mechanisms must be object-oriented. One technique for representing the behavior of an object-oriented system is a Perti net graph. The "places" on the Petri net graph, e.g., represent objects in specific states. What is interesting about Petri net graphs is that they are often used to model systems, however, the arcs (edges) do not indicate flow of data or control. Specifically, you can represent a system of interacting (i.e., communicating) objects without showing communication in the conventional sense, i.e., "flowing" along the arcs. > (2) Deriving patterns of communication from existing software This depends on how the software was created. If the software was implemented using a functional decomposition technique, then data and control flows would most accurately reflect the intentions of the initial designers. Attempting to represent this software in terms of interacting objects is both difficult and confusing. > (3) Evaluating a pattern of communication. One of the key criteria for evaluating a "pattern of communication" is how consistent it is with the overall approach. For example, if the approach talks about objects, the pattern should also talk about objects. If the approach talks about functions, then the pattern should talk about functions. > (4) Designing a pattern suitable for given situation. I have a question. Must this "pattern of communication" be explicit or implicit? For example, in data flow diagrams the communication is explicit, i.e., via labeled edges. In Petri net graphs, the communication is implicit, i.e., derived from context. > > Dick Botting, > Department computer science, > California State University, San Bernardino, CA 92407 > > PAAAAAR@CCS.CSUSCC.CALSTATE > paaaaar@calstate.bitnet > PAAAAAR%CALSTATE.BITNET@CUNYVM.CUNY.EDU -- Ed Berard (301) 353-9652
nigam@MWSUN.MITRE.ORG (Alok Nigam) (08/15/89)
Date: Fri, 11 Aug 89 11:03:08 PDT From: PAAAAAR%CALSTATE.BITNET@CUNYVM.CUNY.EDU Subject: Re: Attempts to connect SA/D and OOPS Gossain Sanjiv <mcvax!ukc!servax0!ese!goss@uunet.uu.net> Organization: University of Essex, Colchester, UK States >It seems to me that too many people try to evolve OO design methods from >existing design approaches, when what is really required, IMHO, is to >wipe the slate clean and start proposing design approaches that reflect >the paradigm shift required when moving to OOP. Earlier in Vol 6, Issue 37, Edward Berard <sei!ajpo!eberard@pt.cs.cmu.edu> w rote >Subject: Re: Integrating SA/SD & DA/DD >Although object-oriented programming has been around (formally) for >almost twenty years, its practitioners unfortunately spent most of >their time focusing on coding and programming language issues. Until >the early 1980s very little work was done in the area of life-cycle >methodologies. Hence, we see the structured methodologists now >migrating to an object-oriented approach and bringing their largely >inappropriate methods, tools, and graphics with them. There is a problem here (1) Object Oriented Programming exists and has advantages(IMHO) (2) There is a a hefty investment in Analysis and Design Methods that don't fit Object Oriented Programming. (3) Programming technology and methodology have not (alone) consistently produced valuable pieces of software (4) Something has to be done prior to writing code. But what? In Vol 6, Issue 40, Edward Berard <sei!ajpo!eberard@pt.cs.cmu.edu> wrote: >Subject: Re: Attempts to connect SA/D and OOPS(2) >Please, object-oriented systems do _not_ organize by data. Objects >encapsulate: > - knowledge of state information (which may deal with "data," > but is more likely to be concerned with objects) > - operations (and their associated methods) > - [optionally] other objects, i.e., you may have: > - homogeneous composite objects > - heterogeneous composite objects > - [optionally] exceptions > - [optionally] constants > - concepts [...] >Object-oriented systems don't have "data" flows. If the concept of >something flowing is important to you, you can talk about "object >flows," although this would seem strange to some object-oriented folks. Forgive my ignorance but is it ok to assume that in an object oriented piece of software (1) there are things that we can call 'objects' which are separated from each other. (2) separate object have some means of communication with each other. (is this always one-one by the way?) (3) designing and documenting which communications should occur might save money - in the long run. (How much? - to the programmer, the designer, the maintainer,...) Given these - what language independant ways exist for (1) Recording existing communication patterns (Ideally in 4 forms: text, mathematical, automated, and graphic) (2) Deriving patterns of communication from existing software (3) Evaluating a pattern of communication. (4) Designing a pattern suitable for given situation. Dick Botting, Department computer science, California State University, San Bernardino, CA 92407 PAAAAAR@CCS.CSUSCC.CALSTATE paaaaar@calstate.bitnet PAAAAAR%CALSTATE.BITNET@CUNYVM.CUNY.EDU
nigam@MWSUN.MITRE.ORG (08/25/89)
------- Forwarded Message Received: from CALSTATE.BITNET by CUNYVM.CUNY.EDU (IBM VM SMTP R1.2.1MX) with BSMTP id 1641; Thu, 17 Aug 89 20:49:13 EDT Received: by CCS.CSUSCC.CALSTATE.EDU from Mail by CSUMailer (1.3); Thu, 17 Aug 89 17:40:38 PDT Date: Thu, 17 Aug 89 17:40:24 PDT From: PAAAAAR%CALSTATE.BITNET@CUNYVM.CUNY.EDU Subject: Re: Attempts to connect SA/D and OOPS To: soft-eng Cc: <PAAAAAR> (Dick Botting), <PWROSS@MILLERSV> (Resend - Previous version probably garbled or lost...) In Vol 6 Number 42, Edward Berard <sei!ajpo!eberard@pt.cs.cmu.edu> described the costs and problems of discarding older methods and tools to gain the benefits of Object Oriented Programming. He mentions 4 new methods: OODA - Object-oriented domain analysis OORA - Object-oriented requirements analysis OOD - Object-oriented Design OOP - Object-oriented implementation (often called Object-oriented programming) He stated that these were different to previous methodologies and hinted at the existance of much detailed information on these techniques. He also said that >I would very much like to avoid a detailed discussion of the processes >involved in OORA, OOD and OODA I would certainly value a detailed discussion of such topics - a seminar on Ada and OOP costs $500 for example and 2 days. He refers to the use of Petri Nets to describe the behaviors of object-oriented systems - I studied these in some faculty seminars back in the early 1970's - as I recall, when we drew a Petrie Nets some of the cycles in the equivalent directed graph were associated with `objects`. For example Making coffee had cycles running thru all places involving `perculator`, and another cycle covered all the `cup` occrences and so on... When two or more of these cycles overlapped then the objects tended to be interacting. Does something like this also happen in OO systems? How many real projects have used Petri Nets? How do you communicate a Petri Net over the network? He asks >Must this "pattern of communication" be explicit or >implicit. I was trying to define important Entities and Relationships in OO Software Engineering - in particular searching for the Relationships betwee n Objects that it would be helpful to have on record. I would claim that technical drawing is a standard way to show the boundaries of mechanical objects and to make explicit how they touch. Babbage invented a diagram to help him simplify his Analytical Engine - one part made explicit how parts were connected. Electrical Engineers have explicit lines connecting objects in a circuit diagram. I was thinking along these lines: If I've got the task of changing an object-oriented system what I need to do is to find out what objects could cause the observed problems and which could not. Afterall doctors have anatomy diagrams and X-rays that make explicit the connections implicit in the body. If there was accessible and explicit documentation of what classes of objects can influence other classes - my maintenance task should be easier... Or suppose if you are working on an Object-oriented system for my bank, I will want to be certain that the object representing the customer's money is isolated from other "customers" and from the programmer/designer except under specific and explicit circumstances. I want evidence that the system will not do the Salami Trick! However I think DFDs are a comparatively uneconomic representation. I'd like to test the N-squared chart developed in TRW some years ago. These naturally map any set (nodes) and pairwise `relations` into a matrix with clearly visible connections and or boundaries. (They also take up a lot of space) Dr. Richard J. Botting, Department of computer science, California State University, San Bernardino, CA 92407 PAAAAAR@CCS.CSUSCC.CALSTATE paaaaar@calstate.bitnet PAAAAAR%CALSTATE.BITNET@CUNYVM.CUNY.EDU ------- End of Forwarded Message
eberard@ajpo.sei.cmu.edu (Edward Berard) (09/06/89)
In article <PAAAAAR%CALSTATE.BITNET@CUNYVM.CUNY.EDU>, Dick Botting writes: > In Vol 6 Number 42, Edward Berard <sei!ajpo!eberard@pt.cs.cmu.edu> described > the costs and problems of discarding older methods and tools to gain the > benefits of Object Oriented Programming. He mentions 4 new methods: > > OODA - Object-oriented domain analysis > OORA - Object-oriented requirements analysis > OOD - Object-oriented Design > OOP - Object-oriented implementation > (often called Object-oriented programming) > > He stated that these were different to previous methodologies and hinted > at the existence of much detailed information on these techniques. He > also said that > >I would very much like to avoid a detailed discussion of the processes > >involved in OORA, OOD and OODA > > I would certainly value a detailed discussion of such topics - > a seminar on Ada and OOP costs $500 for example and 2 days. At present, I cannot go into a detailed discussion of the methodologies, but I can give you a sketch of the motivations, concepts, and backgrounds. Historically, much of the work in object-oriented technology focused on programming language issues, e.g., how to implement a particular concept in programming language X. Little thought was given to "formal approaches." In fact, a common description of object-oriented programming was: 1. create classes 2. create instances of the classes (i.e., objects) 3. cause the objects to interact via message passing. This approach works very well with small, easily-understood systems. However, as the size of a system grows, additional techniques are needed to manage the complexity. Make no mistake about it, object-oriented programming has made several important contributions to software engineering, _over_ _and_ _above_ _the_ _usually_ _cited_ _advantages_ _of_ _object-oriented_ _technology_, e.g.: - The concepts and techniques of "composition" as opposed to "decomposition." Traditional approaches, emphasized breaking a system down until all that remained were easily understood units (modules). While this did help to manage one type of complexity, it did little to offset the increased complexities of duplications, and "re-invention of the wheel." Many people confuse composition techniques with "code first, think later." This is not the case. Composition dictates that the developers have a library of reusable components, and that at some point during development, the software engineers will be able to make an informed decision as to which, if any, of these components can be used in the new system. - The concept of treating vastly dissimilar items in a similar manner, thus keeping things simple. For example, a graphics object can be stored and retrieved in much the same manner as a text object. (It is no accident that polymorphism is very often associated with object-oriented approaches.) You might say that object-oriented software engineering involves: - the identification of relevant objects and classes - documentation of these items - the application of sound configuration management to the objects and classes - documenting the interaction of these items with each other and their surroundings in a manner which is consistent with an object-oriented philosophy. - application of testing, maintenance, quality assurance, debugging, and other techniques in a manner consistent with an object-oriented philosophy. Note that I carefully avoided saying how the "relevant objects and classes" were identified, e.g., they could have been identified by inspection, or uncovered via decomposition of a large system. Of course, we should point out that object-oriented approaches are fundamentally different from the more traditional approaches. Further, we should also observe that the general life-cycle approach is very different, i.e., object-oriented life-cycles are recursive/parallel ("analyze a little, design a little, implement a little, test a little"), as opposed to the more traditional waterfall life-cycle (all the analysis, followed by all the design, followed by all the coding, etc.). If you will grant me that this is a "short net message" and not a series of week-long tutorials, I will attempt to present some material here regarding object-oriented life-cycle methodologies. Please remember that this is material taken out of context, and is presented with virtually no explanations. Object-Oriented Domain Analysis (OODA) may be accomplished by: 1. Defining the domain 2. Defining (conceptually) the object-oriented items which are to be considered for reuse within the domain 3. Collection of a representative sample of applications found within the application domain 4. Analysis of these representative applications it identify reusable components 5. Defining reusability guidelines regarding the reusable components 6. Demonstrating reuse using the reusable components and the guidelines 7. Making recommendations [OODA can be, and is, much more formal than these few points suggest.] Object-oriented requirements analysis (OORA) can be accomplished by: 1. Identifying the sources of requirements information 2. Characterizing the sources of requirements information [Note that these first two steps are required for any requirements analysis -- object-oriented, or not.] 3. Identifying candidate objects, classes, systems of objects, and subsystems (see my earlier postings on comp.lang.smalltalk for definitions of "subsystems" and "systems of objects") 4. Building object-oriented models of both the problem and potential solutions, as necessary 5. Re-localization of the information around the appropriate candidate objects, classes, systems of objects, and subsystems 6. The selection, creation, and verification of object and class specifications (OCSs), subsystem specifications, and system of objects specifications. 7. Assigning the above items to their appropriate place in the object-oriented requirements specification (OORS), i.e., the object-general section, or the application-specific section 8. The development and refinement of the qualifications section of the OORS 9. The development and refinement of the precise and concise system description. Object-oriented design (OOD) may be accomplished by: 0. Object-oriented domain analysis (OODA) 1. Object-oriented requirements analysis (OORA) 2. Identifying design objects and classes of interest 2.1 Developing a design strategy [at an appropriate level of abstraction] 2.2 Identifying objects, classes, subsystems, and systems of objects, of interest 2.3 Associating attributes with these items 3. Identifying operations suffered by and required of each object and class of interest 3.1 Identifying operations of interest 3.2 Associating attributes with the operations of interest 3.3 Handling composite operations 3.3.1 Decomposition into primitive operations 3.3.2 Decoupling of objects and classes 4. Selecting, creating, and verifying object and class specifications (OCSs), subsystem specifications, and systems of objects specifications, for design 4.1 Binding objects, classes, and operations 4.2 Examining objects and classes for completeness 5. Deciding on language implementations for objects, classes, systems of objects, and subsystems 5.1 Items identified during analysis 5.2 Items identified during design 6. Graphically representing both object-oriented items and their interactions 6.1 Static representations 6.1.1 Booch diagrams (can be used with many different languages) 6.1.2 Semantic networks 6.1.3 Subsystem graphics 6.1.4 Systems of objects graphics 6.2 Dynamic representations 6.2.1 State transition diagrams 6.2.2 Petri net graphs 6.2.3 Object-Message diagrams 7. Establishing the interface for each object-oriented item 7.1 Objects and classes 7.2 Systems of objects 7.3 Subsystems 8. Implementing each object-oriented item 8.1 Implementation of the interface objects and classes 8.2 Implementation of the other objects and classes 8.3 Recursive application of the object-oriented development process > He refers to the use of Petri Nets to describe the behaviors of > object-oriented systems - I studied these in some faculty seminars back in > the early 1970's - as I recall, when we drew a Petri Nets some of the cycles > in the equivalent directed graph were associated with `objects`. For example > Making coffee had cycles running thru all places involving `perculator`, > and another cycle covered all the `cup` occrrences and so on... When two or > more of these cycles overlapped then the objects tended to be interacting. > > Does something like this also happen in OO systems? Somewhat, however, it is more common to ask questions such as "what objects have to be in what states for a transition to occur?" Remember, in object-oriented Petri nets, places represent specific objects in specific states. > How many real projects have used Petri Nets? The Europeans in general, and the Italians especially, seem to be very interested in Petri nets and Petri net graphs. I know of a few communications systems applications which have made use of Petri net graphs. Although they are conceptually very simple, one of the biggest obstacles to their effective use is the apparent lack of understanding of how to use both levels of abstraction and equivalence classes to simplify models created using them. > How do you communicate a Petri Net over the network? One of the things I find particularly attractive about Petri net graphs is that they can be reduced to mathematical expressions. These mathematical representations have two very important additional benefits: they aid in the verification and automation of Petri net graphs, and once in their mathematical form, they can be converted to other representation forms, e.g., state transition diagrams. There is, of course, much more that I could say. Unfortunately, my time is limited. Thanks for listening. -- Ed Berard Berard Software Engineering, Inc. 18620 Mateney Road Germantown, Maryland 20874 Phone: (301) 353-9652 E-Mail: eberard@ajpo.sei.cmu.edu