<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
>

<channel rdf:about="http://tabletumlnews.powerblogs.com/">
<title>Tablet UML News</title>
<link>http://tabletumlnews.powerblogs.com/</link>
<description>News and commentary from Martin L. Shoemaker, author of Tablet UML</description>
<dc:language>en-us</dc:language>
<dc:date>2007-04-10T14:04+00:00</dc:date>
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1122474050.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1124856268.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1123553343.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1121888361.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1121664721.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1121659106.shtml" />
 </rdf:Seq>
</items>
</channel>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1122474050.shtml">
<title>My speaking and other travel schedule (Revised April 10, 2007)</title>
<link>http://tabletumlnews.powerblogs.com/posts/1122474050.shtml</link>
<description>UPDATE: To make it easier to find this entry, I've added a link to it in the right sidebar, right under the links for my books and my classes....</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2007-04-10T14:04+00:00</dc:date>
<content:encoded><![CDATA[UPDATE: To make it easier to find this entry, I've added a link to it in the right sidebar, right under the links for my books and my classes.<br />
<br />
<a href="http://www.grdotnet.org">West Michigan .NET User Group</a> in Grand Rapids MI. April 17. Topic: Dee Jay: A Voice-Controlled Juke Box for Windows Vista.<br />
<br />
<a href="http://www.dayofdotnet.org/Sessions.aspx">Ann Arbor Day of .NET</a> in Ann Arbor MI. May 5. Topic: Talking with Vista.<br />
<br />
<a href="http://www.grdotnet.org/DODN07/Sessions.aspx">West Michigan Day of .NET</a> in Grand Rapids MI. May 5. Topics: Do, Undo, Redo, Do Over: A Generics Command Pattern Implementation; Talking with Vista.<br />
<br />
<a href="http://huntug.org/DesktopDefault.aspx">Huntsville New Technology User Group</a> in Huntsville AL. September 11. Topic: Dee Jay: A Voice-Controlled Juke Box for Windows Vista.<br />
]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1124856268.shtml">
<title>Where've you been, Martin? (Part II)</title>
<link>http://tabletumlnews.powerblogs.com/posts/1124856268.shtml</link>
<description>Well, after getting most (but not all) of the needed files onto the backup machine, I had to run to one client, work all day, run home, install more files, fly...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2005-08-24T04:08+00:00</dc:date>
<content:encoded><![CDATA[Well, after getting most (but not all) of the needed files onto the backup machine, I had to run to one client, work all day, run home, install more files, fly to Atlanta, and then work-work-work for another client. This project's a bit of a departure for me, but fun: the client wants me to model an existing, pre-UML system for them, so that they can use the model as guidance in transitioning to their next generation system. So I've been immersing myself in a wholely new, unfamiliar problem domain and trying to learn to think like an old hand; and then I've been converting my understanding into UML and communicating that back to the client, so that they can confirm or correct what I've learned. It's all NDA stuff, so I can't share any samples; but it's a great example of why I emphasize UML as a form of communication. I start with only a lay understanding of their problem domain; they start with only <a href="http://www.umlbootcamp.com/">a classroom exposure to UML</a>; and in striving to communicate between us, we're growing our understanding in both directions. It's loads of fun!<br />
<br />
But that can't take up all of my time, can it? No, but it took up a lot. Then my weekend got derailed by an unfortunate ATM incident (since resolved) that left me planning how to stretch $20 for I wasn't sure how long. So none of the fun stuff I planned to do and blog about took place: no visit to the Bonsai gardens (next trip) and no visit to Borders to get fresh reading material. I just sat in the hotel room and worked on various projects and <a href="http://games.amctv.com/completebond/index.html?referer=%2F">watched lots of Bond films</a>.<br />
<br />
And now it's my last day in Atlanta, and what a day it was! Today, we had our first review meeting, which went better than I dared hope.<br />
<br />
Then I drove to Borders, and was delighted to find <a href="http://www.tabletuml.com/UMLApplied.aspx">my book</a> on the shelves. (For all that <a href="http://tabletumlnews.powerblogs.com/posts/1123261622.shtml">I'm unimpressed by their discount program</a>, I'm usually pleased to find that Borders carries my book in most outlets.)<br />
<br />
And then a little advance scouting had told me that nearby was <a href="http://www.fireofbrazil.com/">Fire of Brazil</a>, a Brazilian churrascaria restaurant. That means that the cooks skewer various meats on swords and cook the meat over open flames; and then gauchos bring the meat-laden swords around to the tables. You get a little card, red on one side and green on the other. If you turn it to green, they stop at your table and offer to cut you off a slice of whatever they happen to be carrying. Today I had slices of tenderloin, top sirloin, pork loin, turkey, pork sausages, and so many other meats I can't remember them all. It's not for every day (well, unless you're an Atkins devotee), and it's pricey; but as a treat, it's not to be missed.<br />
<br />
And tomorrow, I get to fly home, and get my computer back from the shop, and see my wife and dogs, and then head to Ann Arbor for <a href="http://www.mlive.com/entertainment/aanews/index.ssf?/base/features-0/1124619064131910.xml&coll=2">the 8th annual Duelist</a>. I'll try to post photos.]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1123553343.shtml">
<title>Everyday UML, Installment 2: Identifying and Organizing Domain Objects</title>
<link>http://tabletumlnews.powerblogs.com/posts/1123553343.shtml</link>
<description>This will be the second in a series of posts that will demonstrate simple use of the Unified Modeling Language in the context of a simple project. (Thanks to James...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2005-08-09T02:08+00:00</dc:date>
<content:encoded><![CDATA[<i>This will be the second in a series of posts that will demonstrate simple use of the Unified Modeling Language in the context of a simple project. (<a href="http://jameshudnall.com/blog.php?/weblog/secrets_of_writing_progressive_complications/">Thanks to James Hudnall for the inspiration.</a>) For the first installment, <a href="http://tabletumlnews.powerblogs.com/posts/1121888361.shtml">click here</a>.</i><br />
<br />
<div class="trigger" id="shec16iy0s.34">(<a href="#" onClick="document.getElementById('hec16iy0s.34').style.display = 'block'; document.getElementById('shec16iy0s.34').style.display = 'none'; return false;">For an introduction to UML or to the Your Comic Source example model, click here</a>)</div><br />
<div class="hidden" style="display: none;" id="hec16iy0s.34"><br />
<br />
<H1>What the Heck is UML?</H1><br />
<br />
For those who are new to the Unified Modeling Language (or UML), here's a <i>very</i> brief introduction. UML is essentially a set of blueprinting notations for various aspects of system design, with an emphasis on communication to customers, end users, and other developers. Sadly, a lot of software isn’t really designed in the traditional sense. If I gave you a pile of nails and lumber, I’ll bet you could build a decent doghouse by eye. You <i>might</i> build a decent house, but you’d probably want to draw a sketch, at least; and I’ll bet you’d never pass inspection without that sketch, whether you needed it or not. And if you tried to build a skyscraper without detailed plans, you’d never get it off the ground without it collapsing; and government types would shut you down before somebody got hurt. (Thanks to <a href="http://www.cc2e.com/">Steve McConnell</a> for the analogy.)<br />
<br />
Well, a lot of software is built with doghouse methods, even if it’s a skyscraper project. UML is an industry-standard set of diagram types and modeling syntax that help you draw the plans. It's a standard maintained by the <a href="http://www.omg.org">Object Management Group</a>. It won't solve all your problems, but it's a useful tool to help you progress from doghouses to skyscrapers.<br />
<br />
<H1>Want to Learn More About UML?</H1><br />
<br />
Start with my <a href="http://www.tabletuml.com/Help/FiveStepUML.htm">Five Step UML tutorial</a> for a step-by-step example of using UML to analyze and design a system. And check out my <a href="http://www.tabletuml.com/Help/UMLGlossary.htm">UML Glossary</a>.<br />
<br />
When you're ready to learn UML in more depth, try our <a href="http://www.UMLBootCamp.com">Accelerated UML and UML BootCamp training courses</a>. You can also read <a href="http://www.tabletuml.com/UMLApplied.aspx">UML Applied: A .NET Perspective</a>.<br />
<br />
And of course, there's always <a href="http://www.uml.org/">the official site of the UML standard</a>.<br />
<br />
<H1>Defining the Model</H1><br />
<br />
Before you begin modeling, it's always a good idea to identify the purpose of the model. That will help you to know the scope of your model and to thus limit and focus your work.<br />
<br />
For this stage of <b>Everyday UML</b>, our model will be defined as follows:<br />
<br />
<blockquote><br />
This is a model of operations for Your Comic Source, a full-service comic and game store with both storefront and online sales and events.<br />
</blockquote><br />
<br />
Note that this model is described as a model of operations for the comic store. That implies that this is a <b>business model</b>, focused on the operations of the business as a whole, not just on the operations of the software. Remember my message from <a href="http://www.tabletuml.com/UMLApplied.aspx">UML Applied</a> and <a href="http://www.umlbootcamp.com/">UML BootCamp</a>:<br />
<br />
<blockquote><br />
UML is not about <i>software</i> design; it's about <i>system</i> design, where a system is <i>structure</i> with <i>behavior</i> and <i>goals</i>. And software is certainly one kind of system, but it's <b>not</b> the only kind.<br />
</blockquote><br />
<br />
And in this particular set of examples, the system will be the entirety of Your Comic Source.<br />
<br />
A business model is only one kind of model you might construct with UML. We'll see other kinds of models in future installments of <b>Everyday UML</b>.<br />
<br />
<div class="trigger">(<a href="#" onClick="document.getElementById('shec16iy0s.34').style.display = 'block';document.getElementById('hec16iy0s.34').style.display = 'none'; return false;">hide</a>)</div></div><br />
<br />
<H1>Objects and Classes</H1><br />
<br />
In <a href="http://tabletumlnews.powerblogs.com/posts/1121888361.shtml">our last installment</a>, we identified and organized actors, the people and systems with which Your Comic Source will interact. Then I promised that in this installment, we'd identify and organize examples of our second UML concept: <b>domain objects</b>, the information and things that are of interest to the actors and that are affected by the things they do.<br />
<br />
Now when I said "objects" above, some of you ran screaming from the room, thinking, "Oh, no, that means object-oriented programming! That's <b>hard!</b>" Well, personally, I think that "objects are hard" is very much old-school thinking. Literally old-school: the object-oriented (OO) approach is a hard transition for programmers who have mastered and adjusted to functional or structured programming. But in my experience, it's actually easier to teach new programmers using OO, because it's a more natural match to how we think and speak about the world.<br />
<br />
And when I said "objects" above, others of you shook your heads in disapproval, thinking, "Oh, no, that means object-oriented programming! That means design and code. It's too early for that." There is a tendency to think:<br />
<br />
<blockquote><br />
objects = classes = code <i>(Wrong!)</i><br />
</blockquote><br />
<br />
As I argue in <a href="http://www.tabletuml.com/UMLApplied.aspx">my book</a> and in <a href="http://www.UMLBootCamp.com">my classes</a>, objects are not just a code construct. Objects are everywhere, becuase they're just things and concepts in the world around us (and thus in the problem domain). Really, the proper formulation is simply this:<br />
<br />
<blockquote><br />
objects = nouns <b>(Right!)</b><br />
</blockquote><br />
<br />
Objects are things. The actors and customers and end users are concerned about and work with things. Therefore, actors and customers and end users are concerned about and work with <b>objects</b>. And therefore, objects are an essential part of analysis, not just design and code.<br />
<br />
But above, I also mentioned classes. "Aha!" cry the nitpickers. "Now <i>classes</i> are <i>code!</i> And it's too early for code. We told ya so!"<br />
<br />
And again, I have to disagree. "Class" is really just another name for "category" or "kind" or "type" (though "type" also has code connotations). It just means a grouping of very similar objects that can be described in similar traits and terms. "Dog" is a class; Betsy, Bluebell, Jake, Radar, and Frosty are particular objects of the class Dog. They differ by many characteristics &mdash; breed, sex, height, weight, coat, color, age, and name being the main ones &mdash; but they're all Dogs just the same. Meanwhile, Gomer &mdash; who has a breed, a sex, a height, a weight, a coat, colors, an age, and a name &mdash; is fundametally <i>not</i> a Dog. He's of class Cat. We recognize Dog and Cat as different categories, <i>even though it might be convenient to lump them together in the code.</i><br />
<br />
So while it's true that OO programming languages have a concept called classes, it's not true that classes = code. Classes are a useful part of our analysis model, too. (Insisting that objects = code or classes = code is an example of the <b>That’s Design, Not Analysis</b> antipattern, as I discuss in <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321330617/qid=1123037557/sr=8-1/ref=pd_bbs_sbs_1/104-1633744-9892737?v=glance&s=books&n=507846">Requirements Patterns and Antipatterns</a>.)<br />
<br />
But categories can themselves be grouped into categories. Or to speak in OO terms, a class can have a base class (or sometimes called a superclass, or a general class, or a parent class, or a number of different synonyms based on the speaker's programming language and habits) that describes common characteristics shared with other classes. For example, Dog and Cat have a base class of Mammal; and it's in Mammal that we describe the characteristics of breed, sex, height, weight, coat, color, age, and name. Because those characteristics are part of Mammal, they are implicitly part of Dog and Cat.<br />
<br />
And just as a class can have a base class, it can have multiple subclasses (or sometimes called a derived classes, or a general class, or a child class, or other synonyms) that add more specific characteristics and details. The relationship between base class and subclass is sometimes called "inheritance", because the subclass inherits characteristics from the base class. The relationship is also sometimes called "specialization", because the subclass is a more specialized form of the base class. And in "official" UML parlance, the relationship is called "generalization", because the base class is a more general form of the subclass. (I <i>really</i> must apologize for all these different synonyms. They arose through different branches of OO evolution, and we're just kinda stuck with them. I'll try to consistently use "base class", "subclass", and "inheritance"; but I may slip up from time to time.)<br />
<br />
I find that it's usually easier to analyze requirements in terms of classes of objects, not specific objects themselves. So even though I say we're going to identify domain objects, we're really going to look at domain classes more than objects. (I apologize if my terminology is confusing, but it's a habit I find hard to break.)<br />
<br />
But what defines a class? Well, UML defines four basic parts to a class:<br />
<br />
<ul><br />
   <li><b>Name.</b> This part is obvious: what do we call the class (as distinct from individual objects of the class)?</li><br />
   <li><b>Attributes.</b> What are the characteristics that describe objects of the class, and that may help us to distinguish one object from another? In our Dog example above, breed, sex, height, weight, coat, color, age, and name are all attributes.</li><br />
   <li><b>Operations.</b> What are the things that all objects of the class can do? In our Dog example, all Dog objects can hunt and play and bark.</li><br />
   <li><b>Relations.</b> How do individual objects relate to each other? How does the entire class relate to other objects and classes? A Dog object can have one or more Owner objects (and vice versa, trust me). Inheritance is an example of a relationship between two classes.</li><br />
</ul><br />
<br />
<H1>Brainstorming About Domain Objects</H1><br />
<br />
So now that we're all on the same page regarding domain objects, we can start identifying them. As with actors, if I'm completely new to a problem domain, I won't try to identify a lot of domain objects up front. Instead, I'll go straight to identifying use cases (the subject of our next installment), and then see if any domain objects are discovered through the use cases (as we'll see, possibly in installment 3, possibly installment 4 &mdash; I don't have a firm outline yet). I use the use cases partly as an exploratory mechanism, helpng me to explore and learn an unfamiliar domain. (I explain this approach in <a href="http://www.tabletuml.com/UMLApplied.aspx">UML Applied</a>.)<br />
<br />
But when you know something about the problem domain, it may be easier to start by brainstorming and listing candidate domain actors. And as I explained in the last installment, I know a fair amount about comic stores! So I'm pretty comfortable in identifying and describing a lot of domain objects. As with the candidate actors from installment 1, this list won't be perfect: I'll miss <b>a lot</b> of domain objects, and I'll list some that we'll end up never needing. But this list is just a starting point for discussion.<br />
<br />
So with a little thought, I came up with the domain objects shown in Figure 9:<br />
<br />
<center><a href="/files/tabletumlnews-Domain_Objects.gif"><img src="/files/tabletumlnews-Domain_Objects-small.gif" width="701" height="511" alt="Figure 9: YCS Domain Objects"></a><br /><br />
<b>Figure 9: YCS Domain Objects</b></center><br />
<br />
The standard UML symbol for an actor is a three-compartment rectangle. The top compartment lists the name, the middle compartment lists the attributes, and the bottom compartment lists the operations. In Figure 9, I also drew some relations between classes, which I'll add to as my domain knowledge evolves.<br />
<br />
Note that the domain objects in Figure 9 don't appear in any particular order, as should be expected from brainstorming. These domain objects are described below:<br />
<br />
<ul><br />
   <li><b>Action Figure.</b> A plastic, metal, or plush figure, usually of a character from some Comic Book or other Book. Often partly or fully articulated. (Don't <i>ever</i> call them "dolls" if you want to get out of the store without a lecture!)</li><br />
   <li><b>Board Game.</b> A Game in which the rules and actions involve moving pieces or counters around a board.</li><br />
   <li><b>Book.</b> A single volume publication consisting primarily of text, usually paperback or hardbound.</li><br />
   <li><b>CCG.</b> a.k.a. Collectible Card Game.</li><br />
   <li><b>Comic Book.</b> A single volume publication consisting primarily of fully illustrated stories (with text as only a secondary element), usually bound in glossy paper or card stock. A single Comic Book may tell all or part of a story.</li><br />
   <li><b>Comic Series.</b> A continuing, regularly published series of Comic Books (i.e., numbered "Issues") that involve a common theme, common characters, or common creators.</li><br />
   <li><b>Customer.</b> A person who buys Comic Books, Books, Games, or other merchandise at the store. (See below for more discussion of Customer.)</li><br />
   <li><b>Customer Order.</b> An Order placed by a Customer to purchase various merchandise.</li><br />
   <li><b>Distributor.</b> In most cases, comic stores do not deal directly with individual vendors. Instead, they work Distributors who research and buy from vendors and then solicit orders from the stores.</li><br />
   <li><b>Distributor Order.</b> A merchandise order that the store places with the Distributor.</li><br />
   <li><b>Employee.</b> This object represents the information that is known about a particular Employee. (See below for more discussion of Employee.)</li><br />
   <li><b>Game.</b> A product which allows one or more players to compete against each other or against a set of challenges, all according to a set of rules.</li><br />
   <li><b>Game Calendar.</b> A calendar of upcoming Game Events.</li><br />
   <li><b>Game Event.</b> A scheduled playing session at which one or more players will play one or more Games.</li><br />
   <li><b>Graphic Novel.</b> A single volume publication consisting primarily of fully illustrated stories (with text as only a secondary element), usually bound in hard back or heavy card stock. A single Graphic Novel usually tells one complete story, and usually contains more pages on higher quality paper stock than a typical Comic Book.</li><br />
   <li><b>Magazine.</b> A single volume publication consisting primarily of ads, illustrations, stories, articles, and editorials, all of which involve a common theme, common topics, or common creators. Most Magazines are periodicals (with a regular publication schedule), but some are special editions. A magazine is usually bound in and printed on glossy paper.</li><br />
   <li><b>Payable Account.</b> An account of funds that the store owes (usually to a vendor, a Distributor, or an Employee).</li><br />
   <li><b>Receivable Account.</b> An account of funds that the are owed to the store (usually by a Customer).</li><br />
   <li><b>Release Calendar.</b> The schedule of when particular merchandise is expected to arrive in the store.</li><br />
   <li><b>RPG.</b> a.k.a. Role Playing Game. A Game in which the rules and actions involve players telling an interactive story in a setting and plot devised by a gamemaster.</li><br />
   <li><b>Subscription.</b> A request by a Customer to purchase in advance every issue of a Comic Series or a Magazine.</li><br />
   <li><b>Supplement.</b> A Game that does not stand on its own, but rather adds additional rules and options to some other Game.</li><br />
   <li><b>Supplies.</b> Merchandise such as counters, dice, comic bags, and other materials which may be used with a Game or Comic Book or other merchandise, but which would usually not be of interest to anyone who hadn't purchased said merchandise (i.e., most people have no use for comic bags unless they buy Comic Books to put in them).</li><br />
   <li><b>Time Sheet.</b> A record of the hours an Employee worked.</li><br />
   <li><b>Trade Paperback.</b> A single volume publication that collects a number of issues of a Comic Book, usually bound in hard back or heavy card stock. The material contained is not original, but a Trade Paperback is otherwise very much like a Graphic Novel. A single Trade Paperback usually tells one complete story, and usually contains more pages on higher quality paper stock than a typical Comic Book.</li><br />
   <li><b>Video Game.</b> A game played by one or more players on a computer or a game console.</li><br />
   <li><b>Work Calendar.</b> A schedule of hours to be worked by various Employees.</li><br />
</ul><br />
<br />
Note that two of these classes, Customer and Employee, have the same namea as actors from <a href="http://tabletumlnews.powerblogs.com/posts/1121888361.shtml">Installment 1</a>. These objects represent the information we know about those actors, not the actors themselves. You may find it confusing that the actors and the classes have the same names. I do, too, honestly, so my usual practice would be to call these "records": Customer Record and Employee Record. But to some people, record = database = design, and they jump back to the <b>That’s Design, Not Analysis</b> antipattern. So when I think that might disturb them, I avoid the phrase "record". In retrospect, I'm feeling that the name confusion is every bit as bad as <b>That’s Design, Not Analysis</b>; so maybe a better choice would be Customer Info and Employee Info. "Info" is such a nice, vague word that no one can really mistake it for a design decision. So I'll switch to those terms as we move forward.<br />
<br />
<H1>Relating and Organiing Domain Objects</H1><br />
<br />
To repeat: the domain objects in Figure 9 appear in a scattershot stream-of-consciousness order, with little thought about how particular domain objects might relate to each other. And just as with the actors in <a href="http://tabletumlnews.powerblogs.com/posts/1121888361.shtml">Installment 1</a>, it will be useful to organize the domain objects into packages and also to expand upon the relations between them. So I'll start by subdividing the domain objects into the packages shown in Figure 10:<br />
<br />
<center><a href="/files/tabletumlnews-Domain_Object_Packages.gif"><img src="/files/tabletumlnews-Domain_Object_Packages-small.gif" width="220" height="187"  alt="Figure 10: YCS Domain Object Packages"></a><br />
<b>Figure 10: YCS Domain Object Packages</b></center><br />
<br />
<H2>Accounting Objects</H2><br />
<br />
We'll look at each of these packages in more detail below, starting with the easiest: Accounting. This package's contents are shown in Figure 11:<br />
<br />
<center><b><a href="/files/tabletumlnews-Accounting_Objects.gif"><img src="/files/tabletumlnews-Accounting_Objects-small.gif" width="220" height="192"  alt="Figure 11: YCS Accounting Objects"></a><br />
Figure 11: YCS Accounting Objects</b></center><br />
<br />
In this diagram, I added a new class, Account, to represent characteristics and behavior that are common to both Payable Accounts and Receivable Accounts. I also added two classes found in the Parties package but related to classes in this package: Employee Info and Party (discussed under the Parties package below). I drew these two classes in <span style="COLOR: maroon">dark red</span> to make them stand out, as a way to indicate that they're external to this package.<br />
<br />
There are two kinds of relationship shown in Figure 11:<br />
<br />
<ul><br />
   <li><b>Generalization.</b> As above. Shown with a triangle-headed arrow.</li><br />
   <li><b>Association.</b> Shown with a line or arrow, this relationship between two classes indicates that the classes collaborate in some way. You should prefer a line when the two classes interact freely. You should prefer an arrow when one class controls or "owns" the interactions. In Figure 11, for example, there are navigable association from Payables Account and Receivables Account to Party, indicating that the accounts are Paid To or Owed By particular Parties. There is also a simple association between Time Sheet and Employee Info.</li><br />
</ul><br />
<br />
(Other types of relations are possible, as we'll see in future installments of <b>Everyday UML</b>.)<br />
<br />
Note also that I added specific attributes and operations to some of the classes: an Account has a Balance, and you can Deposit or Withdraw funds (in specific Amounts) or transfer them to another Account; and a Time Sheet indicates the Hours Worked. But I didn't add any attributes or operations to the other classes. In part, this represents that I simply haven't thought through those other classes yet. But it also reflects an important UML practice: not every detail you know appears in every diagram. I called this <b>The Model Rule</b> in <a href="http://www.tabletuml.com/UMLApplied.aspx">UML Applied</a>:<br />
<br />
<blockquote><br />
We saw <b>The Model Rule</b> in chapter 1; but it bears repeating. To use UML effectively, you should never be simply drawing pretty pictures; you should always be editing an underlying model, using the pretty pictures as your user interface. Thus, the model should contain more information than is displayed in any one diagram; and information in one diagram should not explicitly contradict information in another diagram. Information that is found in one diagram but not in another should not be considered a contradiction. Rather, this simply indicates that the former diagram displays more detail than the latter. Details may be omitted from a given diagram to make it more comprehensible.<br />
<br />
But how do you keep these diagrams consistent with each other? How do you maintain the underlying model? This is where <a href="http://www.TabletUML.com">a good modeling tool</a> proves its worth: a good modeling tool will maintain the model as you create and edit your diagrams. If you are not using some sort of modeling tool, this very mechanical burden will fall on you, rather than on the machine. That’s a poor division of labor: brains should do brain work and machines should do mechanical work. If you do the mechanical work, you will do it imprecisely and inefficiently, and you’ll have no time for brain work.<br />
</blockquote><br />
<br />
Note the plus sign (+) in front of the attributes and operations in Figure 11. This indicates <b>visibility</b>, a concept which has a lot of design and code implications, but can be summarized pretty simply: the visibility of an attribute or operation indicates where it can be seen and used. Public visibility (+) means an attribute can be read and changed by any part of the system, or an operation can be requested by any part of the system. Private visibility (-) means an attribute can only be read and changed by the class that defines it, or an operation can be requested by the class that defines it. And protected visibility (#) is like private, but the attribute or operation is also visible to all subclasses of the class that defines it. For analysis work, public visibility is the most common, and you shouldn't worry too much about visibility concerns.<br />
<br />
<H2>Calendar Objects</H2><br />
<br />
The contents of the Calendars package are shown in Figure 12:<br />
<br />
<center><a href="/files/tabletumlnews-Calendar_Objects.gif"><img src="/files/tabletumlnews-Calendar_Objects-small.gif" width="220" height="305"  alt="Figure 12: YCS Calendar Objects"></a><br />
<b>Figure 12: YCS Calendar Objects</b></center><br />
<br />
As in Figure 11, Figure 12 indicates an external class (Game) in <span style="COLOR: maroon">dark red</span>. I also added attributes to the Game Event class, and I indicated that a Game Calendar contains zero to many (0..*, in UML notation) Game Events.<br />
<br />
But the largest addition in Figure 12 is the two added base classes: Schedule and Chronology. These are based on the <b>Chronologies</b> pattern from <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321330617/qid=1123037557/sr=8-1/ref=pd_bbs_sbs_1/104-1633744-9892737?v=glance&s=books&n=507846">Requirements Patterns and Antipatterns</a>. Here's a brief excerpt:<br />
<br />
<blockquote><br />
Start with an Event class. It should have attributes that describe an event, and that distinguish one event from other similar events. Some of these attributes might include a name, a description, and start and end times for the event. You might also want to indicate whether the event is recurrent (and if so, on what interval) and also whether the event has been completed or not. And you may want your Events to be able to issue notices when they’re due. Event may also be a base class, from which you derive more specific event types. And Event objects may relate to other Event objects. For example, an appointment Event might involve one or more reminder events that remind the user that the appointment will soon occur.<br />
<br />
Next, add a class, Chronology, that represents a list of events. It should include operations to add and remove Events. This general class contains Events both past and future. You may also want to add specific Schedule and History subclasses to represent future and past event lists. If you want to maintain both historical and planned events, then your Schedule class should include an operation to complete an Event and move it into a specific History.<br />
</blockquote><br />
<br />
Given that excerpt, it makes sense to add an Event base class, modifying Figure 12 to look like Figure 13:<br />
<br />
<center><a href="/files/tabletumlnews-Calendar_Objects_II.gif"><img src="/files/tabletumlnews-Calendar_Objects_II-small.gif" width="220" height="216"  alt="Figure 13: YCS Calendar Objects (Revised)"></a><br />
<b>Figure 13: YCS Calendar Objects (Revised)</b></center><br />
<br />
The change from Figure 12 to Figure 13 is an example of applying a pattern. Again, from <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321330617/qid=1123037557/sr=8-1/ref=pd_bbs_sbs_1/104-1633744-9892737?v=glance&s=books&n=507846">Requirements Patterns and Antipatterns</a>:<br />
<br />
<blockquote><br />
So putting the two definitions [of "pattern"] together, we see that patterns are a little bit of art and a little bit of science. The science part comes in as three tasks:<br />
<br />
<ul><br />
   <li><b>Discovery.</b> Finding some best practice, and recognizing that it is common enough to be worthy of documenting as a pattern.</li><br />
   <li><b>Cataloguing.</b> Documenting a number of patterns in detail, including how to recognize them, how to apply them, and even when not to apply them.</li><br />
   <li><b>Study.</b> Learning to recognize the patterns, and understanding them well enough that they become part of your nomenclature.</li><br />
</ul><br />
<br />
Then the art part comes in when you apply the patterns. You have to learn how to speak in terms of the patterns, how to see where they fit, and how to apply them. It takes a good eye to see the opportunities that patterns create for you; but when you do, they will save you a lot of effort, because they will give you a lot of basic, common, starting ideas without you having to invent those ideas yourself. That will leave your brain free to focus on the aspects that are unique to your problem and your team.<br />
</blockquote><br />
<br />
I like to tell students that good patterns let them walk into a new project with some great ideas "in their back pockets", ready to pull out as soon as they see a need. You can apply a lot of established wisdom by building on patterns (where appropriate). We'll see more pattern usage ahead, in both this and future installments.<br />
<br />
<H2>Party Objects</H2><br />
<br />
The contents of the Parties package are shown in Figure 14:<br />
<br />
<center><a href="/files/tabletumlnews-Parties.gif"><img src="/files/tabletumlnews-Parties-small.gif" width="220" height="144"  alt="Figure 14: YCS Party Objects"></a><br />
<b>Figure 14: YCS Party Objects</b></center><br />
<br />
In this package, we see more detail on the Party class that was introduced in Figure 11. This is based on the <b>Party</b> pattern from <a href="http://www.MartinFowler.com">Martin Fowler</a>, as described in <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201895420/qid=1123524499/sr=8-1/ref=pd_bbs_sbs_1/104-1633744-9892737?v=glance&s=books&n=507846">Analysis Patterns : Reusable Object Models</a>. This is a pattern that abstracts out the common characteristics or people and organizations into a base class, Party. A Person, then, is a subclass of Party that represents an individual; and an Organization is a subclass of Party that represents a group of Parties. Person and Organization then serve as base classes for our existing classes: Employee Info, Customer Info, and Distributor Info.<br />
<br />
Besides the <b>Party</b> pattern, Figure 14 is also based on the <b>Contact Info</b> minipattern from <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321330617/qid=1123037557/sr=8-1/ref=pd_bbs_sbs_1/104-1633744-9892737?v=glance&s=books&n=507846">Requirements Patterns and Antipatterns</a>, in which a single Party can have multiple types of Contact Info, a base class with subclasses that represent different ways a Party might be contacted.<br />
<br />
<H2>Order Objects</H2><br />
<br />
The contents of the Orders package are shown in Figure 15:<br />
<br />
<center><a href="/files/tabletumlnews-Order_Objects.gif"><img src="/files/tabletumlnews-Order_Objects-small.gif" width="220" height="179"  alt="Figure 15: YCS Order Objects"></a><br />
<b>Figure 15: YCS Order Objects</b></center><br />
<br />
I added the base class, Order, as well as a Line Item class to represent items in an order. The Order is placed by a particular Party. (The upper part of the diagram is a simplification of the <b>Orders</b> pattern from <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321330617/qid=1123037557/sr=8-1/ref=pd_bbs_sbs_1/104-1633744-9892737?v=glance&s=books&n=507846">Requirements Patterns and Antipatterns</a>.)<br />
<br />
I also changed Subscription to be a subclass of Customer Order, one which references a particular Periodical to which the customer subscribes. (The Periodical class is described below.)<br />
<br />
<H2>Merchandise Objects</H2><br />
<br />
The top-level of the Merchandise package are shown in Figure 16:<br />
<br />
<center><a href="/files/tabletumlnews-Merchandise_Objects.gif"><img src="/files/tabletumlnews-Merchandise_Objects-small.gif" width="220" height="165"  alt="Figure 16: YCS Merchandise Objects"></a><br />
<b>Figure 16: YCS Merchandise Objects</b></center><br />
<br />
I added a base class, Merchandise, to represent things sold at YCS. I also added a subclass, Publication, to represent printed Merchandise.<br />
<br />
<H3>Game Objects</H3><br />
<br />
The contents of the Games package are shown in Figure 17:<br />
<br />
<center><a href="/files/tabletumlnews-Game_Objects.gif"><img src="/files/tabletumlnews-Game_Objects-small.gif" width="220" height="135"  alt="Figure 17: YCS Game Objects"></a><br />
<b>Figure 17: YCS Game Objects</b></center><br />
<br />
<H3>Publication Objects</H3><br />
<br />
The contents of the Publications package are shown in Figure 18:<br />
<br />
<center><a href="/files/tabletumlnews-Publication_Objects.gif"><img src="/files/tabletumlnews-Publication_Objects-small.gif" width="220" height="116"  alt="Figure 18: YCS Publication Objects"></a><br />
<b>Figure 18: YCS Publication Objects</b></center><br />
<br />
I added a Periodical class to represent a scheduled release of issues of some Publication. A Comic Series, then, is a subclass of Periodical; but after a little thought, I decided that a Magazine is also a subclass of Periodical, and it is individual Magazine Issues (a new class) that are published on the schedule.<br />
<br />
Note also that I show a new UML relation in Figure 18: dependence, shown as a dashed arrow. While an association (either navigable or not) indicates some structural or functional connection between two classes, dependence indicates a simple "awareness" from one class to another. In Figure 18, we have an association from Periodical to Publication, indicating that a Periodical will consist of some number of Publications. So it would be redundant and even possibly confusing to also have an association from Comic Series to Comic Book, or from Magazine to Magazine Issue. Instead, I redrew those relations as dependence, indicating that a Comic Series "knows about" the Comic Books that make it up, and a Magazine "knows about" its individual issues. (We'll see more about dependence in future installments of <b>Everyday UML</b>.)<br />
<br />
<H3>Other Merchandise Objects</H3><br />
<br />
Although this won't add much of interest, the contents of the Other Merchandise package are shown in Figure 19 for the sake of completeness:<br />
<br />
<center><a href="/files/tabletumlnews-Other_Merchandise_Objects.gif"><img src="/files/tabletumlnews-Other_Merchandise_Objects-small.gif" width="220" height="88"  alt="Figure 19: YCS Other Merchandise Objects"></a><br />
<b>Figure 19: YCS Other Merchandise Objects</b></center><br />
<br />
<H1>What's Next?</H1><br />
<br />
In my next installment of <b>Everyday UML</b>, we'll finally get to some use cases. I can't give a schedule for that, so keep your eyes open!<br />
<br />
<div class="trigger" id="shec5ia4i3.ec">(<a href="#" onClick="document.getElementById('hec5ia4i3.ec').style.display = 'block'; document.getElementById('shec5ia4i3.ec').style.display = 'none'; return false;">show</a>)</div><br />
<div class="hidden" style="display: none;" id="hec5ia4i3.ec"><br />
If you have <a href="http://www.tabletuml.com/">Tablet UML</a> and would like to explore the Your Comic Source model in more detail, you can find it <a href="http://www.tabletuml.com/Samples/Your%20Comic%20Source/Your%20Comic%20Source.tmd">here</a>.<br />
<div class="trigger">(<a href="#" onClick="document.getElementById('shec5ia4i3.ec').style.display = 'block';document.getElementById('hec5ia4i3.ec').style.display = 'none'; return false;">hide</a>)</div></div>]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1121888361.shtml">
<title>Everyday UML, Installment 1: Identifying and Organizing Actors</title>
<link>http://tabletumlnews.powerblogs.com/posts/1121888361.shtml</link>
<description>This will be the first in a series of posts that will demonstrate simple use of the Unified Modeling Language in the context of a simple project. (Thanks to James...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2005-07-20T19:07+00:00</dc:date>
<content:encoded><![CDATA[<i>This will be the first in a series of posts that will demonstrate simple use of the Unified Modeling Language in the context of a simple project. (<a href="http://jameshudnall.com/blog.php?/weblog/secrets_of_writing_sequences/">Thanks to James Hudnall for the inspiration.</a>)</i><br />
<br />
<H1>What the Heck is UML?</H1><br />
<br />
For those who are new to the Unified Modeling Language (or UML), here's a <i>very</i> brief introduction. UML is essentially a set of blueprinting notations for various aspects of system design, with an emphasis on communication to customers, end users, and other developers. Sadly, a lot of software isn’t really designed in the traditional sense. If I gave you a pile of nails and lumber, I’ll bet you could build a decent doghouse by eye. You <i>might</i> build a decent house, but you’d probably want to draw a sketch, at least; and I’ll bet you’d never pass inspection without that sketch, whether you needed it or not. And if you tried to build a skyscraper without detailed plans, you’d never get it off the ground without it collapsing; and government types would shut you down before somebody got hurt. (Thanks to <a href="http://www.cc2e.com/">Steve McConnell</a> for the analogy.)<br />
<br />
Well, a lot of software is built with doghouse methods, even if it’s a skyscraper project. UML is an industry-standard set of diagram types and modeling syntax that help you draw the plans. It's a standard maintained by the <a href="http://www.omg.org">Object Management Group</a>. It won't solve all your problems, but it's a useful tool to help you progress from doghouses to skyscrapers.<br />
<br />
<H1>Defining the Model</H1><br />
<br />
Before you begin modeling, it's always a good idea to identify the purpose of the model. That will help you to know the scope of your model and to thus limit and focus your work.<br />
<br />
For this stage of <b>Everyday UML</b>, our model will be defined as follows:<br />
<br />
<blockquote><br />
This is a model of operations for Your Comic Source, a full-service comic and game store with both storefront and online sales and events.<br />
</blockquote><br />
<br />
Note that this model is described as a model of operations for the comic store. That implies that this is a <b>business model</b>, focused on the operations of the business as a whole, not just on the operations of the software. Remember my message from <a href="http://www.tabletuml.com/UMLApplied.aspx">UML Applied</a> and <a href="http://www.umlbootcamp.com/">UML BootCamp</a>:<br />
<br />
<blockquote><br />
UML is not about <i>software</i> design; it's about <i>system</i> design, where a system is <i>structure</i> with <i>behavior</i> and <i>goals</i>. And software is certainly one kind of system, but it's <b>not</b> the only kind.<br />
</blockquote><br />
<br />
And in this particular set of examples, the system will be the entirety of Your Comic Source.<br />
<br />
A business model is only one kind of model you might construct with UML. We'll see other kinds of models in future installments of <b>Everyday UML</b>.<br />
<br />
<H1>Brainstorming About Actors</H1><br />
<br />
It's time to introduce our first UML concept: <b>actors</b>. No, we're not talking John Cusack or Marisa Tomei here. In UML, an actor represents a person or system or event with which your system interacts. It's the things <i>outside</i> your system that either ask your system to do things, or that do things for your system, or both.<br />
<br />
If I'm completely new to a problem domain, I'll start with a single actor, <b>Customer</b>, use that as a probe for finding use cases and then participating actors, and then use those actors to probe for more use cases and more participating actors, and so on. (I explain this approach in <i>UML Applied</i>.) But when you know something about the problem domain, it may be easier to start by brainstorming and listing candidate actors. This list won't be perfect: you'll miss some actors, and you'll list some that you'll end up never needing. But remember another lesson from <i>UML Applied</i>:<br />
<br />
<blockquote><br />
Don’t worry about being perfect all at once (or ever!). If you’re communicating, you’re using UML effectively. There’s always room for improvement; but don’t let imperfection stop you from progress. That’s a key point in learning UML <i>and</i> in applying UML as part of a process. Your designs will not be perfect; but as your team reviews them and you refine them, they will become good enough: good enough to build the system, good enough to guide the testing and the documentation, good enough to drive the management of the process. A team that waits for perfection is just as bad as a team that is wedded to code-and-fix: neither team produces an <i>effective</i> design that leads to a successful system. Remember: <i>code-and-fix bad; design-and-fix good.</i><br />
</blockquote><br />
<br />
One look at my bookshelves should serve as proof that I've spent a lot of time in comic stores. So I felt pretty comfortable in modeling actors for Your Comic Source (a.k.a. YCS) as shown in Figure 1:<br />
<br />
<center><br />
<a href="/files/tabletumlnews-Actors.gif"><img src="/files/tabletumlnews-Actors-small.gif" width="220" height="365"  alt="Figure 1: YCS Actors"></a><br />
<br />
<b>Figure 1: YCS Actors</b><br />
</center><br />
<br />
The standard UML symbol for an actor is a stick figure (whether the actor represents a person or not.) Note that these actors don't appear in any particular order, as should be expected from brainstorming. These actors are described below:<br />
<br />
<ul><br />
   <li><b>Bank System.</b> A computer system at the bank. The YCS system will collaborate with this system for payments and other transactions.<br />
   <li><b>Browser.</b> Someone who visits the YCS Web site but who isn't yet a Member.<br />
   <li><b>Customer.</b> Someone who purchases comics or games at YCS, either in person or online.<br />
   <li><b>Gamemaster.</b> This is a person who arranges and runs game events for Gamers.<br />
   <li><b>Gamer.</b> A person who plays games at the YCS store. (Games stores often have space for regularly scheduled games, as a way to expand interest in those games and sell more products.)<br />
   <li><b>Manager.</b> The person in charge of day-to-day operations at YCS.<br />
   <li><b>Member.</b> This is a Web site visitor who has moved beyond Browser status by creating an account and identifying interests. When comics or games of interest to that Member are released, YCS will send out email notices. Members will also qualify for special discounts and deals.<br />
   <li><b>Publisher.</b> A person or company who publishes comics for sale at YCS.<br />
   <li><b>Special Guest.</b> An artist, writer, game designer, publisher, or other individual who will visit YCS for a special event such as a book signing or a talk.<br />
   <li><b>Staffer.</b> Someone who works the shelves or the counter at YCS.<br />
   <li><b>Store Owner.</b> The owner of YCS.<br />
   <li><b>Subscriber.</b> Someone who signs up for and purchases particular comic books in advance, and whose books are then delivered automatically (either in person or via delivery service).<br />
   <li><b>Vendor.</b> This actor represents a person or company that sells or distibutes or consigns products for sale by YCS. (<b>Definitions:</b> Sells = "YCS purchases the item directly. All future profits or losses accrue solely to YCS." Distributes = "YCS stocks the item, but does not purchase it. Upon sale, proceeds are split between distributer and YCS. After a period of time, YCS may return unsold items." Consigns = "Similar to distribution, but a one-time arrangement between YCS and a private individual.")<br />
   <li><b>Vendor System.</b> A computer system owned or run by a Vendor. It will work with the YCS system to transact business.<br />
</ul><br />
<br />
Remember a key rule in regard to actors: an actor represents a role that individuals or systems may play, <b>not</b> any specific individual and <b>not</b> any specific job title. One person or system may fill multiple different actor roles at different times, and a single actor role may be filled by different people or systems at different times. For example, the owner of YCS may fill the Store Owner role primarily, but may also act as a Manager or even a Staffer from time to time.<br />
<br />
<H1>Relating Actors</H1><br />
<br />
To repeat: the actors in Figure 1 appear in a scattershot stream-of-consciousness order, with no real thought about how particular actors might relate to each other. But actually, there's a lot of things we know about these actors already. Next we want to capture that knowledge. Some of these things are shown in Figure 2:<br />
<br />
<center><br />
<a href="/files/tabletumlnews-Actors_(Reorganized).gif"><img src="/files/tabletumlnews-Actors_(Reorganized)-small.gif" width="220" height="304"  alt="Figure 2: YCS Actors (Reorganized)"></a><br />
<b>Figure s: YCS Actors (Reorganized)</b><br />
</center><br />
<br />
There are two kinds of relationship shown here:<br />
<br />
<ul><br />
   <li><b>Generalization.</b> Sometimes also called <i>specialization</i>, <i>inheritance</i>, or <i>subclassing</i>. Shown with a triangle-headed arrow, this relationship between two actors indicates that one actor is a special case or special kind of another actor (the one to which the arrow points). For instance, Figure 2 says that a Publisher is a special kind of Vendor.<br />
   <li><b>Association.</b> Shown with a line or arrow, this relationship between two actors indicates that the actors collaborate in some way. You should prefer a line when the two actors interact freely. You should prefer an arrow when one actor controls or "owns" the interactions. (We call this a "navigable association", perhaps because the UML standards committee is fond of multisyllables). In Figure 2, for example, there is a navigable association from Manager to Employee, indicating that a Manager has Employees that work for him or her. Note also that the association includes a measure of <i>multiplicity</i> on the Employee end (where it reads "0..*"). Multiplicity indicates how many actors of a given type are involved in the relationship. "*" indicates an unspecified number; so 0..* in our example means that a Manager might have any number of Employees (including 0 &mdash; maybe they all got fired?).<br />
</ul><br />
<br />
(Other types of relations are possible, as we'll see in future installments of <b>Everyday UML</b>.)<br />
<br />
Note also that I added some new actors into Figure 2. These actors represent common behavior shared by a number of different actors, and let us describe the common behavior in a common way. This is an abstraction, and can be useful. But you have to be careful: too much abstraction too early can confuse your audience. (For more on this topic, see item <b>64: Geek Speak</b> from my upcoming book, <i>Requirements Patterns and Antipatterns: Best (and Worst) Practices for Defining Your Requirements</i>, coming soon from Addison-Wesley.) These additional actors are:<br />
<br />
<ul><br />
   <li><b>User.</b> This actor represents behavior common to all users of the YCS Web site. (This is a simplified version of item <b>56: Extended Inverted Org Chart</b> from <i>Requirements Patterns and Antipatterns</i>.)<br />
   <li><b>Authorized User.</b> This actor represents users who have some level of privileges within the YCS Web site, such as editing their personal preferences, etc. (This is another element of <b>Extended Inverted Org Chart</b>.)<br />
   <li><b>Employee.</b> This actor represents common behavior for all persons employed by YCS. (This is a simplified version of item <b>55: Inverted Org Chart</b> from <i>Requirements Patterns and Antipatterns</i>.)<br />
</ul><br />
<br />
<H1>Organizing Actors</H1><br />
<br />
Notice how I drew lines around groups of actors in Figure 2, dividing them into groups by relations. That suggests better ways to organize the actors. But to organize them, I first need to introduce UML packages. A <b>Package</b> is simply a hierarchical subdivision of a model. It functions very much like a folder on your hard drive, letting you organize a large collection of things into smaller, more comprehensible collections of related things. The icon for a UML package even looks like a file folder, just like a folder on your hard drive.<br />
<br />
Looking at Figure 2, it seems natural to me that we should organize the actors into the packages shown in Figure 3:<br />
<br />
<center><br />
<a href="/files/tabletumlnews-Actor_Packages.gif"><img src="/files/tabletumlnews-Actor_Packages-small.gif" width="220" height="241"  alt="Figure 3: YCS Actor Packages"></a><br />
<br />
<b>Figure 3: YCS Actor Packages</b><br />
</center><br />
<br />
This is a stripped down version of item <b>48: Actor Hierarchy</b> from <i>Requirements Patterns and Antipatterns</i>. The <b>Human Actors</b> package is split into two subpackages, as in Figure 4:<br />
<br />
<center><br />
<a href="/files/tabletumlnews-Human_Actors.gif"><img src="/files/tabletumlnews-Human_Actors-small.gif" width="220" height="128"  alt="Figure 4: YCS Human Actors"></a><br />
<br />
<b>Figure 4: YCS Human Actors</b><br />
</center><br />
<br />
The <b>Users</b> package models the various kinds of users, as in Figure 5:<br />
<br />
<center><br />
<a href="/files/tabletumlnews-Users.gif"><img src="/files/tabletumlnews-Users-small.gif" width="220" height="411"  alt="Figure 5: YCS Users"></a><br />
<br />
<b>Figure 5: YCS Users</b><br />
</center><br />
<br />
The <b>Customers</b> package models the various kinds of customers, as in Figure 6:<br />
<br />
<center><br />
<a href="/files/tabletumlnews-Customers.gif"><img src="/files/tabletumlnews-Customers-small.gif" width="220" height="462"  alt="Figure 6: YCS Customers"></a><br />
<br />
<b>Figure 6: YCS Customers</b><br />
</center><br />
<br />
And finally, the <b>Systems</b> package shows systems with which YCS must interact, as in Figure 7:<br />
<br />
<center><br />
<a href="/files/tabletumlnews-Systems.gif"><img src="/files/tabletumlnews-Systems-small.gif" width="220" height="172"  alt="Figure 7: Systems that Collaborate with YCS"></a><br />
<br />
<b>Figure 7: Systems that Collaborate with YCS</b><br />
</center><br />
<br />
<H1>Organizing Your Model</H1><br />
<br />
Well, that's enough about actors for now. This installment is already a lot longer than I intended. But there's one more topic I want to cover: where these actors fit in the larger model that we're creating. There are a lot of ways that you can organize a model. I like to use an organization scheme as shown in Figure 8:<br />
<br />
<center><br />
<a href="/files/tabletumlnews-Requirements.gif"><img src="/files/tabletumlnews-Requirements-small.gif" width="220" height="211"  alt="Figure 8: Organizing Your Requirements"></a><br />
<br />
<b>Figure 8: Organizing Your Requirements</b><br />
</center><br />
<br />
The <b>Actors</b> package contains all the work we've seen in this installment. The <b>Domain Objects</b> package will contain details on things and types of things of interest to the actors of YCS. The <b>Use Cases</b> package will show <b>Use Cases</b>: the operations that actors perform within YCS, including the business rules that apply to those operations. And the <b>Architecture</b> package will show software systems and interfaces that will support the use cases.<br />
<br />
<H1>What's Next?</H1><br />
<br />
In my next installment of <b>Everyday UML</b>, we'll look at some domain objects. I can't give a schedule for that, so keep your eyes open!<br />
<br />
<div class="trigger" id="shebdx0yy5.83">(<a href="#" onClick="document.getElementById('hebdx0yy5.83').style.display = 'block'; document.getElementById('shebdx0yy5.83').style.display = 'none'; return false;">show</a>)</div><br />
<div class="hidden" style="display: none;" id="hebdx0yy5.83"><br />
<br />
If you have <a href="http://www.TabletUML.com">Tablet UML</a> and would like to explore the Your Comic Source model in more detail, you can find it <a href="http://www.TabletUML.com/Samples/Your%20Comic%20Source/Your%20Comic%20Source.tmd">here</a>.<br />
<br />
<div class="trigger">(<a href="#" onClick="document.getElementById('shebdx0yy5.83').style.display = 'block';document.getElementById('hebdx0yy5.83').style.display = 'none'; return false;">hide</a>)</div></div>]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1121664721.shtml">
<title>Photographic proof that I'm a UML geek!</title>
<link>http://tabletumlnews.powerblogs.com/posts/1121664721.shtml</link>
<description>My programmer buddies have no problem picking my car out in the parking lot:...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2005-07-18T05:07+00:00</dc:date>
<content:encoded><![CDATA[My programmer buddies have no problem picking my car out in the parking lot:<br />
<br />
<img src="/files/tabletumlnews-Mazda3Rear.jpg" alt="What a UML Guy drives"><br />
<br />
And for the sake of completeness, here's the front:<br />
<br />
<img src="/files/tabletumlnews-Mazda3Front.jpg" alt="Zoom, zoom!">]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1121659106.shtml">
<title>But where's the UML, Martin?</title>
<link>http://tabletumlnews.powerblogs.com/posts/1121659106.shtml</link>
<description>Those of you who have heard me speak may be wondering: But where's the UML, Martin? Usually, it's like I can't shut up about UML....</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2005-07-18T03:07+00:00</dc:date>
<content:encoded><![CDATA[Those of you who have heard me speak may be wondering: <i>But where's the UML, Martin?</i> Usually, it's like I can't shut up about UML.<br />
<br />
But after long days of consulting for <a href="http://www.srtsolutions.com">SRT Solutions</a> and then a session of <a href="http://www.UMLBootCamp.com">UML BootCamp</a> in Georgia, I'm a little exhausted. So I'm sticking to light topics for now.<br />
<br />
But here's my UML plan:<br />
<br />
<ol><br />
   <li>As UML news comes out, I'll comment from time to time. Now most UML "news" I see these days is really just press releases from tool manufacturers. Don't expect me to comment much on those. But if there's legitimate news, I'll let you know.</li><br />
   <li>From time to time, I'll upload some UML examples and discuss what they mean, why I chose to draw them that way, and alternate ways to draw them.</li><br />
   <li>If I get any UML questions, I may discuss them here.</li><br />
</ol><br />
<br />
That's the plan today. It's all subject to change at whim, of course...]]></content:encoded>
</item>

</rdf:RDF>