全体的に言葉が足らぬ点、申し訳ありません。
デザインパターンにはオブジェクト指向が前提にあります。非オブジェクト指向である理由を挙げてくれると助かります。
非オブジェクト指向的(な考えである)と述べたまであって、オブジェクト指向ではないとは言ってないはずですが。
引用の前文に書きましたが、インスタンスがアクセスできる範囲を限定できない点について、カプセル化を妨げるという理由からです。
オブジェクト指向が前提にあるからといって、オブジェクト指向的であるとは限らないと思います。シングルトンは「インスタンスの唯一性を保証する」と銘打ってはいますし、その点のみに関して言えばオブジェクト指向です。しかし副作用としてオブジェクト指向とは言い難い状況ができかね無いと指摘しているのです。
プログラム単位で唯一性を保証する機会などそうそうあるものではないと思います。プログラム単位で唯一性を保証することに大きな正当性があるのなら、私はシングルトンを否定する気はありません。
よくわかりません。シングルトンに拡張性をもたせればいいのではないでしょうか。
管理はいたって簡素です。複雑というのがよくわかりません。
拡張性について)シングルトンとは、型にインスタンス(値)の制限を与える設計故に、型を継承するなど再利用することはできません。
管理について)私には、「グローバル変数の方がコードが書きやすい」と言っているのと同じに聞こえます。
それと管理に関して、「シングルトンの管理」ではなく「プログラム全体の管理」の点に留意下さい。
グローバルに扱える、唯一のオブジェクトであることを保証します。
グローバル変数とイコールではありません。
イコールと言ったつもりはありませんが。「だからよく「シングルトンはグローバル変数と変わらない」と言われるのです」という部分はイコールの意味になってしまうのでしょうか。
「だから」といったとおり、前文における特徴に関して、「グローバル変数と変わらない」と言っただけです。
どこからでもアクセスできるという特徴故、どこかで誰かがインスタンスを操作してもおかしくない以上、グローバル変数が避けられるのと同じ理由で管理に支障を来すと考えます。
シングルトンを使ったほうが見通しがよくなる事があるのは確かです。しかしそれは「全て見通さないといけない」ようなコードの規模の場合だけだと思います。
「見通しきれない」規模になった時、どこで何をされているかわからないです。
どのような業務や、内容のプログラムだと、シングルトンの面倒くささを理解できるのでしょうか?
実例を挙げてくれると助かります。
「規模の大きなプログラムになれば、自ずとシングルトンの面倒臭さを理解すると思います。」というのに関してはあくまで私的な論なので、理解できなければ無視して下さい。さして根拠があるわけでもないので。
シングルトンパターン、デザインパターンを利用することのメリットですが、
これを利用することによって、デザインパターンを知っている人にとっては、一瞬でコードが理解できます。
シングルトンパターンでのコードを見れば、「あっ、これはオブジェクトがひとつだな」とわかります。
私にはいささか共感しがたいですね。そもそもマルチスレッドにおける「唯一の」インスタンスの在り方や、実装方法は定義されていません。
シングルトンパターンを利用していないと、どこかでオブジェクトの内容が変更されたり、コピーされたり
する可能性が残りますし。ソースを全部読まないと理解できないと思います。
正直何をおっしゃっているのかわからないのですが、「シングルトンパターンを利用していると、どこかでオブジェクトの内容が変更されたり、コピーされたりする可能性が残りますし。」の間違いでしょうか?
そもそも変更したりコピーしたりできる範囲を制限すれば良い話なのです。そのためのカプセル化であり、シングルトンはそれができないです。どこで変更されるかわからないのはシングルトンの方だと思いますが?
引数に渡すと、コピーコンストラクタ、デストラクタなどの問題が出てきて、こちらの方が複雑に感じます。
「問題」が指すものが不明瞭です。コピーコンストラクタ?参照を使わないのでしょうか。デストラクタにおいてもデストラクタの呼び出される順序のわからないシングルトンの方がよほど複雑かと思いますが。デストラクタそのものが問題なのですか?
ところで、引数で回したオブジェクトから取得するインスタンスがそのアプリケーションプログラム内で唯一であることが保証されているとき、それはシングルトンとは呼ばないのでしょうかね。
引数で回すオブジェクトの型のインスタンスの生成者を制限できるのなら、有用かもしれません。しかし生成者の制限をするのであればシングルトンパターンの範疇を超える気がします。それはもはや別のデザインパターンであるように私は感じます。インスタンスの生成者を制限しないのなら、普通のシングルトンと変わらないですが、問題点もかわらないと思います。