Q. What does "object-oriented" mean to you? Q.

Can you name the four phases of the Unified Process? A. Inception Elaboration Construction Transition Q. What can you tell us about the different phases of the Unified Process? Q. Talk about some OO/UML artifacts you have used. What did they mean to you? How did you apply them to yout project? Q. What is a "use case"? A. A complete end-to-end business process that satisfies the needs of a user. Q. What are different categories of use cases? A. Detail Level: - High level / Expanded Task Level: - Super / Sub (Abstract; Equal Alternatives; Complete v. Partial) Importance: - Primary / Secondary (use Secondary for exceptional processes) Abstraction: - Essential / Real Q. What is the difference between a real and essential use case? A. essential - describes the "essence" of the problem; technology independent real - good for GUI designing; shows problem as related to technology decisions Q. What is polymorphism? A. Different objects reacting to the same message differently. Q. In a System Sequence Diagram, what is a System Event? A. It is from the expanded use case. It is an actor action the system directly responds to. Q. Give an example of a situation which a State Diagram could effectively model. A. Think of a cake and its different stages through the baking process: dough, baked, burned. Q. For what are Operations Contracts written? A. System Events.

Q. In an Operations Contract's postconditions, four types of activities are specified. What are they? A. They are: instances created associations formed associations broken attributes changed Q. What does an Operations Contract do? A. Provides a snapshot of the System's state before and after a System Event. It is not interested in the Event's specific behavior. Q. What does a Collaboration Diagram (or Sequence Event, depending on the process) model? A. A System Event's behavior. Q. How does one model a class in a Collaboration Diagram? An instance? A. A box will represent both; however, a class is written as MyClass whereas an instance is written as myInstance:MyClass. Q. What are the three parts of a class in a Class Diagram? A. Name, Attributes, Methods. Q. In Analysis, we are interested in documenting concepts within the relevant problem domain. What is a concept? A. A person, place, thing, or idea that relates to the problem domain. They are candidates for objects. Q. Does a concept HAVE to become a class in Design? A. No. Q. In a Class Diagram, what does a line with an arrow from one class to another denote? A. Attribute visibility. Q. What are the four types of visibility between objects? A. Local, parameter, attribute, global. Q. Have you ever used any Design Patterns? Q. When do you use inheritance as opposed to aggregation? A. An aggregation is a "has a" relationship, and it is represented in the UML by a clear diamond. An example of an aggregate relation is Table of Contents and Chapter. A Table of Contents "has a" Chapter.

Q. When would I prefer to use composition rather than aggregation? A. Composition is a stronger form of aggregation. The object which is "contained" in another object is expected to live and die with the object which "contains" it. Composition is represented in the UML by a darkened diamond. An example of a composite relation is a Book and Chapter. A Book "has a" Chapter, and the Chapter cannot exist without the Book. Q. Is the UML a process, method, or notation? A. It is a notation. A process is Objectory, Booch, OMT, or the Unified Process. A process and a notation together make an OO method. Q. What are two uses for inheritance? A. specialization - "IS A KIND OF" relationship abstraction - pull a common concept out to a higher level to make it more generic Q. When would you use an abstract base class A. When you need to enforce a particular interface, but are not able or do not need to define behavior at the base class level. Q. All containers are pretty well templatized now. Can you think of any current "example" (e.g., an algorithm) which is implemented via inheritance but might be more efficiently implemented using templates? Q. Can you tell us some good principles to use in OOA&D? A. NOTE: This is not a complete list, by any means, but we have listed the GRASP Patterns here for examples (these help assign responsibilities between objects): Low coupling High cohesion Controller Creator Don't Talk to Strangers Pure Fabrication Indirection Polymorphism Expert Q. What are some practicle benefits we can gain from a welldesigned OO system? What is the Unified Modeling Language?

The Unified Modeling Language is a third-generation method for specifying, visualizing, and documenting the artifacts of an object-oriented system under development. The Unified Modeling Language represents the unification of the Booch, Objectory, and OMT methods and is their direct and upwardly compatible successor. It also incorporates ideas from a number of other methodologists, including Peter Coad, Derek Coleman, Ward Cunningham, David Embley, Eric Gamma, David Harel, Richard Helm, Ralph Johnson, Stephen Mellor, Bertrand Meyer, Jim Odell, Kenny Rubin, Sally Shlaer, John Vlissides, Paul Ward, Rebecca Wirfs-Brock, and Ed Yourdon. We continue to solicit feedback from these and other methodologists and from the industry at large as we continue their work. Our goal is to make the Unified Modeling Language the basis for a common, stable, and expressive object-oriented development method. -------------------------------------------------------------------------------Why did we create the Unified Modeling Language? Identifiable object-oriented methods first appeared in the late 1980s. In the years following--characteristic of almost every emerging discipline--there was an explosion of object-oriented methods as various methodologists experimented with different approaches to object-oriented analysis and design. Experience with a number of these methods grew, accompanied by a growing maturation of the field as a whole as more and more projects applied these ideas to the development of production-quality, missioncritical systems. By the mid-1990s, a few second-generation methods began to appear, most notably Booch '94, the continued evolution of OMT, and Fusion. Given that the Booch and OMT methods were already independently growing together and were collectively recognized as the dominant object-oriented methods worldwide, Booch and Rumbaugh joined forces in October 1994 to forge a complete unification of their work. Both Booch and OMT had begun to adopt Ivar Jacobson's use cases, and thus it was natural that in the fall of 1995, Jacobson formally joined this unification effort. As we began our unification, we established four goals to bound our efforts: To model systems (and not just software) using object-oriented concepts To establish an explicit coupling to conceptual as well as executable artifacts To address the issues of scale inherent in complex, mission-critical systems To create a method usable by both humans and machines Devising a notation for use in object-oriented analysis and design is not unlike designing a programming language. First, the author must bound the problem: Should the notation encompass requirements specification? Should the notation extend to the level of a visual programming language? Second, the author must strike a balance between expressiveness and simplicity: Too simple a notation will limit the breadth of problems that can be solved; too complex a notation will overwhelm the mortal developer. In the case of unifying existing methods, the author must also be sensitive to the installed base: Make too many changes, and you will confuse existing users. Resist advancing the notation, and you will miss the opportunity of engaging a much broader set of users.

As the primary authors of the Booch, Objectory, and OMT methods, we were motivated to create a unified method for three simple reasons. First, these methods were already evolving toward each other independently. It made sense to continue that evolution together rather than apart, thus eliminating the potential for any unnecessary and gratuitous differences that would further confuse users. Second, by unifying these methods now, we could bring some stability to the object-oriented marketplace, allowing projects to settle on one mature method and letting tool builders focus on delivering more useful features. Third, we expected that our collaboration would yield improvements in all three earlier methods, helping us to capture lessons learned and to address problems that none of our methods currently handled well. -------------------------------------------------------------------------------What's the official name for the Unified Modeling Language? "The Unified Modeling Language" or UML for short. At the start of our work, we called our effort simply "The Unified Method" because we needed a simple working title. We began a name search, but we never found a name that was cool (like Java) or right-on (like Fusion) that sounded good to us. We are still hoping to find a suitable name (suggestions are most welcome), although "The Unified Modeling Language" has entered such common usage that it may end up being the default name.

-------------------------------------------------------------------------------What's our schedule for the Unified Modeling Language? Jim and Grady began their unification efforts in October 1994. At OOPSLA '94, we promised to deliver a unified method for public review by OOPSLA '95. We achieved that goal with the release of the version 0.8 document set of the Unified Modeling Language. Currently, Jim, Ivar, and Grady are working to incorporate Objectory's concepts into that early work, as well as to simplify the modeling language and address some advanced issues (namely, concurrency and distribution). We expect to produce a version 0.9 addendum to the original Unified Modeling Language document in the next couple of months, based on public feedback on our 0.8 document, the continuing unification with the Objectory semantics, and work with other methodologists. Late in 1996, we will present this work for standardization to the Object Management Group (OMG).


Where can I get more information? You can visit the UML page in our Tutorials section.

-------------------------------------------------------------------------------What is the intended scope of the Unified Modeling Language? First and foremost, the Unified Modeling Language fuses the concepts of Booch, Objectory, and OMT. It is our intention to produce a single, common, and widely usable modeling language for these methods and, working with other methodolgists, for other methods as well. Second, the Unified Modeling Language pushes the envelope of what can be done with existing methods. In particular, we have targeted the modeling of concurrent, distributed systems, meaning that the Unified Modeling Language will contain elements that address these domains. Third, the Unified Modeling Language focuses on a standard language, not a standard process. It is our experience that different organizations and problem domains require different processes. (For example, the Microsoft development process is an interesting one, but building shrink-wrapped software is vastly different from building hard-realtime avionics systems upon which lives depend.) Therefore, our efforts are concentrating first on a common metamodel (which unifies semantics) and second on a common notation (which provides a human rendering of these semantics). We will not necessarily standardize a process, although we will continue to promote an architecture-driven, incremental, and iterative development process.

-------------------------------------------------------------------------------What are the primary artifacts of the Unified Modeling Language? This question can be answered in two ways: first in terms of the artifacts that constitute the Unified Modeling Language (the inside view) and second in terms of the artifacts that users apply to model systems using the Unified Modeling Language (the outside view). From the inside, the Unified Modeling Language consists of three things: A formal metamodel A graphical notation A set of idioms of usage

We began with a formal metamodel, using the notation of the Unified Modeling Language itself supplemented by English text. The purpose of the metamodel was to provide a single, common, and unambiguous statement of the syntax and semantics of the elements of the Unified Modeling Language. The presence of this metamodel has made it possible for us to agree on semantics, decoupled from the human factors issues of how those semantics would best be rendered. Additionally, the metamodel has made it possible for us to explore ways to make the modeling language much more simple by, in a sense, unifying the elements of the Unified Modeling Language. (For example, we have discovered commonality among the concepts of protocols and use cases.) We expect to make this metamodel even more precise by describing its dynamic semantics using formal logic. The graphical notation is the most visible part of the Unified Modeling Language, and it constitutes the graphical syntax that humans and tools use to model systems. Lastly, the Unified Modeling Language encompasses a set of idioms that describe common usage (by humans) and degrees of freedom (by tools). From the outside, the Unified Modeling Language encompasses a number of models that can be rendered in a variety of projections: Use-case diagrams Class diagrams State-machine diagrams Message-trace diagrams Object-message diagrams Process diagrams Module diagrams Platform diagrams Use-case diagrams are as found in Objectory, and they serve to organize the use cases that encompass a system's behavior. Class diagrams, derived from Booch and OMT, capture the static semantics of the classes that constitute a system. State-machine diagrams, derived from David Harel, capture the dynamic semantics of a class. Messagetrace diagrams, object-message diagrams, and process diagrams, derived from Booch, OMT, and Fusion, capture the dynamic semantics of collaborations of objects. Module diagrams serve to model the development view of a system, whereas platform diagrams serve to model the physical computing topology upon which a system executes. These are the primary artifacts that a modeler sees, although the method (and tools) provide for a number of derivative views.

-------------------------------------------------------------------------------What is the Unified Modeling Language metamodel? A metamodel is a model of a model.

Think of it this way: Developers create things like class diagrams and object diagrams to model a system under development; this resulting model describes a system. A metamodel is a model of that model. Metamodels are important, because they can provide a single, common, and unambiguous statement of the syntax and semantics of a model. We began our work on the Unified Modeling Language by starting with a metamodel, because it let us come to rapid agreement about the meaning of things (and the very things themselves) that were to constitute our unification. Thus, our metamodel includes some obvious things like classes and objects (which are isomorphic to the elements of the modeling language) and some nonobvious things like uninterpreted and nonclass decls (which are artifacts of the metamodel). For most users, the metamodel is invisible (as it should be). It's valuable to us, because it lets us communicate our intended semantics to each other and to tool builders. It also gives us something to throw stones at as we try new modeling problems: If we can model something complex easily, then we know we are on the right path. Similarly, it gives us something to evolve. A large part of our latest work has been making the metamodel simpler (which is a very hard thing to do). Currently, the metamodel for the Unified Modeling Language is described in a combination of English text and class diagrams using the Unified Modeling Language itself. For those purists out there: Yes, Godel's Theorem does apply, which means that there are theoretical limits to what we can express about the metamodel using the metamodel itself. However, we think our combination of text and diagrams strikes the right balance between expressiveness and readability. Currently, we are working to make this model more formal, in two ways. First, we are writing a number of use cases against the metamodel, which lets us try out common and not-so-common modeling problems. Second, we are writing a number of use cases against the dynamic semantics of the metamodel, using formal logic. This is definitely not for the meek, but again it helps us be sure we are generating models that are selfconsistent and precise.

-------------------------------------------------------------------------------What is the notation for the Unified Modeling Language? The Unified Modeling Language notation is truly a melding of the graphical syntax of Booch, Objectory, and OMT. It largely draws from the renderings of each one of these methods, with a number of symbols thrown out (because they were confusing, superfluous, or little-used) and with a few new symbols added. From the outside, the Unified Modeling Language encompasses the following models:

Use-case diagrams Class diagrams State-machine diagrams Message-trace diagrams Object-message diagrams Process diagrams Module diagrams Network diagrams Use-case diagrams look pretty much as they do in Objectory. Class diagrams look much like OMT class diagrams (classes are rendered as rectangles) but with most relationships drawn from Booch. State-machine diagrams, as developed by David Harel, are the same as in Booch and OMT. Message-trace diagrams were in all three methods (and have thus been unified). Objectmessage diagrams are derived from Booch (with the change that objects are no longer clouds, but structured clouds; we also adopt the numbering convention from Fusion). Process diagrams are a new invention, and module diagrams and network diagrams derive from Booch. Thus, if you are a Booch user, you'll need to get over the use of clouds (rectangles are more space-efficient), but pretty much things look the same. If you are an OMT user, you'll see a number of niggling changes (such as the multiplicity balls replaced with more explicit expressions) but no fundamental changes (though there are a number of additions). If you are an Objectory user, you'll see new notation (because Objectory didn't deal with much graphical modeling postanalysis). For all three kinds of users, there will be new things to learn (such as stereotypes and properties) but nothing that a few minutes of reading won't do.

-------------------------------------------------------------------------------What is the process associated with the Unified Modeling Language? It's architecture-driven, and it's incremental and iterative. Booch, Objectory, and OMT all have well-defined processes, and these are indeed sufficient for the Unified Modeling Language. Beyond that, we don't yet specify a process. Our focus first is on a common, standard modeling language. Processes by their very nature must be tailored to the organization, culture, and problem domain at hand. What works for one context (shrink-wrapped software development, for example) would be a disaster for another (hard-real-time, human-rated systems, for example).

This does not mean that we are blind to the importance of process. We do think we understand what such a process looks like, but it is unnecessary for us to bind the Unified Modeling Language to a particular process, because experience has shown that the modeling languages of Booch, Objectory, and OMT are amenable to a spectrum of different processes. Thus, we have kept in mind which artifacts are important for visualizing different aspects of a system under development and which artifacts are critical for controlling and measuring the progress of a development team. Doing so has been sufficient for us to know what to keep and what to throw out yet still permit diverse organizations to apply the Unified Modeling Language successfully.

-------------------------------------------------------------------------------How does the Unified Modeling Language compare to Booch, Objectory, and OMT? The Unified Modeling Language is simpler, more self-consistent, and more expressive. Furthermore, the Unified Modeling Language is a natural successor to Booch, Objectory, and OMT, and as such it is compatible with each. It's simpler in that we've found a number of elements collapse into one. For example, Booch used the notion of active objects and persistent objects. We generalize this by denoting them as stereotypes or properties in the Unified Modeling Language--which also lets us express things like location for distributed systems. Similarly, Objectory used different kinds of classes in its models. This generalizes to the stereotype concept as well. OMT had data-flow diagrams, which are thrown out and replaced with, among other things, use cases. It's more self-consistent in that the metamodel hangs together well. We've eliminated the confusion surrounding has relationships in Booch. Objectory's use cases have application in a number of places in the metamodel. OMT's semantics of associations have been cleaned up. It's more expressive as well. The Unified Modeling Language lets you express the semantics of concurrent and distributed systems. We've introduced new elements, such as protocols, interfaces, and stereotypes. Also, we have a means of making the notation tailorable, through the use of properties, some of which we predefine and some of which we leave open. For the Booch user, the new notation requires getting used to rectangles instead of clouds, plus learning a few new things. For the Objectory user, the new notation requires learning some new notation. For the OMT user, the new notation requires changing the icons for some things and adding a few new things. In all, we expect the learning curve for Booch, Objectory, and OMT users to be very, very small. Indeed, it's not hard to explain the changes from any of these three methods to an experienced user in an hour or less.

