Autor Beitrag
winx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 249



BeitragVerfasst: Sa 04.03.06 09:40 
Hallo,

jetzt hab ich mal eine völlig untypische Frage. Da meine KLassen zunehmend größer und unübersichtlicher werden.
Wollte ich euch mal fragen, wie Ihr so eure Klasse aufbaut und ob ihr es nicht mal an ner Bspklasse demonstrieren könnte.
Sortiert ihr nach Private, Public, etc oder nach Funktionen, Variablen, Etc...

Also mal davon ausgegangen ihr habt ne Klasse die

- private Variablen
- protected Variablen
- eine statische KlassenVariable
- private, public, protected Funktionen
- mehrere Konstruktoren, einen Destruktor, eine statische Klassen funktion
- evtl noch n paar Konstanen enthält

Wie würdet ihr die Klasse nun aufbauen, damit man den Überblich nicht verliert.
Baut ihr "regions" ein?

Danke,
winx
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Sa 04.03.06 11:32 
Ich bin gerade dabei zwei Klassen zu programmieren.
Zur Übersichtlichkeit benutze ich selbstverständlich "region". Selbst kleine Klassen haben schnell mal ein paar hundert Zeilen Source-Code. Wenn man dann mit Regions ganze Code-Blöcke ausblenden kann, erleichtert das die Übersicht ganz enorm.
Außerdem hat es sich bewährt, die Private-Deklarationen an oberste Stelle zu setzen. Dabei unterscheide ich noch zwischen Variablen und Methoden:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public class MeineKlasse
{
  // Hier die Privat-Variablen
  // Dann die "Properties". Also der public-Zugriff auf die Variablen
  // Danach die Konstruktoren
  // Gegebenenfalls der Destruktur
  // Am Schluss kommen die eigentlichen Methoden der Klasse
  // Dabei versuche ich zwischen den Modifizierern zu unterscheiden,
  // halte mich aber nicht daran fest, wenn das den logischen Aufbau stört.
}

Das ist es im Groben.

Auch wenn es möglich ist, Variablen mitten im Source zu deklarieren, vermeide ich das grundsätzlich. Ich möchte immer auf einen Blick sehen können, welche Variablen benutzt werden (können). Das geht nur, wenn diese an einem festen Platz stehen.
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: So 05.03.06 10:25 
user profile iconjasocul hat folgendes geschrieben:
Selbst kleine Klassen haben schnell mal ein paar hundert Zeilen Source-Code.
ich habe die Daumenregel, dass sämtliche Code files, die mehr als 3 Bildschirme hoch sind, 1,5 Bildschirme zu hoch sind.
Im Gegensatz zu Delphi gibt es reduzierte Sichtbarkeiten und dank multi pass kann man seine Klassen über soviele Dateien verteilen wie man es für notwendig hält.
Bei solch ausufernden Klassen würde ich schon längst begonnen haben Funktionalität in weitere Klassen umzuverteilen.(Kleinere, generic Päckchen erhöhen auch die Wiederverwendbarkeit ;) )
Außerdem gehe ich strikt nach max. ein Typ pro Datei vor. Nichts ist nerviger als eine Datei zu öffnen und nicht auf Anhieb erkennen zu können was dort alles passiert...
winx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 249



BeitragVerfasst: Mo 06.03.06 11:18 
danke für eure Hilfe.

Aber wie verteile ich denn ein Klassen auf mehrere Dateien? Das ist nur mit dem 2.0er Framework möglich, oder???

Da ich, arbeitsbedingt, von der Delphi und Java Ecke komme, entspricht euer Klassenaufbau schon sehr der von Delphi.

Noch ne Frage, wo packt ihr statische Variablen rein?
Und was sind Modifizierer, getter und setter, ne das sind die Properties, oder?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 06.03.06 11:39 
user profile iconwinx hat folgendes geschrieben:
Aber wie verteile ich denn ein Klassen auf mehrere Dateien? Das ist nur mit dem 2.0er Framework möglich, oder???

Ich weiß, dass es geht. Da ich aber auch noch Anfang mit C# stehe, hatte ich da noch keinen Bedarf. Mehr als 600 Zeilen hatte ich da noch nicht, soweit ich weiß. :wink:
user profile iconwinx hat folgendes geschrieben:
Da ich, arbeitsbedingt, von der Delphi und Java Ecke komme, entspricht euer Klassenaufbau schon sehr der von Delphi.

Der ist doch auch gut. Sehr strukturiert und übersichtlich. Warum sollte man bewährtes nicht übernehmen?
user profile iconwinx hat folgendes geschrieben:
Noch ne Frage, wo packt ihr statische Variablen rein?
Und was sind Modifizierer, getter und setter, ne das sind die Properties, oder?

Statische Variablen? Habe ich bisher nicht verwendet. Da das im Prinzip globale Variablen sind, würde ich die auch nicht einsetzen. Das würde auch dem Konzept von OOP wiedersprechen. Oder bin ich da falsch informiert?
Getter und Setter entsprechen den aus Delphi bekannten Properties.
Modifizierer (in der Hilfe von SharpDevelop gefunden):
- public
- private
- internal
- protected
- abstract
- const
- event
- extern
- override
- readonly
- sealed
- static
- unsafe
- virtual
- volatile
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: Mo 06.03.06 14:08 
Ich redete von 1 Typ pro File ;) Wird der Typ mehr als 2-3 Bildschirme groß ist er mir in 90% aller Fälle mindestens einen zu hoch.
Partial classes machen meist da Sinn, wo ein Teil der Klasse etwas tut, was im Rest relativ unerheblich ist. Explizites Implementieren von Interfaces ist da ein Beispiel. Das ist in C# so verflucht hässlich, das will ich nicht in Code stehen haben den ich öfters lesen muss.
Außerdem ist es sinnvoll für Klassen, die autogeneriert werden. Wenn du Klassen aus einem XSD anlegen lässt, kannst du weitere Properties/Methoden/Vorgänger in einer weiteren Datei anlegen ohne dass sie verloren gehen, wenn man das XSD aktualisiert.
Speedmaster
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 79

Windows XP
C#, VS2005 / VS2008
BeitragVerfasst: Mo 06.03.06 17:34 
user profile iconjasocul hat folgendes geschrieben:

user profile iconwinx hat folgendes geschrieben:
Noch ne Frage, wo packt ihr statische Variablen rein?
Und was sind Modifizierer, getter und setter, ne das sind die Properties, oder?

Statische Variablen? Habe ich bisher nicht verwendet. Da das im Prinzip globale Variablen sind, würde ich die auch nicht einsetzen. Das würde auch dem Konzept von OOP wiedersprechen. Oder bin ich da falsch informiert?


Eine Klasse zu versiegeln und dort eine Statische Variable & Property zu definieren die auf die auf eine Instanz von sich selber zeigt( Kurz: Singletonklasse ), ist etwas was soweit ich weiss nicht gegen OOP verstößt!
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 06.03.06 17:47 
static ist in C++ was anderes als in C#. So, wie es in C# verwendet wird, passt es natürlich schon ins OOP-Konzept. Da du speziell static-Variablen angesprochen hattest, bin ich vermutlich von falschen Voraussetzungen ausgegangen.
Außerdem hasse ich versiegelte Klassen. :wink: