| Autor |
Nachricht |
Artchi
Autor
Benutzerprofil
Anmeldungsdatum: 16.03.2002
Beiträge: 8576
|
Artchi Autor
18:37:21 16.03.2008 Titel: |
Klassen ohne getter/setter? |
Zitieren |
Also mich würde mal ein Artikel freuen, wie man denn Klassen-Designs ohne Getter und Setter hinbekommen soll. Lese hier immer wieder im Forum, das manche Leute es ein schlechtes Design finden. Aber mich würde mal interessieren, wie das ganze denn real umgesetzt werden sollte?
Wie würde man z.B. sowas "besser" lösen können:
| C/C++ Code: | class Widget
{
public:
void setModel(Model);
Model getModel();
}; | |
| C/C++ Code: | class Widget
{
public:
void setModel(Model);
Model getModel();
}; | |
| C/C++ Code: | class Widget
{
public:
void setModel(Model);
Model getModel();
}; | |
|
_________________ Bring back the Windows Start Menu Petition | GoPetition
Zuletzt bearbeitet von Artchi am 18:39:39 16.03.2008, insgesamt 1-mal bearbeitet |
|
 |
Keks9
Unregistrierter
|
Keks9 Unregistrierter
19:02:20 16.03.2008 Titel: |
|
Zitieren |
Ich würde den Artikel schreiben. |
|
|
|
 |
scrub
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.09.2004
Beiträge: 3500
|
scrub Mitglied
20:08:14 16.03.2008 Titel: |
Re: Klassen ohne getter/setter? |
Zitieren |
Anmerkung: Das ist nicht meine Meinung, sondern eine Argumentation, mit der ich tatsächlich konfrontiert wurde.
| C/C++ Code: | class Widget
{
public:
Model model;
}; | |
| C/C++ Code: | class Widget
{
public:
Model model;
}; | |
| C/C++ Code: | class Widget
{
public:
Model model;
}; | |
Begründung:
Der Setter kann nur wie folgt implementiert sein...
| C/C++ Code: | Widget::setModel(Model m)
{
model = m;
} | |
| C/C++ Code: | Widget::setModel(Model m)
{
model = m;
} | |
| C/C++ Code: | Widget::setModel(Model m)
{
model = m;
} | |
... weil das "die Definition" eines Setters ist. Der darf nicht anders aussehen. Also kann man den Member gleich public machen (siehe oben). |
_________________ "Ich gehöre nicht zu denen, die die Bundesrepublik ruinieren wollen. Ich hoffe, Sie machen noch Halt, Herr Kohl, ehe Sie unwissentlich vieles dazu tun, daß sie ruiniert wird!"
Zuletzt bearbeitet von scrub am 20:10:10 16.03.2008, insgesamt 1-mal bearbeitet |
|
 |
ich_du_er
Unregistrierter
|
ich_du_er Unregistrierter
20:15:26 16.03.2008 Titel: |
|
Zitieren |
Wie wäre es mit einem| C/C++ Code: | 1 2 3 4 5 6 7 8 9 | 1 2 3 4 5 6 7 8 9 | class Widget
{
public:
void model(const Model&);
const Model& model() const;
private:
Model model_;
}; | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 | class Widget
{
public:
void model(const Model&);
const Model& model() const;
private:
Model model_;
}; | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 | class Widget
{
public:
void model(const Model&);
const Model& model() const;
private:
Model model_;
}; | |
Dann kann man bei Bedarf z.B. die beiden Funktionen duch einen public Funktor ersetzen, sodass keine änderungen im Clientcode mehr erfolgen müssen:| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Widget
{
public:
ModelImpl model;
private:
class ModelImpl
{
public:
void operator(const Model&);
const Model& operator() const;
private:
Model model_;
};
}; | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Widget
{
public:
ModelImpl model;
private:
class ModelImpl
{
public:
void operator(const Model&);
const Model& operator() const;
private:
Model model_;
};
}; | |
| C/C++ Code: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Widget
{
public:
ModelImpl model;
private:
class ModelImpl
{
public:
void operator(const Model&);
const Model& operator() const;
private:
Model model_;
};
}; | |
|
|
|
|
 |
Badestrand
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
|
Badestrand Mitglied
20:16:35 16.03.2008 Titel: |
|
Zitieren |
Ich fände so einen Artikel auch interessant! Wie sollte er denn aufgemacht sein? Generelles Klassen-Design vor dem eigentlich Programmieren (also Planung) mit Fallbeispielen oder wie?
Und komplett ohne Getter? Weil einige Daten muss man ja rausholen? |
Zuletzt bearbeitet von Badestrand am 20:18:06 16.03.2008, insgesamt 1-mal bearbeitet |
|
 |
Apollon
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.04.2003
Beiträge: 1879
|
Apollon Mitglied
20:20:55 16.03.2008 Titel: |
|
Zitieren |
| Badestrand schrieb: | | Und komplett ohne Getter? Weil einige Daten muss man ja rausholen? |
Warum muss man das? Warum nicht einfach das Objekt, das die noetigen Daten bereithaelt, uebergeben? |
_________________ "Stil ist ein richtiges Weglassen des Unwesentlichen." - Anselm Feuerbach
|
|
 |
scrub
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.09.2004
Beiträge: 3500
|
scrub Mitglied
20:30:59 16.03.2008 Titel: |
|
Zitieren |
Weil es Inkonsistenz zur Folge haben könnte. |
_________________ "Ich gehöre nicht zu denen, die die Bundesrepublik ruinieren wollen. Ich hoffe, Sie machen noch Halt, Herr Kohl, ehe Sie unwissentlich vieles dazu tun, daß sie ruiniert wird!"
|
|
 |
Badestrand
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
|
Badestrand Mitglied
20:33:00 16.03.2008 Titel: |
|
Zitieren |
| Apollon schrieb: | | Badestrand schrieb: | | Und komplett ohne Getter? Weil einige Daten muss man ja rausholen? |
Warum muss man das? Warum nicht einfach das Objekt, das die noetigen Daten bereithaelt, uebergeben? |
Ach stimmt, irgendwie meinte ich das auch gar nicht so :-/ Meine Gedanken waren eben wie folgt: Die Methode "size()" in std::string sei ja auch ein Getter, weil es die Länge zurückgibt. |
|
|
|
 |
Knuddlbaer
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.12.2001
Beiträge: 5237
|
Knuddlbaer Mitglied
20:33:26 16.03.2008 Titel: |
|
Zitieren |
und wie kommt man an die nötigen Daten rann ? |
|
|
|
 |
Badestrand
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
|
Badestrand Mitglied
20:44:32 16.03.2008 Titel: |
|
Zitieren |
| Knuddlbaer schrieb: | | und wie kommt man an die nötigen Daten rann ? | Jedenfalls nicht, indem man eine Referenz auf ein Klassenobjekt zurückgibt. Eher halt die nur wirklich nötigen Daten als Datensatz rausgeben. Mit Referenz ist die Klasse z.B. gezwungen, selbst ein Objekt dieser Art zu halten. Bei der Methode "size" von std::string können die Daten ja auch berechnet werden, es ist halt entkoppelter. So sehe ich das jedenfalls. |
|
|
|
 |