Ich find es generell nicht besonders sinnvoll, Boolean für Daten zu missbrauchen, die nicht "wahr" oder "falsch" sind. Das verwirrt nur. Wenn du einen Datentyp mit 2 Werten haben willst, nimm dafür ein Enum:
Delphi-Quellcode:
TTeam = (tmTeamA, tmTeamB);
TPenalty = class(TObject)
public
Team : TTeam;
...
[edit]
Und ich würde etwas mehr auf die Namenskonventionen achten: Felder sollte man mit dem Präfix F (für Field) beginnen. Also
Delphi-Quellcode:
TPenalty = class(TObject)
public
FTeam : TTeam;
FStart,
FEnde : LongInt;
statt
Delphi-Quellcode:
TPenalty = class(TObject)
public
Team : TTeam;
Start,
Ende : LongInt;
Parameter von Funktionen erhalten hingegen kein Präfix. Wenn es Mehrdeutigkeiten oder Namenskonflikte gibt, wird ihnen manchmal ein A vorangestellt. F als Präfix für Parameter ist jedoch irreführend, da F wie gesagt für Field steht.
Und ich würde noch darauf achten, durchgehend englische Bezeichner zu verwenden, aber das ist Geschmackssache.
Ansonsten ist dein Vorschlag, die Objekte als reine Datenobjekte zu handhaben, imo gut. Man sollte die Datenspeicherung und die Logik immer versuchen zu trennen. Hier hat es außerdem den Vorteil, dass man mit nur einem Timer auskommt.
[/edit]