<?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>muvik-multigrid &#187; Tutorial</title>
	<atom:link href="http://www.muvik.de/tag/tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.muvik.de</link>
	<description>open source - engineering - programming</description>
	<lastBuildDate>Wed, 28 Jul 2010 07:56:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Python Tutorial: Lesen von csv-Daten 2</title>
		<link>http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/</link>
		<comments>http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 08:10:15 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[InputOutput]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=823</guid>
		<description><![CDATA[Los gehts: Sehr schnell nach der Veröffentlichen des ersten Tutorials zum Lesen von csv-Daten mit Python, kamen von zwei Identi.ca-Teilnehmern der Hinweis auf das Python csv-Modul. Darauf möchte ich nun eingehen. Reaktionen auf das erste Tutorial Erstaunlicherweise kamen buchstäblich Sekunden nach der Veröffentlichung des ersten Tutorials von lutzgh und evgeni über identi.ca zwei Reaktionen in [...]]]></description>
			<content:encoded><![CDATA[<img class="cat-img-wide" alt="Tutorials auf die einfachste Weise" src="http://muvik.de/categorie_images/simple_tutorial.png" title="Tutorials auf die einfachste Weise" width="443" height="98" />
<p class="preview">Los gehts: Sehr schnell nach der Veröffentlichen des ersten Tutorials zum <a href="http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/">Lesen von csv-Daten mit Python</a>, kamen von zwei Identi.ca-Teilnehmern der Hinweis auf das Python csv-Modul. Darauf möchte ich nun eingehen.</p>
<p><span id="more-823"></span></p>
<h3>Reaktionen auf das erste Tutorial</h3>
<p>Erstaunlicherweise kamen buchstäblich Sekunden nach der Veröffentlichung des ersten Tutorials von lutzgh und <a href="http://identi.ca/evgeni">evgeni</a> über <a href="http://identi.ca/muvik">identi.ca</a> zwei Reaktionen in gleiche Richtung. Beide wiesen mich auf das <a href="http://docs.python.org/library/csv.html">csv-Modul</a> hin, welches genutzt werden kann, um diverse Daten zu importieren.</p>
<p>Natürlich kam mir sofort der Gedanke, warum ich das Modul nicht selber entdeckt habe. Ich muss zugeben, dass ich gar nicht gesucht habe. Mir ist auf Anhieb die Lösung mit den regulären Ausdrücken eingefallen. Doch, aus zwei Gründen bin ich glücklich, dass es nun so gekommen ist:</p>
<ol>
<li>Auf dieser Grundlage lässt sich ein weiterer netter Blog-Artikel schreiben <img src='http://www.muvik.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</li>
<li>Aus eins mach zwei: Ursprünglich als alleinstehendes Thema geplant, ist es nun in zunächst zwei verschiedenen Ausführungen vorhanden, die sich prächtig ergänzen. Dadurch ergibt sich eine breitere Grundlage und noch mehr Wissen für meine Leser.</li>
</ol>
<p>Also nur Vorteile für alle im Thema interessierten.
</p>
<h3>Das csv-Modul</h3>
<p>Das csv-Modul, welches es laut der Python-Dokumentationseite, seit der Version 2.3 gibt, unterstützt den Programmierer in seiner Arbeit beim Import und Export von Daten, welche tabellarisch im csv-Format gespeichert sind oder werden sollen. Dafür stellt es diverse Funktionen zur Verfügung, von denen ich die <em>reader()</em> und <em>writer()</em>-Funktionen als die für mich wichtigsten einstufe.</p>
<p>Sehr interessant ist die Möglichkeit mit Hilfe des csv-Moduls, Excel-Daten zu importieren und in Excel-Stil zu exportieren. Dazu muss lediglich ein bestimmter Parameter übergeben werden, der das Format definiert. Das scheint mir einer der größten Vorteile dieses Moduls zu sein.</p>
<h3>Datensatz und Import der Daten mit dem csv-Modul</h3>
<p>Wie bereits im ersten Tutorial wird auch hier der kleine Beispiel-Datensatz von <a href="http://www.walkingrandomly.com/?p=2654">walkingrandomly.org</a> übernommen:<br />
<code class="bash">header 1;<br />
header 2;<br />
1031,-948,-76, ,"12"<br />
507,635,-1148, ,"34"<br />
-1031,948,750, ,"45"<br />
-507,-635,114, ,"67"</code></p>
<p>
Diese Zeilen sollen nun mit dem csv-Modul in das Programm importiert werden und in drei verschiedenen Listen gespeichert werden. Dabei interessieren uns lediglich die Daten, die nicht Kopfdaten sind oder in Anführungszeichen stehen. Dazu  habe ich folgendes Python-Skript geschrieben:</p>
<pre class="brush:python">import csv
fileO = open('walking_example.dat','r')
csvreader=csv.reader(fileO, delimiter=',')
k= []; l = []; m = [];

for row in csvreader:
    if len(row) > 1:
        k.append(float(row[0]))
        l.append(float(row[1]))
        m.append(float(row[2]))

print(k,l,m)

fileO.close()</pre>
</p>
<h4>Schrittweise erklärt</h4>
<p>1.Zeile: Import des csv-Moduls</p>
<p>2.Zeile: Erstellen eines <em>file</em>-Objekts, welcher die Datei mit dem gezeigten Datensatz enthält.</p>
<p>3.Zeile: Einlesen der Daten von <em>fileO</em> mit der <em>reader()</em>-Funktion des csv-Moduls. Die Funktion erwartet mindestens einen Übergabeparameter und zwar das <em>file</em>-Objekt. Des Weiteren kann ein sogenannter Dialekt vorgegeben werden, welcher für sich die Struktur der csv-Daten definiert. Ein Dialekt könnte zum Beispiel Excel sein (<em>dialect=&#8217;excel&#8217;</em>). Weitere optionale Argumente wie das Trennungszeichen (<em>delimiter=&#8217;,&#8217;</em>) können hinzugefügt werden.</p>
<p>4.Zeile: Initialisieren der Listen, mit welchen weiter gerechnet werden soll.</p>
<p>7-10.Zeile: Das Auslesen der importierten Daten erfolgt an dieser Stelle. Die <em>reader()</em>-Funktion liest die Daten zeilenweise ein, dabei spielt es zunächst keine Rolle, ob es Kopfdaten sind oder nicht. Dieses Vorwissen muss bei der vorgestellten Methode vorhanden sein. Im Beispiel haben wir zwei Zeilen mit Kopfdaten, welche ignoriert werden sollen. Dies geschieht über die Abfrage der Länge der Liste <em>row</em>. Zuletzt werden in den Zeilen noch die Listen <em>k,l,m</em> um die ersten drei Spalten erweitert.</p>
<p>11-12.Zeile: Ausgabe der Listen und schließen des <em>file</em>-Objekts.</p>
<h3>Schlusswort</h3>
<p>Die Vorteile des csv-Moduls im Vergleich zu der Lösung mit regulären Ausdrücken liegen auf der Hand. Zum einen ist der Import effizienter und einfacher zu schreiben und zum anderen ist die Fehleranfälligkeit nicht so hoch.</p>
<p>Auf der anderen Seite stellen die regulären Ausdrücke eine viel allgemeinere Methode dar, Daten zu importieren. Hierbei muss lediglich die Struktur der Daten bekannt sein, Kopfzeilen werden automatisch ignoriert. Des Weiteren stellen zusätzliche Störungen in den Daten für reguläre Ausdrücke kein Problem dar.</p>
<p>Sollte ich jemals in die Verlegenheit kommen, mich zwischen den zwei Lösungen entscheiden zu müssen, so werde ich natürlich das dem Problem am besten angepasste nutzen. Das heißt: bei relativ sauberen Daten das csv-Modul und bei stark ungeordneten Daten die regulären Ausdrücke.</p>
<p>Nun hoffe ich auf konstruktive Kritik!</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/">Permalink</a> |
<a href="http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/#comments">keine Kommentare</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/&title=Python Tutorial: Lesen von csv-Daten 2">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/&title=Python Tutorial: Lesen von csv-Daten 2">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/&title=Python Tutorial: Lesen von csv-Daten 2">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/inputoutput/" rel="tag">InputOutput</a>, <a href="http://www.muvik.de/tag/python/" rel="tag">Python</a>, <a href="http://www.muvik.de/tag/tutorial/" rel="tag">Tutorial</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/06/08/python-tutorial-lesen-von-csv-daten-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Tutorial: Lesen von csv-Daten</title>
		<link>http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/</link>
		<comments>http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 11:26:41 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[InputOutput]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=781</guid>
		<description><![CDATA[Los gehts: Tutorials, die nicht in die Kurztipp-Serie passen, weil sie zu groß, zu lang, zu wichtig sind oder ein besonderes Feature enthalten haben nun ebenfalls eine eigene Kategorie-Grafik. Diesmal geht es um das Einlesen beliebiger, durch ein Komma getrennter Daten aus sogenannten csv-Dateien (comma-seperated-values) in Python mit Hilfe der regulären Ausdrücke (regular expressions). Idee [...]]]></description>
			<content:encoded><![CDATA[<img class="cat-img-wide" alt="Tutorials auf die einfachste Weise" src="http://muvik.de/categorie_images/simple_tutorial.png" title="Tutorials auf die einfachste Weise" width="443" height="98" />
<p class="preview">Los gehts: Tutorials, die nicht in die Kurztipp-Serie passen, weil sie zu groß, zu lang, zu wichtig sind oder ein besonderes Feature enthalten haben nun ebenfalls eine eigene Kategorie-Grafik. Diesmal geht es um das Einlesen beliebiger, durch ein Komma getrennter Daten aus sogenannten csv-Dateien (comma-seperated-values) in Python mit Hilfe der regulären Ausdrücke (regular expressions).</p>
<p><span id="more-781"></span></p>
<h3>Idee und Intention</h3>
<p>Wie aus der Seitenleiste des Blogs entnommen werden kann, lese ich regelmäßig die Artikel des <a href="http://www.walkingrandomly.com">walkingrandomly.com</a> Blogs von Mike Croucher. Am 21. Mai 2010 schrieb Mike ein <a href="http://www.walkingrandomly.com/?p=2654">Matlab Tutorial</a>, dessen Inhalt es war, wie csv-Dateien in Matlab eingelesen werden können. Im Rahmen dieses Artikels ging er auf verschiedene Möglichkeiten ein, eine csv-Datei zu importieren.</p>
<p>Begonnen hat er mit einer einfachen zu importierenden Datei, worin die Daten ohne Ausnahmen durch eine Komma getrennt waren. Richtig interessant wurde es beim Import von Daten aus einer unordentlich definierten csv-Datei. Das Beispiel stammte von einem Leser seines Blogs und soll hier ebenfalls verwendet werden. </p>
<h3>Der Datensatz</h3>
<p>Es lässt sich unendlich lange darüber unterhalten, wie sinnvoll oder sinnlos es ist, innerhalb einer Datei mit csv-Daten weitere Daten zu integrieren, welche nicht durch Kommas getrennt werden und eventuell andere Datentypen sind. Abgesehen davon ist das Beispiel, welches auch Mike verwendet folgendes:</p>
<p><code class="bash">header 1;<br />
header 2;<br />
1031,-948,-76, ,"12"<br />
507,635,-1148, ,"34"<br />
-1031,948,750, ,"45"<br />
-507,-635,114, ,"67"</code></p>
<p>Da das Ziel beim Import der Daten ist, mit ihnen weiter zu rechnen oder zu plotten, ergeben sich für mich zwei Herausforderungen, bei dem gegebenen Datensatz:</p>
<ol>
<li>Eine straight-forward Lösung bricht sich bereits an der ersten Zeile das Bein, an der ersten Kopfzeile. Also müssen eine vorgegebene Anzahl an Zeilen beim Importieren ignoriert werden können.</li>
<li>Da die letzte Spalte nicht nur durch ein Komma getrennt ist, sondern in Anführungszeichen steht, soll angenommen werden, dass es reiner Text ist und soll beim Import ignoriert werden.</li>
</ol>
<p>Damit wären die Stolpersteine lokalisiert und können aus dem Weg geräumt werden.</p>
<h3>Reguläre Ausdrücke (regular expressions, kurz: regex)</h3>
<p>Es gibt mehrere Möglichkeiten das beschriebene Problem anzugehen und die regulären Ausdrücke stellen in meinen Augen nicht die schlechteste dar. Zum einen wird aus den zwei Herausforderungen nur noch eine und zum anderen ist die Lösung sehr schnell auf dem Tisch und sieht elegant aus. Sollte sich die Struktur der csv-Daten noch ändern, stellt es für die Lösung mit regulären Ausdrücken kein großes Problem dar. Es muss lediglich eine Zeile angepasst werden.</p>
<p>Reguläre Ausrücke habe ich persönlich bisher sehr sporadisch gebraucht, würde aber dennoch folgendes Vorgehen vorschlagen:</p>
<ol>
<li>Klären der Struktur der Daten</li>
<li>Erkennen eines Musters</li>
<li>Definition des Musters in regulären Ausdrücken</li>
<li>Implementierung des Rahmenprogramms: öffnen einer Datei, ausgeben der Ergebnisse &#8230;</li>
</ol>
<p>Die Struktur des Datensatzes haben wir schon geklärt: es ist ein Datensatz, dessen Elemente durch Kommata getrennt sind. Die zwei Kopfdateien interessieren uns hierbei nicht, die sollen nicht importiert werden.
</p>
<p>Das Muster ergibt sich, indem logische Bereiche von einer Zeile betrachtet werden:<br />
<code class="bash">-1031,948,750, ,"45"</code><br />
Zum Einen ist zu bemerken, dass alle Zahlen ganze Zahlen sind. Zudem ist ein Minus auch erlaubt. Also ergibt sich aus der Überlegung folgendes Muster: drei aufeinander folgenden Integer-Zahlen, die durch jeweils ein Komma getrennt sind und evt. ein Minus vor der Integer-Zahl.</p>
<p>Daraus lässt sich nun der folgende einfache reguläre Ausdruck ableiten:<br />
<code class="bash">(-?[0-9]*),(-?[0-9]*),(-?[0-9]*),.*</code><br />
Es sei angemerkt, dass auch an dieser Stelle viele Wege nach Rom führen. Drei Programmierern fallen bestimmt spontan neun verschiedene reguläre Ausdrücke ein, die alle die korrekte Lösung liefern.
</p>
<h3>Reguläre Ausdrücke in Python</h3>
<p>Der glückliche und aktive Linux Benutzer kann reguläre Ausdrücke in sehr vielen Programmen und Tools anwenden. Als Beispiele seien nur die Tools <a href="http://de.wikipedia.org/wiki/Grep">grep</a> und <a href="http://de.wikipedia.org/wiki/Awk">awk</a> genannt.</p>
<p>Ich möchte nicht behaupten, dass die meisten Bücher, jedoch sehr viele erklären reguläre Ausdrücke in Kombination mit der Skriptsprache <a href="http://de.wikipedia.org/wiki/Perl_%28Programmiersprache%29">Perl</a>. In Python lassen sich die regulären Ausdrücke doch ebenso leicht verwenden. Dazu muss lediglich das Modul <em>re</em> importiert werden:<br />
<code class="bash">import re</code> Damit sind wir mit einer mächtigen Waffe ausgestattet.</p>
<h3>Import der csv-Daten und Ausgabe der Listen (Arrays)</h3>
<p>Gehen wir es an und importieren den Datensatz mit den unordentlich formatierten Daten. Dazu schlage ich folgendes kleines Python-Skript vor:</p>
<pre class="brush:python">import re

# define a pattern for matching the needed data

fileO = open('walking_example.dat','r')
search_data = fileO.readlines()

fileO.seek(0,0)

print("Following data will be parsed:\n")
print(fileO.read())

fileO.close()

pattern = '(-?[0-9]*),(-?[0-9]*),(-?[0-9]*),.*'
r = []; s = []; t = [];

for line in search_data:
    found = re.search(pattern, line)
    if found:
        r.append(float(found.group(1)))
        s.append(float(found.group(2)))
        t.append(float(found.group(3)))

print("\nThe parsed lists:\n")
print(r,s,t)</pre>
</p>
<h4>Schrittweise erklärt:</h4>
<p>1.Zeile: Zu Beginn wird das Modul zur Verwendung regulärer Ausdrücke importiert.</p>
<p>5.Zeile: Es wird ein <em>file</em>-Objekt angelegt, welches die Datei mit dem Datensatz enthält. Die Funktion <em>open</em> erhält im ersten Übergabeparameter die Datei inklusive dem Pfad und im zweiten die Option &#8216;r&#8217;, was bedeutet, dass nur gelesen werden soll. Da in meinem Fall die csv-Datei sich im selben Ordner befindet, wie das Python-Skript, muss lediglich der Dateiname angegeben werden.</p>
<p>6.Zeile: Um die Daten aus dem <em>file</em>-Objekt zu verwenden, werden sie zeilenweise eingelesen und in der Variablen <em>search_data</em> gespeichert.</p>
<p>7-11.Zeile: Dieser Abschnitt ist optional. Zunächst wird die Position im <em>file</em>-Objekt wieder auf den Ausgangszustand zurückgesetzt, damit der Datensatz erneut mittels <em>read()</em> gelesen und dadurch einfach mit <em>print()</em> ausgegeben werden kann. Dies alles dient nur der leichten Kontrolle des regulären Ausdrucks.</p>
<p>13.Zeile: Das <em>file</em>-Objekt wird geschlossen.</p>
<p>15.Zeile: Der bereits vorgestellte reguläre Ausdruck wird in der Variable <em>pattern</em> gespeichert.</p>
<p>16.Zeile: Initialisierung leerer Listen für die drei Spalten aus den Datensatz.</p>
<p>19.Zeile: Anwendung des regulären Ausdrucks für jede Zeile aus <em>search_data</em>, was mit Hilfe der <em>for</em>-Schleife aus Zeile 18 bewerkstelligt wird. Hierzu wird die Funktion <em>search</em> aus dem <em>re</em>-Modul verwendet. <em>search</em> erhält als erstes Argument das Muster und als zweites die zu untersuchende Zeile des Datensatzes.</p>
<p>21-23.Zeile: Wenn <em>re.search</em> etwas gefunden hat, dann werden die Teile, welche im regulären Ausdruck in runden Klammern stehen in die drei Listen <em>r,s,t</em> geschrieben. Vor dem eigentlichen Anhängen an die Liste mittels <em>append</em> wird der Inhalt in <em>float</em>-Zahlen umgewandelt.</p>
<p>26.Zeile: Zu guter Letzt werden die Listen zur Kontrolle ausgegeben.</p>
<h3>Ergebnis und Kontrolle</h3>
<p>Die Arbeit ist getan, jetzt gilt es nur noch die Lorbeeren zu pflücken.</p>
<p>Dazu schauen wir uns an, was das Skript in der Shell ausgibt:<br />
<code class="bash">Following data will be parsed:<br />
header 1;<br />
header 2;<br />
1031,-948,-76, ,"12"<br />
507,635,-1148, ,"34"<br />
-1031,948,750, ,"45"<br />
-507,-635,114, ,"67"<br />
The parsed lists:<br />
([1031.0, 507.0, -1031.0, -507.0], [-948.0, 635.0, 948.0, -635.0], [-76.0, -1148.0, 750.0, 114.0])</code><br />
Es ist ganz leicht zu erkennen, dass das kleine Programm für diesen Fall richtig funktioniert hat.</p>
<h3>Schlusswort</h3>
<p>Reguläre Ausdrücke sind ein mächtiges Instrument, welches jedoch aufgrund der etwas undurchsichtigen Syntax oft als zu umständlich abgelehnt werden. Aus meiner Sicht lohnt sich eine kurze Einarbeitung in die Syntax, wenn öfter mal bestimmte Bereiche eines Datensatzes extrahiert werden müssen, was bei mir der Fall ist.</p>
<p>An dieser Stelle ein Dankeschön an Mike vom walkingrandomly.com-Blog für die Steilvorlage.</p>
<p>Weiterhin würde mich interessieren, wie meine Leser an die Sache herangegangen wären und welche Erfahrungen sie gemacht haben in Bezug auf reguläre Ausdrücke.</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/">Permalink</a> |
<a href="http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/#comments">ein Kommentar</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/&title=Python Tutorial: Lesen von csv-Daten">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/&title=Python Tutorial: Lesen von csv-Daten">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/&title=Python Tutorial: Lesen von csv-Daten">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/inputoutput/" rel="tag">InputOutput</a>, <a href="http://www.muvik.de/tag/python/" rel="tag">Python</a>, <a href="http://www.muvik.de/tag/tutorial/" rel="tag">Tutorial</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/06/04/python-tutorial-lesen-von-csv-daten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Links zum Thema &#8211; Python Lernen</title>
		<link>http://www.muvik.de/2010/05/25/links-zum-thema-python-lernen/</link>
		<comments>http://www.muvik.de/2010/05/25/links-zum-thema-python-lernen/#comments</comments>
		<pubDate>Tue, 25 May 2010 08:10:42 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Links zum Thema]]></category>
		<category><![CDATA[eBook]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=657</guid>
		<description><![CDATA[Thema der ersten Liste lautet: Python (Programmieren-) Lernen. Diesen sehr allgemeine Beginn möchte ich kurz begründen, bevor es zur eigentlichen Linkliste geht. Die Linkliste enthält heute einige eBooks und einen Verweis zu Screencasts bzw. Videos zum Thema. Nur in den seltensten Fällen gibt es lediglich einen gewichtigen Grund für ein Vorgehen oder einen Entschluss eines [...]]]></description>
			<content:encoded><![CDATA[<img class="cat-img-wide" alt="Leseempfehlungen durch die Links zum Thema" src="http://muvik.de/categorie_images/links_zum_thema.gif" title="Leseempfehlungen zu bestimmten Themen" width="443" height="98" />
<p class="preview">Thema der ersten Liste lautet: Python (Programmieren-) Lernen. Diesen sehr allgemeine Beginn möchte ich kurz begründen, bevor es zur eigentlichen Linkliste geht. Die Linkliste enthält heute einige eBooks und einen Verweis zu Screencasts bzw. Videos zum Thema.</p>
<p><span id="more-657"></span></p>
<p>Nur in den seltensten Fällen gibt es lediglich einen gewichtigen Grund für ein Vorgehen oder einen Entschluss eines Menschen; die Auswahl des heutigen Themas stellt dahingehen auch keine Ausnahme dar. Aus folgenden Gründen gibt es heute Links zu dem sehr allgemein gehaltenen Thema &#8220;Python Lernen&#8221;:</p>
<ul>
<li>Python als Programmiersprache und Problemlösungswerkzeug stellt eine wichtige Säule auf meinem Blog dar. Insbesondere steht hierbei das Erlernen von Python im Vordergrund. Das allein ist schon Grund genug, um an dieser Stelle eine Liste mit allgemeinen Büchern für Anfänger und Fortgeschritten in der Python-Programmierung zu erstellen.</li>
<li>Da ich selber noch ein Anfänger bin, kann ich beurteilen, wie viel Wert eine kompakte Sammlung an Links für Anfänger darstellt. Diese möchte ich auf meiner Webseite daher nicht missen.</li>
<li>Da ich grundsätzlich nicht vor habe, überwiegend brandaktuelle News in der Linkliste aufzuführen, kann die Linkliste sich zu einer Informationsquelle für im Thema interessierte Leser entwickeln.</li>
</ul>
<p>Damit möchte ich die Begründung als ausreichen ansehen und zur eigentlichen Linkliste übergehen.
</p>
<h3>4 eBooks zum Thema Python Lernen</h3>
<div class="list-img">
<p><a href="http://openbookproject.net//thinkCSpy/"><img src="http://www.muvik.de/wp-content/uploads/2010/05/LzT01-01.png" alt="eBook-How to Think Like a Computer Scientist" title="How to Think Like a Computer Scientist" width="100" height="100" class="alignleft size-full wp-image-670" /></a><a href="http://openbookproject.net//thinkCSpy/">How to Think Like a Computer Scientist</a><br />
In 21 Kapiteln wird sowohl auf die Grundlagen der Python-Programmierung eingegangen, wie auch auf fortgeschrittene Konzepte wie die objektorientierte Modellierung und Programmierung. Man lernt, wie eigene Module erstellt und die installierten Module mit PyDoc durchsucht werden können.</p>
</div>
<div class="list-img">
<p><a href="http://ada.rg16.asn-wien.ac.at/~python/how2think/index.htm"><img src="http://www.muvik.de/wp-content/uploads/2010/05/LzT01-02.png" alt="Deutsche Übersetzung von &quot;How to Think Like a Comuter Scientist&quot;" title="Deutsche Übersetzung von &quot;How to Think Like a Comuter Scientist&quot;" width="100" height="100" class="alignleft size-full wp-image-675" /></a><a href="http://ada.rg16.asn-wien.ac.at/~python/how2think/index.htm">Wie ein Informatiker denken lernen &#8230; mit Python</a><br />
Die deutsche Übersetzung des zuvor vorgestellten Buchs hat meiner Meinung nach nicht die Qualität des englischen Buchs, für Leute, die lieber deutsche Fachbücher lesen ist es aber dennoch geeignet.</p>
</div>
<div class="list-img">
<p><a href="http://www.swaroopch.com/notes/Python"><img src="http://www.muvik.de/wp-content/uploads/2010/05/LzT01-03.png" alt="eBook: A Byte of Python" title="eBook: A Byte of Python" width="100" height="100" class="alignleft size-full wp-image-678" /></a><a href="http://www.swaroopch.com/notes/Python">A Byte of Python</a><br />
Dieses englische eBook gibt eine nahezu vollständige Einführung in Python, ist angenehm zu Lesen und hat bereits eine breite Anwendergemeinde gefunden. Das Buch ist online sowie als pdf-Datei geniesbar.</p>
</div>
<div class="list-img">
<p><a href="http://diveintopython.org/"><img src="http://www.muvik.de/wp-content/uploads/2010/05/LzT01-04.png" alt="eBook: Dive into Python" title="eBook: Dive into Python" width="100" height="100" class="alignleft size-full wp-image-681" /></a><a href="http://diveintopython.org/">Dive Into Python</a><br />
Ebenfalls ein englischsprachiges eBook, welches sehr tief in die Thematik einsteigt. Auf das Arbeiten mit Python unter Windows, Mac OS und Linux wird eingegangen. Sogar das Thema <em>Regular Expressions</em> und die Optimierung eines Python-Programms wird abgehandelt.</p>
</div>
<h3>Videos und Screencasts zum Thema Python Lernen</h3>
<div class="list-img">
<p><a href="http://showmedo.com/learningpaths/19/view"><img src="http://www.muvik.de/wp-content/uploads/2010/05/LzT01-05.png" alt="Videos und Screencasts auf showmedo.com" title="Videos und Screencasts auf showmedo.com" width="100" height="100" class="alignleft size-full wp-image-684" /></a> <a href="http://showmedo.com/learningpaths/19/view">ShowMeDo.com</a><br />
Viele Screencast und Videos zu diversen Themen aus dem opensource Bereich lassen sich auf showmedo.com finden. Das interessante Konzept des <em>lerning-path</em> führt den Lernenden durch die Sammlung in einer sinnvollen Reihenfolge.</p>
</div>
<h3>Schlusswort</h3>
<p>Das waren die ersten fünf Links zu Resourcen, die mir wichtig waren und sind und denen ich zutraue, dass sie meinen lieben Lesern ebenfalls hilfreich sein können.</p>
<p>Natürlich würde ich mich über Kommentare diesbezüglich freuen. Weitere Links zum Thema &#8220;Python Lernen&#8221; nehme ich gerne auf und veröffentliche sie in einer weiteren Linkliste.</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/05/25/links-zum-thema-python-lernen/">Permalink</a> |
<a href="http://www.muvik.de/2010/05/25/links-zum-thema-python-lernen/#comments">keine Kommentare</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/05/25/links-zum-thema-python-lernen/&title=Links zum Thema &#8211; Python Lernen">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/05/25/links-zum-thema-python-lernen/&title=Links zum Thema &#8211; Python Lernen">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/05/25/links-zum-thema-python-lernen/&title=Links zum Thema &#8211; Python Lernen">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/ebook/" rel="tag">eBook</a>, <a href="http://www.muvik.de/tag/python/" rel="tag">Python</a>, <a href="http://www.muvik.de/tag/tutorial/" rel="tag">Tutorial</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/05/25/links-zum-thema-python-lernen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UML: Aktivitätsdiagramm (Teil 4)</title>
		<link>http://www.muvik.de/2010/02/26/uml-aktivitaetsdiagramm-teil-4/</link>
		<comments>http://www.muvik.de/2010/02/26/uml-aktivitaetsdiagramm-teil-4/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 13:00:49 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Modellierung]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=263</guid>
		<description><![CDATA[Heute geht die UML-Artikelserie in die vierte Runde. Und das Thema werden die Aktivitätsdiagramme sein. Auch diesmal beschreibe ich diesen Diagrammtyp kurz, nenne die wichtigsten Anwendungsgebiete und stelle die wichtigsten Elemente eines Aktivitätsdiagramms anhand eines einfach gehaltenen Beispiels vor. Der letzte Beitrag der UML-Artikelserie, in dem es über das Klassendiagramm ging, ist etwas länger geworden, [...]]]></description>
			<content:encoded><![CDATA[<p class="preview">Heute geht die UML-Artikelserie in die vierte Runde. Und das Thema werden die Aktivitätsdiagramme sein. Auch diesmal beschreibe ich diesen Diagrammtyp kurz, nenne die wichtigsten Anwendungsgebiete und stelle die wichtigsten Elemente eines Aktivitätsdiagramms anhand eines einfach gehaltenen Beispiels vor.</p>
<p><span id="more-263"></span></p>
<p>Der letzte Beitrag der UML-Artikelserie, in dem es über das Klassendiagramm ging, ist etwas länger geworden, als ich das für diese Kurzserie vorgesehen hatte. Über die Aktivitätsdiagramme habe ich heute nicht so viel wie über die Klassendiagramme zu schreiben, daher sollte es diesmal wieder kürzer werden.</p>
<h3>Was ist ein Aktivitätsdiagramm und nützt es mir?</h3>
<p>Im Gegensatz zu den bisher vorgestellten Diagrammtypen Anwendungsfalldiagramm und Klassendiagramm, welche unter Strukturdiagramme einzuordnen sind, ist das Aktivitätsdiagramm eine Art der Verhaltensdiagramme. Andere Bezeichnungen, die genau das selbe meinen, sind &#8220;Ablaufdiagramm&#8221; und für englisch affine Leser auch &#8220;flow chart&#8221;.</p>
<p>Wie der Name schon andeutet, beschreibt ein Aktivitätsdiagramm einen Ablauf, wobei ein Ablauf zum Beispiel ein Anwendungsfall sein kann, welcher im Detail angeschaut werden soll. Aufgrund der Struktur des Aktivitätsdiagramms lassen sich damit zum Teil sehr komplizierte Abläufe grafisch ansprechend aufbereiten und erklären.</p>
<p>Als &#8220;Aktivität&#8221; wird seit UML 2.0 das ganze Diagramm mit allen Einzelelementen bezeichnet. Beispiele für eine Aktivität aus dem bereits vorgestellten Anwendungsfalldiagramm wären zum Beispiel &#8220;Artikel kommentieren&#8221; oder &#8220;Artikel schreiben&#8221;. Die Darlegung, wie nun ein Artikel im Detail kommentiert wird, welche Aktion welcher folgt, ist die Aufgabe eines Aktivitätsdiagramms. Darin werden die Aktionen als Knoten bezeichnet. Vereinfacht betrachtet besteht eine Aktivität aus Knoten und Flüssen, welche die Knoten miteinander verbinden. </p>
<p>Damit kommen wir auch schon zu einigen Besonderheiten und Details eines Aktivitätsdiagramms: Wenn ein ganzes Aktivitätsdiagramm nun Aktivität heißt, wie wird dann der einzelne Ablaufschritt genannt? Ich habe diesen Begriff bereits im vorherigen Abschnitt verwendet: &#8220;Aktion&#8221;. Die Aktion stellt im<br />
Allgemeinen die kleinste und simpelste Einheit eines Aktivitätsdiagramms dar. Jedoch kann eine Aktion auch eine weitere Aktivität aufrufen, worin der Informationsfluss genauer gezeigt ist. Jede Aktion hat mindestens einen eingehenden und einen ausgehenden Kontrollfluss. Im Falle mehrerer eingehender Kontrollflüsse müssen alle Flüsse zur gleichen Zeit verfügbar sein, damit die Aktion beginnen kann. Bei mehreren Ausgängen gilt das gleiche in Grün: erst wenn alle Ausgänge &#8220;bereit&#8221; sind, dann werden auch alle zum selben Zeitpunkt ausgegeben.</p>
<p>Neben der Aktion als Knoten existieren weitere wichtige Knoten: Kontroll -und Objektknoten. Doch dazu später mehr.</p>
<p>Wie bereits erwähnt, werden die Knoten durch Flüsse verbunden. Es werden zwei grundlegende Flussarten unterschieden: die Kontrollflüsse und die Objektflüsse. Aber bevor es zu viel trockene Theorie wird, hier erstmal das Beispiel:</p>
<div id="attachment_277" class="wp-caption alignnone" style="width: 453px"><a href="http://bit.ly/cWBrpJ" alt="Beispiel Aktivitätsdiagramm auf Cacoo.com"><img src="http://www.muvik.de/wp-content/uploads/2010/02/Aktivitaetsdiagramm_Bsp.png" alt="Aktivitätsdiagramm: Blogartikel schreiben" title="Aktivitätsdiagramm: Blogartikel schreiben" width="443" height="380" class="size-full wp-image-277" /></a><p class="wp-caption-text">Beispiel: Aktivitätsdiagramm</p></div>
<p>Das Aktivitätsdiagramm habe ich mit einer tollen Browseranwendung aus der WEB2.0 Ecke erstellt: <a href="http://bit.ly/cWBrpJ" alt="Beispiel Aktivitätsdiagramm auf cacoo.net">cacoo.com</a>. Ein Tipp für alle, die schnell ein einfaches UML-Diagramm zusammenklicken wollen und es nicht für zum Beispiel einen Kunden bestimmt ist.</p>
<p>Natürlich lasse ich es mir nicht nehmen, auch diesmal ein Diagramm zu einem Weblog-Thema zu erstellen. Diesmal habe ich den Anwendungsfall &#8220;Blogartikel schreiben&#8221; ausgewählt und mit einigen Elementen des Aktivitätsdiagramms veranschaulicht.</p>
<p><p><script type="text/javascript"><!--
google_ad_client = "pub-1356270213107195";
/* 468x60_incontent_text */
google_ad_slot = "2104479285";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p></p>
<h3>Elemente eines Aktivitätsdiagramms</h3>
<p>Im ersten Abschnitt bin ich bereits etwas auf die wichtigsten Elemente eingegangen, nun möchte ich auch etwas zur Notation und Darstellung in UML loswerden. Fangen wir mit der Aktivität an sich an:</p>
<p>Die <strong>Aktivität</strong>, bzw. der Aktivitätsname &#8220;Blogartikel schreiben&#8221; wird, wie im Beispiel gezeigt, in die linke obere Ecke geschrieben. Meist wird die ganze Aktivität von einem Rahmen umgeben, welcher die Aktivität von seiner Umgebung abgrenzen soll. Häufig liegen keine Diagrammelemente auf dem Rahmen, im Beispiel ist es auch kein Fehler. Wird ein rechteckiger Knoten auf den Rahmen gelegt, dann stellt es einen Eingangsparameter dar. Also ist die &#8220;Idee&#8221; der Eingangsparameter für die Aktivität &#8220;Blogartikel schreiben&#8221;.</p>
<p>Neben der Funktion als Eingangsparameter, deutet der Knoten &#8220;Idee&#8221; mit seinem rechteckigen Rahmen an, dass er ein <strong>Objektknoten</strong> ist. Er gibt an, dass in dem Ablauf Objekte verwickelt sind. Von einem Objekt geht kein Kontrollfluss, sondern ein <strong>Objektfluss</strong> aus, es werden also Objekte transportiert. Meines Wissens nach wird graphisch zwischen Objektfluss und Kontrollfluss nicht direkt unterschieden.</p>
<p>Verfolgen wir das Diagramm weiter, so stoßen wir auf einen Knoten mit abgerundeten Ecken. Ein solcher Knoten ist eine <strong>Aktion</strong>. Wie bereits angedeutet, ist die Aktion die einfachste Einheit eines Aktivitätsdiagramms. Jedoch kann sie auch durch ein weiteres Aktivitätsdiagramm beschrieben werden und darauf verweisen, was durch eine kleine <strong>&#8220;Mistgabel&#8221;</strong> im Aktionsknoten gekennzeichnet wird. Ein derartige Mistgabel habe ich bei einer der sicherlich schwersten Aktionen hinzugefügt: &#8220;Wissen beschaffen&#8221;. Dieser Aktion müsste ich nur noch ein Aktivitätsdiagramm hinzufügen und schon könnte jeder Unmengen an Wissen beschaffen <img src='http://www.muvik.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Eine Raute, wie sie zwischen den zwei Aktionsknoten &#8220;Thema prüfen&#8221; und &#8220;Übersicht erstellen&#8221; aufgeführt ist, impliziert eine <strong>Entscheidung</strong>. Sie ist ein Kontrollknoten und gehört meiner Ansicht nach zu den Elementen, welche ein Aktivitätsdiagramm erst richtig interessant machen.</p>
<div id="attachment_289" class="wp-caption alignnone" style="width: 453px"><img src="http://www.muvik.de/wp-content/uploads/2010/02/Elemente01_Aktivitaetsdiagramm.png" alt="UML: Startknoten, Endknoten, Ablaufende" title="UML: Startknoten, Endknoten, Ablaufende" width="443" height="136" class="size-full wp-image-289" /><p class="wp-caption-text">Elemente: Startknoten, Endknoten, Ablaufende</p></div>
<p>Weitere ganz wichtige Elemente sind der <strong>Startknoten</strong>, ein ausgefüllter Kreis, der <strong>Endknoten</strong>, symbolisiert durch einen ausgefüllten Kreis in einem Ring und ein <strong>Ablaufende</strong>, einem durchgestrichenem leeren Kreis. Die ersten Beiden erklären sich von selbst. Im Beispiel &#8220;Blogartikel schreiben&#8221; habe ich kein Startknoten, weil die Idee als Parameter übergeben wird und der Fluss an dieser Stelle beginnt. Ein Endknoten beendet im Gegensatz zum Ablaufende den gesamten Fluss und alle Aktionen, das Ablaufende jedoch nur einen einzelnen Fluss.</p>
<div id="attachment_293" class="wp-caption alignnone" style="width: 453px"><img src="http://www.muvik.de/wp-content/uploads/2010/02/Konnectoren_Aktivitaetsdiagramm.png" alt="UML-Element: Konnektoren" title="UML-Element: Konnektoren" width="443" height="133" class="size-full wp-image-293" /><p class="wp-caption-text">Element: Konnektoren im Aktivitätsdiagramm</p></div>
<p>Möchte man einen komplizierten Ablauf mit Hilfe eines Aktivitätsdiagramms veranschaulichen, so wird es schnell ganz unübersichtlich. Um den Chaos in Grenzen zu halten und ewig lange Kontrollfluss-Linien zu vermeiden, gibt es die <strong>Konnektoren</strong>. Dabei endet ein Fluss an einem Marker, zum Beispiel einem &#8220;A&#8221;, und geht an einer anderen Stelle von einem &#8220;A&#8221; aus weiter. Die Marker werden dafür in einfache Kreise geschrieben. Zudem sind die Konnektoren auch dafür gut, wenn ein Diagramm nicht ganz auf ein Blatt passt und auf einem anderen weitergehen soll, dann können ebenfalls Konnektoren eingesetzt werden.</p>
<p>Es gibt noch viele weitere Elemente von Aktivitätsdiagrammen, die durch ihre Zeichen mehr oder weniger selbsterklärend sind. Für den ersten Einstieg sollten die hier aufgeführten aber zunächst reichen. Ergänzungen und Kommentare können gerne hinterlassen werden.</p>
<h3>Ende gut alles gut?</h3>
<p>Mit diesem Artikel geht meine Mini-Serie zu UML-Diagrammen zu Ende. Während ich die Artikel geschrieben habe, sind mir etliche weitere Artikelideen eingefallen, die ich eventuell noch verwirklichen möchte.</p>
<p>Nun hoffe ich, dass es euch gefallen hat und würde mich über Kommentare und Anregungen freuen.</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/02/26/uml-aktivitaetsdiagramm-teil-4/">Permalink</a> |
<a href="http://www.muvik.de/2010/02/26/uml-aktivitaetsdiagramm-teil-4/#comments">ein Kommentar</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/02/26/uml-aktivitaetsdiagramm-teil-4/&title=UML: Aktivitätsdiagramm (Teil 4)">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/02/26/uml-aktivitaetsdiagramm-teil-4/&title=UML: Aktivitätsdiagramm (Teil 4)">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/02/26/uml-aktivitaetsdiagramm-teil-4/&title=UML: Aktivitätsdiagramm (Teil 4)">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/modellierung/" rel="tag">Modellierung</a>, <a href="http://www.muvik.de/tag/tutorial/" rel="tag">Tutorial</a>, <a href="http://www.muvik.de/tag/uml/" rel="tag">UML</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/02/26/uml-aktivitaetsdiagramm-teil-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>UML: Klassendiagramm (Teil 3)</title>
		<link>http://www.muvik.de/2010/02/24/uml-klassendiagramm-teil-3/</link>
		<comments>http://www.muvik.de/2010/02/24/uml-klassendiagramm-teil-3/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 13:00:35 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Modellierung]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=226</guid>
		<description><![CDATA[Im dritten Teil der Artikelserie zu UML geht es heute um etwas ganz wichtiges: das Klassendiagramm. Wie es sich für eine Einführung in UML gehört, nenne ich zunächst die Existenzgründe von Klassendiagrammen und wofür sie eingesetzt werden. Dann stelle ich ein einfaches Beispiel vor und erkläre anhand des Beispiels die Elemente eines Klassendiagramms. Nachdem es [...]]]></description>
			<content:encoded><![CDATA[<p class="preview">Im dritten Teil der Artikelserie zu UML geht es heute um etwas ganz wichtiges: das Klassendiagramm. Wie es sich für eine Einführung in UML gehört, nenne ich zunächst die Existenzgründe von Klassendiagrammen und wofür sie eingesetzt werden. Dann stelle ich ein einfaches Beispiel vor und erkläre anhand des Beispiels die Elemente eines Klassendiagramms.</p>
<p><span id="more-226"></span></p>
<p>Nachdem es im zweiten Teil der UML-Artikelserie um die Anwendungsfälle ging, die dem Programmierer die Anforderungen an ein Programm darlegen, wird es diesmal mit den Klassendiagrammen etwas technischer.
</p>
<h3>Was ist ein Klassendiagramm und wofür brauche ich es?</h3>
<p>Die Aussage, dass das Klassendiagramm das liebste Kind des Programmierer ist, fällt mir nicht schwer, obwohl ich dafür keinen stichhaltigen Beweis habe. Betrachtet man jedoch die Struktur, den Aufbau und die Funktion eines Klassendiagramms, worauf ich noch eingehen werden, so merkt man, dass dieser Diagrammtyp dem Code objektorientierter Programmiersprachen sehr ähnlich ist. Daher wird jeder, der objektorientiertes Programmieren beherrscht, auch mit dem Klassendiagramm auf Anhieb zurechtkommen. </p>
<p>Gehen wir davon aus, dass die oben getroffene Aussage wahr ist, so ist das Klassendiagramm das wichtigste Diagramm der UML. Es gehört zu den Strukturdiagrammen, zu welchen auch das Anwendungsfalldiagramm gezählt wird. Was Klassendiagramme können lässt sich grob im folgenden Satz zusammenfassen:</p>
<p><strong>Das Klassendiagramm zeigt, welche Klassen existieren, wie sie aufgebaut sind und in welchen Beziehungen sie zu einander stehen.</strong></p>
<p>Somit ist die Struktur der einzelnen Klassen, die gemeinsame Struktur und das daraus resultierende gemeinsame Verhalten aus einem Klassendiagramm erkennbar. Die Betrachtung auf dieser abstrakten Ebene ermöglicht es, sich den Aufbau des Modells klarer zu machen.</p>
<p>Das wohl bekanntest Anwendungsfeld für Klassendiagramme ist wahrscheinlich die objektorientierte Modellierung als Vorarbeit für die Programmierung. Jedoch ist auch der umgekehrte Weg möglich: Liegt eine objektorientierter Code vor, so kann daraus ein UML-Klassendiagramm erstellt werden. Für beide Wege existieren automatische Generatoren, die entweder aus einem Klassendiagramm die Code-Struktur einer objektorientierter Programmiersprache erzeugen oder aus dem Code das Diagramm generieren.</p>
<p>Im folgenden Bild habe ich versucht, ein einfaches Klassendiagramm für den Inhalt eines Weblogs zu erstellen:<br />
<div id="attachment_236" class="wp-caption alignnone" style="width: 453px"><a href="http://www.muvik.de/wp-content/uploads/2010/02/klassendiagramm.png"><img src="http://www.muvik.de/wp-content/uploads/2010/02/klassendiagramm.png" alt="UML-Klassendiagramm des Weblog-Inhalts" title="UML-Klassendiagramm des Weblog-Inhalts" width="443" height="293" class="size-full wp-image-236" /></a><p class="wp-caption-text">Beispiel: Klassendiagramm des Inhalts eines Weblogs</p></div><br />
Es ist mir bewusst, dass das Diagramm keinesfalls vollständig ist. Aber ich denke, es erfüllt seinen Zweck, nämlich das erläutern der Elemente eines Klassendiagramms.</p>
<p>In dem Beispiel sind bereits folgende Elemente zu sehen:</p>
<ul>
<li>abstrakte Klasse: Content</li>
<li>diverse Klassen: Datum, Autor, Artikel&#8230;</li>
<li>Vererbungsbeziehung</li>
<li>Assoziationsbeziehung</li>
<li>Aggregationsbeziehung</li>
</ul>
<p>Das ist nur eine kleine Auswahl der möglichen Elemente eines Klassendiagramms, welche ich unter anderem im nächsten Abschnitt näher erläutere.</p>
<h3>Elemente eines Klassendiagramms</h3>
<p>Das wichtigste Element des Klassendiagramms steht schon im Namen drin: <strong>die Klasse</strong>. Manchmal wird statt Klasse auch einfach <strong>Typ</strong> gesagt, was das gleiche meint. Eine Klasse bzw. ein Typ ist im Grunde eine Zusammenfassung der Eigenschaften (Attribute) und des Verhaltens (Operationen) der Objekte dieser Klasse. Symbolisiert wird eine Klasse mit einem Rechteck, welches im oberen Feld den Namen der Klasse enthält. Werden Attribute und Operationen angegeben, so stehen sie jeweils durch ein horizontalen Strich getrennt unter dem Namen. Jedoch ist es keine Pflicht, Attribute und Operatoren anzugeben. In dem Beispiel hat lediglich die Klasse &#8220;Content&#8221; ein Attribut und eine Operation.</p>
<p>Möchte man Attribute aufführen, dann kann man dies unterschiedliche Arten tun: </p>
<ul>
<li>nur Name</li>
<li>Name und Typ</li>
<li>Name, Typ und Anfangswert</li>
</ul>
<p>Attribute, häufig auch Member genannt, werden an jedes Objekt einer Klasse weitergegeben. Jedoch hat wiederum jedes Objekt seine eigene Identität, was gleichbedeutend ist mit der Aussage, dass jedes Objekt zwar gleich Attribute hat, die Werte der Attribute aber durchaus verschieden sein können. In c++ können mit &#8220;static&#8221; sogenannte Klassenattribute definiert werden, welche in jedem Objekt verfügbar sind und den gleichen Wert besitzen.</p>
<p>Desweiteren ist es möglich für jedes Attribut die Sichtbarkeit von außen zu beschränken, was oft sehr sinnvoll ist. Dafür stehen grundsätzlich drei Varianten zur Verfügung:</p>
<ul>
<li>+: public: für alle sichtbar und benutzbar</li>
<li>#: protected: sichtbar und benutzbar für die Klasse selbst und ihre Unterklassen</li>
<li>-: private: nur für die Klasse selbst</li>
</ul>
<p>In dem Klassen-Rechteck wird entsprechend der Sichtbarkeit eines Attributs das passende Zeichen (+,#,-) angegeben. Generell ist es ein guter Tipp, so zu programmieren, dass nur die Klassen selbst Zugriff auf ihre Attribute hat.</p>
<p>Die Operatoren, auch Memberfunktionen genannt, sind Dienstleistungen des Objekts und werden durch ihre Parameter charakterisiert. Die Parameterliste wird auch Signatur genannt.</p>
<p>Operatoren können wie Attribute auf unterschiedliche Weisen angegeben werden:</p>
<ul>
<li>nur Name</li>
<li>Name und Parameter</li>
<li>Name, Parameter mit Typ</li>
<li>Name, Parameter mit Typ und Anfangswert</li>
</ul>
<p>Außerdem können Operationen als abstrakt bzw. virtuell definiert werden, was bedeutet, dass keine Implementierung vorliegt, sondern nur die Deklaration der Operation. Dadurch wird die Klasse, welche die abstrakte Operation enthält, sofort zur abstrakten Klasse, aber dazu in wenigen Sätzen mehr.</p>
<p>Was nun letztendlich in der Attributen- und Operationenliste aufgeführt ist, ist stets problemspezifisch und hängt stark davon ab, was für das ordentliche Modellieren wichtig ist und was nur störend wirkt.</p>
<p>Der Name der Klasse wird generell in<strong> fetter Schrift</strong> geschrieben. Ist er <strong><em>fett und kursiv</em></strong>, so handelt es sich um eine <strong>abstrakte Klasse</strong>. Dieses weitere Element eines Klassendiagramms wird auch als virtuelle Klasse bezeichnet und kann keine eigenen Objekte erzeugen, da sie unvollständig ist. Zum Beispiel enthält sie eine abstrakte Funktion, die wir bereits kennen gelernt haben.<br />
Eine abstrakte Klasse dient oft dazu, zu zeigen, dass es bestimmte Operationen und Attribute gibt, diese werden aber nicht konkret implementiert. Die abstrakte Klasse stellt daher eine Basis für weitere Klassen dar, welche dann die Implementierung beinhalten.<br />
<p><script type="text/javascript"><!--
google_ad_client = "pub-1356270213107195";
/* 468x60_incontent_text */
google_ad_slot = "2104479285";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p><br />
<div id="attachment_248" class="wp-caption alignleft" style="width: 169px"><a href="http://www.muvik.de/wp-content/uploads/2010/02/param_klasse.png"><img src="http://www.muvik.de/wp-content/uploads/2010/02/param_klasse.png" alt="UML-Darstellung einer Template-Klasse" title="Beispiel: UML-Darstellung einer Template-Klasse" width="159" height="97" class="size-full wp-image-248" /></a><p class="wp-caption-text">Beispiel: UML-Darstellung einer Template-Klasse</p></div> </p>
<p>Ein weiteres Element ist die <strong>parametrisierbare Klasse</strong>. In c++ wird sie <strong>Template-Klasse</strong> genannt und stellt eine Schablone dar, welche einen formalen Parameter enthält, der bei der Erzeugung weiterer Klassen ersetzt wird. Mit dieser Technik kann leicht wiederverwendbarer Code erzeugt werden. Dargestellt wird die parametrisierbare Klasse durch ein zusätzliches rechteckiges Feld an der rechten oberen Ecke des Klassen-Feldes, welches den Namen des formalen Parameters enthält.</p>
<div id="attachment_254" class="wp-caption alignleft" style="width: 106px"><a href="http://www.muvik.de/wp-content/uploads/2010/02/object.png"><img src="http://www.muvik.de/wp-content/uploads/2010/02/object.png" alt="UML-Objekt-Darstellung" title="Beispiel: UML-Objekt" width="96" height="95" class="size-full wp-image-254" /></a><p class="wp-caption-text">Beispiel: UML-Objekt</p></div>
<p>Klassen sind im Klassendiagramm nicht die handelnden Elemente, es sind ihre <strong>Objekte</strong> oder <strong>Instanzen</strong>. Die Eigenschaften und das Verhalten der Objekte wird durch die Klasse definiert (Attribute und Operationen). In der UML-Darstellung unterscheiden sich Objekte von ihren Klassen dadurch, dass dem Namen des Objekts im obersten Feld nach einem Doppelpunkt der Name der Klasse folgt. Das ganze wird auch noch unterstrichen. Das Objekt-Rechteck stellt nur Attribute mit den aktuellen oder Beispielwerten dar, Operationen sind nicht objektspezifisch und werden daher nicht angegeben.</p>
<p>Soweit zu den Klassen und ihren Objekten. Was noch fehlt sind die Verbindungen zwischen den Klassen, welche sehr vielfältig sind. Ich möchte an dieser Stelle lediglich vier vorstellen:</p>
<p>Die <strong>Assoziation</strong> beschreibt die Relation zwischen Klassen bzw. ihrer Objekte und wird entweder durch einen einfache Strich oder durch einen Pfeil dargestellt. Im Falle des Pfeils handelt es sich um eine gerichtete Assoziation und die Kommunikation kann nur in eine Richtung stattfinden. Im oberen Beispiel habe ich die Klasse &#8220;Artikel&#8221; und die Klasse &#8220;Kommentar&#8221; auf diese Weise verbunden. Berücksichtigt man die Multiplizität, so heißt es gesprochen: &#8220;Ein Artikel kann beliebig viele Kommentare enthalten.&#8221; </p>
<p>Artikel, Kommentare und Seiten sind in einem Weblog Inhalte und sie besitzen die abstrakten Eigenschaften von Inhalten, hier sind es das Datum und den Autor. Eine derartige Beziehung wird Vererbung genannt. Die Eltern-Klasse (&#8220;Content&#8221;) wird Oberklasse und die Kind-Klasse (&#8220;Artikel&#8221;) Unterklasse genannt. </p>
<p>Eine weitere Beziehung ist in dem Beispiel zwischen den Klassen &#8220;Datum&#8221; und &#8220;Content&#8221; zu sehen. Das ist ein Sonderfall einer Assoziation und wird <strong>Aggregation</strong> genannt. Die Aggregation besagt, dass die Beziehung zwischen den Klassen nicht gleichwertig ist. In diesem Fall ist &#8220;Datum&#8221; ein Teil der Klasse &#8220;Content&#8221;. Die leere Raute zeigt dabei immer auf das ganze Element, also auf &#8220;Content&#8221;. </p>
<p>Ist die Raute nicht leer, sondern ausgefüllt, dann handelt es sich um eine <strong>Komposition</strong>. Die Komposition ist auch ein Sonderfall der Assoziation und eine strengere Form der Aggregation. Wenn das ganze Element, welches die Komposition einnimmt, aus irgendwelchen Gründen verschwindet, dann kann das komposierte Element auch nicht mehr weiter existieren. Das ist bei der Aggregation nicht der Fall. Der Autor lebt immer noch, auch wenn sein Artikel gelöscht wird. Das Gegenteil gibt es nur in Büchern und Filmen <img src='http://www.muvik.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<h3>Das ist ein Klasse-Diagramm</h3>
<p>Klassendiagramme sind ein sehr wichtiges und nützliches Werkzeug bei der Programmierung. Und da die Terminologie auch zufällig die gleiche ist, fällt es den Programmierern nicht sehr schwer, sich an die Klassendiagramme zu gewöhnen.</p>
<p>Hast schon Erfahrungen mit Klassendiagrammen gemacht? Und wo wendest du sie an?</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/02/24/uml-klassendiagramm-teil-3/">Permalink</a> |
<a href="http://www.muvik.de/2010/02/24/uml-klassendiagramm-teil-3/#comments">2 Kommentare</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/02/24/uml-klassendiagramm-teil-3/&title=UML: Klassendiagramm (Teil 3)">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/02/24/uml-klassendiagramm-teil-3/&title=UML: Klassendiagramm (Teil 3)">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/02/24/uml-klassendiagramm-teil-3/&title=UML: Klassendiagramm (Teil 3)">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/modellierung/" rel="tag">Modellierung</a>, <a href="http://www.muvik.de/tag/tutorial/" rel="tag">Tutorial</a>, <a href="http://www.muvik.de/tag/uml/" rel="tag">UML</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/02/24/uml-klassendiagramm-teil-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>UML: Anwendungsfalldiagramm (Teil 2)</title>
		<link>http://www.muvik.de/2010/02/22/uml-anwendungsfalldiagramm-teil-2/</link>
		<comments>http://www.muvik.de/2010/02/22/uml-anwendungsfalldiagramm-teil-2/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 13:00:24 +0000</pubDate>
		<dc:creator>Viktor Müller</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Modellierung]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.muvik.de/?p=121</guid>
		<description><![CDATA[Im zweiten Teil der vierteiligen Serie zu UML geht es heute um das Anwendungsfalldiagramm, welches auch unter dem Namen Use-Case-Diagramm bekannt ist. Hierin wird dieser Diagrammtyp aus Sicht eines Amateurprogrammierers beschrieben und die Aufgabe genannt, für welche das Anwendungsfalldiagramm eine Hilfe sein kann. Nach einigen einführenden Worten erkläre ich die Grundlagen eines Anwendungsfalldiagramms anhand eines [...]]]></description>
			<content:encoded><![CDATA[<p class="preview">Im zweiten Teil der vierteiligen Serie zu UML geht es heute um das Anwendungsfalldiagramm, welches auch unter dem Namen Use-Case-Diagramm bekannt ist. Hierin wird dieser Diagrammtyp aus Sicht eines Amateurprogrammierers beschrieben und die Aufgabe genannt, für welche das Anwendungsfalldiagramm eine Hilfe sein kann. Nach einigen einführenden Worten erkläre ich die Grundlagen eines Anwendungsfalldiagramms anhand eines eigenen Beispiels. Dann werde ich auf die einzelnen Elemente und Besonderheiten eines Anwendungsfalldiagramms eingehen.</p>
<p><span id="more-121"></span></p>
<p><a href="http://www.muvik.de/2010/02/20/ankuendigung-uml-kurz-und-gut/">Im ersten Teil der UML-Serie</a> ging es vorrangig um die Erläuterung, warum ich in diesem Weblog über UML schreibe und was die Leser zu erwarten haben. Heute geht es ans Eingemachte mit dem ersten Diagrammtyp für Anwendungsfälle. </p>
<h3>Was ist ein Anwendungsfalldiagramm und was kann ich damit tun?</h3>
<p>In einem Satz zusammengefasst, zeigt das Anwendungsfalldiagramm den strukturellen Zusammenhang und die Abhängigkeiten zwischen sogenannten Akteuren und den Anwendungsfällen. Dabei werden weder das Verhalten der Akteure noch irgendwelche Abläufe beschrieben, sondern nur das Zusammenwirken der Elementen (Akteure und Anwendungsfälle). Was Akteure und Anwendungsfälle sind, dazu komme ich etwas später im Text. </p>
<p>Jeder, der schon einmal etwas komplexeres programmiert hat und dabei einfach drauflos geschrieben hat, musste am Ende wahrscheinlich feststellen, dass hier eine Funktion fehlt und da noch eine Schnittstelle wünschenswert wäre, damit das Gesamtprogramm sinnvoll ist und funktioniert, wie zu Beginn angedacht. Davon abgesehen, dass es meist kein guter Rat ist, ein Programm einfach anfangen zu schreiben, ohne sich zumindest eine grobe Struktur in Gedanken anzulegen, kann ich jedem nur ans Herz legen, die Anforderungen an ein Programm schriftlich oder grafisch festzuhalten. In solchen Fällen eignet sich das Anwendungsfalldiagramm. Im professionellen geschäftlichen Bereich kann es sogar soweit gehen, dass ein Anwendungsfalldiagramm die Grundlage eines Vertrages zwischen einem Softwarehersteller und seinem Kunden wird. Daraus kann eine ganz wichtige Eigenschaft des Anwendungsfalldiagramms heraus gelesen werden: Meist interessiert es den Kunden nicht, wie ein Programm funktioniert, er gibt nur vor, was es leisten soll. Aus dieser Tatsache folgt die Aussage über das Ziel eines Anwendungsfalldiagramms: </p>
<blockquote><p>Das Anwendungsfalldiagramm hat zum Einen das Ziel den Funktionsumfang des Programms zu definieren und dabei möglichst die Kosten für nachträgliche Veränderungen zu minimieren und zum Anderen eine zielgerichtete, problemorientierte Entwicklung zu unterstützen.</p></blockquote>
<p>Ein sehr einfaches Beispiel ist im folgenden Bild gezeigt.<br />
<div id="attachment_147" class="wp-caption alignnone" style="width: 453px"><a href="http://www.muvik.de/wp-content/uploads/2010/02/Blog_Beispiel.png"><img src="http://www.muvik.de/wp-content/uploads/2010/02/Blog_Beispiel.png" alt="UML-Anwendungsfalldiagramm eines Blogs" title="Blog_Beispiel" width="443" height="466" class="size-full wp-image-147" /></a><p class="wp-caption-text">Beispiel: Anwendungsfalldiagramm eines Blogs</p></div><br />
Das Diagramm soll ein einfaches Modell eines Weblogs darstellen, wobei folgende Anwendungsfälle vorhanden sind:
<ul>
<li>Artikel schreiben</li>
<li>Artikel modifizieren</li>
<li>Artikel kommentieren</li>
<li>Artikel lesen</li>
</ul>
<p> Also beschreiben Anwendungsfälle die Wechselwirkung zwischen den Akteuren und dem System. </p>
<p>Akteure sind die Besucher und der Administrator, folglich in diesem Fall Leute, die vor dem Rechner sitzen und am Blog etwas machen.</p>
<p>Viele weitere Beispiele kannst du mit der Google Bildersuche finden, indem du nach &#8220;Anwendungsfalldiagramm&#8221; suchst. </p>
<h3>Elemente eines Anwendungsfalldiagramms</h3>
<p>Die zwei wichtigsten Elemente haben wir schon kennen gelernt: die Anwendungsfälle und die Akteure. Wie im obigen Beispiel dargestellt, werden die Anwendungsfälle mit Ellipsen und einer Bezeichnung symbolisiert. Ein vernünftiger Anwendungsfall besteht meist aus zwei Wörtern, einem Substantiv und einem Verb. Ist das nicht der Fall, dann kann das Diagramm vielleicht noch optimiert werden.</p>
<p>Die Akteure werden als Strichmännchen dargestellt und die Bezeichnung unter das Männchen geschrieben. In der Fachliteratur sind noch weitere Details zum richtigen Darstellen von besonderen Akteuren, worauf ich hier jedoch nicht eingehen möchte.</p>
<p>Die Verbindungslinien zwischen den einzelnen Elementen stehen für die Beziehungen. Eine wichtige Beziehung ist die <em>include</em>-Beziehung. Damit wird ein Anwendungsfall in einen anderen eingebunden. Eine Unterteilung der Anwendungsfälle ist jedoch nur sinnvoll, wenn der ausgegliederte Anwendungsfall mehr als einmal eingebunden wird. Die <em>include</em>-Beziehung wird mit einer gestrichelten Linie und einer Pfeilrichtung hin zum einzugliederndem Anwendungsfall dargestellt. </p>
<p>Würde ich nun in dem Beispiel meiner eigenen Erklärung der <em>include</em>-Beziehung folgen, dürfte ich den Anwendungsfall &#8220;Freischaltung anfragen&#8221;  nicht auslagern. Jedoch kann es an dieser Stelle wichtig sein, um zu verdeutlichen, dass nicht alle Kommentare wahllos zugelassen werden. Es könnte ja Spam dazwischen sein.</p>
<p>Eine ähnliche Funktion hat auch die  <em>extend</em>-Beziehung, welche einen Anwendungsfall erweitert, aber im Gegensatz zu  <em>include</em> ihn nicht zum Bestandteil des Anwendungsfalls macht.<br />
<p><script type="text/javascript"><!--
google_ad_client = "pub-1356270213107195";
/* 468x60_incontent_text */
google_ad_slot = "2104479285";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p><br />
Zwischen den Akteuren und einem Anwendungsfall können auch besondere Beziehungen gelten. Wie in dem Beispiel gezeigt, können an beiden Enden der Beziehung sogenannte Multiplizitäten angegeben werden. Diese bedeuten so viel, wie: &#8220;Ein Administrator kann einen oder viel Artikel schreiben&#8221; oder &#8220;Ein Besucher kann keinen oder viele Artikel kommentieren&#8221;. Anders herum könnte man auch sagen: &#8220;Ein Artikel kann von keinem oder vielen Besuchern kommentiert werden&#8221;. Dann müsste noch &#8220;0..*&#8221; an der Beziehungslinie zwischen &#8220;Besucher&#8221; und &#8220;Artikel kommentieren&#8221; beim Besucher stehen. Ich denke, dass es klar wird, was es mit der Multiplizität auf sich hat. </p>
<p>Ein weiteres wichtiges Element des Anwendungsfalldiagramms ist die Systemgrenze, welche mit einem rechteckigen Rahmen um alle Anwendungsfälle gekennzeichnet wird.</p>
<p>Es gibt noch einige weitere Elemente, welche an dieser Stelle genannt werden können, aber ich denke, dass es für die Verwendung hier im Blog ausreicht, was ich bisher vorgestellt habe. Sollte es im einen oder anderen Fall nicht reichen, dann werde ich direkt im entsprechenden Artikel darauf näher eingehen. Die Ausführungen hier sollten aber für das Grundverständnis ausreichen.</p>
<h3>Besonderheiten eines Anwendungsfalldiagramms</h3>
<p>Unter den Besonderheiten des Anwendungsfalldiagramms führe ich die Punkte auf, welche beim Erstellen zu beachten sind:</p>
<ul>
<li>Beschreibung aus Sicht des Systems</li>
<li>Beschreibung, was für Anwender sichtbar ist</li>
<li>kein Verhalten oder Ablauf, nur Interaktion</li>
<li>Was soll das System leisten?</li>
<li><strong>Nicht</strong>: Wie soll das System die Anforderung erfüllen?</li>
<li>an jedem Anwendungsfall soll mindestens ein Akteur beteiligt sein</li>
<li>Bezeichnung von Anwendungsfällen: Substantiv + Verb</li>
</ul>
<h3>Wo hast du bereits ein Anwendungsfalldiagramm gebraucht?</h3>
<p>Ja, jetzt ist es wieder soweit: Du, lieber Leser, bist nun an der Reihe deine Erfahrungen darzulegen und etwas aus dem Nähkästchen zu plaudern. Hast du schonmal ein derartiges UML-Diagramm erstellt, hat es dir geholfen oder dich eher bei deiner Arbeit gestört? Kannst du eine Verbesserung vorschlagen?</p>
<p><a href="http://partners.webmasterplan.com/click.asp?ref=515746&site=6989&type=text&tnb=1" target="_blank">
Deine Stadt - Dein Preis</a><br />Mit CityDeal und vielen Anderen
den Preis drücken!<br /><img src="http://banners.webmasterplan.com/view.asp?ref=515746&site=6989&type=text&tnb=1&js=1" BORDER="0" WIDTH="1" HEIGHT="1" /></p>
<hr />
<p><small>© Muvik for <a href="http://www.muvik.de">muvik-multigrid</a>, 2010. |
<a href="http://www.muvik.de/2010/02/22/uml-anwendungsfalldiagramm-teil-2/">Permalink</a> |
<a href="http://www.muvik.de/2010/02/22/uml-anwendungsfalldiagramm-teil-2/#comments">keine Kommentare</a> |
Teile es mit deinen Freunden:
<a href="http://del.icio.us/post?url=http://www.muvik.de/2010/02/22/uml-anwendungsfalldiagramm-teil-2/&title=UML: Anwendungsfalldiagramm (Teil 2)">del.icio.us</a>
<a href="http://www.mister-wong.de/addurl/?bm_url=http://www.muvik.de/2010/02/22/uml-anwendungsfalldiagramm-teil-2/&title=UML: Anwendungsfalldiagramm (Teil 2)">MisterWong</a>
<a href="http://twitter.com/home?status=http://www.muvik.de/2010/02/22/uml-anwendungsfalldiagramm-teil-2/&title=UML: Anwendungsfalldiagramm (Teil 2)">Twitter</a>
<br/>
Tags: <a href="http://www.muvik.de/tag/modellierung/" rel="tag">Modellierung</a>, <a href="http://www.muvik.de/tag/tutorial/" rel="tag">Tutorial</a>, <a href="http://www.muvik.de/tag/uml/" rel="tag">UML</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.muvik.de/2010/02/22/uml-anwendungsfalldiagramm-teil-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

