array classes

Unter einer Arrayklasse verstehe ich einen Datentyp, der parallel verlaufende Arrays managed. Dabei ist Segments die Array-Klasse und Segment ein Handle, dass lediglich Referenzen (ref) enthält.

Segment contains
{
  public parallel ref:               
    StartPoint  has Point;
    TargetPoint has Point;
  public copy:
    Color;
     
  bool isInvalid() { return StartPoint == TargetPoint; }
  
  construct( StartPoint );
};

Segments parallels Segment {} // hier handelt es sich nicht um eine Ableitung, 
                                 sondern Segments wird zu eine Containerklasse, die für 
                                 parallele Elemente von Segment ein Array aufbaut.
contains
{
  public:
    Color;                  // Farbe aller Segmente - hierauf wird keine Referenz gebildet, da kein ref
  
  public construct( Point {} as StartPoint, Color )
  {
    foreach( Segment s in this ) // ein Segment ist ein Element der Array
      s.TargetPoint = s.StartPoint;
  }
  
};

sa as Segments( { Point( 1, 2, 3 ), Point( 4, 5, 6 ) }, Color::Red );

s as sa[0];  // implizite Deklaration als Segment

s.isInvalid then print( "Start und Endpunkt sind gleich\n" );

s ist ein Handle, dass eine Referenz auf Startpunkt[0] von sa hat, eine Referenz auf Tartgetpunkt[0] von sa hat und eine Kopie von Color.

listed classes

Segments parallels Segment [] verwendet hierbei Listen statt Arrays