質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2112閲覧

[C++]settergetterなくしかた

satouterawaku

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/11/15 10:23

###前提・実現したいこと
setter getterの排除
###発生している問題
C++でゲームを作っていて
Farmというクラスを作ったのですが
オブジェクト指向の本を読むとsettergetterをなくしたほうが良い
とかかれてありなくしたいのですがやり方がよくわかりません
###該当のソースコード
/////////farm.h///////////////////
class Farm
{
private:
int m_PosX;
int m_PosY;
bool m_use;
int m_seedtype;
public:
Farm();
int setfarm(int,int,int);
int getfarm(int);
};
/////////////////////////

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

setter/getterを形式的になくす意味はありません。これは目的ではなく結果です。
オブジェクト指向的な考え方に則って設計した場合、setter/getterを多用する結果になることはあまりないという経験則です。

Farmクラスが「何」をモデル化したものなのか明確にしましょう。
現在の設計から想像するに、農地の1区画をモデル化したもののように見えます。
そして、座標、使われている/いないの状態、何を育てているのかのデータを持っているようですね。
Farm以外のクラスも多数あると思いますが、それらのクラスとの関わりを設計しましょう。

農地を配置するような「何か」があると思います。ユーザの操作に従うのか、ランダムに生成されるのか分かりませんが、それを管理する「何か」があると思います。それがどのような方法でFarmを制御するのか決めることになります。恐らく、コンストラクタにて生成するのではないでしょうか? そのコンストラクタにはどのようなパラメータを与えるのか、その「何か」からどのような操作をするのか決まれば決めることができる筈です。

また、ゲームの進行に伴い、使われている状態に変わり、その時、何かを植えるのかも知れませんね。
その「操作」はなんでしょうか? 何かを植えることで使われるのか、もしくは、その前にゲーム内の「何か」がその農地を所有するのでしょうか?

これらのI/Fを設計することで、Farmに実装するメンバ関数が決まります。
それらが単純なsetter/getterしかないような場合、それはクラスではなく単なる構造体です。普通の構造体として設計しましょう。
普通の構造体より複雑な機能を実装する(これは通常setter/getterより複雑な関数になります)と全体的にまとまりが良くなる場合もあります。その時はクラスによる実装が妥当です。

投稿2016/11/15 10:45

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

提示ソースだけでは何とも言えません
どの本かは分からない&なぜなのかと言う理由は分かりませんが
むやみに使うなという話だと思います。
そのSet/Getは本当にそれだけで十分なのか。
それが必要なクラスに渡してそちらで責任もって処理させる。その中でのget/setは相変わらず必要ですよ。
という風に帰結していないですかね

もう立派な解答がついていた・・・
自分の拙い回答が恥ずかしい^^;

投稿2016/11/15 11:05

編集2016/11/15 11:07
ardin

総合スコア544

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問