Information Hiding ( Private / Public ) mit OO
Übersicht

DreamoraBetreff: Information Hiding ( Private / Public ) mit OO |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
In Modulen ist es häufig der Fall, dass man Nutzer des Modules gewisse Dinge nicht sehen lassen will. Sei es weil er dadurch Rückschlüsse auf den Code ziehen könnte oder weil er dadurch auf Dinge zugreifen könnte, die im Extremfall das Module nicht mehr so funktionieren lassen wie es soll.
Deswegen gibts in Blitz Max den Mechanismus des Information Hidings, das heisst: Man versteckt beim compilieren des Modules Informationen, die späteren Nutzern, welche den Sourcecode nicht haben, vorenthalten bleiben soll. Dazu bieten sich in Blitz Max die Keywords public und private an. public ist dabei der Standard. Prinzipiell wird alles was wir an Types, const, global und Funktionen in ein Modul packen von aussen sichtbar sein. Wollen wir dies verhindern, so wird private benötigt. Alles was private folgt und nicht durch ein public wieder geändert wird, ist ausserhalb nicht sichtbar und kann ausserhalb auch nicht verwendet werden. Für Funktionen, globals und const stellt dabei private kein problem dar, da wir einfach in public funktionen schreiben können, die darauf zugreifen. Trickreich wirds jedoch, wenn wir die implementationen von Types verschwinden lassen wollen. Deshalb habe ( durch unbewusste Ideen anderer unterstützt ) unzählige Stunden damit verbracht, dahinter zu kommen, wie dieser Mechanismus in Blitz Max funktioniert, denn er wird dringend benötigt. Den Aufbau eines Sources mit Information Hiding seht ihr nachfolgend: Modulsource: Code: [AUSKLAPPEN] Strict Module datastructure.stack Private ' Stack Implementation Type TStack_Element Field _element:Object Field _connected:TStack_Element Function create:TStack_Element( _elem:Object ) ' create a TStack_Element Local temp:TStack_Element = New TStack_Element temp._element = _elem Return temp End Function Method Delete() _element = Null _connected = Null End Method End Type Type TStack_Imp Extends TStack ' Implementation of stack Field _top:TStack_Element Field _count:Int Function create:TStack_Imp() Local temp:TStack_Imp = New TStack_Imp Return temp End Function Method push( _elem:Object ) Local temp:TStack_Element temp = TStack_Element.create( _elem ) temp._connected = _top _top = temp _count :+ 1 End Method Method pop:Object () Local ret:Object If _count > 0 _count :- 1 ret = _top._element _top = _top._connected EndIf Return ret End Method Method top:Object () Return _top._element End Method Method count:Int () Return _count End Method Method clear() While count() > 0 pop() Wend End Method End Type Public ' Module Export Type TStack Function create:TStack() Local temp:TStack = TStack_Imp.create() Return TStack( temp ) End Function Method push( _elem:Object ) Abstract Method pop:Object () Abstract Method top:Object () Abstract Method count:Int () Abstract Method clear() Abstract End Type Testsamplesource: Code: [AUSKLAPPEN] Strict Local stack:TStack = TStack.create() Local i:Int For i = 1 To 2000 stack.push( String("Test "+i) ) Next Print "Elemente im Stack: " + stack.count() Print "Erstes Element: " + String( stack.pop() ) flushmem Print "Benötigter Speicher: " + MemAlloced() stack.clear FlushMem Print "Benötigter Speicher: " + MemAlloced() Print "Anzahl Elemente: " + stack.count() Delay 10000 End |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group