<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Konzeptorientierte_Programmierung</id>
	<title>Konzeptorientierte Programmierung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Konzeptorientierte_Programmierung"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Konzeptorientierte_Programmierung&amp;action=history"/>
	<updated>2026-05-31T11:36:31Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Konzeptorientierte_Programmierung&amp;diff=2198181&amp;oldid=prev</id>
		<title>imported&gt;Invisigoth67: typo</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Konzeptorientierte_Programmierung&amp;diff=2198181&amp;oldid=prev"/>
		<updated>2024-10-25T13:41:25Z</updated>

		<summary type="html">&lt;p&gt;typo&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Konzeptorientierte Programmierung&amp;#039;&amp;#039;&amp;#039; ist ein [[Programmierparadigma]], das zur Umwandlung von &amp;#039;&amp;#039;Konzepten&amp;#039;&amp;#039; in der Planungsphase eines Programmes in die &amp;#039;&amp;#039;Darstellungen&amp;#039;&amp;#039; der Konzepte in [[Maschinencode]] dient. Das Paradigma der konzeptorientierten Programmierung wurde 2001 von [[Christophe de Dinechin]] mit der Programmiersprache [[XL (eXtensible Language)|XL]] eingeführt.&lt;br /&gt;
&lt;br /&gt;
== Pseudo-Metriken ==&lt;br /&gt;
Die konzeptorientierte Programmierung macht Gebrauch von sogenannten &amp;#039;&amp;#039;Pseudo-[[Softwaremetrik|Metriken]]&amp;#039;&amp;#039;, um die Qualität von Quellcode zu bestimmen. Diese Metriken werden als &amp;#039;&amp;#039;Pseudo&amp;#039;&amp;#039;-Metriken bezeichnet, weil sie sich sowohl auf den Konzeptteil, als auch den Codeteil beziehen, mit der klaren Einsicht, dass der Konzeptbereich nicht streng genug normiert werden kann, um eine echte Metrik darauf anzuwenden. Die Pseudo-Metriken der konzeptionalen Programmierung beinhalten:&lt;br /&gt;
&lt;br /&gt;
* Das &amp;#039;&amp;#039;Syntaktische Rauschen&amp;#039;&amp;#039; misst Unstimmigkeiten zwischen Konzept und Syntax. Zum Beispiel kann das Semikolon am Befehlsende in [[C (Programmiersprache)|C]] als syntaktisches Rauschen betrachtet werden, da es kein Gegenüber im Konzeptraum besitzt und somit eigentlich unnötig wäre (es wird nur vom Compiler genutzt).&lt;br /&gt;
* Das &amp;#039;&amp;#039;Semantische Rauschen&amp;#039;&amp;#039; bestimmt Diskrepanzen zwischen der erwarteten Aussage oder dem Verhalten des Konzepts und dessen eigentlicher Aussage oder Verhalten im Code. Beispielsweise ist die Tatsache, dass Integer-Typen überlaufen (während echte (mathematische) Integer dies nicht tun) eine Form semantischen Rauschens.&lt;br /&gt;
* Die &amp;#039;&amp;#039;Bandbreite&amp;#039;&amp;#039; misst, wie viel des Konzeptraums durch gegebenen Code dargestellt wird. Zum Beispiel hat der überladene Additionsoperator in C eine höhere Bandbreite als die &amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt;-Instruktion in [[Assemblersprache|Assembler]], da der C-Operator auch Additionen auf Fließkommazahlen ausführen kann, und nicht nur auf Integer-Werte.&lt;br /&gt;
* Die &amp;#039;&amp;#039;Rauschrate&amp;#039;&amp;#039; zeigt an, welcher Anteil des Codes für die Repräsentation der eigentlichen Konzepte genutzt wird.&lt;br /&gt;
&lt;br /&gt;
== Regel der Äquivalenz, Äquivalenzauflösung ==&lt;br /&gt;
Die &amp;#039;&amp;#039;Regel der Äquivalenz&amp;#039;&amp;#039; ist erfüllt, wenn das Verhalten des Codes mit dem Originalkonzept übereinstimmt. Diese Äquivalenz kann sich in vielen Fällen auflösen. Integer-Overflows stören die Äquivalenz zwischen dem mathematischen Integerkonzept (-prinzip) und der computerisierten versuchten Annäherung an dieses Konzept.&lt;br /&gt;
&lt;br /&gt;
Viele Arten, die Äquivalenz zu stören, besitzen bestimmte Namen, da diese sehr allgemein sind und oft vorkommen:&lt;br /&gt;
&lt;br /&gt;
* Ein &amp;#039;&amp;#039;Domain Error&amp;#039;&amp;#039; (in etwa &amp;#039;&amp;#039;Bereichsfehler&amp;#039;&amp;#039;) ist eine Situation, in der Code außerhalb der &amp;#039;&amp;#039;domain of equivalence&amp;#039;&amp;#039; (Bereich der Äquivalenz) ausgeführt wird, welcher der Bereich ist, in dem Konzept und Implementierung übereinstimmen. (s. oben) Ein Integer-Overflow ist ein Beispiel eines Bereichsfehlers.&lt;br /&gt;
* Ein &amp;#039;&amp;#039;concept cast&amp;#039;&amp;#039; (Konzeptumwandlung) ist eine Neuschreibung eines bestimmten Konzeptes als ein anderes Konzept, wenn das Originalkonzept nicht von den normalen Werkzeugen der Sprache repräsentiert werden kann. In C ist ein Beispiel für eine Konzeptkopie das Nutzen von Pointern (Zeigern) für Output-Argumente, da C eigentlich keine Output-Argumente unterstützt.&lt;br /&gt;
* Eine &amp;#039;&amp;#039;priority inversion&amp;#039;&amp;#039; (&amp;#039;&amp;#039;Rangordnungsumkehrung&amp;#039;&amp;#039;) ist eine Form syntaktischen oder semantischen Rauschens, beginnend mit einigen durch die Sprache erzwungenen Regeln. Diese Art wird Rangfolgenumkehrung genannt, da die Sprache Präzedenz über das Konzept erlangt. In [[Smalltalk (Programmiersprache)|Smalltalk]] ist alles ein Objekt, und diese Regel führt zur unerwünschten Konsequenz, dass ein Ausdruck wie &amp;lt;code&amp;gt;2+3*5&amp;lt;/code&amp;gt; nicht der üblichen [[Operatorrangfolge]] gehorchen (Smalltalk interpretiert dies als das Übermitteln der Nachricht * an die Zahl, die bei 2+3 herauskommt, was ein Ergebnis von 25 anstatt von 17 ergibt.)&lt;br /&gt;
&lt;br /&gt;
== Methodik ==&lt;br /&gt;
Um Code zu schreiben, empfiehlt konzeptorientierte Programmierung folgende Schritte:&lt;br /&gt;
&lt;br /&gt;
# Festlegen und Definieren der relevanten Konzepte im Konzeptraum.&lt;br /&gt;
# Festlegen der herkömmlichen Schreibweisen für Konzepte, oder Erfinden neuer, nützlicher Schreibweisen.&lt;br /&gt;
# Festlegen einer Kombination von Programmierkonstrukten, die es den Konzepten erlauben, gut im Code repräsentiert zu sein - Dieser Schritt schließt das Finden einer Schreibweise so ähnlich wie möglich der im vorigen Schritt festgelegten mit ein.&lt;br /&gt;
# Code schreiben, der das erwartete Verhalten und die Semantik der wichtigen Aspekte des Originalkonzepts möglichst gut erhält.&lt;br /&gt;
&lt;br /&gt;
Vielen Programmierwerkzeugen fehlt es an Darstellungsfähigkeiten, weshalb konzeptorientiertes Programmieren manchmal das Nutzen eines [[Präprozessor]]s oder [[Metaprogrammierung|metaprogrammiererischen]] Techniken erfordert.&lt;br /&gt;
&lt;br /&gt;
== Sprachen ==&lt;br /&gt;
[[XL (eXtensible Language)|XL]] ist die bisher einzige Programmiersprache, die ausschließlich für konzeptorientiertes Programmieren entworfen wurde, jedoch kann konzeptorientiertes Programmieren in fast jeder Sprache betrieben werden, mit unterschiedlichen Erfolgen. [[Lisp]] und [[Forth (Programmiersprache)|Forth]] (und Derivate) sind Beispiele vorher bestehender Sprachen, die sich gut zum konzeptorientierten Programmieren eignen.&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Projekte ==&lt;br /&gt;
Es gibt Projekte, die ähnliche Ideen nutzen, um Code auf einer höheren Abstraktionsebene zu erzeugen. Unter anderem sind das:&lt;br /&gt;
* [[Intentionale Programmierung]]&lt;br /&gt;
* [[Sprachorientierte Programmierung]] &amp;lt;!-- en:Language-oriented programming --&amp;gt;&lt;br /&gt;
* [[Literate programming]]&lt;br /&gt;
* [[modellgetriebene Architektur]]&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Codegenerierung]]&lt;br /&gt;
* [[Artefaktur]] (AAL)&lt;br /&gt;
* [[Abstrakter Syntaxbaum]] (AST)&lt;br /&gt;
* [[Language syntax tree]] (LST)&lt;br /&gt;
* [[Semantic resolution tree]] (RST)&lt;br /&gt;
* [[Interpretation syntax tree]] (IST)&lt;br /&gt;
* [[Code generation syntax tree]] (CST)&lt;br /&gt;
* [[Domänenspezifische Sprache]] (DSL)&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://xlr.sourceforge.net/Concept%20Programming%20Presentation.pdf A presentation of Concept Programming] (PDF; 4,5&amp;amp;nbsp;MB)&lt;br /&gt;
* [http://www.regdeveloper.co.uk/2008/01/16/concept_programming/ An interview about Concept Programming on The Register]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierparadigma]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Invisigoth67</name></author>
	</entry>
</feed>