Enumeration bestehen aus anderen Enumerationen



  • Firefighter schrieb:

    Hmm ok, dann koenntest du eventuell eine Factory zum Einsatz bringen.
    Aber ich mach mir grad ein bisschen Sorgen um dein Grunddesign. Wie du sagst sind die Enums nur dafuer da um die Zeichenmethoden zu steuern. Dann kannst du doch die Abstrakte Klasse nutzen um das Zeichen zu steuern oder nicht?

    Mir gefällt das Design nicht, aber es ist mittlerweile mein fünfter oder sechster Anlauf. Das Problem ist einfach, dass es noch eine Klasse gibt, die alle Benutzereingaben handhabt, wenn noch nicht feststeht, was für ein Objekt der Benutzer zeichnen möchte. Ich überlege gerade, ob es nicht besser wäre, wenn der Benutzer direkt bestimmen muss, was er zeichnen möchte.

    Du kannst dir das so vorstellen, dass es ein einfaches Vektorzeichenprogramm werden soll, das dem Benutzer erlaubt, grafische Primitiven, aber auch Texte oder Splines zu zeichnen.


  • Administrator

    Wieso machst du nicht sowas?

    public interface IView
    {
      void Draw(Graphics g);
    }
    
    public class Rectangle
    {
      // ... x, y, width, height
    }
    
    public class EllipseView
      : IView
    {
      private Rectangle m_rectangle;
    
      public EllipseView(Rectangle rectangle)
      {
        m_rectangle = rectangle;
      }
    
      public void Draw(Graphics g)
      {
        // ...
      }
    }
    
    // usw.
    

    Grüssli



  • Mach ich bereits. 🙂


  • Administrator

    Phisherman schrieb:

    Mach ich bereits. 🙂

    Dann verstehe ich nicht, wieso du diese Konstanten benötigst.

    Grüssli



  • Wegen der Vorschauklasse. Bevor das vom Benutzer Kreierte explizit als Instanz eines Rechtecks, Kreises etc. gespeichert wird, wird alles in einer anderen Klasse verwaltet. Zum Beispiel, wie viel Punkte bereits vom Benutzer platziert wurden, um zu bestimmen, ob, falls schon mehr als 2 Punkte platziert wurden, er nochmals von einem Spline zu einer Linie wechseln kann.


  • Administrator

    Also moment! Der Benutzer gibt Punkte an und es werden dann Linien gezogen? Wieso speicherst du die Daten dann nicht immer als Spline ab? Wieso kann es dann plötzlich Rechtecke oder Ellipsen geben? 😕

    Grüssli



  • Der Benutzer gibt Punkte an, die jeweils die Punkte einer Linie einer Spline etc. definieren. Es kann aber auch sein, dass er damit jeweils den linken oberen und rechten unteren Punkt eines Rechteckes oder einer Ellipse angibt. Schau dir mal die GDI+ Methoden an, dann weißt du, was ich meine.


  • Administrator

    Könntest du etwas genauer darauf eingehen, wie der Benutzer so eine Figur "eingibt"? Setzt er nur Punkte? Oder wählt er z.B. ein Rechteck-Tool aus mit dem er dann Punkte für das Rechteck setzt? Woher weisst du, was der Benutzer genau will?
    Vielleicht kannst ja kurz den Ablauf erklären, was passiert, wenn er ein Rechteck, eine Ellipse, eine Linie oder ein Spline eingibt?

    Grüssli



  • Hi,

    Sorry für die späte Antwort. Aber ich habe es nun hinbekommen. Ich hatte nicht gewusst, dass eine Klasse, die von einer Klasse erbt, die wiederum von einer Klasse erbt, auch auf die unterste Klassenhierarchie "downgecastet" werden kann.

    Also:

    class c erbt von class b erbt von class a

    a objectOfClassA;
    c objectOfClassC;
    
    objectOfClassA=objectOfClassC;
    

    Danke für eure Hilfe.


  • Administrator

    Phisherman schrieb:

    ..., auch auf die unterste Klassenhierarchie "downgecastet" werden kann.

    Falsche Richtung. Das nennt man einen Upcast. Eine Vererbungshierarchie wird als verkehrter Baum dargestellt und somit liegt die Wurzel oben. Ein Upcast ist übrigens immer implizit möglich. Wieso sollte es denn auch nicht gehen? Gleiches gilt auch für Interfaces.

    Grüssli



  • Merci für die Korrektur. 🙂


Anmelden zum Antworten