Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » OOP Problem mit Zugriffsrechten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.12.2007, 18:58 Uhr
firefoxxi



Hallo,

erstmal vorweg ich habe die Suchfunktion nicht benutzt weil ich nicht wusste nach was genau ich suchen soll. Denn das was ich suche ist wohl eher ein allgemeines Konzept der OOP, falls es überhaupt eine elegante Lösung für das Problem gibt.
Ich war gerade dabei die Klassenstruktur für ein kleines Spiel zu entwerfen. Dabei soll es eine abstrakte Basisklasse Player geben, die die Grundlage für alle späteren KI Implementationen sein soll. Damit die KI auch sinnvoll handeln kann, muss sie jedoch auch in der Lage sein zum Einen eigene Eigenschaften wie ihr immomentiges Vermögen abzurufen, zum Anderen auch auf diese Eigenschaft bei anderen Spieler zugreifen zu können.
Schon der erste Punkt macht mir Probleme. Wenn ich diese Eigenschaft in der selben Klasse verwalte, in der auch die KI implementiert wird, dann ist die KI doch in der Lage ihr Geld zu verändern, obwohl sie dies eigentlich nicht selbstständig können sollte.
Lagere ich diese Information aber auf eine 2. Klasse aus, so besitzt zwar die KI nur noch leserechte, doch wie erlaube ich dann der Game Klasse, bei der alle Fäden zusammenlaufen und die eben das Geld ändern können sollte, den Schreibzugriff auf diese Eigenschaft?
Das einzige was mir bis jetzt als Lösung einfällt, ist eine 3. Klasse zu entwerfen die nur Lesezugriff bietet und die eben die 2. Klasse kapselt und eben nur die 3. Klasse dem Spieler zu übergeben. Dann muss ich aber für alle Eigenschaften die ein Objekt sind diese Kopieren bevor ich sie dem Spieler übergebe, da ich ansonsten ja Referenzen übergebe. Und was mache ich, wenn mein Objekt wiederum Eigenschaften enthält, die Objekte sind. Dann müsste ich ja diese auch Kopieren. Oder gibt es einen weg eine Klasse mit allen referenzierten Klassen zu kopieren.
Diese Lösung scheint mir nicht gerade sonderlich elegant abgesehen von der effizienz, ist aber die Einzige die mir einfällt. Vielleicht haben einige von euch ja einen besseren Vorschlag.
--
Gruß
firefoxxi

http://firebird-browser.de/
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.12.2007, 14:39 Uhr
Kest
saint


Hi!

Es ist irgendwie trotzdem schwer zu verstehen (jedenfalls für mich). Wär nicht schlecht, wenn du zeigen würdest, was du schon hast. Zumindest die Klassenhierarchien.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.12.2007, 15:24 Uhr
firefoxxi



Ok, ich versuchs mal indem ich etwas beispielhaften Code angebe. Also es gibt eine Klasse Player die als Basisklasse für KI Implementationen dienen soll.


C++:
public abstract class Player
{
    private int money;
    
    public int Money
    {
        get { return money; }
        set { money = value; }
    }
    
    public virtual bool moeschteIrgendwasTun();
}


Die Methode moechteIrgendwasTun wird bei bestimmten Spielsituationen von der Game Klasse, die das Spiel steuert, aufgerufen und die KI teilt ihre Entscheidung über den Rückgabewert mit.
Jetzt steh ich aber vor dem Problem, dass wenn jemand eine KI für das Spiel schreibt, er auch in der Lage ist, sein Geld zu verändern (innerhalb der moechteIrgendwasTun Methode). Dies will ich vermeiden. Wenn ich jedoch diese Eigenschaft beispielsweise folgendermaßen auslagere...


C++:
public abstract class PlayerKI
{
    private Player myPlayer;

    public Player MyPlayer
    {
        get { return myPlayer; }
        set { myPlayer = value; }
    }
    
    public virtual bool moeschteIrgendwasTun()
}

public class Player
{
    private int money;
    
    public int Money
    {
        get { return money; }
    }
}


... dann komm ich zu dem Problem das die Game Klasse, die das Spiel steuert auch nicht mehr in der Lage ist, das Geld des Spielers zu verändern.

Meine Frage ist nun: Gibt es einen geschickten Weg das zu lösen?
--
Gruß
firefoxxi

http://firebird-browser.de/
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: