#include"buch_base.idl" module buch { struct Halbsatz { Kontonr konto; Betrag betrag; sh_t sh; }; typedef sequenceHalbsatz_seq; struct date { unsigned short tag; unsigned short monat; unsigned short jahr; }; valuetype transaction { public Tid tid; public string text; public Halbsatz_seq hs; factory create(in Tid tid,in string text,in Halbsatz_seq hs); }; valuetype faelligkeit : truncatable transaction { public date faellig; factory create(in Tid tid,in string text,in Halbsatz_seq hs, in date faellig); }; interface haltung { Tid buche(in transaction t) raises(notexistent, sollungleichhaben, databaseerr); }; };
Eine Transaktion entspricht also genau einem Beleg. Verschiedene Arten von
Belegen sind folglich Untertypen dieser transaktion.
Eine Transaktion enthält den Buchungstext text und eine Sequenz von Buchungshalbsätzen aus Konto, ob soll/haben und den Betrag.
Die Transaktionstid tid wird beim Buchen ignoriert. Diese ist für Abfragen vorgesehen, z.B. wenn man alle Transaktionen (mit Gegenkonten) eines Kontos
aufgelistet werden sollten.
Die faelligkeit ist eine Transaktion mit einem Fälligkeitsdatum. In der realen Anwendung wird man hier noch Skonto und dergleichen haben wollen.
Dabei könnte die abstract-Typen ausprobiert werden, die sowohl zu Interfaces wie auch zu Values abgeleitet werden können.
Dies verallgemeinert führt zum Object-Web, wo jedes jedes Unternehmen seine Dienste durch solche Schnittstellen anbietet.
Durch den Cos-Traderdienst wäre dann ein Markt modelliert ....