<?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>Groschengedanken zu Software &#187; OOP</title>
	<atom:link href="http://aysx.de/eingroschen/?feed=rss2&#038;tag=oop" rel="self" type="application/rss+xml" />
	<link>http://aysx.de/eingroschen</link>
	<description>... und vielleicht auch dem ganzen Rest</description>
	<lastBuildDate>Tue, 18 Jun 2019 17:59:37 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>Workshop bei ITWU</title>
		<link>http://aysx.de/eingroschen/?p=747</link>
		<comments>http://aysx.de/eingroschen/?p=747#comments</comments>
		<pubDate>Sat, 31 Oct 2015 08:52:19 +0000</pubDate>
		<dc:creator><![CDATA[matthias]]></dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[OOAD]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://aysx.de/eingroschen/?p=747</guid>
		<description><![CDATA[Lotus Notes ist ein Software-Paket mit langer Tradition. Ein Ergebnis davon ist, dass man sehr viele Möglichkeiten hat, eine Notes-Anwendung zu erstellen. Zu viele für einen Notes-Noob wie mich. Klar &#8211; ich kann programmieren. Aber das ist mehr als nur &#8230; <a href="http://aysx.de/eingroschen/?p=747">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.ibm.com/developerworks/lotus/library/ls-NDHistory/" target="_blank">Lotus Notes ist ein Software-Paket mit langer Tradition.</a> Ein Ergebnis davon ist, dass man sehr viele Möglichkeiten hat, eine Notes-Anwendung zu erstellen. Zu viele für einen Notes-Noob wie mich. Klar &#8211; ich kann programmieren. Aber das ist mehr als nur Quelltext einzutippen. Eine wesentliche Frage ist, wie man ein Projekt am cleversten umsetzt. Und genau da setzte der Workshop bei der <a href="http://itwu.de/index.html" target="_blank">ITWU GmbH</a> an.</p>
<p>Eine Programmierer-Weisheit pfeifen die Spatzen vo den Dächern: <a href="https://de.wikipedia.org/wiki/Don%E2%80%99t_repeat_yourself" target="_blank">Wiederhole Dich nicht</a>. Früher habe ich nicht verstanden, wie das effektiv in Notes realisiert werden kann, weil ich gedanklich vor einem Dickicht stand: Multi-Options-Paralyse. Heute bin ich schlauer :-)</p>
<p>Auch für ein Projekt in Notes bietet es sich an, Objekt-Orientierte Analyse und Design durchzuführen. Das Objektmodell kann in LotusScript umgesetzt werden. Wohlgemerkt: Noch sind keine Notes-Dokumente und -Masken im Spiel. In der Business-Logik kommen diese Elemente nicht vor.</p>
<p>Notes-Dokumente kommen erst dann zum tragen, wenn es darum geht, die Daten der Business-Objekte zu speichern. Jedes Business-Objekt hat/ nutzt ein Notes-Dokument, um seine Daten persistent zu machen. Wesentlich ist Kapselung, anschaulich: Business-Klasse A nutzt Business-Klasse B. Beide nutzen Notes-Dokumente als Speicher. Aber NIE darf ein A-Objekt das Notes-Dokument eines B-Objekts nutzen.</p>
<p>Notes-Masken kommen nur als GUI-Elemente für Obacht! Business-Objekte ins Spiel. Die Masken arbeiten nie mit Notes-Dokumenten. So kommt man zu einer &#8220;sauberen&#8221; <a href="https://de.wikipedia.org/wiki/Model_View_Controller" target="_blank">Trennung von Datenmodell und dessen Visualisierung</a>. Leider ist es leicht, das falsch zu machen, weil man im Dickicht erkennt, dass Masken und Dokumente zusammengehören.</p>
<p>Ich denke mir das so: Das Objektmodell beschreibt, was wo wie erledigt wird. Speicherung und Visualisierung sind davon unabhängig. In meiner heilen Java-Welt nutze ich vielleicht Hibernate und Eclipses SWT. Und in Notes eben Dokumente und Masken.</p>
<p>Schön, dass auch andere der Meinung sind, <a href="http://aysx.de/eingroschen/?p=496">dass nur ein fauler Programmierer ein guter ist</a>. Passt zu meinem Credo: <a href="http://aysx.de/eingroschen/?p=651">Einfach ist besser</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://aysx.de/eingroschen/?feed=rss2&#038;p=747</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Malen mit Zahlen</title>
		<link>http://aysx.de/eingroschen/?p=123</link>
		<comments>http://aysx.de/eingroschen/?p=123#comments</comments>
		<pubDate>Fri, 01 Nov 2013 11:40:41 +0000</pubDate>
		<dc:creator><![CDATA[matthias]]></dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Bedeutung]]></category>
		<category><![CDATA[Bild]]></category>
		<category><![CDATA[Metapher]]></category>
		<category><![CDATA[Objektorientierung]]></category>
		<category><![CDATA[OOAD]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://aysx.de/eingroschen/?p=123</guid>
		<description><![CDATA[Ich habe Schlachten geschlagen, das Gesicht vernarbt, der Gang schleppend. Die Arme stecken in einem undurchsichtigen Sumpf aus pechschwarzzähem Altöl, die Finger geraten da unten in das Getriebe, das ich nicht sehen kann &#8211; ab. Die Sonne brennt den Himmel &#8230; <a href="http://aysx.de/eingroschen/?p=123">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ich habe Schlachten geschlagen, das Gesicht vernarbt, der Gang schleppend. Die Arme stecken in einem undurchsichtigen Sumpf aus pechschwarzzähem Altöl, die Finger geraten da unten in das Getriebe, das ich nicht sehen kann &#8211; ab. Die Sonne brennt den Himmel weiß. Verschmiert und durstig stolpere ich Schienen entlang, die sich mit ingenieurischer Präzision durch die ockerfarbene Ebene ziehen, bis an den Horizont.</p>
<p>Das meine ich ernst &#8211; und bildlich, nicht wörtlich. Wir verstehen die bildliche Rede des Gegenübers im Alltag meistens ohne grosse Anstrengung: &#8220;Irgendwie schmerzhaft und trostlos, dazu ein bißchen Pathos&#8221;. Funktioniert vermutlich am besten, so lange man sich der Muttersprache bedient und den eigenen Kulturkreis als Grundlage der Interpretation benutzen kann. Wenn ich französische Comics und Zeitungen lese, dann flutschen mir fast alle Metaphern durch &#8211; will sagen: ich nehme wörtlich, was bildlich gemeint ist. Mißverständnisse sind mitunter sehr erheiternd.</p>
<p>Das oben beschriebene Bild kam mir, nach dem ich sehr lange sehr &#8230; häßlichen &#8230; Code bearbeitet hatte.<br />
Exkurs: Oft ist es verlockend, Metaphern zu benutzen &#8211; eine Abkürzung, die die Eindringlichkeit nicht verliert. &#8220;Häßlich&#8221; zu sagen ist einfacher, als all das aufzuzählen, was jenseits der Ästhetik liegt. Nur ein fauler Programmierer &#8230; Welche Eigenschaften machen Code zu häßlichem Code? Unlesbarkeit, Unverständlichkeit, Brüchigkeit &#8211; Änderungen an einer Stelle sorgen für schwerwiegende Fehler an einer anderen Stelle, die &#8220;weit entfernt&#8221; ist. Code, der wie ein Text von Hegel ist &#8211; bildlich gesprochen gibt es das! Oder scholastisch &#8211; mit vielen Wenns und Abers. Klugscheisser mag kein Mensch. Exkurs-Ende.</p>
<p>Wenn ich eine neue Programmiersprache lerne, dann ist in meinem Kopf das Bild von mir als kleines Kind, das im Matsch eine Burg baut. Das rote Schüppchen liegt nahe bei, Hose und Hemd nass und zugeferkelt, Haare und Gesicht voll verkrustetem Schlamm. Die Burg ist nur mit viel elterlichem Wohlwollen oder Phantasie als solche zu erkennen. Nicht effektiv, nicht effizient, nicht von Dauer, Muttern hat wieder Arbeit mit der Wäsche. Nur eins: Ein riesengrosser Spass, der glückliches Lächeln zaubert. Die ersten Zeilen Quelltext in der neuen Sprache sind eine Matschburg.</p>
<p>Putzfimmel</p>
<p>In meinem Handapparat steht das Buch &#8220;Clean Code&#8221;[2]. &#8220;Sauberer&#8221; Code ist kein häßlicher Code. &#8220;Sauberer&#8221; Code ist modular und wiederverwendbar, einfach zu testen, einfach zu ändern, robust, seine Zusammenhänge und Wege lassen sich mühelos offenlegen. &#8220;Sauber&#8221; ist hier eine Metapher. Mit &#8220;sauber&#8221; verbinden wir angenehmes und gesundes. Weil Metaphern oft so eindringlich sind, kann man leicht vergessen, darüber nachzudenken &#8211; man nimmt sie eben so hin. Denk&#8217; &#8216;mal an &#8220;saubere Trennung&#8221; und &#8220;Säuberung&#8221;. Klingt doch gut, oder. Ja, aber oft hängt damit Schönrederei zusammen. Pars pro toto: Sei Dir bewußt, dass Du Metaphern benutzt. Reflektiere Deine Metaphern gelegentlich. Lass&#8217; Dich von Deinen Metaphern nicht verführen.</p>
<p>Man sollte Metaphern nicht überstrapazieren. Beispiel: Was bekommt man, wenn man &#8220;jeden Dreck&#8221; entfernt, alles &#8220;blitzblank&#8221; programmiert, die Sauberkeit auf die Spitze treibt? Der Quelltext hat dann keine &#8220;dunklen Ecken&#8221; mehr, keine Stellen, bei denen man Gefahr läuft &#8220;einen Finger zu verlieren&#8221;. Man bekommt keinen keimfreien Code, sondern nur sauberen &#8211; die Sauberkeits-Metapher &#8220;trägt&#8221; hier nicht mehr, sie hilft uns nicht mehr weiter.</p>
<p>Jedes Ansammlung von Quelltext, die mir bisher untergekommen ist, hat &#8220;dunkle Ecken&#8221;. In der Software-Entwicklung nennt man eine dunkle Ecke &#8220;Anti-Pattern&#8221;, im Gegensatz zu den &#8220;Design-Patterns&#8221; der Gang-Of-Four. Leicht verfällt man in Sauberkeitswahn und will alle Anti-Patterns ausputzen. Ich denke heute, dass es falsch ist, eine Neurose hinsichtlich unsauberen Codes zu entwickeln &#8211; oder Verhalten zu fördern, das zu einer solchen führt. Neue Programmteile programmiere ich so gut wie möglich. Alte säubere ich, wenn sie in Zusammenhang mit den neuen stehen und &#8211; wichtige Einschränkung &#8211; mir die Kontrolle des neuen in der Folgezeit erheblich erschweren werden. Schmuddeligen Code sehe und bewerte ich und lasse ihn vorbeigehen, wenn er unwichtig ist. Augenmass ist wichtig.</p>
<p>Das Huhn im Topf</p>
<p>Woran denkst Du, wenn Du &#8220;Spaghetti&#8221; hörst? An die Anstrengung, sie zu produzieren? Das Paket im Supermarktregal? Oder &#8220;carabonara&#8221; &#8211; gleichauf &#8220;bolognese&#8221;? Ich kenne keine Studie dazu, aber ich wette, die meisten denken an carabonara/ bolognese. Und haben ein Bild vor Augen, das dem der Wikipedia bei &#8220;Spaghetticode&#8221; nahe kommt. Denken und Sprache hängen eng zusammen, genauso Denken und Sehen. &#8220;Sehen ist glauben&#8221;. &#8220;You don&#8217;t think so? We&#8217;ll see.&#8221; Spaghetticode ist häßlich, weil verworren. Ich mag Spaghetti-Code: Er sichert mein Auskommen bis zur Rente. Meine Finger hat die Maschine eh&#8217; schon gefressen ;)</p>
<p>Ich habe schon viel Quelltext gesehen &#8211; gelesen, durchgeackert. Und viel davon hatte eine je eigene Handschrift. Kommentare, Variablennamen, die Weise der Klammerung, die Aufteilung der Funktionen &#8211; das unterscheidet sich von Programmierer zu Programmierer. Einen Eindruck hinterläßt bei mir jeder Code &#8211; den sinnlich wahrnehmbaren. Sauberer Code, schöner Code, guter Code &#8211; Dem Wahren, Schönen, Guten. Code und Ästhetik. Ich bemühe mich so zu programmieren, dass das Ergebnis ein Jungbrunnen ist, Ambrosia. Auf dass es geschmeidig ineinander greift, wie ein Schweizer Uhrwerk.</p>
<p>Licht</p>
<p>All das, was wir heute mit PCs treiben, ist in unserer Wahrnehmung Lichtjahre entfernt von Schalter-an-Schalter-aus, von 0 und 1, von den grundlegenden Funktionen einer Rechenmaschine. Und doch ist es faktisch genau nur das. Das &#8220;Blech&#8221;, der &#8220;Maschinenraum&#8221; des PCs liegt unter etlichen Metapher- Schichten. Mein ehemaliger Kommilitone Dieter J. &#8211; Programmierer und SysAdmin &#8211; sagte mit einem Augenzwinkern: &#8220;Wir sind Magier und haben die Zaubersprüche für die Geister, die in den kleinen schwarzen Kästchen eingesperrt sind.&#8221; A.C. Clarke: &#8220;Jede ausreichend fortgeschrittene Technologie ist von Zauberei nicht zu unterscheiden&#8221;[1]. Damit hält die Mystik wieder Einzug in den Alltag. Einerseits ist es ja ganz angenehm, nicht nur ständig mit &#8220;kühler Technik&#8221; in Berührung zu kommen. Andererseits möchte ich dringend dazu raten, einen Artikel über Halbaddierer zu lesen[4]. Man kann den PC vermenschlichen, als Abkürzung für technische Details &#8211; aber bitte nicht ernst nehmen. Alles, was Du auf dem Bildschirm siehst, ist eine gigantische Ansammlung von 0 und 1.</p>
<p>Programmierern (-lernen) heißt heute, sich in den geekisch-nerdischen Kulturkreis einzufinden, so dass einem die gängigen Metaphern[3] verständlich werden.</p>
<p>[1] <a title="Magic Cauldron" href="http://www.oreilly.de/opensource/magic-cauldron/cauldron.g.magic.html" target="_blank">http://www.oreilly.de/opensource/magic-cauldron/cauldron.g.magic.html</a><br />
[2] Robert C. Martin. Clean Code. A Handbook of Agile Software Craftsmanship. Boston, 2009.<br />
[3] Möglicher Ausgangspunkt <a title="Jargon File Wikipedia" href="http://de.wikipedia.org/wiki/Jargon_File" target="_blank">http://de.wikipedia.org/wiki/Jargon_File</a><br />
[4] Beispielsweise Gumm, H.P./ Sommer, M.: Einführung in die Informatik. 6., vollständig überarbeitete und erweiterte Auflage. München, Wien 2004. S.431ff</p>
]]></content:encoded>
			<wfw:commentRss>http://aysx.de/eingroschen/?feed=rss2&#038;p=123</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
