Home

o++o bzw. ottoPS (ottoProgrammier Sprache) ist im Wesentlichen eine einfache aber leistungsfähige Anfragesprache, ermöglicht aber auch Berechnungen in einem weiten Anwendungsbereich.

o++oPS verwendet Wiederholgruppen (Hierarchien) und verfügt über mächtige, jedoch einfach anwendbare Operatoren für Auswahl, Restrukturierung, Berechnung und Kombination von Tabellen und Dokumenten.

Eigenschaften von o++oPS

 
  • kurze Programme
  • einfache Syntax; Operationsnamen kann man sich leicht merken.
  • bereits Kochrezeptprogramme (sequentielle Abarbeitung) sind sehr ausdrucksstark
  • Bedingungen müssen nicht verknüpft werden; sie können nacheinander angewandt werden; zwei aufeinanderfolgende Bedingungen sind nicht immer gleichbedeutend mit ihrer Konjunktion (erhöhte Ausdruckskraft)
  • leistungsfähige Operationen für Auswahl, Restrukturierung, Berechnung, Kombination und Lösung von Stücklistenproblemen, ...
  • kompakte (hsq) und einfache (tab) Darstellung von Tabmenten (Tabellen und Dokumente)
  • Aggregationen ohne GROUPBY; GROUPBY kann bei Datenströmen nicht angewandt werden.
  • kein kartesisches Produkt (Kreuzprodukt); 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. Joinbedingungen sind stets erforderlich.
  • Anwenderfunktionalität kann in o++o-Programme integriert werden; dadurch verlieren Einbettungen von o++o in herkömmliche Programmiersprachen wie JAVA, C,... an Bedeutung.
  • bei o++o steht Programmiermethodik über Computereffizienz; letztere wird durch verbesserte Hardware weitgehend garantiert.
  • Die Grundoperationen sind leichter zu verstehen als der Algorithmus der Dezimalzahlmultiplikation.
  • Implementierung in OCaml (INRIA Paris); damit ist o++o ein rein europäisches Produkt.
  • Suchbäume konnten in Tabmente integriert werden; damit ergibt eine wesentlich bessere Effizienz für viele Problemklassen.

Ziele von o++oPS

 
  • hinter jedem Klick sollte ein lesbares Programm stehen; falls der Endnutzer dann ein Problem mit dem Computerresultat hat, kann er das Programm solange selbst modifizieren bis er das gewünschte Ergebnis erzielt hat.
  • erweiterte Anfragen an die Wikipedia; zur Zeit können viele Informationen aus der Wikipedia nur mit großem manuellen Aufwand extrahiert werden.
  • o++o soll ein universelles Interface für Tabellen und Dokumente werden; d.h. der Nutzer soll mit einheitlichen Mitteln beliebige Datenbanken, Dateien, Retrievalsysteme und das Internet abfragen können.
  Das englischsprachige Buch enthält zahlreiche Beispiele, um einen schnellen Einstieg in die Sprache o++oPS zu ermöglichen.
Es enthält Kapitel zum Vergleich mit SQL und anderen Sprachen und zur Spezifikation von Tabmenten (Tabellen + Dokumenten), sowie zur Optimierung von Anfragen und Speicherstrukturen.

Struktur trifft Tabellen und Dokumente

       studenten.tab: STID, NAME, ORT?, STIP, FAK, (KURS, NOTE l), (PROJ, STUNDEN m)m 

       m: Menge ; l: Liste; ein Student enthält 2 Wiederholgruppen (Examen und Projekte)

         sql.htm

Endnutzer trifft Programmierung

Anfrage 1: Ausgabe aller Studenten mit den Kursen Datenbanken und Algebra.

aus studenten.tab
avec [Algebra Datenbanken] in KURSl
# aus: SQL-from
# avec: SQL-where
   
 

        query.htm

Anfrage 2: Gib für jeden Studenten, der Datenbanken absolviert hat, den Namen und alle weiteren Kurse mit Noten.

  aus studenten.tab
avec STID! KURS=Datenbanken
sans KURS! KURS=Datenbanken
gib NAME,(KURS,NOTE b)m

# selektiert Studenten
# selektiert Examen; sans: ohne
# b:bag (Multimenge)
   

       query.htm

Anfrage 3: Gib für Kurse mit Eins, die Anzahl der Einsen und alle zugehörigen Studenten sowie die Gesamtzahl der Studenten mit Eins.

  aus studenten.tab
avec NOTE=1
gib ANZ,(KURS,ANZ,(NAME,STID m)m)

    ANZ:=cnt STID

# selektiert Studenten und Kurse

# zählt Studenten
   

       query.htm

Anfrage 4: Ausgabe aller Studenten, deren Daten das Wort "Otto" enthält

  aus studenten.tab
avec Otto
     

Berechnung 1: Berechne den Bruttowert mehrerer Nettopreise

  77 79 567 432
*1.19
     

Berechnung 2: 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
TOTALSUM:=TOTALl ++



   

Berechnung 3: Wertentwicklung eines Betrages von 100 Euro innerhalb eines Zeitraumes von 10 Jahren bei einer Rendite von 1 % bzw. 9 %

  2016 bis 2026 tag1 JAHR
rec BETRAG1:= first 100.
              next  BETRAG1 pred*1.01 at JAHR
rec BETRAG9:= first 100.
              next  BETRAG9 pred *1.09 at BETRAG1
rnd 2
# erzeugt 11 Zahlen
# rec: rekursive Erweiterung



# rundet auf 2 Stellen nach dem Punkt