|
Registriert seit: 12. Jun 2002 3.485 Beiträge Delphi 10.1 Berlin Professional |
#29
![]() Das reine Expception Handling ist dem in C++ ähnlich. Aber nicht in Verbingung mit Objekten.
Hier mal eine vereinfachte TAutoDelete Klasse.
Delphi-Quellcode:
type
IAutoDelete = interface function This: Pointer; end; TAutoDelete = class(TInterfacedObject, IAutoDelete) private FObject: TObject; public constructor Create(AObject: TObject); destructor Destroy; override; function This: Pointer; end; { TAutoDelete } constructor TAutoDelete.Create(AObject: TObject); begin inherited Create; FObject := AObject; end; destructor TAutoDelete.Destroy; begin FObject.Free; inherited Destroy; end; function TAutoDelete.This: Pointer; begin Result := FObject; end; function NewOAD(AObject: TObject): IAutoDelete; begin Result := TAutoDelete.Create(AObject); end; ![]() Hier nochmal im Klartext und für alle:
C: void IrgendeineFunktion() { CMeinObjektTyp A( "irgendein Text"); EinFunktionsaufrufmitexception(); }
Delphi-Quellcode:
Und die AutoDelete-Klasse muss man nur einmal schreiben.
procedure IrgendeineFunktion;
begin NewOAD( TMeinObjectTyp.Create('irgendein Text') ); EinFunktionsaufrufmitexception; end; Will man mit noch Methoden aufrufen oder Eigenschaften abfragen, so würde das so aussehen:
Delphi-Quellcode:
var
A: TMeinObjektTyp; begin A := NewOAD( TMeinObjektTyp.Create('irgendein Text') ).This; A.MachWas; end; ![]() Es ist nicht möglich diesen übersichtlichen Einzeiler auch in Delhpi zu schreiben.
![]() Das Ding landet in Delhpi immer auf dem Heap.
Delphi-Quellcode:
PMyObject = ^TMyObject;
TMyObject = object private m_field: Integer; public constructor Init; destructor Done; end; ![]() Wer diesen Punkt nicht zumindest als sehr ungünstig in Delhpi anerkennt ist für mich diskussionsfäig.
![]() Also braucht man in Delphi zwingend einen try except block, der alle Eventualitäten abhandelt.
![]() In C ist dies in dieser Form nicht notwendig.
![]() Ich habe im Moment das Problem, das bei einigen hundert Buttons in meinem Projekt ein Lock (wie in meinem Beipiel auf Seite 4 beschieben) gemacht werden müßte.
In C währe dies jemeils ein Einzeiler in der Ersten Zeile jedes ClickEvents. In Delphi sind dies jeweils mindestens 7 Zeilen an 3 Stellen des Events. ![]() ![]() Btw, Dein Bespiel mit automatischer Objektfreigabe kann man auch in Delphi 6 bauen.
![]() ![]() schlechte Pointernutzung
![]() Ja auch ich lösche Objekte in Delphi mit free.
Aber ich kann eben auch wie oben beschrieben ein Objekt als Einzeiler erzeugen nutzen und danach Ignorieren weil er sich am Ende der Funktion unter allen Umständen selber löscht. ![]() Wenn das ne kleine Hübesche Klasse ist dann schreibe ich eben lieber den Einzeiler direkt in die Deklaration und nicht erst 700 Zeilen später.
Delphi/Pascal nutzt hingegen das Unit-Konzept. Alles was im implementation-Abschnitt steht, kann jederzeit geändert werden, ohne dass die von dieser Unit abhängigen Units neu kompiliert werden müssen. Interface entspricht also den .h-Dateien und Implementation den .cpp Dateien, mit dem unterschied, dass Units immer "vorkompiliert" sind. ![]() Außderdem kann ich kleine Klassen (z.B. Miniparser) direkt über der Funktion als 10 Zeiler im .cpp File implementieren.
In Delphi lass ich dass und schreib mir lieber ein ungekapselte Funktion die zwar das gleiche kann, aber unangenehmer ist im Handling. ![]() Natürlich geht in Delhpi auch irgendwie. Ist aber umständlicher kostet mehr Zeit und Übersicht.
Natürlich nur für den Fall das diese Klasse ausschließlich in dieser Funktion verwendet wird. Ein mehrfach verwendetes Objekt würde ich nie mitten in den C++ Code hocken. ![]() ![]() ![]() nicht ausgereifte Projektverwaltung
![]() ![]() ![]() keine STL
![]() Diskutiere auch gerne und wäre dankbar wenn Ihr mich von Delphi überzeugt.
Und noch ein "Wort" zum "Klicki bunti - fertig ist die Anwendung". Das ein Chef meint, die Anwendung wäre fertig, wenn man schon Screenshots sieht, halte ich für ein gerücht. Es ist eher der Fall, dass man gelobt wird, weil man mit minimalen Aufwand/Zeit (=Kosten) eine präsentierfähige Oberfläche hat. Und wenn man dann das Rennen verliehrt, hat man nicht zig Manntage (bzw. Frautage) investiert. Das trennen zwischen Oberfläche und Code ist dann ein anderes Thema, das vom jeweiligen Programmierer abhängt. Ich fange z.B. immer erst mit der Datenstruktur an, habe aber die Oberfläche im Hinterköpfchen damit ich die notwendigen Events bereits einbaue. |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |