home *** CD-ROM | disk | FTP | other *** search
- Memo_fun.TXT
-
- zeigt eine komplette
- Anwendung (und damit auch einige
- Schwächen) von Simula-67. Es handelt
- sich dabei um die Implementierung
- sogenannter "Memofunktionen". Eine
- Memofunktion arbeitet wie eine
- gewöhnliche, mathematische Funktion,
- nur mit einem gravierenden
- Unterschied: Sie merkt sich die
- letzten berechneten Funktionswerte.
- Wenn also der Wert der Funktion an
- einer Stelle "x" gefragt wird, der
- davor schon einmal berechnet worden
- ist, so schlägt eine Memofunktion
- einfach in ihrer Tabelle nach. Das
- geht im allgemeinen viel schneller,
- als den Funktionswert neu zu
- berechnen.
-
- Memofunktionen werden mit Hilfe einer Klasse
- "Memofun" implementiert. Im vorliegenden
- Beispiel erhält diese Klasse einen einzigen
- Parameter, "N", der die Anzahl der zu
- merkenden Funktionswerte bestimmt.
- Idealerweise würde man auch die Funktion
- selbst als Parameter übergehen. Leider ist
- das nicht möglich. Funktionen dürfen in
- Simula zwar Parameter einer Prozedur, nicht
- aber einer Klasse sein (siehe
- Informationskasten). Diese gravierende
- Einschränkung, die Sie beispielsweise in C++
- oder Smalltalk nicht finden, ist eine der
- größten Schwächen von Simula-67.
-
- Zum Test der Klasse "Memofun" haben
- wir ein kleines Hauptprogramm
- geschrieben (Zeile 77 bis
- 87). Hier werden dreimal nacheinander
- die Quadrate von 1 bis 5 berechnet.
- Dieses Beispiel zeigt einige Vorzüge,
- aber auch Fallstricke, die das
- Arbeiten mit Simula-67 birgt. Auch die
- komfortabelste Klassendefinition
- erfordert eine hohe Disziplin seitens
- des Programmierers.
- "Memofun" funktioniert beispielsweise nur dann
- korrekt, wenn die Calc-Methode eines
- Objektes dieser Klasse immer mit derselben
- Prozedur als aktuellem Parameter aufgerufen
- wird. Auch die Definition der Variablen
- einer Klasse ist eine potentielle
- Gefahrenquelle: Da es nicht, wie in C++,
- eine Trennung in Private- und Public-Teil
- gibt, kann jeder Benutzer der Klasse jede
- Variable verändern und damit beliebigen
- Schaden anrichten.
-