- - PR -
オブジェクト指向プログラミングのセオリーについて
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-20 16:42
横槍です。ごめんなさい。
ん?誤解してませんか。
こう書かれてますよね。 クラス毎に書くというのは、同じものをクラス毎にゴリゴリ書くという意味ではありません。 同じような定義を各クラスに書く状況自体、おかしいですよね。 それぞれのクラスは、1つのclassかInterfaceでまとめるか、 あるいは、定義をまとめたクラスを保持すれば良いのでは? 具体的な例は、また後で投稿します。
Constクラスとかを定義して、 そこに共通定数をぶち込むようなことをおっしゃってますか? そういうのはお薦めしません。 理由としては、 ・定数を利用するプログラマーの、脳の負荷が増加する。 ・プロジェクトの規模が大きくなると、 同名異義語や異名同義語が増えてくるため、管理が大変。 名前空間やクラス、列挙体を利用するなどして、意味単位でまとめるようにしましょう。 | ||||||||||||
|
投稿日時: 2005-10-20 16:46
この「共通」の判断がオブジェクト指向を触り始めた人に曲者のようですね。 #グローバルでなぜいけない?という人たち 例えば、ActionプロパティがAdd,Copy,Move,Removeという列挙である場合 それを「共通」としてひとつにするか、それぞれのクラスの列挙とするか とか。 #なんかいい例えになってないような。。。 | ||||||||||||
|
投稿日時: 2005-10-20 16:54
私への質問があったようですが、すでに解決してるみたいですね。
メンテナンス時もプログラミング時も、キーボードを押す回数を減らす、という 省力化よりも、考える量を減らす、という省力化の方が価値があります。 価値があるならば、面倒でもいっぱいキーを打ちましょう。 _________________ たつごろー codeseek こみゅぷらす | ||||||||||||
|
投稿日時: 2005-10-20 17:20
あらら、安易に「共通」と書いては誤解をされちゃいますね。
この例で話そうとすると... Action のメンバに変更があった場合の対応の話になりますね。 とあるクラスで固有に変更があった場合と、全体で変更があった場合です。 うーん... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-10-20 17:20
たとえば、WindowFormから派生したFormA,FormBがあります。
それぞれのフォームからは、 共通で使用したい定数 constX,ConstY があったとします。 こういう場面を想定して、定数をどこに書くか考えてみました。
私の場合、こんな感じで定義します。 #「いや、それはおかしい」という所があれば、ご指摘くださいm( _ _)m | ||||||||||||
|
投稿日時: 2005-10-20 18:15
こんばんわ、餅宮です。
誠に申し訳ないですが、ここでいわれている「共通で使用したい定数等」の、 使用方法と範囲が、どのように想定されている定数か分りません。 具体的にはどのようなものでしょうか? #色々考えたですけど、関数の戻り値として定数を使用することはありませんし、 #クラスに属する値なら、そのクラスに定義しますから。 | ||||||||||||
|
投稿日時: 2005-10-20 18:16
#いや、半分冗談です。 結局、直値よりは定数、定数よりは列挙体やメタデータを使いましょう。 メタで抽象化していって、保守性を高くしましょうということと、根は一緒かも知れません。 オブジェクト指向よりも、ADTとして考えた方が理解しやすいかも知れませんね。 | ||||||||||||
|
投稿日時: 2005-10-20 18:48
たくさんの返答ありがとうございます。
皆さんの説明から恐らくこんな感じであろうというのは わかってきました。 しかし、そのイメージを文章にするのはちょっと時間をください。 ちょっと知恵熱が出てきました・・・。 また、即答できるとりあえずの返答のみ行います。
共通で使用したい定数とは、複数のForm上で使用するある領域の最大値サイズ などです。 ただ、共通で使用したい定数を1つのクラスやモジュールへぶち込んだ方が わかりやすいと思っていましたが、名前空間やクラス、列挙体を利用するなど して、意味単位でまとめるようにします。 主な方法として意味単位で1つのプロジェクトを作成し、名前空間をそれぞれ作成して、 定数は"Public Module"、構造体は"Public Structure"、などとまとめていこうかと 思っています。 |