Konzept Objekt-Instanzierung - Interfaces
Verfasst: 20. Dezember 2010 08:08
Hallo Zusammen,
Unsere Firma startet mit einem umfangreichen Projekt, in welchem wir eine ca. 15 jährige GUI-Applikation basierend auf MFC mit Qt durch Refactoring ersetzen wollen. COM und die COM-Aggregation wird ebenfalls intensiv angewendet.
Derzeit haben wir noch kein Knowhow im Umgang mit Qt. Wir versuchen derzeit, uns die Grundlagen zum Umbau zu erarbeiten. Ein Thema des Umbaus ist die Klasseninstanzierung sowie die COM-Aggregation zu ersetzen. Ich habe mir einmal des Source-Code zum Qt-Creator angeschaut und habe dazu einige Feststellungen gemacht und es ergaben sich einige Fragen, auf die ich (noch9 keine Antworten habe.
Im Qt-Creator:
a) Warum hat jede Klasse immer genau (nur) 1 Basisklasse ?
b) die Objekt-Instanzierung basiert im Wesentlichen darauf, dass die Klasse, die ein Objekt erzeugt immer genau die Klasse kennt und weiss, bei welcher Klasse sie diese Instanz bekommt. Eine Instanz wird vom Objekt, welches das Objekt erzeugt auch wieder gelöscht. Bevor eine Instanz gelöscht werden kann muss damit klar bekannt sein, dass dieses Objekt und deren Daten und Slots von aussen nicht mehr benutz werden.
c) Qt bedient sich einem Aggregations-Objekt um Fähigkeiten ähnlich der COM-Aggregation zu erweitern. Diese Objekte und die Lebensdauer wird aber immer vom äusseren Objekt bestimmt.
Meine Fragen:
1.) zu a) bis c). gibt es Gründe, warum dies so ist ?
2.) bei der COM-Aggregation können Clients nur durch Kenntniss eines Interfaces Objekt erhalten, die dann im weiteren Verlauf durch Smartpointer gehalten werden. Die Lebensdauer der inneren Objekte ist von den äusseren Objekten unabhängig, d.h. das äussere Objekt stirbt nicht, wenn es darauf keine Referenz mehr gibt, solange es noch Referenzen auf die inneren Objekte gibt.
Unsere Applikation hält also alle (inneren und äusseren) Objekte duch Smaprtpoineter und für uns stellt sich nun die Frage, mit welchem Konzept man dies COM-Aggregation auflösen kann, wobei es zu berücksichtigen gilt, dass wir durch Refactoring zum Ziel gelangen müsen.
3.) Gibt es eine Empfehlung, wie man die Objektinstanzierung unter Qt anwenden soll.
4.) Warum wendet z.B. der Qt-Creator die Interface-Technik relativ wenig an ?
Besten Dank
Gruss
Peter
Unsere Firma startet mit einem umfangreichen Projekt, in welchem wir eine ca. 15 jährige GUI-Applikation basierend auf MFC mit Qt durch Refactoring ersetzen wollen. COM und die COM-Aggregation wird ebenfalls intensiv angewendet.
Derzeit haben wir noch kein Knowhow im Umgang mit Qt. Wir versuchen derzeit, uns die Grundlagen zum Umbau zu erarbeiten. Ein Thema des Umbaus ist die Klasseninstanzierung sowie die COM-Aggregation zu ersetzen. Ich habe mir einmal des Source-Code zum Qt-Creator angeschaut und habe dazu einige Feststellungen gemacht und es ergaben sich einige Fragen, auf die ich (noch9 keine Antworten habe.
Im Qt-Creator:
a) Warum hat jede Klasse immer genau (nur) 1 Basisklasse ?
b) die Objekt-Instanzierung basiert im Wesentlichen darauf, dass die Klasse, die ein Objekt erzeugt immer genau die Klasse kennt und weiss, bei welcher Klasse sie diese Instanz bekommt. Eine Instanz wird vom Objekt, welches das Objekt erzeugt auch wieder gelöscht. Bevor eine Instanz gelöscht werden kann muss damit klar bekannt sein, dass dieses Objekt und deren Daten und Slots von aussen nicht mehr benutz werden.
c) Qt bedient sich einem Aggregations-Objekt um Fähigkeiten ähnlich der COM-Aggregation zu erweitern. Diese Objekte und die Lebensdauer wird aber immer vom äusseren Objekt bestimmt.
Meine Fragen:
1.) zu a) bis c). gibt es Gründe, warum dies so ist ?
2.) bei der COM-Aggregation können Clients nur durch Kenntniss eines Interfaces Objekt erhalten, die dann im weiteren Verlauf durch Smartpointer gehalten werden. Die Lebensdauer der inneren Objekte ist von den äusseren Objekten unabhängig, d.h. das äussere Objekt stirbt nicht, wenn es darauf keine Referenz mehr gibt, solange es noch Referenzen auf die inneren Objekte gibt.
Unsere Applikation hält also alle (inneren und äusseren) Objekte duch Smaprtpoineter und für uns stellt sich nun die Frage, mit welchem Konzept man dies COM-Aggregation auflösen kann, wobei es zu berücksichtigen gilt, dass wir durch Refactoring zum Ziel gelangen müsen.
3.) Gibt es eine Empfehlung, wie man die Objektinstanzierung unter Qt anwenden soll.
4.) Warum wendet z.B. der Qt-Creator die Interface-Technik relativ wenig an ?
Besten Dank
Gruss
Peter