Dein TPosition ist ein sogenanntes
Value Object.
Berücksichtigt man deren Eigenschaft der Unveränderbarkeit (ich kann nicht einfach nur X, Y oder Z ändern) merkt man bei der Speicherverwaltung von Delphi, dass man sich dann oft um das Freigeben, des vorherigen Objekts kümmern muss, wenn man eine neue TPosition erzeugt und zuweist. Daher bietet sich hierfür eher die Verwendung von Records an. (bei Sprachen mit GC oder anderer automatischer Speicherverwaltung ergibt sich dieses Problem nicht, daher werden dort auch oft Klassen statt Records/Structs benutzt)
Außerdem kann man bei Records einfacher implizite oder explizite Typkonvertierung durch Operatorüberladung einbauen.
Das könnte zur Folge haben, dass man auch beim Record private Felder, öffentliche readonly Eigenschaften und ggf einen Konstruktor benutzt.