Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Partielle Klassen (https://www.delphipraxis.net/92113-partielle-klassen.html)

CalganX 14. Mai 2007 19:00


Partielle Klassen
 
Hi,
ich meine in Erinnerung zu haben, vor gar nicht langer Zeit, alte Fotos und Texte gelesen zu haben, in der es möglich war, Klassen über mehrere Units zu verteilen - partielle Klassen bzw. partial classes also. Der entsprechende Code war auch auf dem Foto zu sehen
Delphi-Quellcode:
// erste Unit
type
  TPartClass = partial class
  public
    procedure InUnit1;
  end;

// zweite Unit
type
  TPartClass = partial class
  public
    procedure InUnit2;
  end;
Nun... weder mein Delphi 2005, noch das Turbo Delphi verstehen das Schlüsselwort partial. Liegt das daran, dass es bisher noch nicht implementiert wurde, obwohl es mal angekündigt wurde oder ist das ein Feature, das definitiv mit Delphi in Zusammenhang stand?

Chris

mkinzler 14. Mai 2007 19:03

Re: Partielle Klassen
 
Diese Features sollen mit der nächsten Version von Delphi (Highlander) kommen, aber höchstwahrscheinlich nur im .Net-Teil

Elvis 14. Mai 2007 19:57

Re: Partielle Klassen
 
Zitat:

Zitat von mkinzler
Diese Features sollen mit der nächsten Version von Delphi (Highlander) kommen, aber höchstwahrscheinlich nur im .Net-Teil

Die "Class fragments" sind allerdings auch keine direkten partial classes.
Alle Fragmente liegen in einer eigenen Unit und du kannst nur die Member benutzen, deren Fragmente in der uses clause eingetragen sind.
Zumindest ist das das was ich mir aus ein paar Screen casts von Nick Hodges zusammenreimen konnte.

jfheins 14. Mai 2007 20:09

Re: Partielle Klassen
 
Ich meine, das das mit dem Schlüsselwort partitial zumindest in #develop oder Visual Studio ging ... :gruebel: Ich glaube, es war #develop das das sogar standardmäßig für die Formular-initialisierungsroutine benutzt ...

Khabarakh 14. Mai 2007 20:20

Re: Partielle Klassen
 
Die Dinger werden seit 2.0 bei jeglichem generierten Code eingesetzt (Winforms, WPF, Asp.Net, DataSets, Web Services, ...), denn genau dafür wurden sie ja eingeführt ;) . In reinem User-Code sind sie eher unnütz, höchstens noch mit dieser Ausnahme:
SDK
When working on large projects, spreading a class over separate files allows multiple programmers to work on it simultaneously.

Partial Classes sind deshalb für jede 2.0-Sprache ein Muss.

CalganX 14. Mai 2007 20:34

Re: Partielle Klassen
 