-------------------------------------------------------------------------------What are some of the new features of the Unified Modeling Language? The goals of our unification efforts were to keep it simple, to cast away elements of classic Booch, Objectory, and OMT that just didn't work in practice, and to add only new elements that let us address modeling problems that neither Booch nor Objectory nor OMT had yet addressed. Because we were in effect designing a new language (albeit a graphical one), we had to strike a proper balance between minimalism (everything is text and boxes) and overengineering (having an icon for every conceivable modeling element). To that end, we were very careful about adding new things, because we didn't want to make the unified method more complex. Along the way, however, we found some things that we genuinely needed to add, because they were useful in practice in other methods and previously had been handled only informally in either Booch or OMT. Responsibilities are a good example of this. Responsibilities become first-class citizens in the Unified Modeling Language, reflecting the fact that responsibility-driven design is a proven technique that fits well with the Booch/Objectory/OMT philosophy. Now, it is possible to declare and manipulate the responsibilities of a class directly. This approach also gives us a better coupling to CRC card techniques. Stereotypes are a slightly different issue--one that requires a bit of a background to explain. In our drive to make things simpler, Jim and Grady introduced the notion of properties, whereby every element in the Unified Modeling Language could have an open-ended set of properties, such as properties for code generation. This mechanism gave us a means of extending and tailoring the language without radically changing it. As it turns out, properties allowed us to simplify some previously orthogonal concepts. In Booch, for example, there were ways of showing the concurrency and persistency properties of a class. In the Unified Modeling Language, these are no longer independent concepts, but rather they are treated as just two of the predefined properties of a class. We plan to specify a number of predefined properties (such as a class being abstract, the multiplicity of a class, or designating the interface of a class) while leaving the specification of others to the tool and the project (thereby giving us extensibility). With this collapse of concepts into one mechanism (properties), we found that there was one property that stood out and warranted special treatment, and that's the notion of a stereotype, which is derived from the work of Rebecca Wirfs-Brock. Basically, a stereotype is a metaclassification. For example, in C++, you can declare a hierarchy of classes that are used only as exceptions. From a language perspective, they are just plain, ordinary classes. However, from the architectural perspective, exceptions classes are different, for they are intended to be used in special ways. (You generally only throw and catch instances of these classes and no other classes.) We can specify these classes as being of the stereotype exception, which sets them apart visually and--more

importantly--semantically, because the tools that manipulate these models can do special things knowing a class's stereotype. For example, a tool might enforce special semantic checks knowing that a class is an exception, preventing its use for anything other than throwing and catching. As it turns out, stereotypes are a generally useful concept for a number of other modeling problems, such as the modeling of classes that are extensible at runtime. Distribution is handled quite nicely with properties (the location of an object is one of its properties), and thus we needed to add no special mechanism. This suggests that we selected the right primitive modeling elements in the Unified Modeling Language metamodel. Threads and processes are a subject of ongoing work. We are toying with some approaches (again using properties and conventions with object-message diagrams), but we need a little more experience to make sure we have settled on the right constructs. We are considering treating threads and processes as first-class citizens (possibly warranting a special icon). For the issues of both distribution and concurrency, we are particularly sensitive to the modeling needs of systems built with technologies such as CORBA and OLE/COM, as well the style of distribution found in Java applets. These are the target technologies that we want to be certain we can model well, because we expect that one of more of these approaches will become pervasive. This is not to say that we will settle on supporting only certain proprietary technologies; rather, we will be as general as we can be but pragmatic enough to realize that we can't be overly general. As it turns out, the fact that interfaces are treated as first-class citizens in the Unified Modeling Language (this is another important addition to the method) helps us deal with the publish/subscribe paradigm found in both CORBA and COM, So again, we think we are on the right path to address many of distribution and concurrency modeling problems without adding numerous special mechanisms to the method. -------------------------------------------------------------------------------How does the Unified Modeling Language affect existing Booch, Objectory, and OMT users? There are three parts to this answer. First, it should be made clear that the Unified Modeling Language is not a radical departure from Booch, Objectory, or OMT, but rather the legitimate successor to all three. This means that if you are a Booch, Objectory, or OMT user today, your training, experience, and tools will be preserved, because the Unified Modeling Language is a natural evolutionary step.

