Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo

Folgendes Problem: ich habe einen vektor "vector<MobileNode*> mobnodes;" in einer klasse definiert und muss nun in einer anderen klasse darauf zugreiffen. da ich ein grösseres programm erweitere ist eine lösung mit vererbung nicht möglich. desweiteren habe ich es nicht geschafft das problem mit "static" oder "extern" aufgrund von linker-fehlern zu lösen.

Geschrieben

Ok, das Problem von anfang an:

Es gibt eine Klasse "MobileNode" in der zu irgend einem Zeitpunkt Instaznzen dieser Klasse erzeugt werden. Ich soll nun das bestehende Programm so erweitern, dass "auf Knopfdruck" verschiedene Variablen dieser Instanzen ausgelesen und verabeitet werden. Dazu wollte ich nun jedesmal wenn der Konstruktor der Klasse "MobileNode" aufgerufen wird einen Zeiger auf das gerade erzeugte Objekt in einen Vektor speichern, um so später daruaf zugreiffen zu können. Die Verarbeitung soll in der Klasse "IDSAgent" passiern.

Geschrieben
Dazu wollte ich nun jedesmal wenn der Konstruktor der Klasse "MobileNode" aufgerufen wird einen Zeiger auf das gerade erzeugte Objekt in einen Vektor speichern, um so später daruaf zugreiffen zu können. Die Verarbeitung soll in der Klasse "IDSAgent" passiern.
Urgh... das klingt nach einem furchtbaren Design. Auch hier gilt der Grundsatz: Ein Objekt sollte so wenig wie möglich über andere Objekte wissen. Konkret für deinen Fall bedeutet das: Lass das mit dem Referenz auf das Objekt im Konstruktor speichern weg.

Das Objekt, von der aus die MobileNode Instanzen erzeugt werden, erhhält intern einen eigenen Lookup. In dem wird jeweils nach dem Erzeugen der MobileNode Instanz, genau diese Instanz gespeichert. Zu überlegen wäre noch, das ganze generell noch in eine eigene Klasse auszulagern, so dass du folgende Struktur hättest:

IDSAgent

- erzeugt und verwaltet die MobileNode Instanzen

MobileNodeLookup

- speichert die erstellten Instanzen

MobileNode

- das eigentliche Datenobjekt

Bevor du weitermachst würde ich dir aber empfehlen dich generell nochmal intensiv mit dem Konzept "objektorientierte Programmierung" vertraut zu machen. Nicht mit dem konkreten Umgang von Klassen und Objekten in einer Programmiersprache sondern ganz allgemein mit den Ideen und Konzepten.

Geschrieben

Wie gesagt erweitere ich ein bestehendes Programm (den ns-2 Netzwerk Simulator).

Dazu möchte ich einmal nicht zuviel im Original-Code "rumpfuschen", kann andererseites auch nicht einfach so z.B. ein MobileNode-Objekt erzeugen, ohne die Simulationsergebnisse zu verfälchen.

Da ich eigentlich Objektorientirung mit Java gelernt habe ist das eigentliche Problem die genau c-Syntax.

Geschrieben
Wie gesagt erweitere ich ein bestehendes Programm (den ns-2 Netzwerk Simulator). Dazu möchte ich einmal nicht zuviel im Original-Code "rumpfuschen", kann andererseites auch nicht einfach so z.B. ein MobileNode-Objekt erzeugen, ohne die Simulationsergebnisse zu verfälchen.
Dann musst du zwischen zwei Möglichkeiten abwägen:

Möglichkeit A: du änderst den bestehenden Code so ab, dass die Struktur sauber wird, und du recht einfach deine Änderungen einbauen kannst. Vorteil ist, dass die Programmstruktur hinterher sauber(er) ist und du weisst, was gemacht worden ist und auch bei zukünftigen Änderungen noch etwas tun kannst. Der Nachteil ist, dass es sehr wahrscheinlich länger dauern wird.

Möglichkeit B: Die Änderungen quick&dirty in den alten Quelltext einbauen. Wird wahrscheinlich schnell gehen, aber gibt nur noch schlechteren Code und wenn du irgendwann nochmal was ändern musst wirst du wahrscheinlich wieder wie der Ochs vorm Berg stehen und dich mit dem ganzen Thema wieder von vorne befassen müssen.

Da ich eigentlich Objektorientirung mit Java gelernt habe ist das eigentliche Problem die genau c-Syntax.
Die Syntax ist das kleinste Problem. Es geht sich darum die Strukturen zu verstehen. Was ist ein Objekt, was ist ein Konstruktur, und wie ist das Zusammenspiel zwischen den Objekten. Ob du dann vor einem C++ oder einem Java Quelltext sitzt spielt eine untergeordnete Rolle.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...