Ist eine Klasse besonders, wenn sie keine Mitglieder hat?

8

Ich weiß nur, dass einige meiner Klassen keine Mitglieder haben. Es hat mehrere öffentliche Funktionen und vielleicht private Funktionen und alles läuft durch Params. Ich stelle fest, dass funktionale Programmierer dies die ganze Zeit tun, aber wird diese Klasse als speziell angesehen, wenn sie auf nichts außerhalb der Klasse zugreift und nur ihre Parameter zum Lesen verwendet (außer out params und return values)?

Ich weiß, dass diese Klasse statisch sein kann, aber statische Klassen können externe Variablen modifizieren. Ich möchte wissen, ob dies eine Technik ist oder vielleicht, wenn eine Sprache zusätzliche Vorteile für das Schreiben auf diese Art und so weiter und so weiter geben kann.

-edit- Das sieht wie ein Wiki aus, also lasst es eins machen.

    
quelle

8 Antworten

7

Es wird nur "staatenlos" genannt. Nichts wirklich Besonderes.

    
Dmitry 25.01.2010, 13:00
quelle
4

Es ist nichts falsch mit einer Klasse, die keine Mitglieder hat; Controller tun dies sehr häufig.

Ja, Sie könnten statisch werden, aber wenn nicht statisch ist, erlauben Sie die Vererbung von Ihrer Memberless-Klasse, die Mitglieder auf Ihrem Weg hinzufügen kann, wenn Sie dies wünschen .

    
Randolpho 25.01.2010 12:59
quelle
3

Ja, das macht die Klasse komplett threadsicher und somit ist keine Verriegelung erforderlich. Für mich ist das ein fantastisches Attribut.

    
ChaosPandion 25.01.2010 13:00
quelle
2

Wenn keine Mitglieder vorhanden sind, ist keine andere Klasse als ein Namespace erforderlich. Wenn Sie in Python programmieren würden, würden Sie diese Methoden einfach in ein Modul einfügen und sich nicht um eine Klasse kümmern. Wenn Sie in Java arbeiten, ist eine Klasse ein Muss. Wenn Sie in C ++ arbeiten, liegt es an Ihnen - aber vielleicht sollten Sie nur einen Namespace anstelle einer Klasse verwenden, um ihn weniger verwirrend zu gestalten.

    
gruszczy 25.01.2010 12:58
quelle
2

Mit Sane-Programmiersprachen können Sie Funktionen außerhalb von Klassen definieren, wenn die Funktionen keine persistenten Daten benötigen - wenn Sie sie in einem geeigneten Namensraum definieren können, umso besser. Wenn Ihre Sprache dies nicht erlaubt, definieren Sie sie zumindest in einer statischen Klasse, so dass es klar ist, dass kein Status aufgerufen oder mutiert wird. Insgesamt erinnert mich das jedoch an einen ausgezeichneten Artikel der unlogische Missbrauch von Klassen im Namen von "reinem OOP".

    
Max Shawabkeh 25.01.2010 13:02
quelle
1

Ich würde die Klasse statisch machen. Ich sehe keinen Vorteil darin, es nicht-statisch zu halten. Aber dann wieder - ich bin ein .NET-Entwickler, nicht Java. Die Sprachen sind eng, aber es gibt viele feine Unterschiede, die mir nicht bewusst sind.

    
Vilx- 25.01.2010 13:04
quelle
1

Denken Sie daran, dass alle Methoden Ihrer Klasse (sogar zustandslos) eine spezielle Variable - Zeiger / Verweis auf Objekt - dies (self, was auch immer) haben, auf die sie angewendet werden.

Daher ist es in solch einer zustandslosen Klasse vollkommen sinnvoll, wenn ihre Methoden überschrieben werden könnten: In diesem Fall müssen Sie eine Klasse haben, die das Senden durch dies ermöglicht. (Natürlich emuliert er nur erstklassige Funktionen. Wenn Ihre Sprache bereits solche Funktionen hat, hat das bei dieser Technik keinen Sinn.)

Im Moment kann ich mir nicht vorstellen, warum Sie eine staatenlose Klasse ohne irgendeine virtuelle Methode brauchen würden. Es sei denn, Sie möchten eine schöne automatische Vervollständigung in Ihrer IDE haben, indem Sie objectName und dot eingeben:)

    
Alexander Poluektov 25.01.2010 13:20
quelle
0

seine einfache Klasse gibt es keine Spezialität darin.

Aber ich verstehe nicht, was die Verwendung öffentlicher oder privater Methoden bedeutet, wenn kein Mitglied darin ist. weil Member-Methoden diejenigen sind, die auf den Zustand einer bestimmten Instanz wirken.

Ja, Sie können statische Methoden verwenden.

    
GuruKulki 25.01.2010 13:06
quelle