Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Allgemeines zum Magazin ::  Klassen ohne getter/setter?  
Gehen Sie zu Seite 1, 2, 3, 4, 5, 6  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Artchi
Autor

Benutzerprofil
Anmeldungsdatum: 16.03.2002
Beiträge: 8576
Beitrag 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




Beitrag 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
Beitrag 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




Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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.
C/C++ Forum :: Allgemeines zum Magazin ::  Klassen ohne getter/setter?  
Gehen Sie zu Seite 1, 2, 3, 4, 5, 6  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.