# UML

UML is an acronym for the Unified Modeling Language. This resource is an effort to produce a Wikiversity reference card for Object Oriented Software Design. It is shared initially by learning groups Software Engineering and Object-Oriented Programming, but may find other abstract paths that may help tie Computer Science to Linguistics.

## Prerequisites

Learners of UML do not have to be Computer Scientists but a cursory knowledge of the topic is helpful.
Recommended:
* Introduction to Programming
* Introduction to Databases
* Database Management Systems
* Data structures
* All notation of the Class Diagrams

## Concepts

The Unified Modeling Language (UML) is a specification language for object modeling. It is used to create an abstract model of a complex system, (UML model) in forms that are easier to visualize by Human developers and users of that system. For Wikiversity purposes, we shall approach UML from several perspectives:
* Linguistics - Seeing UML as a genre and lexis for a discourse community (Wikiversity) that uses and helps develop and apply software (MediaWiki).
* Computer Science - Using UML to map complex structures, behaviors, relationships and other concepts into unified models in a holistic way. (MediaWiki, again)
* .. other perspectives may form

### The terminology

Terms are important. Usually, the Glossary appears at the end of the book, but this is a set of keywords that you might as well have a glance at. UML and the OMG that came up with it thrives on what is affectionately known as pedantic verbosity and here's a taste:
* Structure: Actor, Attribute, Class, Component, Interface, Object, Package...
* Behavior: Activity, Event, Message, Method, Operation, State, Use Case...
* Relationships: Aggregation, Association, Composition, Dependancy, Generalization, Multiplicity, Cardinality, Inheritance, Role ...
Our own UML/Glossary is under construction. Consider that an assignment if you like.

### A local use case

In terms of applied computer science, we have actually begun a trek into the "learn by doing" model that was here at the opening of this version of Wikiversity (English). This is the hard-to-handle Complex of a multilingual virtual university with a myriad of problems and processes that need, sometimes desperately, to be mapped into a unified whole. UML was created by the Object Oriented Software Design Community to handle such monstrous complexities. But before we can delve into the specifics of our exemplary model, we'll have to look at what the UML is and how it resolves issues.

### Some Globals

The U in UML, represents logical unity in what we hope is the purest predicate form – what we want to do — unify. This logical unity must be deeply rooted in Meaning, and that meaning must be shared to become useful...
Subject and Predicate Unions are Universally understood (we hope) to be the Primary Objects when specifying, classifying, describing and illustrating our complex system from the general to the specific. UML uses some conventions at a very specific low-level – text — to describe some very general high-level Notions that the userbase accepts a a priori or pre-existing. These notions may be known sometimes only intuitively, but manifest expressly as a need for something that does not yet exist::: UML was collaboratively formed for this purpose: To find the permanent solution to an Age-old problem... any problem

### A few conventions

The boxes, circles, arrows, and stick men we'll get into below are meaningless without their associated text. This text must exist as unary objects (atomic in nature; succint; precise; unambiguous; whole; ...) ...complete thoughts or sentences in terms of computational linguistics. Nouns are generally capitalized; Verbs are generally italicized. Objects are generally bolded. Subjects are generally Human – personal. (Please notice the term generally — terms are nearly always uncapitalized bold text.
Note:When you see a paragraph that ends in an elipsis, stay tuned...

### A bit of History

The SDL or Specification and Design Language was the precursor to UML. It evolved believe-it-or-not from a 150-year-old culture that began in the genesis of the telegraph days through the steam age into the telephone, teletype, telecommunications era and keeps on evolving...
To put this into scope, the notion of the electronic community in a raw and primative state must be imagined (since they're all deceased we presume). What the telephone and telegraph operators left us was a set of primitives that allowed us to represent wires, switches, keys, transformers, oscillators, amplifiers, components, integrators, codes, protocols, networks, banks of switches, facsimilies, ...bars of gold and even human souls as ...boxes, circles, arrows, and stick men.

## Diagramatics and Visualization

UML uses diagrams to describe and visualize systems and models. As of UML 2.0, there are 13 basic diagrams:
* Class diagram
* Component diagram
* Composite structure diagram
* Deployment diagram
* Object diagram
* Package diagram
* Activity diagram
* State Machine diagram (a.k.a. State Chart)
* Use case diagram
* Collaboration (UML 1.x) or Communication diagram (UML 2.0)
* Interaction overview diagram (UML 2.0)
* Sequence diagram
* UML Timing Diagram
In time, we hope to produce some interesting diagrams here. For now, see the ones listed in the Wikipedia article.
As for our local use case, here you go:
Vector: UML -> next -> next -> next -> next -> next -> next

## Visualizing the complex

* /OSI model

## UML tools

UML tools (open source or free):
* Acceleo – Eclipse and EMF template-based system for source-code generation from UML models.
* ArgoUML – a Java-based UML engineering tool.
* ATL - a QVT-tool allowing to transform (among others) UML models into other models, including UML, Java, etc. ATL provides a complete open-source solution. Available from the Eclipse GMT project (Generative Modeling Tools).
* BOUML – under GPL, written in C++/Qt
* Dia – a GTK+/GNOME diagramming tool that also supports UML (licensed under the GNU GPL)
* DOME - The DOmain Modeling Environment, written in Smalltalk.
* Eclipse – with Eclipse Modeling Framework (EMF) and UML 2.0 (meta model without GUI) projects.
* Fujaba – UML and Java development platform; Eclipse version available.
* Gaphor – a GTK+/GNOME UML 2.0 modeling environment written in Python.
* GenMyModel Online UML modeler – cloud-based, UML 2.0 with code generators written in Javascript and HTML5.
* JUDE/Community – Object-Oriented Analysis and Design. JUDE/Community. though free to use, does not provide open source.
* MetaUML – Textual notation for UML. Diagram-rendering based on MetaPost, suitable for LaTeX typesetting.
* MonoUML – based on the latest Mono, GTK+ and ExpertCoder.
* NetBeans – with NetBeans IDE 5.5 Enterprise Pack.
* Poseidon for UML (Community Edition) – Commercial tool based on ArgoUML. A cost-free version can be used to view, create, and edit models, but the export options are not available without a rent subscription
* StarUML – a UML/MDA platform for Microsoft Windows, licensed under a modified version of GNU GPL, mostly written in Delphi
* Software Ideas Modeler – a universal software and data modeling platform with UML support for Microsoft Windows, free edition Standard (for non-commercial use)
* Taylor - model-driven architecture on rails (licensed under the GNU LGPL)
* Umbrello UML Modeller – part of KDE.
* UML Pad – a UML modeller written in C++/wxWidgets (licensed under the GNU GPL)
* UML Pad – a UML tool for PalmOS
* UMLet – a Java-based UML tool (licensed under the GNU GPL)
* Visual Paradigm SDE Community Edition - Visual Paradigm SDE integrates with all leading IDEs (Visual Studio®, Eclipse/WebSphere®, Borland JBuilder®, NetBeans/Sun™ ONE, IntelliJ IDEA™, Oracle JDeveloper, BEA WebLogic Workshop™)
See the full list including proprietary tools at wikipedia.

## Object Modeling Resources

* Object-relational databases
* Object-Oriented Programming
* Object Oriented Enterprise Modeling
* Object Oriented Software Design