オブジェクト指向言語を使用したことがないので、クラス設計をしたことはありません。しかし、TurboC++を使おうと思い、クラスを調べたことはあります。基底クラスがあり、その後延々と継承クラスが続きます。あるクラスを使おうとして、メソッドがどのクラスで定義されたものかさんざんぱ調べたあげく、やたら基底クラスの近くで継承されたクラスのメソッドだったということもありました。
こうした、苦労は無意味だと思います。ザラッと、平面的に並んだ関数を使う方がよっぽど楽だし、クラス化してカプセル化したところでどれだけの効果があるのでしょうか。少なくとも一人でプログラミングするのなら、カプセル化の効果はさほどでもありません。
これまで販売管理プログラムを2回外注したことがりますが、担当者は常に一人でした。(大抵の場合、新人でした。)だいたい、カプセル化しようとするのは大規模なフロジェクトでpublic変数なり関数なりが重複して誤動作することを防ぐという意味合いと理解しています。(非常に軽薄な理解なのでしょうが)一人でプログラムを組むのならpublic変数、関数の完全な管理は可能です。一人でプログラムするような超小規模なものならカプセル化は必要ありません、また、クラス化する必要もないと思います。
(ここからは経験がないので、単なる想像にすぎませんが、)
では、大規模なものなら、クラス化すべきかというと、これがそうとも言えないと思います。
だいたいプログラミング最初の段階で完全に仕事の全容が正確にわかっているというケースはないと思います。仕事が完了してみて初めて仕事の内容が理解できている、という場合がほとんどではないでしょうか。請負で仕事をする場合、プログラマーが発注先の仕事を完全に理解してプログラミングするとうことはありえません。プログラムを作成しながら、発注先の仕事の説明を受け、手直ししながら作成していくというのが実際のところだと思います。クラス設計はこの流れに全く、逆らっています。何を基底クラスとして定義するかというやたら抽象的な、どうかすると仕事の発注先でさえ理解していない内容を、1ケ月はそこら週に1回、2時間程度の説明しか受けていない(例えばですが)というような状況で定義できるわけがありません。
正しくクラス設計するためには、その仕事を2回以上請け負わなければ無理だと思います。一回、仕事が完了すれば、基底クラスからどういった継承クラスを定義していくかといった設計は可能でしょう。2回同じ仕事を請け負う。こんなことがあり得ますか。あり得ない。
クラス設計というのは絵に描いた餅です。仕事が完成する前に完成すべき仕事を完全に理解している、これができなければ、クラス設計は不可能と思います。
こうした、苦労は無意味だと思います。ザラッと、平面的に並んだ関数を使う方がよっぽど楽だし、クラス化してカプセル化したところでどれだけの効果があるのでしょうか。少なくとも一人でプログラミングするのなら、カプセル化の効果はさほどでもありません。
これまで販売管理プログラムを2回外注したことがりますが、担当者は常に一人でした。(大抵の場合、新人でした。)だいたい、カプセル化しようとするのは大規模なフロジェクトでpublic変数なり関数なりが重複して誤動作することを防ぐという意味合いと理解しています。(非常に軽薄な理解なのでしょうが)一人でプログラムを組むのならpublic変数、関数の完全な管理は可能です。一人でプログラムするような超小規模なものならカプセル化は必要ありません、また、クラス化する必要もないと思います。
(ここからは経験がないので、単なる想像にすぎませんが、)
では、大規模なものなら、クラス化すべきかというと、これがそうとも言えないと思います。
だいたいプログラミング最初の段階で完全に仕事の全容が正確にわかっているというケースはないと思います。仕事が完了してみて初めて仕事の内容が理解できている、という場合がほとんどではないでしょうか。請負で仕事をする場合、プログラマーが発注先の仕事を完全に理解してプログラミングするとうことはありえません。プログラムを作成しながら、発注先の仕事の説明を受け、手直ししながら作成していくというのが実際のところだと思います。クラス設計はこの流れに全く、逆らっています。何を基底クラスとして定義するかというやたら抽象的な、どうかすると仕事の発注先でさえ理解していない内容を、1ケ月はそこら週に1回、2時間程度の説明しか受けていない(例えばですが)というような状況で定義できるわけがありません。
正しくクラス設計するためには、その仕事を2回以上請け負わなければ無理だと思います。一回、仕事が完了すれば、基底クラスからどういった継承クラスを定義していくかといった設計は可能でしょう。2回同じ仕事を請け負う。こんなことがあり得ますか。あり得ない。
クラス設計というのは絵に描いた餅です。仕事が完成する前に完成すべき仕事を完全に理解している、これができなければ、クラス設計は不可能と思います。