[C++] Programmstruktur verbergen

G

Green Mamba

Gast
Hi,

ich hab hier eine Library, die weiter gegeben werden soll. In dieser befinden sich etliche Klassen und Schnittstellen. Normalerweise übergibt man nun die Library zusammen mit den nötigen Headerfiles, was ich aber nicht will.
Gibt es eine Möglichkeit die Programmstruktur (Vererbung, Klassenzugehörigkeit usw.) innerhalb dieser Lib zu verbergen, so dass man dem Kunden bloß die Lib zusammen mit einem Header übergibt, welches die wichtigen Funktionen und Attribute nach außen zeigt? Also innerhalb dieses Headerfiles sollten keine weiteren includes zu finden sein, die Details der Programmstruktur zeigt.
Ich weiß, eine außergewöhnliche Frage, und meiner Meinung nach unlösbar, aber ich setze die ganze Hoffnung in euch. :D

Viele Grüße,
Green Mamba
 
Also ich verstehe dein Problem nicht. In die Headerdatei kommt doch nur die Definiton der Classes mit den Methoden und nix weiter. In der Lib steht dann die Umsetzung. Der User bekommt von der Implementierung nix mit. Aber die Headerdatei braucht er doch um die Signatur der Funktiinen zu kennen? Was willst du da jetzt verstecken?

André
 
Hast Du keine Doku in der die Schnittstellen Beschrieben sind, bzw. die Beschreibung der Funktionen, sowie deren Argumente ? :cool_alt:

Edit: .. und deren Rückgabewert
 
MagicAndre1981 schrieb:
Aber die Headerdatei braucht er doch um die Signatur der Funktiinen zu kennen?
Ja genau, und dort steht ja auch drin welche Klasse von welcher erbt, und welche Attribute sie hat (auch die privaten). ;)
Wie das gehen soll weiß ich ja auch nicht. :D Es gibt so viele Tricks und Kniffe bei C und C++, könnte ja sein dass es doch irgendwie möglich ist.

@kreadon
Ja klar hab ich die, bzw. erstell ich die noch. Aber wie soll er dann die Lib benutzen können ohne die Headerfiles? :confused_alt:
Ich mein der Entwickler muss diese Lib ja in sein eigenes Programm einbauen können.
 
Mhh... bitte schlag mich nicht wens falsch ist:

In der Libary (dll) sind alle Deine Methoden!?

Also bindet er diese dll in sein Programm ein.

Was er jetzt braucht ist eine Auflistung der Methoden sowie der Argumente, die sich in dieser Dll "verstecken".

Wenn Du ihm nur die Header-Dateien schickst, ist das nicht sowas wie eine provisorische Doku :confused_alt:

Edit:

Geht echt nur mit den Header-Dateien.
 
Zuletzt bearbeitet:
Na na na!
Wir wollen es mal nicht übertreiben mit dem "Information hiding" :).

Ich sehe da keine Möglichkeit. No chance!

Fakt ist, dass in den Headerdateien steht wie deine Klassen aussehen (Methoden und Attribute).
Und das ist es, was den Nutzer der Library interessiert, interessieren muss!

PS:
Die Doku ist hoffentlich mit Doxygen erstellt (Ich liebe diese super formatierte und übersichtliche HTML-Zeugs :))?
 
Ja ganz genau, aber was ihn eigentlich interessiert ist die Schnittstelle nach außen, und keine privaten Attribute, oder Vererbungs-Hirarchien. ;)
Ich hab ja oben auch schon geschrieben dass ich nicht glaube dass es geht, aber trotzdem hoffe dass jemand den ultimativen Trick kennt. Es geht hier um verdammt sensibles Know-How und für meine Begriffe schweine viel Geld, daher möchten wir natürlich so viel als möglich verbergen. :evillol:
 
Natürlich kannst Du das (bedingt) verbergen. Schlagwort: Handle/Body-Idiom bzw. Pimpl-Idiom. Das kann allerdings ein kleineres oder größeres Redesign deiner Klassen bedeuten. Außerdem solltest Du Dir anschauen, wie Du Abhängigkeiten aus Headern entfernst (ein Ansatz, den die beiden Idiome auch verfolgen).

Du solltest auch sicherstellen, welche Symbole aus deiner Bibliothek exportiert werden und entsprechend minimieren. Damit sollte man bereits auf der Ebene von Übersetzunseinheiten (sprich: CPP-Files) anfangen (Stichwort: anonyme Namespaces).

Wenn man von deinen Klassen oder so ableiten soll, müssen selbstverständlich alle Header bis zur Basisklasse verfügbar sein. Falls Du mit Templates arbeitest die Du für alle verfügbar machen willst - die müssen absolut vollständig weitergegeben werden.

Werde Dir bei Gelegenheit mal ein paar Links nachreichen ;) Die hab ich jetzt gerade nicht zur Hand.

Gruß!



Edit:
Nr1: http://www.gotw.ca/gotw/024.htm
Nr2: http://www.gotw.ca/gotw/028.htm

Falls Du "Exceptional C++" von Herb Sutter hast, kannst Du es auch dort lesen. Fall Du es nicht hast - unbedingt beschaffen und durcharbeiten. Pflichtlektüre ;)
Falls Du "Design Patterns" bzw. "Entwurfsmuster" von Gamma, Vlissides, ... hast, kannst Du dort auch das Handle/Body-Idiom suchen. Das Brückenmuster kann Dir auch helfen, die öffentliche Schnittstelle von deiner Implementation zu entkoppeln.
 
Zuletzt bearbeitet:
Hehe, hatte ich mir doch gedacht dass noch was brauchbares kommt. :)
Vielen lieben dank erst mal an dieser Stelle, ich werde dann bei Unklarheiten nochmal rumnerven. :D
 
WOW
*bookmark*

sry für sinnlospost ;)
 
Zurück
Oben