Thanks for your sugestions guys
im downloading both staruml & classbuilder to try them both & make a decision.
I do not use UML designers anymore basically because I noticed I was always stuck at the design phase and never got around implementing.
heh yea, i know exactly what you mean. I used to have the same trouble myself. you wanna know how & why i solved this problem?
(if the answer is no, you can stop reading right now, cause its kinda long story
)
The first year i spent writting (serious) code (like for apps you acutally sell), i did it with no plan whatsoever, i just made a "picture" in my mind of what i wanted (or what my customer asked me for), and jumped right into coding.
Then i realized, that i spent
a lot of time re-writting things over and over because, at some point in development, i realized that the way i designed feature "foo" (wich i allready implemented), was somehow incompatible, or incoherent with feature "bar", so, hit DELETE and re-desigh, re-implement "foo" all over again to be ok for "bar" (you get the picture). So i did a little research on the overall concept of software desing (not tecnical stuff, just design), and all my "research" led to the same place, UML. So i tought myself some UML, OOP concepts, etc. It was all nice & sweet, (in teory), till i actually tried to use it, then i experienced exactly what you mention. I spent ages writting & modifying UML diagrams before i acutally got to open mi IDE.
The solution i found, is this:
whenever i set my mind on some project, and before i even touch my IDE, i start my UML model with use case diagrams, with a simple description of what i "expect" from the app distributed in use cases. yes i know use cases are kinda silly (looking like some cartoon drawn by a 5 yr old with little people etc.), but the point is they give you a
100% cristal clear view of what you want from your app. the trick here is to
keep it simple, its not necesary to have a "strict" layout of the descriptions, a simple non tecnical, hunan readable narration will do.
After that, based on the descriptions on the use cases, i usually have a reasonably clear "view" of what objects i need, so i put them in class diagrams, then i just assign "responsabilities" to those objects, in other words, their public interfaces,
no private methods or even data members! and im done!, No sequence diagrams, no state machines, etc.
This is key to not getting stuck at design, i do
not specify
how those objects do things, only
what they do. I usually dont even include GUI classes on my UML models, my classes in these diagrams never have private methods, and i
never use words line void* wxSomeClass, char*, int, etc, those are IMHO,
implementation details, not part of the desing, so if i need to say that some function in some class returns a chunk of text, i specify return type as "text"(not char* or std::string). If it helps, pretend that you are
NOT a programmer, pretend you have not a clue of what a pointer or a vector is!, right now youre just an "architect" here. NOT a "construction" man. (you get the picture).
After my design is done, i find the actual implementation to be
very very much easier!, because i can "focus" on coding one object at a time, and getting that particular object to do
what my uml model sais it should do, without having to worry about how some other object is gonna "get along" with it.
The ultimate goal of
design is (imo) to get a coherent object "layout", distribute responsabilities among them, and define
the basic way they interact with each other, to do what my app is supposed to do. you can deal with arrays, chars* & linked-lists later in implementation.
I hope you find this "little" speech usefull.