Algorithmus von Archimedes für eine Fläche unter einer Kurve:
0 ... pi!0.00001 sin *0.00001 ++ rnd 4
ergibt: 2.0

Adam Ries: 1+2*3
ergibt 9

Inhalt dieser Seite

1 Sechs einführende Beispiele

3 Wer kann multiplizieren?

4 Probleme mit mathematischen Konventionen

4.1 Punkt vor Strich

4.2 Funktionenschreibweise

5 Was ist o++o?

6 Ziele von o++o

7 Eigenschaften von o++o (Selbsteinschätzung)

7.1 Bezeichnungen in o++o

7.2 Zur Syntax und Semantik von o++o

7.3 Operationen von o++o

8 Ein Blick auf das Relationale Datenmodell durch die o++o-Brille

1 Sechs einführende Beispiele

Inhalt

durchschnitt.otto: Berechne den Durchschnitt meherer Noten!

1 3 5 2 3 1 3 ++:
Resultat
2.57142857143

summe.otto: Berechne die Summe der ersten hundert natürlichen Zahlen (Aufgabe von Gauß)!

1 .. 100 ++
Resultat
5050

tabmentmultiplikation.otto: Berechne die Bruttowerte mehrerer Nettopreise!

77 79 567 432 +% 19
Resultat
 91.63
 94.01
674.73
514.08

zuweisungen.otto: Berechne den Gesamtwert jeder Position und die Gesamtsumme!

<TAB!
ARTIKEL,  PREIS,ANZ   m
OttoRAMDB 500     20
OttoWiki   10    200
OttoCalc   20   4000
!TAB>
TOTAL:=PREIS*ANZ
SUM:=TOTALl ++
Resultat
SUM, (ARTIKEL,  PREIS,ANZ, TOTAL m)
92000 o++oCalc   20   4000 80000
      o++oRAMDB 500     20 10000
      o++oWiki   10    200  2000

tabellenfor.otto: Vergleiche die Wertentwicklung eines Betrages von 100 Euro innerhalb eines Zeitraumes von 10 Jahren bei Zinsen von 1% und 9% !

JAHRl:= 2022 .. 2032
BETR1,BETR9:= 100.,100. tabfor preds +% (1,9) at JAHR
rnd 2
Resultat
JAHR,BETR1, BETR9 l
2022 100.00 100.00
2023 101.00 109.00
2024 102.01 118.81
2025 103.03 129.50
2026 104.06 141.16
2027 105.10 153.86
2028 106.15 167.71
2029 107.21 182.80
2030 108.29 199.26
2031 109.37 217.19
2032 110.46 236.74

bestimmtesintegral.otto: Bestimme die Fläche unter dem Polynom vierten Grades X4 + X + 2 von -1 bis 1 näherungsweise!

-1 ...1!0.000'1 poly [1 0 0 1 2] *0.000'1 ++
Resultat
4.40030000667

3 Wer kann multiplizieren?

Inhalt

Begebenheit 1

In einer Mathematikprüfung eines Pharmaziestudenten aus Bologna nach dem zweiten Studienjahr mußte der Student unter anderem 7 mal 8 berechnen:
Der Phamarziestudent: 59
Der Algebraprofessor: Aber 59 ist doch gar keine gerade Zahl.
Der Phamarziestudent: 64

Lehre

Es gibt junge Intellektuelle, die das kleine Einmaleins nicht "beherrschen". Ist das ein Problem für die Gesellschaft?

Begebenheit 2

Etwa in der siebenten Klasse schrieben wir in der "Heinrich Heine" POS Hadmersleben eine Mathearbeit bei einem guten aber nicht so strengen Lehrer, Papa Senf. Ich konnte meine Arbeit vorzeitig abgeben. Aus langer Weile habe ich auf den Zettel meines Banknachbarn geguckt. Er errechnete 32 als Zwischenergebnis für die Aufgabe 8 mal 4. Ich dachte "Der ist aber deppern". Kurz nachdem ich mit dann mit dem Rechnen begonnen hatte, dachte ich, dass ich doch der Depp sei, da ich 24 herausbekommen hatte. Ich durfte meine Arbeit noch einmal beim Lehrer abholen und konnte die Aufgabe noch korrigieren.

Lehre

Ich war zu diesem Zeitpunkt bereits bei der Mathekreisolympiade erfolgreich. Wie konnte das passieren? Wer hat Schuld? Die Antwort ist einfach. Ich hatte so viel Westfernsehen konsumiert, dass die Werbung "8 mal 4 24 Stunden frisch" meinem Kinderhirn arg zugesetzt hatte.

Begebenheit 3

Wallerie - ein Erfurter Kindergartenmädchen der großen Gruppe - ist heute bereits Studentin.
Ich stellte ihr eine Aufgabe: Wie viele Brauseflaschen enthält ein Kasten mit 4 Reihen, wenn in jeder Reihe 5 Flaschen stehen?
Wallerie benötigte eine gewisse Zeit: 19
Ihr Vater - ein junger Ingenieur: Du rechnest nicht, Du rätst.

Begebenheit 4

Ich frage Isabella, eine Schülerin der 2-ten Klasse aus Gerwisch: Wie viel ist 3 mal 4?
Nach einer Weile: 12
Der Vater: Das hat aber gedauert.

Meine Vermutung

Kein Mensch kann 7 mal 8 im Kopf rechnen.
Ältere Erwachsene haben das Einmaleins so oft in der Schule rechnen müssen, dass sie es nur noch auswendig können und nicht mehr wissen wie sie früher als Kind multipliziert haben.
Die ursprünglichen Neuronenverbindungen wurden in den vielen Schuljahren "überschrieben" und sind nicht mehr vorhanden.

7 mal 8 mit dem Stift rechnen, dürfte jedes Kind der zweiten Klasse beherrschen.
7 Reihen mit jeweils 8 Strichen leserlich untereinander schreiben und dann alle Striche durchzählen oder - wenn man im Kopf addieren kann - jeweils 8 hinzufügen.

Wenn man den Kindern jetzt noch die dezimale Zahlenrepräsentation mit der Bedeutung der Null (Multiplikation mit 10, ...) vermittelt,
könnte man das als Multiplikation ansehen.

These

Die schriftliche Dezimalzahlmultiplikation hat ihre Bedeutung verloren, da Computer viel schneller und zuverläßiger sind und auch fast immer zur Verfügung stehen.
Wenn man "nur" noch das kleine Einmaleins mit der schriftlichen Dezimalzahlmultiplikation beherrscht,
ist meiner Meinung nach nicht einmal garantiert, dass man das wichtigere Standardproblem der Multiplikation - die Berechnung einer Rechteckfläche - lösen kann.
Der Algorithmus der schriftlichen Dezimalzahlmultiplikation scheint mir zu kompliziert zu sein, um hieraus die Berechnung einer Rechteckfläche herzuleiten.

Meine Vermutung

Das Rechnen mit Strichen ist wichtiger als das schriftliches Rechnen mit Dezimalzahlen,
obwohl Dezimalzahlen der Repräsentation von Zahlen in langen Strichlisten weit überlegen sind.

4 Probleme mit mathematischen Konventionen

Inhalt
In dieses Abschnitt soll deutlich gemacht werden, dass die heutigen mathematischen Konventionen zwar in der Schule vermittelt werden, aber von breiten Kreisen nicht aktiv beherrscht werden. Ich denke, dass die meisten Deutschen die Aufgabe 1+2*3 nicht im Sinne der Schulmathematik lösen, wenn sie nicht in irgendeiner Weise auf das Problem aufmerksam gemacht werden. Man könnte meinen, dass sich Punkt-vor-Strich jeder merken könne. Aber wenn man ein Jahr oder länger in keiner Weise damit kontaktiert wurde, verflüchtigt dieses Wissen. Eine 20 jährige amerikanische Sängerin hatte noch nie davon gehört. Promovierte Informatiker ermitteln ebenfalls 9. Smalltalk, viele Taschenrechner und der Windowsrechner im Modus normal ermitteln ebenfalls 9. Noch problematischer ist es aber, dass Punkt-vor-Strich nur die Spitze vom Eisberg ist: 6. Die Regeln für Potenzen werden uneinheitlich in Computersystemen genutzt: 2^3^4 = (2^3)^4 = 4096 (EXCEL und Libre Office Calc und TexasInstrumentstaschenrechner) 2^3^4 = 2^(3^4) = 2.4178516e+24 (Mathematik und Google Search) 7. Die Regel für das unäre Minus wird uneinheitlich verwendet: - 3 ^ 2 = (-3)^2 = 9 (EXCEL und Libre Office Calc) - 3 ^ 2 = -(3^2) = - 9 (Programmiersprache basic calculator) 8. 10 - 3 +2 ist 9, nicht wie die PEMDAS-Abkürzung fälschlich folgern lässt 5 (Addition vor Subtraktion). Die mathematischen Konventionen schreiben demnach vor,
dass man beim Potenzieren von rechts-nach-links rechnet,
dass Potenzieren und Radizieren vor Punkt und damit auch vor Strichrechnung auszuführen ist,
dass eine zweistellige Funktion plus in der Form plus(3,4) aber trotzdem 3+4 geschrieben werden soll, dass eine einstellige Funktion mit Klammern geschrieben werden muss, aber viele Rechner anstelle von sqrt(|sin(6)|) die bequemere Notation 6 sin abs sqrt zulassen, dass bei den vielen Konventionen die wichtigste Konvention nach der jedes Kind der zweiten Klasse rechnet vergessen wird: von links-nach-rechts
Wer sich hier nicht sicher ist, weiss auch nicht sicher was das Ergebnis von
10 - 3 - 2
sein soll. Man kann einfach nicht davon ausgehen, dass sich alle Menschen so viel Zeit für die Aneigung und Wiederholung mathematischer Konventionen nehmen können wie beispielsweise Berufsmathematiker. Man muss berücksichtigen, dass auch die Leistungsfähigkeit eines menschlichen Gehirns beschränkt ist und dass in Westeuropa der IQ schon Jahrzehnte am sinken ist (In der Wikipedia wird vermutet, dass das Privatfernsehen die Hautursache ist. Neuerdings könnten noch weitere Faktoren diesen Negativtrend beeinflussen.

4.1 Punkt-vor-Strich

Inhalt
Die Gymnasiallehrererin Sabine B. war der Meinung, dass man auch auf dem Gymnasium noch Kopfrechnen üben muss, da die Schüler das Kleineeinmalens nicht flüssig genug beherrschen. Bei Kettenaufgaben der Gestalt
13 plus 23 plus 44 mal 5 plus 12
verzichtete sie auf die Punkt-vor-Strich-Regel, da man eine solche Aufgabe ansonsten nicht im Kopf rechnen könne. Damit verletzt die Gymnasiallehrerin bewußt die Rechenregeln der Mathematik.
Stuttgarter Zeitung:
www.stuttgarter-nachrichten.de/inhalt.rechenaufgabe-laesst-das-internet-verzweifeln-koennen-sie-dieses-mathematik-raetsel-loesen.0950a10c-09f4-4d0d-a085-6d4ecefc15b2.html
8:2(2+2) - so schwer sieht die Gleichung auf den ersten Blick gar nicht aus. Trotzdem bereitet das Mathe-Rätsel tausenden Menschen im Internet Kopfzerbrechen, denn sie können sich nicht auf die eine richtige Lösung einigen. Der Tweet mit der umstrittenen Rechenaufgabe ging um die Welt. ... Fast 15'000 Menschen gaben dem Bild auf Twitter ein Gefällt mir, über 16'000 Kommentare wurden abgegeben. Warum man bei der Aufgabe auf zwei verschiedene Lösungen kommen kann und was laut eines Mathematikers des Rätsels wahre Antwort ist, erfahren Sie im Video. ... Die Authorithät eines amerikanischen Mathematikers ausnutzend verkündet Bild, dass 16 die richtige Lösung ist. (Armes Deutschland) 1. Lösung: Wegen 2(2+2)=8 muss das Ergebnis 8:8 = 1 2. Lösung: Wegen 2+2=4 muss das Ergebnis 8:2*4 = 16 sein.
Merkur:
www.merkur.de/leben/karriere/mathe-raetsel-aufgabe-fuenftklaessler-loesung-jeder-zweite-japaner-scheitert-zr-12266399.html
Verrückt: Jeder zweite Japaner scheitert an dieser Mathe-Aufgabe für Fünftklässler Mal ehrlich: Wie schwer kann schon ein Mathe-Rätsel sein, das aus einem Aufgabenheft für Fünftklässler stammen könnte? Nun ja, in Japan ging das Rätsel viral, als bekannt wurde, dass fast die Hälfte aller jungen Erwachsenen beim ersten Versuch scheiterte. Doch bevor Sie vorschnell urteilen, sollten Sie sich lieber selbst an die Rechenaufgabe wagen.
9-3÷1/3+1=? Vermutlich haben Sie so gerechnet: 9-3/1/3+1 = 9-3/3+1 = 9-1+1 = 9 (falsch!) Jetzt in o++o umschreiben: 9-(3:1/3)+1 ergibt 1/1 Die Klammer muss gesetzt werden, da für die Lösung vermutlich Punkt-vor-Strich vorausgesetzt wurde.
Merkur:
www.merkur.de/leben/karriere/raetsel-knacken-sie-diese-matheaufgabe-fuer-elfjaehrige-zr-90938962.html
Um das Mathe-Rätsel zu lösen, muss man kein Superhirn sein, sondern sich einfach an zwei Mathe-Regeln halten: Punkt-vor-Strich und Klammern-zuerst rechnen. Dann kommen Sie auch auf das richtige Ergebnis: 3(5-1x2)= 3(5-1x2)= 3(5-2)= 3x3=9
Welt:
www.welt.de/kmpkt/article190620337/An-diesem-einfachen-Matheraetsel-scheitern-viele.html
Ein Mann kauft ein Pferd für 60 Dollar. Er verkauft das Pferd für 70 Dollar. Er kauft das Pferd dann wieder für 80 Dollar. Und verkauft es wieder für 90 Dollar. Wie viel Geld hat der Mann zum Schluss gewonnen oder verloren? Oder kommt er mit plus/minus null aus dem Pferdehandel? Die Lösung -20 (mit o++o: -60 + 70 - 80 + 90) geben lediglich 55% der Nutzer an.

8+8 sqrt

ist zudem schneller zu tippen, da man keine zusätzlichen Klammern benötigt. Würde man

sqrt 8+8

zulassen, was Diese Probleme vermeidet o++o dadurch, dass die Operationen wie sqrt abs sin ... nach dem Inputwert (Argument) geschrieben werden. Diese bequeme Schreib- bzw. Tippweise verwenden auch viele Schultaschenrechner. Obwohl einstellige Operationen nach dem Inputwert positioniert werden, benutzt o++o nicht die polnische Notation rückwärts. Das haben einige Computersprachen in der Vergangenheit versucht, da damit Implementationsvorteile verbunden waren. Auch Hewlett Packard ist letztendlich damit gescheitert. Zu breite Nutzerklassen konnten die Gewohnheiten, die mit der Schreibweise 3+4 verbunden sind, nicht abstreifen.

3 4 +

kann man vielleicht noch schnell erfassen. Aber

3 4 + 1 2 - +

(entspricht 3+4 + (1-2)) bereitet schon einige Schwierigkeiten. o++o verwendet bei einstelligen Operationen also die postfixe (z.B.: 4 sqrt) und bei allen zweistelligen Operationen die infixe (z.B.: 3+4 oder 1 .. 100) Schreibweise. Beide Schreibweisen scheinen unterschiedlich zu sein. In beiden Fällen wird die Operation aber nach dem ersten Inputwert geschrieben. Dieser Gedanke wurde in o++o sogar generell verwirklicht. Für eine Funktion mit mehr als 2 Inputwerten wurde in der Mathematik dagegen eine weitere Notation eingeführt:

f(x,y,z)

Diese Notation widerspricht auch in einem anderen Punkt o++o. In o++o und vielen Programmiersprachen kann das Komma nicht als Trennzeichen benutzt werden, da es bereits für die Paar- oder allgemeiner Tupelbildung benutzt wird. Außerdem wird diese Funktionsnotation in vielen Programmiersprachen nicht konsequent durchgehalten. .. hat 2 Inputwerte aber ... drei. Durch

1 ... 10!0.1

werden alle Zahlen von 1 bis 10 mit der Schrittweite 0.1 generiert. Das ! als Trennzeichen zwischen dem zweiten und dritten Inputwert findet man in allen 3 stelligen Operationszeichen von o++o. Da man 9! in neueren o++o-Versionen durch 1 ..9 ** ausdrücken kann, konnte dieses Symbol der Fakultätsfunktion für andere Zwecke benutzt werden. Durch diese Konventionen kann man die folgende Näherung für die Fläche unter den 2 Sinusbögen ohne Klammern formulieren:

0 ... 2*pi!0.000'01 sin abs *0.000'01 ++

Hierbei wird von jeder der generierten Zahlen der Sinuswert berechnet, dann wird jede Zahl in eine positive umgewandelt. Diese Zahlen sind die jeweiligen Höhen unter in der Kurve. Durch die Multiplikation jeder Höhe mit der Schrittweite erhält man 628'319 sehr kleine Rechteckflächen. Die abschließende Summe dieser Flächen (4.00000000005) stellt eine Näherung für die exakte Lösung 4. dar. Diese und ähnliche Probleme kann ein Sekundarschüler der 8-ten Klasse selbstständig ohne Hilfestellung in 10 Minuten vollständig lösen, wenn er mit den Grundgedanken von o++o vertraut ist. Mit o++o kann er in der Zeit sogar eine Visualisierung des Funktionsgraphen generieren, um sich ein besseres Bild vom Problem zu erarbeiten. Die entscheidende Frage hierbei ist jedoch, ob sich Archimedes über die o++o-Notation seines Algorithmus gefreut hätte oder ob er ein Programm in JAVA- oder einer anderen Programmiersprachen vorgezogen hätte? Ich habe einen guten Draht zu Odin dem dem Göttervater von Walhalla und bin mir sicher, dass Zeus, der oberste Grieche unserem Germanenchef das ins Ohr flüstern wird. Jeder Schüler der zweiten oder dritten Klasse, der die Bedeutung der Symbole + * - und : erfaßt hat, rechnet stets von links nach rechts. Das heißt diese o++o-Konvention muß in der Schule gar nicht vermittelt werden. Daher kann sie auch niemand vergessen. Sehr, sehr viele Erwachsene, viele Rechner und auch Programmiersprachen rechnen von links nach rechts. Nach dem größten deutschen Rechenmeister Adam Ries ist das Ergebnis von 1+2*3 ebenfalls 9, da er die Regel "Punkt- vor Strich" nicht eingeführt hat. Viele denken, dass Punkt vor Strich für alle vermittelbar ist. Meine Erfahrung zeigt, dass sehr viele selbst promovierte Informatiker dies wieder vergessen, wenn sie mehrere Jahre nicht daran erinnert wurden. Die meisten Menschen halten Punkt vor Strich für Mathematik. Ich kennen bisher niemanden, der weiß, warum die Konvention eingeführt wurde. Ferner ist Punkt vor Strich nur die Spitze eines Eisbergs. Den meisten Menschen ist nicht bewußt, dass Potenzen vor Punkt, ... ebenfalls gefordert wird. Von links nach rechts ist auch heute die wichtigste Regel. Daran müßte aber in der Schule auch regelmäßig erinnert werden, damit jeder 10 - 3 - 2 richtig rechnet. Ferner denke ich, dass es nur wenige gibt, die beim Potenzieren von rechts nach links rechnen würden. Die Mathematiker fordern dies nur, damit sie ein kleines Gesetz etwas eleganter formulieren können. Dafür soll die gesamte Menschheit umständlicher rechnen? Durch die Vermittlung von Punkt vor Strich zerstört die Schule jungfräulich einfache und klare Denkweisen in den Kinderhirnen.

5 Was ist o++o?

Inhalt
o++o ist an erster Stelle ein mathematisches Datenmodell. Die wesentlichen Operationen wurden mit einer algebraischen Spezifikationssprache für abstrakte Datentypen von Heinz Kaphengst und Horst Reichel aus dem Kombinat Robotron Axiom für Axiom präzisiert. Diese Spezifikationssprache wurde auch von U. Hupbach und K. Benecke weiterentwickelt. K. Benecke versuchte nicht nur bekannte Typen, wie Mengen, Listen, Stacks, ... zu spezifizieren. Er wollte beweisen, dass eine formale Spezifikation neuer Datentypen viele Vorteile bietet. Die scheinbar belanglose Neuerung bestand darin, dass er alle Kollektionen (Listen, Mengen, Multimengen) sowie Tupel, ... in einer "Sorte" Table vereinigte. Hierhinter verbargen sich von Anfang an strukturierte Tabellen. Nach dem Aufkommen von XML konnte er strukturierte Dokumente mit in den Grundbegriff einschließen. Die Sorte hieß von da ab Tabment (TABelle+ dokuMENT). Er geht davon aus, dass einige Ideen von XML endnutzertauglich sind. Mit der funktionalen Programmiersprache OCaml kann man die Axiome relativ direkt nachempfinden. o++ops ist einen tabellenorientierte Programmiersprache, mit der man nicht nur strukturierte Tabellen sondern auch strukturierte Dokumente anfragen und analysieren kann. Durch die neue "tabellenorientierte" Sicht auf die Programmierung verzichtet o++ops sogar auf Schleifen und rekursive Funktionen, auf die aus unserer Sicht keine andere Programmiersprache verzichten kann. Durch Schleifen werden Programme leicht unübersichtlich. Rekursive Funktionen stellen eine relativ hohe Einstiegsbarriere für den Endnutzer dar. Daher sollte man aus unserer Sicht auf beide Prinzipien in Endnutzersprachen verzichten. Auf dieser Ebene muß Programmiermethodik an erster Stelle stehen. o++o verwendet Wiederholgruppen (Hierarchien) und verfügt über mächtige, jedoch einfach anwendbare Operatoren für Auswahl, Restrukturierung, Berechnung, Erweiterung und Kombination von Tabellen und Dokumenten. Die Bedeutung der mathematischen Fundierung der Operationen (des Datentyps Tabment) kann man kaum unterschätzen. Ein System, das in der modernsten Programmiersprache realisiert wurde, kann schnell wieder vom Markt verschwinden, sobald die Mehrheit eine andere Sprache favorisiert. Mathematische Operationen wie die Addition und Multiplikation überlebten die Römischen Zahlen, den Abakus, den Taschenrechner und viele andere Weisen sie auszuführen. In gleicher Weise denken wir, dass beispielsweise die Ideen der Strichlistenoperation unsere jetzigen Implementationen für Windows, Linux und das Handy überleben werden. Wenn man das Wesentliche eines Systems Schülern an einer Tafel vermitteln kann, hat man viel erreicht.

6 Ziele von o++o

Inhalt
Die Jünger von Merkel nehmen ihre These sehr ernst: Jeder soll neben Lesen, Schreiben und Rechnen auch Programmieren lernen. Dieses Ziel kann nur erreicht werden, wenn die Programmiersprache so schnell und leicht wie möglich zu erlernen und zu verstehen ist. In sehr vielen Fällen sind alte Ideen und Konzepte die einfacheren. Beispielsweise wurde die Strichliste bereits vor 30'000 Jahren mit Hilfe eines Kerbstocks dauerhaft lesbar. Die Schrift entstand dagegen erst vor 5'000 Jahren. Mit der gib-Anweisung versucht o++o diese mindestens 100'000 Jahre alten Vorstellungen zu verallgemeinern. Die dahinterstehende Strichlistenoperation beherrschen heutige Vorschulkinder bereits nach 5 minütiger Erklärung. Sie können beispielsweise nicht nur vorbeiziehende Tiere insgesamt zählen. Sie sind problemlos auch in der Lage mit Papier und Stift nach Tierarten differenziert zu zählen, indem sie hinter jedes Symbol für Reh, Sau oder Eber die entsprechenden Striche setzen. In ähnlicher Weise wird sicher jeder bestätigen, dass der mehr als 2'000 Jahre alte Algorithmus von Archimedes für die Berechnung von Flächen unter Kurven wesentlich leichter zu erfassen ist als die Flächenberechnungen, die die sehr anspruchsvollen Theorien der Genies Leibniz und Newton voraussetzen. Da heute jeder Schüler einer höheren Klasse über leistungsfähige Rechentechnik in Form eines Handys oder eines Laptops verfügt, kann man den Algorithmus von Archimedes nicht nur theoretisch an der Tafel durchexerzieren, sondern jeder Schüler kann auch problemlos die 10'000 oder 100'000 kleinen Rechteckflächen addieren. Das ist ein Vorteil unserer heutigen Schüler gegenüber Archimedes, der aber bislang in der Breite nicht genutzt wird. Hinter jedem Klick sollte ein lesbares Programm stehen. Das ist eine scheinbar unerfüllbare Forderung, die wir in unserem Leben nicht vollständig umsetzen können. Mit o++o könnten wir uns aber einen großen Schritt in diese Richtung bewegen. Falls der Endnutzer dann ein Problem mit einem Computerresultat hat, kann er das Programm solange selbst modifizieren bis er genau das von ihm gewünschte Ergebnis erzielt hat. o++o soll das Endnutzertool für die Verarbeitung von Daten werden. D.h., der Nutzer soll mit einheitlichen Mitteln beliebige Datenbanken, Dateien, Retrievalsysteme und die Wikipedia anfragen und analysieren können.

7 Eigenschaften von o++o (Selbsteinschätzung)

Inhalt

7.1 Bezeichnungen in o++o

Wie alle Programmiersprachen benutzt o++o nur Operationszeichen, die auf jeder Rechnertastatur zur Verfügung stehen. Als Notation für die Quadratwurzel wird daher die häufig benutzte Abkürzung sqrt (square root) verwendet. Auch auf die Betragsstriche mußte verzichtet werden, da auch ihre Schreibweise das Gesamtkonzept zerstören würde. Anstelle von || wird der ebenfalls bekannte Operationsname abs benutzt. Da o++o anders als die Taschenrechnern vielfältige Operationen zur Massendatenverarbeitung anbietet, findet man auch statistische Funktionen für die Summe, das Produkt, den Durchschnitt, die Anzahl usw.. Diese Funktionen besitzen nach o++o-Philosophie trotzdem nur einen Inputwert, da ein Tabment auch Massendaten repräsentieren kann. Der Durchschnitt mehrerer Noten wird in der Form

2 3 1 4 2 2 ++:

ausgedrückt. Die vorangehenden 6 Noten werden nämlich als eine Liste (von Zahlen) betrachtet. Deutlicher wird das in der äquivalenten Notation

[2 3 1 4 2 2] ++:

. Die erste Schreibweise, könnte auch vom methodischen Standpunkt Probleme bereiten, sie könnte sich in der Praxis dennoch durchsetzen, da die eckigen Klammern auf manchen Tastaturen unbequem zu tippen sind. Ferner hoffen wir, dass die Bezeichnungen ++ (für Summe) ** (für Produkt) .. (Mehrfachanwendung eines bekannten Operationssymbols) nicht so schnell vergessen werden wie die alten englischen oder griechischen Bezeichnungen (Σ bzw. Π).

7.2 Zur Syntax und Semantik von o++o

Inhalt
o++o rechnet konsequent von links nach rechts. Das ist unserer Meinung nach eine wichtige Voraussetzung dafür, dass die Programme leicht lesbar sind.

7.3 Operationen von o++o

Inhalt
Ein Tabment kann in Caml light - dem Vorgänger von OCaml- mit sehr wenigen Zeilen abstrakt repräsentiert werden. Alle Operationen von o++o werden auf Tabmente, die im Arbeitsspeicher residieren, angewandt.
Für die Außendarstellung von Tabmenten existieren viele Repräsentationen. Strukturierte Tabellen können übersichtlich und kompakt in Form von tab, tabh, hsq, hsqh, xml, csv und json Ansichten bzw. Dateien dargestellt werden. Die Möglichkeiten der jetzigen Standardrepräsentationen sind vielfältig. Sie sind aber bei weitem noch nicht voll ausgeschöpft. o++o verfügt über leistungsfähige Operationen für die Auswahl (Selektion), Restrukturierung, Berechnung und das Verschmelzen von strukturierten Tabellen, die sogar auf Dokumente anwendbar sind. Das kartesisches Produkt (Kreuzprodukt) genau wie die bekannten mengentheoretischen Operationen Durchschnitt, Vereinigung, Differenz spielen in o++o eine untergeordnete Rolle. Beim Kreuzprodukt wird stets jedes Element der einen Tabelle mit jedem Element der anderen Tabelle verschmolzen. Dadurch entstehen auch im Kopf des Nutzer sehr große Zwischentabellen. Die Notwendigkeit hierfür ist unnatürlich und kaum einzusehen. Joinbedingungen sind fast immer erforderlich. Anwenderfunktionalität kann in o++o-Programme integriert werden, indem entsprechende neue Funktionen in OCaml implementiert werde. Dadurch verlieren Einbettungen von o++o in herkömmliche Programmiersprachen wie JAVA, C,... an Bedeutung. Für o++o steht Programmiermethodik und Pragmatik im Vordergrund. Es ist wichtiger, dass o++o-Programme elegant und lesbar sind, als die im Hintergrund arbeitenden OCaml-Programme. Diese kann man immer noch verbessern und effizienter machen, ohne dass das Auswirkungen auf den o++o-Nutzer hat. Wir schätzen ein, dass viele Grundoperationen von o++o, wie einfache Selektionen, die Realisierung einer Strichliste, ... leichter zu erlernen und zu verstehen sind als beispielsweise der in der Schule vermittelte Algorithmus der Dezimalzahlmultiplikation. o++o wurde in OCaml (INRIA Paris) implementiert und mit einer deutschen Sprache spezifiziert. Damit ist o++o ein europäisches Produkt

8 Ein Blick auf das Relationale Datenmodell durch die o++o-Brille

Inhalt
Mit der Vielzahl der Softwareprodukte, die auf SQL und damit auf dem Relationalen Datenmodell basieren, haben Firmen wie ORALE, IBM, Microsoft, Robotron, Siemens, ... viele hundert Milliarden Dollar bzw. Euro, .. verdient. Das Modell hat der britische Mathematiker E. F. Codd entwickelt. Im Wesentlichen beschreiben seine Papiere mathematisch saubere Operationen für Anfragen wie die Selektion, Projektion, das Kartesisches Produkt (Join) und das Umbezeichnen von Spaltennamen (rename) zum einen in Form der Relationenalgebra und zum anderen in Form des Relationenkalküls. Der Relationenkalkülansatz konnte sich trotz anfänglicher Erfolge nicht etablieren (INGRES). Daneben hat Codd für seine Relationen zunächst 3 Normalformen beschrieben. Die dritte Normalform galt als die beste. Das wurde häufig mißverstanden. Man sollte eigentlich davon ausgehen, dass Codd dieser Normalform nur für die Speicherung von Relationen auf der Platte Bedeutung beigemessen hat. Wenn man das auch für die Ergebnisse von Anfragen fordern würde, würde man die Bedeutung des Relationalen Datenmodell zusätzlich schwächen. Eine Relation ist eine Menge, die man sich als Tabelle mit n-Spalten vorstellen kann, in der die Zeilen Tupel genannt werden und wo in jedem Kreuzungspunkt einer Zeile mit einer Spalte genau ein elementarer Wert (insbesondere keine Relation) stehen darf. Der Hauptvorteil des Relationalen Modells besteht in der sauberen Definition der Objekte und Operationen und der damit verbundenen Klarheit für zu schaffende Systeme und Schnittstellen. Der Nutzer braucht nichts von der Unmenge der Implementationsdetails zu wissen. Allein das Verständnis der algebraischen Operationen sollte den Endnutzer befähigen beliebige Informationswünsche selbst umzusetzen. Diese ursprüngliche Zielstellung, die in den ersten Papieren gesetzt wurden, haben sich nicht erfüllt. Obwohl SQL auch heute noch der Datenbankstandard ist, gibt es nur wenige Millionen Nutzer. Der überwiegende Teil sind Informatiker. Da diese neben Kenntnissen über SQL auch über vielfältige Kenntnisse von Programmiersprachen wie z.B. JAVA verfügen, können sie alle ihre Datenbankprobleme selbst lösen. Sie interessieren sich scheinbar gar nicht für die offensichtlichen großen Schwachstellen des Relationalen Datenmodells: Textdaten lassen sich praktisch nicht behandeln. Da Relationen als Mengen definiert sind, war Selektion nach der Position ursprünlich nicht vorgesehen. SQL kennt trotzdem beispielsweise eine top-Funktion, mit der man die ersten 10 Zeilen einer Tabelle selektieren kann. Sie kann aber nur an einer Stelle aber nicht im Rahmen der Selektionsklausel WHERE angewandt werden. Wenn beispielsweise mitarbeiter.tab eine flache relationale Tabelle mit den fünf Spalten NAME,SEX,ABTEILUNG,ORT,GEHALT ist, kann man die einfache Anfrage "Gesucht sind von den 10 Topverdienern aus Magdeburg nur die Frauen" in folgender Weise in o++o ausdrücken:
aus mitarbeiter.tab
sel ORT=Magdeburg      # Selektion aller Magdeburger
gib GEHALT,NAME,SEX m  # Sortierung nach GEHALT
sel GEHALT pos < 11    # Selektion der ersten 10
sel SEX=weiblich       # Selektion der Damen
SQL hat mit dieser und mit vielen anderen vom o++o-Standpunkt einfachen Anfragen große Probleme. Eine Repräsentation von Informationen in strukturierten Tabellen ist "natürlicher" als eine Repräsentation in flachen Relationen. Das erkennt man auch daran, dass bereits vor weit mehr als 60 Jahren in Magdeburg strukturierte Daten auf Magnetbändern verarbeitet wurden und die ersten Datenbankanwendungen (DBSR) auch keine erste Normalform-Relationen voraussetzten. Das erste Datenbankbetriebssystem von IBM IMS basierte ebenfalls auf strukturierten Tabellen. Allerdings lag allen drei Computersystemen kein mathematischen Datenmodell zugrunde. Das sehr alte hierarschische System von IBM wurde nach der Wende auch in Magdeburger Banken eingeführt. Da an DDR-Universitäten dieser hierarchische Ansatz nie vermittel wurde und in Westdeutschland auch kein Absolvent mehr Wissen über IMS hatte, mussten die westdeutschen Rentner diese Aufbau-Ost Aufgaben umsetzen. Läuft IMS heute noch in Magdeburg? In jungen Ansätzen wird der Boden des Relationalen Datenmodells für sehr grosse Anwendungen (bigdata) häufig aus Effizienzgründen völlig verlassen. Mir persönlich sind jedoch keine dahinter liegenden mathematischen Fundierungen bekannt. o++o Bedingungen im Gegensatz zu SQL müssen nicht unbedingt durch und (& SQL: and) oder oder (or) verknüpft werden. Sie können einfach nacheinander angewandt werden. Zwei aufeinanderfolgende Bedingungen sind nicht immer gleichbedeutend mit ihrer Konjunktion (und-Verbindung). Daraus folgt auch eine erhöhte Ausdruckskraft von einfachen Bedingungen im Rahmen von o++o. Die Repräsentation eines Klassenbuchs einer Schule in dritter Normalform würde nie ein Lehrer oder Schüler akzeptieren. Allein für die Daten der 4 Spalten NAME,ADRESSE,FACH,NOTE müßte man zwei Tabellen anlegen:
NAME,ADRESSE
NAME,FACH,NOTE
Da die zweite Tabelle eine Relation sein müßte, könnte ein Schüler in einem Fach nicht zweimal die gleiche Note bekommen. Also müßte man irgend eine Zusatzspalte z.B. ZEIT einführen, die diese beiden Einträge unterscheidbar macht. Dann müssen aber die NAME, FACH und NOTE-Werte ständig wiederholt gespeichert werden. Einfache Anfragen nach der letzten Note eines Schülers in bestimmten Fächern sind trotzdem umständlich zu formulieren,... . Mit o++o könnte die zweite Tabelle eine Listenwiederholgruppe enthalten: NAME,FACH,NOTEl m Damit kann man jede Note bequem speichern, aber die Namen würden sich immer noch für jedes Fach wiederholen. Das Problem wird mit NAME,(FACH,NOTEl m) m gelöst. Will man noch zwischen Klausurnoten und anderen Noten unterscheiden hat das Relationale Datenmodell noch weit mehr Probleme. In o++o könnte man eine weitere Wiederholgruppe einfügen: NAME,(FACH,KLAUSURl,NOTEl m)m Die Hersteller Relationaler Datenbanksysteme haben den Boden des armen Relationalen Datenmodells schon früh verlassen müssen. Multimengen wurden benötigt, damit eine Zeile im Anfrageergebnis mehrfach erscheinen kann. Arrays (aber nur mit einfachen Werten) wurden in Zellen von Relationen zugelassen. Damit wird sogar die überall gelehrte Forderung nach erster Normalform umgangen. Dadurch waren weniger teure Joins erforderlich, womit die Performance gesteigert werden konnte. Diese Erweiterung gilt aber nicht für die interne Verarbeitung der Relationen, da die ganze Optimierung nur mit einfachen Relationen arbeiten kann. Die Array-Wiederholgruppen würden Anfrageergebnisse übersichtlicher aussehen lassen. Sind dort aber nicht erlaubt. o++o kennt Listen aber keine Arrays, da dem Architekten von o++o nicht klar ist, ob ein Array algebraisch spezifiziert werden kann? Ist ein Array überhaupt Objekt der Mathematik? GROUPBY unterteilt eine Relation in mehrere eine Teilrelationen. Damit erhält man beispielsweise eine Tabelle des Typs , bei der eine innere Menge alle Mitarbeiter einer Abteilung enthält. Diese Struktur wird klarer und einfacher zu handhaben, wenn man in SQL stattdessen das Schema
ABTEILUNG,(NAME,ORT m) m wählen könnte. Nach dem GROUPBY ist nur eine spezielle Selektion (HAVING) erlaubt, die nur vollständige Gruppen entfernen kann. Relationale Datenbanken kennen beispielsweise den elementaren Typ INT, aber der einzeilige und einspaltige Wert
GEHALT
40'000

ist keine Relation.
GEHALTm
40'000

ist dagegen Objekt des Modells. Betrachtet man daher eine SQL Bedingung GEHALT = 40000 und nimmt an, dass die Zahl 40000 Ergebnis einer Unteranfrage ist - sie ist damit eine Relation - , so steht auf auf der linken Seite der Gleichung eine Zahl und auf der rechten eine Relation. Was soll das dann bedeuten?