Hi,
@jfheins: dass das in anderen Sprachen (z.B. C#) geht, weiß ich. Es geht mir auch wirklich nur um Delphi für Win32.

@Khabarakh: für unnütz halte ich partielle Klassen ganz und gar nicht. Auch dass der einzige Vorteil sei, dass man damit in größeren Projekten mit mehreren Entwicklern an einer Klasse arbeiten kann, halte ich für falsch. Das ist sicherlich richtig, dass das möglich ist (ist aber auch so schon möglich, dank intelligenten Subversion-Systemen), aber jeder, der schonmal große Klassen geschrieben hat, weiß, dass eine Unit schon verdammt groß werden kann - Modularität hin oder her. Außerdem fände ich es praktisch, nur einen bestimmten Teil einer Klasse einzubinden. Auch wenn das möglich wäre, wenn ich die Klasse in zwei Klassen aufteile.
Also, ich sehe schon Vorteile - auch für die Win32-Entwicklung.

Aber dass die "coolen Features" zum Großteil nur Einzug in .NET erhalten, ist ja inzwischen auch Fakt. Naja, weiß ich wenigstens, dass ich mich nicht getäuscht habe und doch mal davon gelesen habe.

Danke für eure Antworten,
Chris

Khabarakh 14. Mai 2007 21:42

Re: Partielle Klassen
 
Das mag deine Meinung sein, aber für mich riechen partial Classes nach Designschwäche und ich stehe mit dieser Meinung auch nicht alleine da. Sobald ich eine Klasse sinnvoll auf zwei Dateien verteilen kann, sollte sie sich auch stattdessen sinnvoll in eben diese zwei Teile modularisieren lassen. Wenn eine Klasse doch zur Unübersichtlichkeit neigt, lasse ich lieber die IDE arbeiten - durch Code-Faltung allein die Memberdefinitionen anzeigen lassen, was gleichzeitig einen netten, sauberen Klassenüberblick schafft, der Code Explorer tut sein Übriges. Und einer der großen Vorteile bei der Teilung einer Klasse - etliche für diesen Teil unwichtige Member verschwinden aus Intellisense - existiert bei partiellen Klassen auch nicht.
Zitat:

Zitat von CalganX
Also, ich sehe schon Vorteile - auch für die Win32-Entwicklung.

Delphi-Entwickler müssen durch den Singlepass-Compiler und die Aufteilung in Units statt Namespaces sowieso schon unter exorbitant großen Dateien leiden, da wäre dieses Feature nicht nur ein Tropfen auf den heißen Stein, sondern schon fast sarkastisch ;) - der Delphianer besitzt die Möglichkeit, Klassen aufzusplitten, aber besonders bei großen Projekten nicht einmal den zum Standard gewordenen Luxus, für jede Klasse eine einzelne Datei zu erstellen zu können. Vor der Einführung von partial Classes müssten auf jeden Fall erst diese zwei Aspekte entsprechend angepasst werden (schon allein weil wohl niemand für die Benutzung einer einzigen partiellen Klasse mehrere Units einbinden will). Ich hoffe, eventuelle entsprechende Ankündigungen nicht verschlafen zu haben :duck: .

bernau 14. Mai 2007 22:27

Re: Partielle Klassen
 
Tja. Bei mir ist es mal wieder soweit. Ich versuche mir den Sinn und Zweck von partial class vozustellen. Aber so richtig komme ich nicht dahinter.


Zitat:

Zitat von CalganX
Delphi-Quellcode:
// erste Unit
type
  TPartClass = partial class
  public
    procedure InUnit1;
  end;

// zweite Unit
type
  TPartClass = partial class
  public
    procedure InUnit2;
  end;

Wenn ich eine Klasse in zwei Units aufteilen möchte, dann würde ich mir in der ersten Unit ein Basisklasse anlegen, und in der zweiten Unit eine abgeleitete Klasse. Damit habe ich in der zweiten Klasse Zugriff auf alle Proceduren.

Delphi-Quellcode:
// erste Unit
type
  TBaseClass = class(Tobject)
  public
    procedure InUnit1;
  end;

// zweite Unit
type
  TMainClass = class(TBaseClass);
  public
    procedure InUnit2;
  end;
Ich finde diese Definition viel eleganter.


Gebt mir Input. Was macht partial class so nützlich.


Gerd

Elvis 14. Mai 2007 22:46

Re: Partielle Klassen
 
Zitat:

Zitat von bernau
Gebt mir Input. Was macht partial class so nützlich.

Um es mal ganz ungeschminkt und direkt zu sagen: Alteingesessene Delphianer ohne tieferen Einblick in java oder .Net haben gar nicht die Tools zur Hand, die in Java und .Net alltäglich sind.
Hauptsächlich sprachunabhängige Codegeneratoren.
Aber um es mit Ach & Krach irgendwie auf native Delphi stülpen zu können nehmen wir den XML Databinding wizzard.
Stell' dir vor, der generiert dir deine Klassen aus einem XSD, aber du willst irgendwo in einem der generierten Vorfahren eine weitere Eigenschaft oder ein Interface unterbringen.
Mit Partial classes (oder vllt auch class fragments) wäre das gar kein Problem. Die Klasse ist nicht auf das Stück festgelegt, das der Code generator ausgespuckt hat.
Du kannst also deine eigenen Erweiterungen in die Klasse packen ohne alles zu verlieren wenn der Code neu generiert werden muss.

mschaefer 26. Mär 2010 16:29

Re: Partielle Klassen
 
Gibt es eigentlich CodeGeneratoren für Delphi-Klassen.

Habe einige DBEdits und DBMemos abgeleitet, die ähnliche Funktionen in sehr ähnlichen Klassen abarbeiten.
Das müßte man doch einfach generieren können?!?

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz