AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Aufbau Klassenstruktur

Ein Thema von Antigo · begonnen am 29. Mär 2009 · letzter Beitrag vom 29. Mär 2009
Antwort Antwort
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#1

Re: Aufbau Klassenstruktur

  Alt 29. Mär 2009, 15:35
Zitat von mkinzler:
Warum so kompliziert? Was bringt das mit den verschiedenen Typen für Jahr, Monat, ...?
ja garnichts ^^ deswegen auch mein Thread uum zu fragen wies besser geht.


Zitat von Satty67:
Ich gehe mal von einem Übungs-Projekt aus...

Also Basis-Klasse
Delphi-Quellcode:
TTimeUnity = class
  FChildUnitys : array of TTimeUnity; // forward-Deklaration nicht vergessen
  FUnitySegemnt : Integer;
public
  function Add(TimeLine : TypNachWunsch) : TTimeUnity
  property UnitySegment : Integer read FUnitySegment
...um nur einen Teil der Idee zu visualisieren.

- Als Basis wird z.B. Kalender : TTimeUnity definiert.
- Ein Aufruf von Add lässt prüfen, ob der 1. Teil der TimeLine (hier 2009) schon eine ChildUnity hat (Timeline z.B. 2009;11;01;10;12;00)
- Nein anlegen (Child merkt sich seinen Wert in UnitySegment)
- Ja mit gekürzter TimeLine aufrufen.

Ein Prüfen/Aufruf erfolgt, bis Timeline leer ist. Rückgabe an Kalender sollte die kleinste angelegte TimeUnity sein.
Für die Timeline könnte man sich auch ein dyn. Array vorstellen oder die Fähigkeit der Klasse, die richtige Position aus dem datum selbst zu schneiden.
Ok so ähnlich hab ich es jetzt gelöst:

Delphi-Quellcode:
  TTyp = (Kalender,Jahr,Monat,Tag,Stunde,Minute);

  TZeitEinheit= class
  private
    FTyp: TTyp;
    FIndex: Integer;
    FItems: array of TZeitEinheit;
    FPings: array of TPing; //Record der bei Minuten gespeichert werden soll
    FCountPings:Integer;
    FCountTimeOuts: Integer;
    FGetLoss:Single;
  public
    function CountPings: integer;
    function CountTimeouts: integer;
    function GetLoss : Single;

    procedure AddPing(APing: Tping);
    procedure WriteTreeView(ATreeView:TTreeView;AParent:TTreeNode);

    property PingCount: Integer read FCountPings;
    property TimeOutsCount: Integer read FCountTimeouts;
    property Loss: Single read FGetLoss;

    constructor create(ATyp:TTyp; AIndex:Integer);
  end;
Und dann beim AddPing:

Delphi-Quellcode:
begin
  case FTyp of
    Minute : begin
                Setlength(FPings,length(FPings)+1);
                FPings[High(Fpings)]:=APing;
              end;
    Stunde : Add(APing,MinuteOf(APing.datetime));
    Tag : Add(APing,HourOf(APing.datetime));
    Monat : Add(APing,DayOf(APing.datetime));
    Jahr : Add(APing,MonthOf(APing.datetime));
    Kalender: Add(APing,YearOf(Aping.datetime));
  end;
end;
Ist halt nur nicht so schön das ich bei allen Objekten die nicht Minute sind auch das Array Fpings mitschleppe, dass eigtl nur Instanzen die Minuten darstellen brauchen. Ausserdem muss ich bei allen Funktionen immer gucken ob es der Ftyp der Instanz = Minute ist und dann anders reagieren, weil ich dann nichtmehr auf die Fitems zugreife, sondern auf die Fpings.
Aber als ich noch für jede Zeiteinheit ne eigene Klasse (Tjahr, TMonat usw) hatte musste ich quasi 6 mal die gleichen Funktionen implementieren, und nur den Array Namen anpassen, daher denke ich, dass diese Lösung schon eleganter ist.
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz