> It's time to start defining the classes...
Lol... okay.
For clarification purposes, I want to be sure I understand your response properly. Please correct me if I have misinterpreted you.
First, I have not yet completed the Use Case model for the entire system. However, I assume your response makes the assumption I would have done so already, and it is your suggestion that I next design my classes before creating sequence, state chart and other diagrams derived on the Use Case scenarios.
That sounds reasonable, but this still begs the question regarding UML. If the purpose of UML is to visually model a object-oriented application (in this case) such that one can define a system's interactions before implementing the system, don't we have a chicken vs. egg situation? Let me define the term implementation. I am not referring to code implementation of the class model. In the context of UML, I use the term implementation (perhaps not the right term) to describe the process of designing a PIM based around all the interactions within the proposed system as noted by the various structural and behavioral diagrams and the various system views.
In other words - again, maybe I'm wrong - in terms of designing an object-oriented application, I thought UML serves to architect the system in a way that helps to establish a solid class design model. Given this understanding, I would consider the PIM model (and, subsequently, any PSM models) would essentially be almost self-describing based on the rigorous work done in architecting the system (ie, application, in this case).
Back to the chicken vs. the egg. In your response it sounds like you are advocating class design well before the aforementioned rigorous architectural considerations. You may ask, how would one otherwise create a sequence diagram, for example, without the existence of a class model?
Here's my take. I'll try to lay out my explanation using one of the scenarios for my "Add a CD" Use Case, using a sequence diagram.
Use Case: Add a CD
Scenario: Manual Entry - Success
1. End User activates a command to Add a CD
2. Fills in CD details data entry form
3. Clicks the "Save" button
The corresponding Sequence Diagram...
The left-most element is the actor "End User". The next element to the right is signified by a "boundary" element called "Add a CD Data Entry Screen". The last, right-most element, is a "control" element called "Manage Completed Data Entry".
An "Add a CD" message is sent from "End User" to "Add a CD Data Entry Screen". A "Click Save" message is sent from "Add a CD Data Entry Screen" to "Manage Completed Data Entry". "Manage Completed Data Entry" returns a "Save Result" message to "Add a CD Data Entry Screen". "Add a CD Data Entry Screen" returns a "Save Result" message to "End User".
The sequence diagram clearly shows the steps for this scenario, yet it does not rely upon any predefined class model. Rather, the messages abstract the intended operations of a class model, and the elements abstract the class model classes and/or class instances. In fact, the messages themselves neither have parameters, nor do they return anything. In other words, this is an example of my understanding of UML. That is, first focus on architecting a solution (eg, this sequence diagram) without concern for implementation details (eg, sequence elements & messages abstracting classes and their operations).
My point is that a rigorous architecture will clearly suggest the class model, rather than requiring a class model as a prerequisite to the architectural design. Of course, once the class model is designed, then implementing the details for it and all the related diagrams then becomes an iterative process, but that is to be expected in the Unified Process methodology.
Again, this is new to me, so I truly appreciate constructive criticism and alternative viewpoints on this topic.
Thanks again.