<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Buffini&#039;s Blog &#187; Unified Modeling Language</title>
	<atom:link href="http://darraghbuffini.com/tag/unified-modeling-language/feed/" rel="self" type="application/rss+xml" />
	<link>http://darraghbuffini.com</link>
	<description>It does exactly what it says on the tin</description>
	<lastBuildDate>Mon, 22 Mar 2010 13:45:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>M885 &#8211; Chapter 1: Introduction</title>
		<link>http://darraghbuffini.com/2009/05/20/m885-chapter-1-introduction/</link>
		<comments>http://darraghbuffini.com/2009/05/20/m885-chapter-1-introduction/#comments</comments>
		<pubDate>Wed, 20 May 2009 20:57:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[M885]]></category>
		<category><![CDATA[OpenUniversity]]></category>
		<category><![CDATA[Code reuse]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Methodologies]]></category>
		<category><![CDATA[Modeling language]]></category>
		<category><![CDATA[Object-oriented programming]]></category>
		<category><![CDATA[Open University]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Unified Modeling Language]]></category>
		<category><![CDATA[Unified Process]]></category>

		<guid isPermaLink="false">http://darraghbuffini.com/?p=252</guid>
		<description><![CDATA[




Image via Wikipedia



Development models:
The text starts off with a description of the older style waterfall development model, quickly details its disadvantages (rigidity, unable to cope with changing requirements, assumes all design is nailed down from the start), and moves on to newer and much more useful models.
Incremental and iterative models are given as examples of [...]]]></description>
			<content:encoded><![CDATA[<p id="top" />
<div class="zemanta-img" style="margin: 1em; display: block;">
<div>
<dl class="wp-caption alignright" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://en.wikipedia.org/wiki/Image:Development-iterative.gif"><img title="Iterative development illustration" src="http://upload.wikimedia.org/wikipedia/en/thumb/0/05/Development-iterative.gif/300px-Development-iterative.gif" alt="Iterative development illustration" width="300" height="193"></a></dt>
<dd class="wp-caption-dd zemanta-img-attribution" style="font-size: 0.8em;">Image via <a href="http://en.wikipedia.org/wiki/Image:Development-iterative.gif">Wikipedia</a></dd>
</dl>
</div>
</div>
<p><strong>Development models:</strong></p>
<p style="padding-left: 30px;">The text starts off with a description of the older style waterfall development model, quickly details its disadvantages (rigidity, unable to cope with changing requirements, assumes all design is nailed down from the start), and moves on to newer and much more useful models.</p>
<p style="padding-left: 30px;">Incremental and iterative models are given as examples of more appropriate implementations. These models have the distinct advantage of being able to cope with changing requirements &#8211; in these models, feedback is provided constantly through the use of prototypes, whereby users can review the current work, alter their requirements to fit new criteria, and then proceed onwards with new ones.&nbsp; It introduces the concept of risk management &#8211; if some of your biggest risks are changing requirements, then it makes sense to find a way to manage these, by reviewing and updating the requirements and expectations at frequent intervals.</p>
<p style="padding-left: 30px;">There are various ways to implement these models &#8211; timeboxing (define a set time in which to complete a subset of requirements), prioritising (where requirements are prioritised and implemented in order), and others. For any project planner will need to decide which planning model is appropriate for their work.</p>
<p style="padding-left: 30px;">The <a class="zem_slink" title="Unified Process" rel="wikipedia" href="http://en.wikipedia.org/wiki/Unified_Process">Unified Process</a> is one of these. It advocates short time-boxed iterations &#8211; the advantage here is that a lot of functionality can be prioritised, implemented and reviewed in a short time, but it can also leave you open to time constraints if there are unforeseen difficulties with the work planned. A UP project has 4 phases &#8211; inception, elaboration, construction and transition. The correct use of these phases is what makes the UP a powerful tool.</p>
<p><strong>Modelling and <a class="zem_slink" title="Unified Modeling Language" rel="wikipedia" href="http://en.wikipedia.org/wiki/Unified_Modeling_Language">UML</a>:</strong></p>
<p style="padding-left: 30px;">Next the problem needs to be modelled. The concepts of domain, specification and design modelling need to be discussed. Domain involves understanding the situation/problem we are trying to solve. Specification involves describing a system to solve the problem. Design is the low-level implementation of that system. One of the biggest advantages of modelling a system is the ability to use a defined language or process to lay out the design in precise notation. One such notation is UML. It allows a designer to specify the various levels of interaction within a system, such as classes, models, functions, etc&#8230; and all of the connections and dependencies between them.</p>
<p><strong><a class="zem_slink" title="Object-oriented programming" rel="wikipedia" href="http://en.wikipedia.org/wiki/Object-oriented_programming">Object-Oriented</a> Development:</strong></p>
<p style="padding-left: 30px;">The concept of OO development was a natural outgrowth of the search for a better development model. On the surface it seems deceptively simple, create a system of interacting objects utilising tight cohesion and low coupling. It gives the developer an enormous amount of power though &#8211; you can use this simple idea to model alsmot anything you would come into contact with. Take the example of a car. A vehicle has X no. of wheels and an engine. It is your base object. A car then is an extension of this concept, being a more concrete example of a real world use case. A truck is another. Both of these inherit they&#8217;re base attributes from the base object. These objects have other attributes that they encapsulate, and can be interacted with, and can in turn interact with other objects.</p>
<p style="padding-left: 30px;">This OO paradigm is the natural successor to functional programming. Functional programming would get the job done in most cases, but would not supply the power and simplicity required for large scale systems. For enterprise design this would have been essential. Extrapolating further from the concept of objects you now have whole hierarchy trees of branching, related objects, and looking a further level out you see that you can have networks of unrelated but still interacting objects. Communication across systems spanning various protocol levels are now much easier to envisage.</p>
<p style="padding-left: 30px;">I won&#8217;t go into detail on the basics of how to explain, create and use samples of objects, other wiser heads have done a far better job than I could. Suffice it to say that by using this implementation you can achieve powerful results, particularly when aligned with object modelling, which can give you almost a 1-1 correlation from design to implementation, effectively speccing out the entire system from the very beginning.<strong><br />
</strong></p>
<p><strong>Software Reuse:</strong>
</p>
<p style="padding-left: 30px;">Let&#8217;s say you&#8217;re tired of having to rewrite your software from scratch every time you need to use it. Perfectly understandable, nobody wants to do that. It has long been an unfulfilled promise of the software engineering discipline to provide frameworks of readily available software modules that can be clicked together in any configuration to build the required system. This has never really been delivered. A core ideal of <a class="zem_slink" title="Software design" rel="wikipedia" href="http://en.wikipedia.org/wiki/Software_design">software design</a> is local reuse. This is great within the design of a single system, as it allows <a class="zem_slink" title="Code reuse" rel="wikipedia" href="http://en.wikipedia.org/wiki/Code_reuse">code reuse</a> within a system to achieve a high degree, and encourages developers to correctly consider all of the design needs ahead of time.</p>
<p style="padding-left: 30px;">But up until now this hasn&#8217;t really been applied from a larger scale perspective. Say you&#8217;ve designed this lovely system where not a single line of code is duplicated, nothing is unused, cohesion is high and coupling is low. Great. But it doesn&#8217;t click in as a module for larger products. Or you can&#8217;t break the constituents down easily into a bunch of plug and play components.. This is the long sought after reuse that has been promised but not delivered.&nbsp; The idea of the product line comes in here &#8211; a set of base line objects that can be combined into any configuration such that the final system produced completely satisfies all of the user&#8217;s requirements. Hey presto, you have your Grail.</p>
<p style="padding-left: 30px;">One way of achieving this reuse are design patterns &#8211; design patterns are open solutions to common problems: take for instance the Singleton pattern (there can be only one&#8230;) the Singleton is a pattern which defines a component such that there can only ever be one of it in existence at any time. This can be extremely useful for things like persisting system state and so on.. There are dozens of them out there, exceedingly powerful, and well worth consideration.</p>
<p><strong>CASE Tools:</strong></p>
<p style="padding-left: 30px;">A <a class="zem_slink" title="Computer-aided software engineering" rel="wikipedia" href="http://en.wikipedia.org/wiki/Computer-aided_software_engineering">CASE tool</a> (Computer Assissted <a class="zem_slink" title="Software engineering" rel="wikipedia" href="http://en.wikipedia.org/wiki/Software_engineering">Software Engineering</a>) is one created to assisst in the design of middle to large scale systems, or even small ones if you really feel the need. What it allows you to do is express your design in a <a class="zem_slink" title="Modeling language" rel="wikipedia" href="http://en.wikipedia.org/wiki/Modeling_language">modelling language</a> in a structured way. There are a wide number of such tools available, some of them very expensive and useful, though the first does not neccessarily imply the second. Tools such as <a class="zem_slink" title="Rational Software" rel="wikipedia" href="http://en.wikipedia.org/wiki/Rational_Software">Rational Rose</a> would be a good example of a CASE tool. Some of them allow for a creation of a model from first principles right through to the barebones implementation of the system itself, with just the code implementation details to be filled in after. However most of them are not <em>quite</em> that good yet, so some coding skills are still required <img src='http://darraghbuffini.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://woork.blogspot.com/2009/02/interesting-resources-to-learn-object.html">Interesting Resources to learn Object Oriented Design</a> (woork.blogspot.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.codinghorror.com/blog/archives/000856.html">Real Ultimate Programming Power</a> (codinghorror.com)</li>
<li class="zemanta-article-ul-li"><a href="http://tc.eserver.org/33772.html">Model Driven Architecture: Feasibility or Fallacy?</a> (tc.eserver.org)</li>
<li class="zemanta-article-ul-li"><a href="http://codebetter.com/blogs/karlseguin/archive/2009/03/04/back-to-basics-interfaces.aspx">Back to Basics: Interfaces</a> (codebetter.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.slideshare.net/LittleBIGRuby/the-building-blocks-of-modularity"> The Building Blocks Of Modularity </a> (slideshare.net)</li>
</ul>
<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/af3ac4e6-9d67-4d14-b26f-0ea561684228/" title="Reblog this post [with Zemanta]"><img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=af3ac4e6-9d67-4d14-b26f-0ea561684228" alt="Reblog this post [with Zemanta]"></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>
]]></content:encoded>
			<wfw:commentRss>http://darraghbuffini.com/2009/05/20/m885-chapter-1-introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
