![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.2ベストアンサー
- 回答日時:
メソッドを用意しなくても直接参照/設定すれば、
ことが足りる場合は、パブリック/プライベートの選択は
個人の場合、難しいですね。(ルールは自分なので)
あえて言えば、将来性をどの程度考慮するかでしょう。
あと、クラスの機能が変数主体(=従来の構造体のような使い方)から
機能主体(メソッドが充実)になれば、直接外部から参照/設定したい
変数は減ってきます。
そのとき、内部でしか使用しない変数は自然と
プライベートになるでしょう。
回答ありがとうございます。
非常にわかりやすい説明ですね。
ルールは自分なので...そうなんです。
そういうことがいいたかったのです。
No.3
- 回答日時:
tomojyuuさん、今晩は。
「使う意味はわかるし必要性もわかる」とあるので、蛇足かもしれませんが、私自身の事を書きます。私は、個人的な趣味のためのプログラムを作っています。
私は、メンバー変数をpublicにした事はありません。
クラスメンバーは整合性が取れてなければなりません
よね。例えば、
class X
{
int* dataptr;
int size; // dataptrの有効データ数を保持
};
このような場合、もしsizeをpublicにしていると、外部から変更できて、インスタンスの状態が不正になり得ますよね。
このため、私はpublicメンバーを持つクラスはまともなクラスとは思っておりません。
例え個人的なプログラムの場合で有ってもです。
多少作りにくいということは言えるかもしれませんが、それはまともなクラスを作るための当然のコストだと思っています。
回答ありがとうございます。
外部から変更しなければいい(自分のルール)
と思ってしまうとプログラムが動けばよいと
なってしまいますね。
graphaffineさんみたいな意見がでると思って
いました。
No.1
- 回答日時:
非常に本質的な質問だと思います。
たしかにパブリックにした方が作りやすいでしょう。
「オブジェクト指向」の観点からすると、なるべくプライベートにする方が望ましいのです。
ただ、個人で作る規模のプログラムにオブジェクト指向を採用すると、かえって効率が悪くなることがあります。
ここで「オブジェクト指向」の意味に戻って考えてみます。
オブジェクト指向は、大規模プログラミングのために開発された手法です。
小さいプログラムなら、オブジェクト指向でも、そうでなくても、プログラムは作れます。
大きいプログラムになるとオブジェクト指向が力を発揮します。
オブジェクト指向は一つの流儀です。
ある流儀にコミットする場合、
そこで言われたことはとりあえず意味がある、と思わないとやっていけないでしょう。
変数をプライベートにするのは「情報隠蔽」という、
オブジェクト指向の(実はそれ以前からの)、「作法」の一つです。
多数のプログラマが研究して、「そうした方がいい」と結論づけられました。
すぐにはわからないかもしれませんが、
情報隠蔽には意味があることは知っていてください。
将来、自分でプログラム設計をして、情報隠蔽を使ったときと使っていないときを比べれば、
どういう意味かわかるときが来ると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- 学校 中2女子不登校です。中2の5月辺りからクラス替えの変化で1年の頃からのストレスによる頭痛が悪化し、体 2 2022/03/23 17:16
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- 学校 助けるというよりかは聞いてアドバイスを欲しいです。ただ聞いてくれるだけでもいい。今まで結構な数のアニ 2 2023/05/16 19:44
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- 友達・仲間 文化祭の準備に行くべきか悩んでいます。 高校生女子です。 私は不登校気味で、終業式にも行けませんでし 6 2022/07/21 13:04
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列とオブジェクトの違い
-
class定義のphpをファイル分割...
-
phpで時間を増やしていくにはど...
-
[CakePHP2.2] :: の意味と役割
-
「クラス関数」「メンバ関数」...
-
phpにおける初期化の意味
-
phpでオブジェクト指向と呼べる...
-
PHPのフレームワークの中でSmar...
-
クラス名の前に、
-
(クラス関連)staticキーワー...
-
データベースで値をインクリメ...
-
「static宣言されているメンバ...
-
ラッパークラスって何ですか?
-
phpのクラスにて別ファイルの変...
-
クラスについて
-
ワードプレスではPHPをどこまで...
-
さぁコーティングだ! とその...
-
ソースファイルの分け方について
-
php インスタンスとオブジェク...
-
正規表現について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「クラス関数」「メンバ関数」...
-
phpのクラスにて別ファイルの変...
-
ラッパークラスって何ですか?
-
class定義のphpをファイル分割...
-
phpのクラスメソッドの定義が長...
-
'_'(アンダースコア)の使い方...
-
クラス
-
配列とオブジェクトの違い
-
PHPのクラス名の付け方
-
codeigniter cartのoptions
-
メンバインスタンスへのアクセ...
-
PHPでオブジェクト指向開発して...
-
ユーザー定義関数とクラスの違...
-
ソースファイルの分け方について
-
データベースで値をインクリメ...
-
require_onceについて
-
PHPでサブクラスからスーパクラ...
-
phpで使用不可のクラス名
-
php、可変プロパティ名について
-
比較演算子===と!==について
おすすめ情報