<?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>Objektorientierte Analyse und Design Archive - Maximilian Krieg</title>
	<atom:link href="https://maximiliankrieg.de/category/studium/bachelor-of-science/2-semester-b-sc/objektorientierte-analyse-und-design/feed/" rel="self" type="application/rss+xml" />
	<link>https://maximiliankrieg.de/category/studium/bachelor-of-science/2-semester-b-sc/objektorientierte-analyse-und-design/</link>
	<description>Wissen, Technik &#38; Erfahrungen</description>
	<lastBuildDate>Mon, 08 Jun 2026 18:28:19 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://maximiliankrieg.de/wp-content/uploads/2026/05/cropped-20260524_logo_2_512-2-32x32.png</url>
	<title>Objektorientierte Analyse und Design Archive - Maximilian Krieg</title>
	<link>https://maximiliankrieg.de/category/studium/bachelor-of-science/2-semester-b-sc/objektorientierte-analyse-und-design/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Objektorientierte Analyse und Design (Vorlesung 15)</title>
		<link>https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-15/</link>
					<comments>https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-15/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Tue, 19 Jun 2012 06:53:00 +0000</pubDate>
				<category><![CDATA[Objektorientierte Analyse und Design]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1849</guid>

					<description><![CDATA[<p>Start: Seite 361 Wie erfülle ich die 5 Grundprinzipien / Wie modelliere ich &#8222;gut&#8220;? Regel 1: Sparsames Einsetzen von Vererbung Regel 2: Normalisiere das Datenmodell&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-15/">Objektorientierte Analyse und Design (Vorlesung 15)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Start: Seite 361</strong></p>



<h3 class="wp-block-heading">Wie erfülle ich die 5 Grundprinzipien / Wie modelliere ich &#8222;gut&#8220;?</h3>



<p class="wp-block-paragraph">Regel 1: Sparsames Einsetzen von Vererbung</p>



<ul class="wp-block-list">
<li>Viele Vererbungen lassen sich mit Assoziationen umgehen</li>



<li>Vererbung nur bei echter “ist ein” Beziehung verwenden</li>



<li>Wenn man Vererbungen verwendet, dann möglichst nur Einfachvererbungen</li>



<li>Vererbungen nicht zu tief verschachteln</li>
</ul>



<p class="wp-block-paragraph">Regel 2: Normalisiere das Datenmodell</p>



<ul class="wp-block-list">
<li>1. Normalform:
<ul class="wp-block-list">
<li>Jedes Attribut der Relation muss einen atomaren Wertebereich haben</li>
</ul>
</li>



<li>2. Normalform:
<ul class="wp-block-list">
<li>jedes Nichtschlüsselattribut ist von jedem Schlüsselkandidaten voll funktional abhängig</li>
</ul>
</li>



<li>3. Normalform:
<ul class="wp-block-list">
<li>kein Nichtschlüssel hängt von irgendeinem Schlüsselkandidaten transitiv ab</li>
</ul>
</li>



<li>Normalisiere das Datenmodell: <strong>Mindestens 3. NF</strong></li>
</ul>



<p class="wp-block-paragraph">Regel 3:&nbsp;Vermeide transitive Assoziationen</p>



<ul class="wp-block-list">
<li>Durch Zyklen gibt es mehrere Wege für eine Beziehung zwischen zwei Objekten</li>



<li>Man sollte versuchen solche Zyklen durch das entfernen von bestimmten Assoziationen aufzulösen</li>



<li>Wenn das Auflösen eines Zyklus&#8216; nicht möglich ist, müssen Widersprüche mithilfe von Constrains verhindert werden</li>
</ul>



<p class="wp-block-paragraph">Regel 4:&nbsp;Analysiere m:n-Beziehungen genau</p>



<p class="wp-block-paragraph"><strong>Beispiel</strong>:&nbsp;<strong>Lösung</strong>:</p>



<ul class="wp-block-list">
<li>m:n-Beziehungen werfen oft Probleme auf</li>



<li>diese Beziehungen können jedoch meistens durch Assoziationsklassen dargestellt werden
<ul class="wp-block-list">
<li>Probleme können dadurch behoben werden</li>
</ul>
</li>



<li><strong>n:m Beziehungen werden durch eine Assoziationsklasse ersetzt, die zu den verbundenen Klassen mit 1:* Multiplizität verbunden ist.</strong></li>
</ul>



<h3 class="wp-block-heading">Weitere Regeln</h3>



<ul class="wp-block-list">
<li>Vermeide 1:1-Beziehungen
<ul class="wp-block-list">
<li>Oft kann man sich diese Assoziation sparen und beide Entitäten zu einer zusammenfassen</li>
</ul>
</li>



<li>Es werden nie technische Aspekte modelliert</li>



<li>Beschränkung bei der Modellierung auf die wirklichen Anforderungen</li>
</ul>



<h3 class="wp-block-heading">Entwurf von Operationen und Schnittstellen</h3>



<p class="wp-block-paragraph">Regel 1: Operationen sind unabhängig von der verwendeten Technologie !</p>



<ul class="wp-block-list">
<li>Versuche, möglichst wenig über die interne Funktionalität / Umsetzung einer Operation zu verraten
<ul class="wp-block-list">
<li>nichts über die Datenspeicherung, Datenstrukturen, die das System verwendet sichtbar machen
<ul class="wp-block-list">
<li>z.B. Stack</li>



<li>SAP</li>



<li>&#8230;</li>
</ul>
</li>
</ul>
</li>



<li>Entwerfe Operationen so,
<ul class="wp-block-list">
<li>dass die Funktionalität intuitiv erkennbar sind</li>



<li>dass sie eigenständig funktionieren
<ul class="wp-block-list">
<li>so sind sie austauschbar</li>



<li>sie können gegebenenfalls für andere Systeme verwendet werden</li>
</ul>
</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Regel 2: Gib keine Referenzen nach außen!</p>



<ul class="wp-block-list">
<li>Versuche keine Pointer zu übergeben
<ul class="wp-block-list">
<li>Pointer sind nur innerhalb dieses Systems gültig</li>



<li>Pointer verraten Weiteres über die Funktionalität</li>
</ul>
</li>



<li>Referenzen erhöhen die Abhängigkeit zwischen Systemteilen</li>



<li>Gefahr von Fehlern erhöht</li>



<li>Ausnahme: Werden viele Daten benötigt, kann diese Regeln übergangen werden, da die Funktionalität ansonsten sehr umständlich wird</li>
</ul>



<p class="wp-block-paragraph">Regel 3: Normalisiere die Schnittstelle !</p>



<ul class="wp-block-list">
<li>Entwerfe eine Schnittstelle so, dass es <strong>nicht</strong>mehrere Möglichkeiten gibt, die gleiche Funktionalität umzusetzen
<ul class="wp-block-list">
<li>Redundanz wird verhindert</li>
</ul>
</li>



<li>Benenne die Schnittstelle so, dass ihre Funktionalität offensichtlich ist
<ul class="wp-block-list">
<li>Wartbarkeit wird verbessert</li>
</ul>
</li>



<li>Unterscheide schreibende und lesende Methoden</li>
</ul>



<p class="wp-block-paragraph">Regel 4: Mache die Operationen grobgranular !</p>



<ul class="wp-block-list">
<li>bietet mit einer Operation die Funktionalität, die der Aufrufer erwartet und braucht</li>



<li>verbirgt vor dem Aufrufer die Komplexität, die in der Umsetzung einer Funktionalität durch atomare Operationen und Befehle steckt</li>
</ul>



<p class="wp-block-paragraph">Regel 5: Mache die Operationen idempotent !</p>



<ul class="wp-block-list">
<li>Auch wenn der Aufruf (versehentlich) mehrfach erfolgt, wird das gleiche Ergebnis geliefert</li>



<li>Beugt Gefahr von unerwarteten Ergebnissen vor</li>



<li>Zuverlässigkeit wird gefördert</li>
</ul>



<p class="wp-block-paragraph">Regel 6: Mache die Operationen kontextfrei !</p>



<ul class="wp-block-list">
<li>besorgt sich selbst die erforderliche Kontext-Information</li>



<li>Aufruf wird einfacher</li>



<li>viele Probleme werden im Vorfeld verhindert</li>
</ul>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-15/">Objektorientierte Analyse und Design (Vorlesung 15)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-15/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Objektorientierte Analyse und Design (Vorlesung 14)</title>
		<link>https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-14/</link>
					<comments>https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-14/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Thu, 14 Jun 2012 06:52:00 +0000</pubDate>
				<category><![CDATA[Objektorientierte Analyse und Design]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1847</guid>

					<description><![CDATA[<p>Zur Evaluation Zur Klausur Wann ist ein System gut? 1. Grundprinzip: Trennung von Zuständigkeiten 2. Grundprinzip: Minimierung von Abhängigkeiten 3.Grundprinzip: Information Hiding / Geiheimnisprinzip 4.&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-14/">Objektorientierte Analyse und Design (Vorlesung 14)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Zur Evaluation</h3>



<ul class="wp-block-list">
<li>Aufzeichnungen von OOAD-Vorlesungen gibt es
<ul class="wp-block-list">
<li>Prof. Hahn hat im WS11/12 aufgezeichnet</li>



<li>Aufzeichnungen befinden sich auch seine Homepage (Link auch auf der Seite von Prof. Grieser)</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Zur Klausur</h3>



<ul class="wp-block-list">
<li>Es darf ein doppelseitig, handgeschriebenes A4 Blatt benutzt werden</li>



<li>Ansonsten werden nur Stifte benötigt</li>
</ul>



<h3 class="wp-block-heading">Wann ist ein System gut?</h3>



<p class="wp-block-paragraph"><strong>1. Grundprinzip: Trennung von Zuständigkeiten</strong></p>



<ul class="wp-block-list">
<li>Unterteilen des Systems, sodass jeder Teil nur eine Aufgabe hat</li>
</ul>



<p class="wp-block-paragraph"><strong>2. Grundprinzip: Minimierung von Abhängigkeiten</strong></p>



<ul class="wp-block-list">
<li>Zusammenfassen von stark zusammenhängenden Teilen</li>



<li>so wenige Aufrufe und Assoziationen wie möglich verwenden</li>
</ul>



<p class="wp-block-paragraph"><strong>3.Grundprinzip: Information Hiding / Geiheimnisprinzip</strong></p>



<ul class="wp-block-list">
<li>Internes Wissen eines Systemteils wird <strong>gekapselt</strong>, sodass es keinem anderen Teil bekannt ist.
<ul class="wp-block-list">
<li>Abläufe, Daten, Strukturen</li>



<li>Der Systemteil muss nutzbar sein, ohne etwas über seine Realisierung zu verraten</li>



<li>Internes darf nicht von außen einsehbar sein</li>
</ul>
</li>



<li>Implementierung
<ul class="wp-block-list">
<li>&#8222;<strong>getter</strong>&#8222;/&#8220;<strong>setter</strong>&#8220;
<ul class="wp-block-list">
<li>Attribute und Methoden als &#8222;<strong>private</strong>&#8220; deklarieren</li>
</ul>
</li>
</ul>
</li>



<li>zusätzlicher Vorteil:
<ul class="wp-block-list">
<li>Trennung von Zuständigkeiten und Minimierung von Abhängigkeiten werden unterstützt / erleichtert</li>



<li>fördert Wartbarkeit, Änderbarkeit und Testbarkeit</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"><strong>4. Grundprinzip: Homogenität</strong></p>



<ul class="wp-block-list">
<li>Es gibt Komponenten, die sehr Komplex sind uns Komponenten die sehr einfach zu realisieren sind. → Unterschiedliche hoher Arbeitsaufwand → inhomogen</li>



<li>Löse ähnliche Probleme mit ähnlichen Lösungen
<ul class="wp-block-list">
<li>bereits bekannte Lösungen <strong>wiederverwenden</strong>, wenn möglich.</li>



<li>Systemteile innerhalb einer Strukturierungsebene so entwerfen, dass sie etwas gleich groß und komplex sind.</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"><strong>5. Grundprinzip: Redundanzfreiheit</strong></p>



<ul class="wp-block-list">
<li>System so entwerfen, dass jeder Teil im System nur an einer Stelle umgesetzt wird.
<ul class="wp-block-list">
<li><strong>Herausziehen</strong> von mehrfach verwendeten Teilen
<ul class="wp-block-list">
<li>Verfügbar machen dieser Teile für Andere</li>
</ul>
</li>



<li>Finden einer sinnvollen &#8222;<strong>Heimat</strong>&#8220; für den Systemteil</li>
</ul>
</li>



<li>fördert auch Trennung von Zuständigkeiten</li>



<li>verringert die Aufwendigkeit von Änderungen / Korrekturen</li>
</ul>



<p class="wp-block-paragraph">→&nbsp;<strong>Ein Entwurf ist gelungen (&#8222;gut&#8220;), wenn er die 5 Grundprinzipien erfüllt</strong></p>



<h3 class="wp-block-heading">Wie erreiche ich diese Ziele?</h3>



<p class="wp-block-paragraph">Ein Beispiel:</p>



<ul class="wp-block-list">
<li>Ein Softwaresystem, dass Kunden, Lieferanten und Mitarbeiter verwalten soll</li>



<li>Problem: Änderungen sind schwierig umsetzbar
<ul class="wp-block-list">
<li>z.B. Beförderung eines Arbeiters zum Manager</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Eine ganz andere Lösung</p>



<ul class="wp-block-list">
<li>Nun kann eine Person mehrere Rollen einnehmen</li>



<li>Beförderungen und Ähnliches sind nun kein Problem mehr</li>



<li>Es können einfach neue Rollen hinzugefügt werden</li>



<li>&#8222;Rolle&#8220; wird nicht als Attribut von &#8222;Person&#8220; dargestellt
<ul class="wp-block-list">
<li>Zuständigkeiten sind getrennt</li>



<li>Bei Änderung der Rolle einer Person kann die Person &#8222;unverändert&#8220; bleiben</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Regel 1: Sparsames Einsetzen von Vererbung</p>



<ul class="wp-block-list">
<li>Viele Vererbungen lassen sich mit Assoziationen umgehen</li>



<li>Vererbung nur bei echter &#8222;ist ein&#8220; Beziehung verwenden</li>



<li>Wenn man Vererbungen verwendet, dann möglichst nur Einfachvererbungen</li>



<li>Vererbungen nicht zu tief verschachteln</li>
</ul>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-14/">Objektorientierte Analyse und Design (Vorlesung 14)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-14/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Objektorientierte Analyse und Design (Vorlesung 13)</title>
		<link>https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-13/</link>
					<comments>https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-13/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Tue, 05 Jun 2012 06:52:00 +0000</pubDate>
				<category><![CDATA[Objektorientierte Analyse und Design]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1845</guid>

					<description><![CDATA[<p>Start: Seite 308 Kontrollfragen auf Seite 312 Objektdiagramm Klassendiagramme Komponentendiagramm Paketdiagramm Wann wird welches Diagramm verwendet? Woran erkennt man Gutes/Schlechtes Design? Gutes Design → Ein&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-13/">Objektorientierte Analyse und Design (Vorlesung 13)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Start: Seite 308</strong></p>



<h3 class="wp-block-heading">Kontrollfragen auf Seite 312</h3>



<ul class="wp-block-list">
<li><strong>möglicherweise Klausurrelevant!!</strong></li>
</ul>



<h3 class="wp-block-heading">Objektdiagramm</h3>



<ul class="wp-block-list">
<li>sieht aus wie Klassendiagramm</li>



<li>beinhaltet die Instanzen der Klassen</li>



<li><strong>Objekte haben Werte!</strong></li>



<li>Arbeitet erstmals mit Pointern!</li>
</ul>



<h3 class="wp-block-heading">Klassendiagramme</h3>



<ul class="wp-block-list">
<li>zeigen nur, was möglich ist</li>



<li>es werden Vererbungsbeziehungen dargestellt</li>



<li>zeigt Assoziationen in allgemeiner Form</li>



<li>Es werden keine Werte dargestellt</li>
</ul>



<h3 class="wp-block-heading">Komponentendiagramm</h3>



<ul class="wp-block-list">
<li>am Symbol rechts oben erkennbar</li>



<li>GUI wird ausgelagert!</li>



<li>Man arbeitet mit Schnittstellen</li>



<li>Artefakte = reale Dateien</li>



<li>Enthält abgeschlossene Einheiten</li>



<li>Austauschbarkeit gewährleistet (z.B. Fake-Internet einbauen zum Test)</li>



<li>Man teilt das System in einzelnen Komponenten auf, um diese evtl. verschiedenen Arbeitsgruppen zuzuordnen und gegebenenfalls einfacher Korrekturen durchführen zu können.</li>



<li>Da die Komponenten möglichst unabhängig funktionieren, ist es relativ einfach, eine Komponente durch eine andere zu ersetzen/auszutauschen</li>
</ul>



<h3 class="wp-block-heading">Paketdiagramm</h3>



<ul class="wp-block-list">
<li>Pakete nehmen eine ähnliche Funktion ein, wie Ordner in Dateisystemen</li>



<li>In Pakete werden Modellelemente einsortiert</li>



<li>Verschachtelung ist möglich</li>



<li>Jedes Paket hat seinen eigenen Namespace</li>



<li>Dienen zur logischen Strukturierung</li>



<li>unterschiedliche Diagramme in verschiedene Pakete einordnen</li>
</ul>



<p class="wp-block-paragraph"><strong>Wann wird welches Diagramm verwendet?</strong></p>



<ul class="wp-block-list">
<li>Es gibt nie nur eine Lösung. Mehrere sind möglich</li>



<li>Ein Diagramm stellt nie das ganze System dar
<ul class="wp-block-list">
<li>Es werden immer nur Teile des Systems dargestellt</li>



<li>Durch Beschreibungen der Beziehungen zwischen diesen einzelnen Teilen kann das System als Ganzes betrachtet werden.</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Woran erkennt man Gutes/Schlechtes Design?</h3>



<h4 class="wp-block-heading">Gutes Design</h4>



<ul class="wp-block-list">
<li>Funktionalität, die gewünscht ist, ist gegeben
<ul class="wp-block-list">
<li>nicht viel mehr, da das System sonst zu komplex wird, zusätzliche Arbeit und Kosten entstehen und es dem Kunden evtl. nicht gefällt.</li>
</ul>
</li>



<li>Das System ist eindeutig und einfach zu verstehen
<ul class="wp-block-list">
<li>gute Dokumentation</li>



<li>Außenstehende sollten es verstehen können</li>
</ul>
</li>



<li>keine Redundanz von Elementen vorhanden</li>



<li>Mögliche Änderungen sollten leicht umgesetzt werden können
<ul class="wp-block-list">
<li>einfache Integration muss möglich sein</li>
</ul>
</li>



<li>Änderungen, die im Nachhinein gemacht werden, sollten nur die Systemteile betreffen, in denen sie auftreten</li>



<li>Der Aufwand einer Änderung muss proportional zur Größe der Änderung sein</li>
</ul>



<h3 class="wp-block-heading">→ Ein System ist dann gut, wenn es lange leben kann.</h3>



<p class="wp-block-paragraph"><em>Über 90% der Kosten entstehen durch die Pflegung des Systems. Dementsprechend muss es so gebaut sein, dass diese Kosten möglichst gering gehalten werden können.</em></p>



<h3 class="wp-block-heading">&nbsp;</h3>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-13/">Objektorientierte Analyse und Design (Vorlesung 13)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/06/objektorientierte-analyse-und-design-vorlesung-13/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Objektorientierte Analyse und Design (Vorlesung 12)</title>
		<link>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-12/</link>
					<comments>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-12/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Wed, 30 May 2012 06:51:00 +0000</pubDate>
				<category><![CDATA[Objektorientierte Analyse und Design]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1843</guid>

					<description><![CDATA[<p>Zustandsdiagramme Zustandsübergänge Übung: Ein C++ Kommentarfilter</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-12/">Objektorientierte Analyse und Design (Vorlesung 12)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Zustandsdiagramme</h3>



<p class="wp-block-paragraph"><strong>Zustandsübergänge</strong></p>



<ul class="wp-block-list">
<li>Pfeile zwischen aktuellem und folgendem Zustand</li>



<li>Details zum Übergang werden am Pfeil notiert</li>
</ul>



<h3 class="wp-block-heading">Übung: Ein C++ Kommentarfilter</h3>



<ul class="wp-block-list">
<li>Zeichnen Sie das Zustandsdiagramm eines Filters, welcher einen C++-Text aus einem Eingabestrom einließt, alle C++ Kommentare entfernt und das Ergebnis in den Ausgabestrom schreibt.</li>



<li>Tipps:
<ul class="wp-block-list">
<li>Überlegen sie sich zuerst, warum sie dafür ein Zustandsdiagramm brauchen.</li>



<li>Es müssen mehrzeilige Kommentage /*&#8230;*/ und einzeilige Kommentare // erkannt werden</li>



<li>Jede Zeile wird durch EOLN abgeschlossen. Der Eingabestrom wird durch EOF abgeschlossen</li>



<li>Passen sie auf Strings auf. s = &#8222;Hello /* world*.</li>



<li>Durch z = read() wird das nächste Zeichen aus dem Eingabestrom eingelesen und durch write (z) wird das nächste Zeichen in der Variable z in den Ausgabestrom geschrieben.</li>
</ul>
</li>
</ul>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-12/">Objektorientierte Analyse und Design (Vorlesung 12)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-12/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Objektorientierte Analyse und Design (Vorlesung 11)</title>
		<link>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-11/</link>
					<comments>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-11/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Tue, 15 May 2012 06:50:00 +0000</pubDate>
				<category><![CDATA[Objektorientierte Analyse und Design]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1841</guid>

					<description><![CDATA[<p>Organisatorisches Start: Seite 227 Sequenzdiagramme Beispiel: Exmatrikulation Die beiden Sequenzdiagramme beschreiben nur erfolgreiche Anwendungsfälle. Um Fehlerfälle zu beschreiben müssten jeweils ein neues Diagramm erstellt werden.&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-11/">Objektorientierte Analyse und Design (Vorlesung 11)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Organisatorisches</h3>



<ul class="wp-block-list">
<li>am 30.5. das Praktikum findet statt, aber es wird verschoben</li>
</ul>



<h3 class="wp-block-heading">Start: Seite 227</h3>



<h3 class="wp-block-heading">Sequenzdiagramme</h3>



<ul class="wp-block-list">
<li>Interaktionen zwischen Akteur und Objekten des Systems</li>



<li>Lebenslinien enthalten Ablaufreihenfolge</li>



<li>&#8222;Highlander&#8220;-Prinzip, es ist immer nur einer aktiv</li>



<li>Beschreibung an den Pfeilen = Name der Methode / Aktivität</li>



<li>Nachricht = Offener Pfeil</li>



<li>Aufruf = Geschlossener Pfeil</li>



<li>Sequenzdiagramme beschreiben einen Ausschnitt und kein komplettes Verhaltensdiagramm mehr.</li>



<li>Es wird von Links nach Rechts gelesen und von oben nach unten</li>



<li>Je Fall ein eigenes Sequenzdiagramm →&nbsp;Exmatrikulation klappt oder klappt nicht</li>



<li><strong>Rückgabe</strong>&nbsp;der Aktivität nur mittels&nbsp;<strong>return</strong>&nbsp;möglich!</li>



<li>Zwischen Aufruf und Rückgabe, kann das Objekt nichts ausführen (&nbsp;<strong>bei Synchron!</strong>&nbsp;)</li>
</ul>



<h3 class="wp-block-heading">Beispiel: Exmatrikulation</h3>



<ul class="wp-block-list">
<li>Sachbearbeiter gibt Matrikelnr. ein</li>



<li>Maske prüft, ob der Student existiert</li>



<li>Studentenverwalter liefert den Student zurück</li>



<li>Lösch-Bestätigung fehlt im Diagramm</li>
</ul>



<p class="wp-block-paragraph"><em>Die beiden Sequenzdiagramme beschreiben nur erfolgreiche Anwendungsfälle. Um Fehlerfälle zu beschreiben müssten jeweils ein neues Diagramm erstellt werden.</em></p>



<ul class="wp-block-list">
<li>Die Aktivität eines Objekts beginnt immer mit dem Aufruf und endet mit einem Return</li>



<li>Methodenaufrufe können nur von aktiven Objekten erfolgen</li>



<li>Returns müssen zwar nicht eingezeichnet werden, sollten sie jedoch, damit das Ende einer Methode eindeutiger wird</li>
</ul>



<h3 class="wp-block-heading">Beispiel:&nbsp;Essen zahlen</h3>



<ul class="wp-block-list">
<li><strong>Notizen</strong>
<ul class="wp-block-list">
<li>Schreiben auf das Display ist eine Print-Funktion, somit ist auch nach Ende der Aktivität der Text noch zu lesen</li>



<li>Es werden nur Akteure und nötige Objekte beschrieben, das Essen und das Herantreten an die Kasse gehören nicht zu dem Anwendungsfall bzw. der Sequenz</li>



<li>Verarbeitung und Logik sollte der Kasse als Verantwortung gehören</li>



<li>Die Karte hat keine eigenen Methoden (z.B.: lies() )</li>



<li>Wenn die Verarbeitung im Lesegerät liegt, wird ein anderes Lese-/Schreibverfahren die Anforderung haben, dass die Methoden redundant implementiert werden.</li>
</ul>
</li>



<li><strong>Welche Aktoren gibt es?</strong>
<ul class="wp-block-list">
<li>Mensakunde</li>



<li>Kassenfrau</li>
</ul>
</li>



<li><strong>Wie laufen die Aufrufe?</strong><ul><li>Kunde geht zur Kasse ( Trigger )</li></ul>
<ol class="wp-block-list">
<li>Mensafrau gibt Artikelnr. in Kasse ein</li>



<li>Kasse zeigt Betrag auf Display an</li>



<li>Kunde schiebt Karte in Lesegerät</li>



<li>Kasse bucht Betrag von Mensakarte ab</li>



<li>Alternative: Kasse zeigt Fehlermeldung auf Display an</li>



<li>Kunde entnimmt Karte aus dem Lesegerät</li>
</ol>
</li>
</ul>



<h3 class="wp-block-heading">Fehler</h3>



<ul class="wp-block-list">
<li>Akteure haben keine Methoden ( Nur Nachricht senden möglich )</li>



<li>Kapselungsbruch ( Nicht aufrufen, sondern informieren!)</li>



<li>Zuviele Aktivitäten/Verzweigungen in einem Sequenzdiagramm ( Aufteilen! )</li>



<li>Verzweigungen asynchron darstellen ( Sollten synchron sein )</li>
</ul>



<h3 class="wp-block-heading">Anwendung</h3>



<ul class="wp-block-list">
<li>Alternativen&nbsp;(sparsam einsetzen)</li>



<li>Ausgliederung komplexer Aktivitäten in neue Sequenz-Diagramme mittels ref&nbsp;(sparsam verwenden)</li>



<li>Schleifen&nbsp;( Auf Konstruktoren aufpassen )</li>
</ul>



<p class="wp-block-paragraph"><strong>Ende: Seite 255</strong></p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-11/">Objektorientierte Analyse und Design (Vorlesung 11)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-11/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Objektorientierte Analyse und Design (Vorlesung 10)</title>
		<link>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-10/</link>
					<comments>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-10/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Thu, 10 May 2012 06:49:00 +0000</pubDate>
				<category><![CDATA[Objektorientierte Analyse und Design]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1839</guid>

					<description><![CDATA[<p>Start: Seite 209 Besprechung Schachspiel Multiplizitäten Assoziationsklassen Gesprächs-Ebenen Aggregation und Komposition Kommunikation zwischen Objekten Klausur Sequenzdiagramme Synchrone Nachrichten Asynchrone Nachrichten Der Unterschied zwischen synchronen und&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-10/">Objektorientierte Analyse und Design (Vorlesung 10)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading"><strong>Start: Seite 209</strong></h3>



<h3 class="wp-block-heading">Besprechung Schachspiel</h3>



<ul class="wp-block-list">
<li>Komposition zwischen Figuren und Mannschaft nötig, damit man weiß, dass genau 1 König zu der Mannschaft gehört.</li>
</ul>



<h3 class="wp-block-heading">Multiplizitäten</h3>



<ul class="wp-block-list">
<li>Umsetzung von Klassen und Assoziationen<ul><li>Attribute und Methoden können in objektorientierten Sprachen direkt umgesetzt werden</li><li>Generalisierung wird mittels Vererbung umgesetzt</li><li>Schnittstellen finden sich in abstrakten Klassen mit rein virtuellen Methoden wieder</li><li>Umsetzung von einfachen Assoziationen geschieht über Referenz auf ein anderes Objekt<ul><li>Die Multiplizitäten &#8222;0..1&#8220; und &#8222;1..1&#8220; werden mittels eines Zeigers umgesetzt</li><li>Die Multiplizitäten &#8222;0..*&#8220; bzw. &#8222;1..*&#8220; werden über Zeigermengen dargestellt, wie z.B. Vektoren oder Arrays</li><li>Der Name des Attributs  ist der Name der assoziierten Klasse</li></ul></li></ul><strong><em>Die obige Umsetzung kann automatisch mittels eines Generators durchgeführt werden.</em></strong><code>// Spezifikation von Veranstaltung class Veranstaltung { protected: Dozent* Referent; public: ... } } // Spezifikation von Dozent Liste&lt;Veranstaltung*> gehaltene_Veranstaltung; public: class Dozent { protected: ... }</code></li>
</ul>



<h3 class="wp-block-heading">Assoziationsklassen</h3>



<ul class="wp-block-list">
<li>Realisierung durch &#8222;Einschub&#8220; einer Klassen zwischen den bestehenden Klassen</li>



<li>Die Rollen-Namen werden auch in den Zwischenklassen-Zeigern beibehalten</li>



<li>Die Zwischenklasse braucht Zeiger auf beide verbundenen Klassen</li>



<li>Multiplizitäten an den Klassen werden substituiert und durch 1 ersetzt A <strong>*</strong>             <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" />       <strong>1..*</strong> B A <strong>1</strong> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>1..*</strong> C <strong>*</strong> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>1</strong> B</li>
</ul>



<pre class="wp-block-code"><code>class Anstellung {
  protected:
    Firma* m_Arbeitgeber; // Referenz auf assoziiertes Objekt
    Person* m_Arbeitnehmer; // Referenz auf assoziiertes Objekt
    unsigned int Gehalt; // Attribut der Assoziation
    string urlaub_von_bis; // Attribut der Assoziation  ...
  public:
    virtual Person* getArbeitnehmer (void) const{ return (m_Arbeitnehmer); }
    virtual Anstellung* setArbeitnehmer (const Person* einArbeitnehmer){
      m_Arbeitnehmer = einArbeitnehmer;
      return (this);
    }
    virtual Firma* getArbeitgeber (void) const{ return (m_Arbeitgeber);}
    virtual Anstellung* setArbeitgeber (const Firma* einArbeitgeber){
      m_Arbeitgeber = einArbeitgeber;
      return (this);
    }
    virtual void Urlaub_beantragen (string anfang_ende){
      urlaub_von_bis = anfang_ende;
};
...
}
</code></pre>



<pre class="wp-block-code"><code>class Person {
  protected:
    Liste&lt;*Anstellung&gt; m_Arbeitgeber;
  public:
    Anstellung* getAnstellung (const Firma* dieFirma) const {
      // Navigieren auf dem Container gemäß gegebener Datenstruktur (Liste).
      // Liefert die Referenz auf das Objekt der Assoziationsklasse, das die
      // Referenz auf die übergebene Firma hält. So ist das Setzen und Lesen von
      // Attributen bzw. das Ausführen von Methoden der Assoziation möglich.
}
    virtual unsigned getAnstellungsGehalt (const Firma* derArbeitgeber) const {
      // Zugriff auf ein Assoziationsklassen-Attribut:
    return (getAnstellung (derArbeitgeber)-&gt; getGehalt());
}
    void do_Anstellung_Urlaub_beantragen (const Firma* derArbeitgeber, string anfang_ende){
      // Ausführen einer Assoziationsklassen-Methode:
      getAnstellung(derArbeitgeber)-&gt;Urlaub_beantragen(string anfang_ende);
}
...

}

</code></pre>



<h3 class="wp-block-heading"><strong>Gesprächs-Ebenen</strong></h3>



<ul class="wp-block-list">
<li>A: Analyse</li>



<li>T: Design</li>
</ul>



<h3 class="wp-block-heading">Aggregation und Komposition</h3>



<ul class="wp-block-list">
<li><strong>Aggregation:</strong> Wird mit einem Zeiger realisiert</li>



<li><strong>Komposition:</strong> Teilklassen sind Member-Attribute der Komposition</li>
</ul>



<h3 class="wp-block-heading">Kommunikation zwischen Objekten</h3>



<ul class="wp-block-list">
<li><strong>Objekte kommunizieren mittels Methoden miteinander</strong>
<ul class="wp-block-list">
<li>Objekt X sagt Objekt Y &#8222;Führe y.a() aus&#8220;.</li>



<li>Objekt Y gibt den Wert zurück</li>
</ul>
</li>



<li><strong>Aufrufe</strong>
<ul class="wp-block-list">
<li><strong>Synchron: </strong>
<ul class="wp-block-list">
<li>Während Y.a() ausgeführt wird, ist X im idle-Modus (tut nichts)</li>



<li>Deterministisch: a b</li>



<li>Ausgefüllter Pfeil</li>
</ul>
</li>



<li><strong>Asynchron: </strong>
<ul class="wp-block-list">
<li>X arbeitet direkt weiter und übergibt Y die &#8222;Verantwortung&#8220;</li>



<li>Nicht deterministisch: / b a / a b / &#8230;</li>



<li>Pfeilspitzen</li>
</ul>
</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Klausur</h3>



<ul class="wp-block-list">
<li>Sequenzdiagramme sind wichtig!</li>
</ul>



<h3 class="wp-block-heading">Sequenzdiagramme</h3>



<ul class="wp-block-list">
<li>Objekte die oben stehen, existieren bereits zu beginn</li>



<li>Objekte, die tiefer stehen, werden erst im Verlauf erzeugt</li>



<li>Returnpfeile sind optional, aber sind empfohlen</li>



<li>Jedes Objekt hat seine eigene Bahn</li>



<li>So ist eindeutig, wer Nachrichten an wen übermittelt</li>



<li>Nachrichten, die geschickt werden, sind genau die Methoden, die angeboten werden</li>
</ul>



<h3 class="wp-block-heading">Synchrone Nachrichten</h3>



<ul class="wp-block-list">
<li>Nach Senden einer Nachricht, wartet der Sender, bis der Empfänger die Nachricht empfangen hat und diese vollständig abgearbeitet wurde. Dann kann er weitersenden.</li>



<li>Die Kontrolle wird abgegeben</li>



<li>Synchrone Nachrichten sind Methodenaufrufe.
<ul class="wp-block-list">
<li>Wird eine Methode aufgerufen, so wird gewartet, bis die Methode abgearbeitet wurde.</li>
</ul>
</li>



<li>Darstellung: schwarz gefüllter Pfeil</li>
</ul>



<h3 class="wp-block-heading">Asynchrone Nachrichten</h3>



<ul class="wp-block-list">
<li>nach Senden einer Nachricht, kann der Sender sofort weitersenden, während der Empfänger die Nachricht abarbeitet.</li>



<li>paralleles Arbeiten von Sender und Empfänger</li>



<li>Benachrichtigungen an bzw. vom Benutzer sind immer asynchron.
<ul class="wp-block-list">
<li>Eingaben, Ausgaben</li>
</ul>
</li>



<li>Darstellung: normaler Pfeil</li>
</ul>



<p class="wp-block-paragraph"><strong><em>Der Unterschied zwischen synchronen und asynchronen Nachrichten ist wahrscheinlich Teilthema der Klausur.</em></strong>&nbsp;Objekte, die sich in einem Sequenzdiagramm am oberen Rand befinden, sind zu Beginn des Szenarios schon vorhanden. Objekte, die sich weiter unten befinden werden erst später erstellt.</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-10/">Objektorientierte Analyse und Design (Vorlesung 10)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-10/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Objektorientierte Analyse und Design (Vorlesung 9)</title>
		<link>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-9/</link>
					<comments>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-9/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Thu, 03 May 2012 06:48:00 +0000</pubDate>
				<category><![CDATA[Objektorientierte Analyse und Design]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1837</guid>

					<description><![CDATA[<p>Start: Seite 190 Assoziationen Aggregation Komposition Constraints Übung Hinweise:</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-9/">Objektorientierte Analyse und Design (Vorlesung 9)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Start: Seite 190</strong></p>



<h3 class="wp-block-heading">Assoziationen</h3>



<ul class="wp-block-list">
<li>Aggregation</li>



<li>Komposition</li>



<li><em>&#8222;A kommt vor K, das Leere kommt vor dem Tod ( Schwarz )&#8220;</em></li>
</ul>



<h3 class="wp-block-heading">Aggregation</h3>



<ul class="wp-block-list">
<li>&#8222;ist Teil von&#8220;</li>



<li>&nbsp;leere Raute</li>



<li>Aggregiertes Objekt ist ist zwar Bestandteil, existiert aber unabhängig vom aggregierenden Objekt</li>



<li>&#8222;shared&#8220; Aggregation (kann zu mehreren Objekten gleichzeitig gehören, d.h. die&nbsp;Multiplizität darf &gt; 1 sein)&nbsp;→ Mitglied in mehreren Vereinen</li>
</ul>



<h3 class="wp-block-heading">Komposition</h3>



<ul class="wp-block-list">
<li>&nbsp;&#8222;besteht aus&#8220;</li>



<li>volle Raute</li>



<li>Teilobjekte einer Komposition
<ul class="wp-block-list">
<li>werden beim Zerstören des &#8222;Ganzes-Objektes&#8220; automatisch (kaskadierend) mitzerstört</li>



<li>dürfen nicht Teil anderer Kompositionen sein</li>



<li>dürfen nur von Operationen der &#8222;Ganzes-Klasse&#8220; entfernt oder ersetzt werden</li>
</ul>
</li>



<li>Komposition (=&#8220;unshared&#8220; Aggregation)</li>



<li>Multiplizität kann auf der Seite der Komposition weggelassen werden</li>
</ul>



<h3 class="wp-block-heading">Constraints</h3>



<ul class="wp-block-list">
<li>Ohne Constraints&nbsp;könnte laut Modell der Motor sowie das Getriebe ein&nbsp;anderes Kupplungsexemplar assoziieren als das übergeordnete Auto selbst</li>



<li><strong>Resultat:</strong></li>
</ul>



<h3 class="wp-block-heading">Übung</h3>



<ul class="wp-block-list">
<li>Entwerfen Sie ein Klassenmodell mit Attributen und Multiplizitäten!&nbsp;Sie entwickeln Software für ein Autoradio. Die folgenden Informationen sollen dargestellt werden:
<ul class="wp-block-list">
<li>Das Autoradio hat 3 „Ebenen“ von Stationstasten (z.B. „UKW“, „MW“ und „TRAVEL“). Jede dieser Ebenen enthält 6 Stationstasten.</li>



<li>Auf jeder Stationstaste kann in jeder Ebene ein Radiosender abgespeichert werden. Es gibt analoge und digitale Sender. Bei digitalen Sendern wird zur werden. Es gibt analoge und digitale Sender. Bei digitalen Sendern wird zur Erkennung ein Textstring (z.B. **FFH**) vom Sender übertragen und als Name angezeigt. Bei analogen Sendern wird stattdessen die Empfangsfrequenz als Text angezeigt.</li>



<li>Beim Abspeichern eines Senders werden die Empfangsfrequenz und auch der Erkennungstext abgespeichert und in Zukunft neben der Stationstaste angezeigt.</li>



<li>Ein Radiosender muss nicht wissen, ob er auf einer Stationstaste liegt.</li>



<li>Das Radio kennt immer den aktuell gehörten Radiosender.&nbsp;</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><strong>Hinweise:</strong></h3>



<ul class="wp-block-list">
<li><strong>Assoziation</strong>&nbsp;= &#8222;Haben die was miteinander zu tun?&#8220;</li>



<li><strong>Nav. Richtung</strong>&nbsp;= &#8222;Von wo komme ich wohin?&#8220;</li>



<li>Es wird nur für das System allein modelliert ( andere Radios werden nicht bedacht )</li>



<li>Bei der Klausur werden Punkte für syntaktisch korrekte Modellierung vergeben, z.B.: sind Klassen Substantive und keine Adjektive (&nbsp;Digital&nbsp;→&nbsp;Digital Sender&nbsp;)</li>
</ul>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-9/">Objektorientierte Analyse und Design (Vorlesung 9)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/05/objektorientierte-analyse-und-design-vorlesung-9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Objektorientierte Analyse und Design (Vorlesung 8)</title>
		<link>https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-8/</link>
					<comments>https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-8/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Thu, 26 Apr 2012 06:46:00 +0000</pubDate>
				<category><![CDATA[Objektorientierte Analyse und Design]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1835</guid>

					<description><![CDATA[<p>Beispiel: Tic-Tac-Toe Assoziationsklassen Constraints Höherwertige Assoziationen Zusatzfragen [Student]1&#160;↔&#160;0..1&#160;[MA]&#160;0..*&#160;↔&#160;0..2&#160;[Professor]</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-8/">Objektorientierte Analyse und Design (Vorlesung 8)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Beispiel: Tic-Tac-Toe</h3>



<ul class="wp-block-list">
<li><strong>Steine:</strong>
<ul class="wp-block-list">
<li>Umsetzung ohne Steine ist möglich in der Umsetzung aber missverständlich im Design. Beim Schachspiel z.B. brauch man eigene&nbsp;<strong>Stein-Objekte mit ihren eigenen Funktionen</strong>.</li>
</ul>
</li>



<li><strong>Brett:</strong>
<ul class="wp-block-list">
<li>Besteht aus seinen Feldern, die mittels<strong>&nbsp;x,y-Koordinaten</strong>&nbsp;identifiziert werden</li>
</ul>
</li>



<li><strong>Spieler</strong>
<ul class="wp-block-list">
<li>Spieler darf keine eigene Farbe / Symbol als Attribut haben, da er sonst keine zwei Spiele gleichzeitig ( andere Spieltische ) spielen könnte. D.h. eine Verbindung zwischen Spieler und Stein muss erzeugt werden (&nbsp;<strong>Farbe des Steins&nbsp;→ Spieler</strong>&nbsp;)</li>
</ul>
</li>



<li><strong>Spieler-Spiel</strong>
<ul class="wp-block-list">
<li>Zwischen Spieler und Spiel enthält eine Assoziationsklasse ein Attribut mit der Information:&nbsp;<em>&#8222;Wer hat welchen Stein in welchem Spiel?&#8220;</em></li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Assoziationsklassen</h3>



<ul class="wp-block-list">
<li>Kann es nur dort geben, wo es auch Assoziationen gibt</li>



<li>Dient dazu um besondere individuelle Informationen zu speichern, die in keine der 2 verbundenen Klassen gehört, aber nicht irrelevant sind</li>
</ul>



<h3 class="wp-block-heading">Constraints</h3>



<ul class="wp-block-list">
<li>zu dt. &#8222;Einschränkung&#8220;</li>



<li>Auch für Assoziationen möglich</li>



<li><strong>Beispiel: Polygon</strong>
<ul class="wp-block-list">
<li>Vier Punkte, die eine definierte Reihenfolge haben.</li>



<li>Ohne die Reihenfolge lässt sich das Polygon beliebig darstellen.</li>



<li>Ein Constraint erlaubt es einheitliche Objekte zu erstellen.</li>
</ul>
</li>



<li><strong>Beispiel: Vergütung</strong>
<ul class="wp-block-list">
<li>Je nach Typ wird durch den Constraint dem Vergütungs-Berechtigten eine entsprechende Vergütung zukommen.</li>



<li>Professor bekommt Professoren-Vergütung</li>



<li>Tutor bekommt Tutoren-Vergütung</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Höherwertige Assoziationen</h3>



<ul class="wp-block-list">
<li>Oft sind vermeintliche 3-er Beziehungen in Wahrheit drei 2-er Beziehungen!</li>



<li>3-er und höherwertige Assoziationen sollten, falls möglich, vermieden werden !</li>



<li>Oft gibt es Alternativen zur 3-er bzw. höherwertigen Assoziation durch die Einführung einer Klasse statt 3er-Beziehung</li>



<li><strong>Bsp.:&nbsp;</strong>
<ul class="wp-block-list">
<li>Fußballspieler &#8211; Mannschaft &#8211; Saison</li>



<li>Fußballspieler R spielt in Saison X bei Mannschaft A</li>



<li>Fußballspieler R spielt in Saison X+1 bei Mannschaft B</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Zusatzfragen</h3>



<ul class="wp-block-list">
<li>Sie sitzen in einer Vorlesung. Wo ist die Beziehung zu Ihrem Professor?</li>



<li>Was verändert sich, wenn 2 Professoren eine Masterarbeit betreuen?
<ul class="wp-block-list">
<li>Eine Zwischenklasse anstelle der Assoziationsklasse muss eingeführt werden</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">[Student]<sup>1</sup>&nbsp;<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<sup>0..1</sup>&nbsp;[MA]&nbsp;<sup>0..*</sup>&nbsp;<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;<sup>0..2</sup>&nbsp;[Professor]</p>



<ul class="wp-block-list">
<li>Was verändert sich, wenn wir darstellen wollen, dass Lehrbeauftragte zu&nbsp;mehreren Fachbereichen gehören können, Professoren aber nur zu einem?
<ol class="wp-block-list">
<li>Einführung einer Klasse Lehrbeauftragter (<strong>LB</strong>)</li>



<li>Die Assoziation&nbsp;<strong>Fachbereich&nbsp;<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Dozent</strong>&nbsp;muss aufgelöst werden</li>



<li>Neue Assoziationen:&nbsp;<strong>Fachbereich <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;Professor</strong>&nbsp;&amp;&nbsp;<strong>Fachbereich <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;LB</strong></li>



<li><strong>Dozent</strong>&nbsp;vererbt seine Fähigkeit zu unterrichten an&nbsp;<strong>LB</strong>&nbsp;und&nbsp;<strong>Professor</strong></li>



<li>Dozent wird um ein Attribut Fachbereich ergänzt</li>
</ol>
</li>



<li>In Lehrveranstaltungen werden Werte von Attributen redundant gespeichert (In &nbsp;der OOAD-LV von Herrn Weber, als auch in der OOAD-LV von Herrn Hahn&nbsp;stehen Titel und ECTS). Wie könnte man das vermeiden?&nbsp;stehen Titel und ECTS). Wie könnte man das vermeiden?
<ul class="wp-block-list">
<li>Einführung einer Klasse Modulhandbuch und Ausgliedern der Attribute</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"></p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-8/">Objektorientierte Analyse und Design (Vorlesung 8)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Objektorientierte Analyse und Design (Vorlesung 7)</title>
		<link>https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-7/</link>
					<comments>https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-7/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Tue, 24 Apr 2012 00:12:00 +0000</pubDate>
				<category><![CDATA[Objektorientierte Analyse und Design]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1795</guid>

					<description><![CDATA[<p>Beispiel&#160;&#8222;Hochschulverwaltung&#8220; Polymorphie Wechsel von Klassen innerhalb der Klassenhierarchie Assoziationen Analyseklassen-Diagramm Designklassen-Diagramm Navigationsrichtung Multiplizität Interpretationsrichtung: &#160; Finden von Assoziationen Modellierungs-Regeln Ende: Seite 176</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-7/">Objektorientierte Analyse und Design (Vorlesung 7)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Beispiel&nbsp;&#8222;Hochschulverwaltung&#8220;</h3>



<ul class="wp-block-list">
<li><strong>Aufgaben:</strong>
<ol class="wp-block-list">
<li>Klassen und Attribute identifizieren</li>



<li>Generalisierungs und Spezialisierungs-Beziehungen identifizieren</li>



<li>Klassendiagramm anfertigen</li>
</ol>
</li>



<li><strong>Substantivmethode</strong>
<ul class="wp-block-list">
<li><del>Hochschulverwaltung</del></li>



<li><del>Personengruppen</del></li>



<li><del>Hochschule</del></li>



<li><del>Semester</del></li>



<li><del>Lehrveranstaltungen</del></li>



<li><strong>Angestellte</strong>
<ul class="wp-block-list">
<li><del>Professoren</del></li>



<li><del>Labor-Ingenieure</del></li>



<li><del>Lehrbeauftragte</del></li>



<li><del>Sekretärinnen</del></li>



<li><del>Tutoren</del></li>



<li>Gehaltskonto</li>
</ul>
</li>



<li><strong>Dozenten</strong>
<ul class="wp-block-list">
<li>Akademischer Titel</li>



<li>Anzahl Semesterwochenstunden (SWS)</li>
</ul>
</li>



<li><strong>Studenten (auch als Tutor möglich )</strong>
<ul class="wp-block-list">
<li>Matrikelnummer</li>
</ul>
</li>



<li><strong>Person</strong>
<ul class="wp-block-list">
<li>Namen</li>



<li>Geburtsdatum</li>



<li>Geburtsort</li>
</ul>
</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Polymorphie</h3>



<ul class="wp-block-list">
<li>Ein Objekt hat mehrere Typen bzw. Klassen und all deren Merkmale</li>
</ul>



<h3 class="wp-block-heading">Wechsel von Klassen innerhalb der Klassenhierarchie</h3>



<ul class="wp-block-list">
<li>Petra, die eine Stundentin ist, und nun ihren Typen innerhalb der Hierarchie ändert ( von Student → Studentischen Tutor ) dann muss sein Objekt <strong>zerstört</strong> und <strong>neu erzeugt</strong> werden</li>



<li>Der Laboringenieur Peter wird nun Lehrbeauftragter. Für ihn wird ein <strong>zweites Objekt</strong> des Typen Lehrbeauftragter angelegt, da er ja auch gleichzeitig noch Laboringenieur ist.</li>
</ul>



<h3 class="wp-block-heading">Assoziationen</h3>



<ul class="wp-block-list">
<li>Keine genauere Definition, d.h. Klassen &#8222;kennen sich&#8220;</li>



<li>Assoziationen werden zwar über Pointer und Pointerfelder realisiert <strong>( aber als Assoziationen modelliert !! )</strong></li>



<li><strong>Tätigkeiten</strong>
<ul class="wp-block-list">
<li>Beschriftung der Assoziation =  Beschreibung einer Tätigkeit</li>



<li>Assoziationen haben einen ausgefüllten Pfeil neben dem Namen stehen, der Pfeil steht für die Leserichtung der Tätigkeit &#8222;X arbeitet für Y&#8220;</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li>Die Assoziation zwischen Personal und seiner eigenen Klasse nennt man &#8222;<strong>Zyklische Assoziation</strong>&#8222;.</li>



<li>Wenn mehrere Assoziationen zwischen zwei Klassen bestehen (z.B.: hat Aktien von) dann sind dies auch vollwertige Assoziation und werden mit einer eigenen Linie dargestellt.</li>



<li><strong>Navigationsrichtung</strong>
<ul class="wp-block-list">
<li>Wer kennt wen?</li>
</ul>
</li>



<li><strong>Rollen</strong>
<ul class="wp-block-list">
<li>Firma hat in der Assoziation &#8222;Firma &#8211; Person&#8220; die Rolle &#8222;Arbeitgeber&#8220;.</li>



<li>Person hat die Rolle &#8222;Arbeitnehmer&#8220;</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Analyseklassen-Diagramm</h3>



<ul class="wp-block-list">
<li>Nur Klassen, Assoziationen und Attribute</li>



<li>Keine Methoden und keine Assoziationsrichtungen oder Multiplizäten</li>
</ul>



<h3 class="wp-block-heading">Designklassen-Diagramm</h3>



<ul class="wp-block-list">
<li>Vollständiges Klassendiagramm</li>
</ul>



<h3 class="wp-block-heading">Navigationsrichtung</h3>



<ul class="wp-block-list">
<li>Teil der Assoziation</li>



<li>Kein Zeichen = unspezifiziert</li>



<li>Kreuz = verbotene Navigationsrichtung</li>



<li>Die Navigationsrichtung ist nicht das gleiche wie die Leserichtung!</li>



<li><strong>Bsp.:</strong> Der Auftrag kennt seine Artikel, die Artikel kennen aber ihre Aufträge nicht</li>
</ul>



<h3 class="wp-block-heading">Multiplizität</h3>



<ul class="wp-block-list">
<li>Das Ausdrücken von Mengen-Beziehungen bei Assozitiationen</li>



<li><strong>Bsp.:</strong>&#8222;Dreieck braucht drei Ecken&#8220;, &#8222;Firma braucht mindestens einen Angestellten&#8220;</li>
</ul>



<p class="wp-block-paragraph"><strong>Interpretationsrichtung: &nbsp;</strong></p>



<ul class="wp-block-list">
<li><strong>x kennt m</strong> mal <strong>y </strong></li>



<li><strong>y kennt n</strong> mal x</li>
</ul>



<h3 class="wp-block-heading">Finden von Assoziationen</h3>



<ul class="wp-block-list">
<li>&#8222;Schauen was getan wird&#8220;</li>



<li>Filtern nach relevanten Aktivitäten</li>
</ul>



<h3 class="wp-block-heading">Modellierungs-Regeln</h3>



<ul class="wp-block-list">
<li>Kein Pointer-Attribut verwenden, sondern graphisch mit Assoziationen darstellen
<ul class="wp-block-list">
<li>übersichtlicher</li>



<li>Unabhängigkeit von Programmiersprachen</li>
</ul>
</li>



<li>Multiplizitäten sollten angegeben werden
<ul class="wp-block-list">
<li>Welche Attribute werden benötigt (Pointer / Container)</li>
</ul>
</li>



<li>Leserichtung angeben wenn nicht von links nach rechts / oben nach unten</li>



<li>Implementierung geschieht später</li>
</ul>



<p class="wp-block-paragraph"><strong>Ende: Seite 176</strong></p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-7/">Objektorientierte Analyse und Design (Vorlesung 7)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Objektorientierte Analyse und Design (Vorlesung 6)</title>
		<link>https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-6/</link>
					<comments>https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-6/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Thu, 19 Apr 2012 00:01:00 +0000</pubDate>
				<category><![CDATA[Objektorientierte Analyse und Design]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1793</guid>

					<description><![CDATA[<p>Klassen-Design Attribute und Methoden identifizieren Vererbung Notation Kapselung / Sichtbarkeit Constraints Abstrakte Klassen</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-6/">Objektorientierte Analyse und Design (Vorlesung 6)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Klassen-Design</h3>



<ul class="wp-block-list">
<li>Substantivmethode zur Findung von Klassen, Attributen und Methoden</li>



<li>Klassen sind die Bausteine des Systems</li>



<li><strong>Herausforderung:</strong> <em>&#8222;Wie weiß man, wie man die Klassen &#8222;gut&#8220; auftrennt?&#8220;</em></li>



<li><strong>Beispiel: &#8222;Geld abheben&#8220;</strong>
<ul class="wp-block-list">
<li>Kunde ( nicht Teil des Use-Case )</li>



<li>Karte ( Klasse )</li>



<li>System ( nicht Teil des Use-Case )</li>



<li>PIN ( Attribut )</li>



<li>Betrag ( mögl. Attribut )</li>



<li>Konto ( Klasse )</li>



<li>Geld ( nicht Teil des Use-Case )</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Attribute und Methoden identifizieren</h3>



<ul class="wp-block-list">
<li>Methode &#8222;geld_abheben ( betrag )&#8220; definieren</li>



<li>Einzahlen und Auszahlen sind Methoden mit unterschiedlichen Vorgängen und Berechtigungsstrukturen</li>
</ul>



<h3 class="wp-block-heading">Vererbung</h3>



<ul class="wp-block-list">
<li>Subklassen verfügen über alle Eigenschaften der Superklassen</li>



<li>Überschreiben von Merkmalen ist erlaubt</li>



<li>Semantik von Operationen und Attributen dürfen nicht verändert werden</li>



<li>Werte dürfen eingeschränkt, aber nicht erweitert werden ( <em>Platz im Speicher?</em> )</li>



<li>Es muss eine &#8222;Ist ein&#8220;-Beziehung bestehen
<ul class="wp-block-list">
<li><strong>Bsp.:</strong> &#8222;<em>LKW ist keine Spezialisieurng von Rollstuhl</em>&#8222;</li>
</ul>
</li>



<li><strong>Beispiel: </strong>Membranpumpe-Attribute
<ul class="wp-block-list">
<li>Name</li>



<li>Hersteller</li>



<li>Gewicht</li>



<li>Preis</li>



<li>Ansaugdruck</li>



<li>Auslassdruck</li>



<li>Durchflussmenge</li>



<li>Membranmaterial</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Notation</h3>



<ul class="wp-block-list">
<li>Beliebige Instanz einer Klasse &#8222;<strong>:</strong>Klasse&#8220;</li>
</ul>



<h3 class="wp-block-heading">Kapselung / Sichtbarkeit</h3>



<ul class="wp-block-list">
<li>+ Public = Für Alle sichtbar</li>



<li>&#8211; Private = Für Niemanden sichtbar</li>



<li># Protected = Nur für Unterklassen sichtbar</li>



<li>~ Package = Nur für Klassen im gleichen Paket sichtbar</li>
</ul>



<h3 class="wp-block-heading">Constraints</h3>



<ul class="wp-block-list">
<li>Einschränkungen von Randbedingungen bei Vererbung</li>



<li>Complete ( Vollständig )</li>



<li>Incomplete ( nicht vollständig )</li>



<li>overlapping ( Ein Objekt kann mehreres sein )</li>



<li>disjoint ( Es darf nur eines sein ) </li>
</ul>



<h3 class="wp-block-heading">Abstrakte Klassen</h3>



<ul class="wp-block-list">
<li>Kursive Namen oder &#8222;abstract&#8220; kennzeichnen</li>
</ul>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-6/">Objektorientierte Analyse und Design (Vorlesung 6)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/04/objektorientierte-analyse-und-design-vorlesung-6/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