Second, the Unified Modeling Language is more expressive yet simpler, cleaner, and more uniform than Booch, Objectory, or OMT. This means that there is value in moving to the Unified Modeling Language, because it will allow projects to model things they could not have done before. Third, you need not wait for the Unified Modeling Language to get value out of objectoriented technology. It will take some time for the Unified Modeling Language to wind its way through the standards process; it will take some time for tools vendors to support the method. If you choose to use object-oriented stuff, then choose Booch. If you are construction-oriented, choose Objectory if your focus is more on business process reengineering (BPR), and choose OMT if your focus is more on analysis. The important point is that you will not make a wrong decision if you choose any one of these three, and the migration from any one of these methods to the Unified Modeling Language will be relatively painless.

-------------------------------------------------------------------------------When will tools support the Unified Modeling Language? Grady, Ivar, and Jim have explicitly invited every object-oriented analysis and design tool vendor we are aware of to learn about the Unified Modeling Language and to comment on its content. At OOPSLA '95, we even hosted a vendor meeting to unveil our work. Since that time, a number of tool vendors (including Rational) have pledged their support for the Unified Modeling Language. UML is already very well supported by Microgold's "With Class" version 3.1, and will be supported even further in version 4.0. It is most likely that tools will stage their support for the Unified Modeling Language either by starting with use cases first, plus perhaps a few other things (like the cosmetics of the graphical syntax and possibly stereotypes and properties), or by supporting simple semantics first and then adding deeper semantic support later. Clearly, there won't be complete tools supporting the Unified Modeling Language until the method itself is finalized sometime early in 1997, but we expect that multiple sources of tool support will emerge very shortly thereafter.

-------------------------------------------------------------------------------What are the plans for making the Unified Modeling Language a standard? We are participating in the Object Management Group's (OMG's) call for information on object-oriented methods. Clearly, we can't just declare the Unified Modeling Language to be a standard: That status has to be earned and granted. We are thus doing all we can to be responsive to this proposal, and we will continue to work with the OMG. On the other

hand, we will continue to make the Unified Modeling Language pervasive, by making the fruits of our work readily available as well as by encouraging other methodologists to work with us and other tool vendors and training organizations to adopt the Unified Modeling Language.

-------------------------------------------------------------------------------Where did Grady come up with those clouds? Back in 1982, Grady was starting to evolve his thoughts about object-oriented analysis and design. All the structured analysis folks had already used up all the good symbols (rectangles, circles, and so on), so he wanted to select something that represented the fact that this object-oriented stuff was different. Grady took a cue from Intel's 432, their take on an object-oriented microprocessor. The 432 never succeeded commercially (they could never get their yields up, and there were real problems in their process model), but they did use one cool idea: They used clouds in their documentation to represent objects. That's what Grady then used in his early papers, and the idea stuck. In the Unified Modeling Language, clouds disappear. This was the Right and Noble Decision: Rectangles are easier to draw and more space efficient, although they are heavily overloaded. We preserve the concept in object diagrams, which use structured clouds (basically, vertically elongated hexagonal shapes). Jim's pointed out that when clouds crystallize, they form hexagons :-) so we probably made the right choice here.


Sign up to vote on this title
UsefulNot useful