Hi all!
Let’s suppose you are at the stage of your project when you have not yet committed to architecture, but you have to create a model with the crucial functional requirements (the “what”, as some contribs. to this thread have pointed out). You would need, for example, to model some behavior to log into the system, and behavior for every one of the main menu items (lets say: Planning, Progress Reporting, Results, Follow-Up, tons of administrative stuff, so on). At this stage, you don’t know if you are going to develop through programming, buying packages, borrowing from legacy, prototyping, or whatever.
Inspired by something you just read in the EA Forum, you hop into your model-1947 flow chart vehicle, or its (not-so-different but more sophisto) activity diagram model. After about a month or so, you come out proudly with a humongous quantity of diamond-decision-studded diagrams. But (chucks!) after all that work, it is decided that Windows XP natural log-in is sufficient, and makes life easier for the users. Something similar happens to your beautiful model of the menu: some bum comes out with the news that the customer already has all the licensing to use Share Point, so the menu will not have to be programmed. And then... (“No! Not my flow model of Gantt-chart behavior! Please!”), but change is relentless, and it goes on, and on, and on.
Suppose, instead, that you have chosen to model this behavior with use cases: an Enter the System (or Log-in) use case, a Planning use case, and so on... What would be lost after deciding on architecture? Nothing, or close to nothing: use cases derive very well to whatever technical solution is given.
When you get to design, things get better still: your use case model has permitted you to identify reusable behavior that shortens the tons of administrative data entry interfaces to just a few use cases: you solve one, and you solve a whole family. You have a list of items you need to be able to display, update or delete? You do one use case called “Display list”, and either do a text description, a sequence diagram or even a GUI prototype, and re-use it every time you need it. It represents the same sequence of events, and you can parameterize your prototype until it solves a whole family of problems.
Sequence diagrams and sequence fragment reuse is solved at the use case level, through inheritance, use, extend, and so forth. Keep in mind also, that interaction diagrams work very well to model Services Oriented
Architectcure.
Of course: there will be situations where you need an algorithmic, step by step, modeling, and activity diagrams are the best solution for them. UML is a huge tool box now, so you have lots of choices.
BTW, Jim: I’m sure you did some fine structured modeling. The point I was trying to make was not against what worked well with structured SW engineering models, but with what failed and created paralysis (and the same, or worse, happened with many OO efforts).
Cheers!
jaimeglz