- PR -

オブジェクト指向プログラミングのセオリーについて

投稿者投稿内容
taa
常連さん
会議室デビュー日: 2005/08/29
投稿数: 44
投稿日時: 2005-10-20 13:40
こんにちは。VB.NET&プログラマーの初心者です。

今、オブジェクト指向プログラミングをする上で、共通的な変数や定数、
及び構造体などを作成する上でどのようなソース形式したら良いのか
(共通のクラスがいいのか、共通モジュールがいいのか、
メインのクラスにPublicとして宣言した方が良いのか)
悩んでいます。

オブジェクト指向プログラミングにおいての
セオリーを知らない為、どのようにプログラミング
していった方が万人にわかりやすく、管理がしやすいのか
皆さんからアドバイスを頂きたいと思います。

参考までに開発環境を以下に記載します。

<開発環境>
VS2003(日本語版が発売次第、VS2005に移行予定)
VB.NET
※現在、新製品のクラサバソフトのクライアント画面を開発中です。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-10-20 14:07
引用:

共通的な変数や定数


そういうクラスを作ることになると思います。

複数の箇所で使われているから共通という発想ではなく、1つにまとめた
方がすっきりするものを1つのクラスにするという視点が良いと思います。

たとえ偶然同じ値であっても、別の意味があって、別の目的に使っている
ならば1つにまとめるべきではありません。個々のクラスに持つほうが良
いでしょう。

クラスを作っていくと、アプリケーション全体で共通の定数というのは、
ほとんど無い状態になるはずです。

_________________
たつごろー
codeseek
こみゅぷらす
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-20 14:13
引用:

taaさんの書き込み (2005-10-20 13:40) より:

今、オブジェクト指向プログラミングをする上で、共通的な変数や定数、
及び構造体などを作成する上でどのようなソース形式したら良いのか
(共通のクラスがいいのか、共通モジュールがいいのか、
メインのクラスにPublicとして宣言した方が良いのか)


「共通のクラス」とは何でしょうか?
たとえば Common という名前のクラスがあって、
そこに汎用的な静的メソッドが詰め込まれているようなライブラリが、
世の中に溢れていますが、そういう類でしょうか?

クラスである以上、そのクラスに特化したメソッドを定義することになります。
ソースを見ていても非常に判りやすい記述になるからです。
(その実例が .NET Framework ですが、これはサービス指向に近いですね)

標準モジュールは、OOP ではやめた方が良いでしょう。
いわゆる、グローバルという考え方が "できてしまい" ます。

引用:

オブジェクト指向プログラミングにおいての
セオリーを知らない為、どのようにプログラミング
していった方が万人にわかりやすく、管理がしやすいのか
皆さんからアドバイスを頂きたいと思います。


オブジェクト指向のセオリと言われてしまうと、
説明に莫大な文字数を費やすことになります。
ということで、勝手ながら少し的を絞らせて頂きます。

質問を見る限り
 「昔で言う "共通モジュール" を作りたいが、どうやって組むべきか?」
と捉えられます。

ですので「万人にわかりやすく」「管理がしやすい」について返答します。

引用:

万人にわかりやすく


基本はクラス単位で独立していれば OK という漠然とした答えになります。
具体例は .NET Framework を見るとわかるでしょう。
広大な海でありながら、非常に判りやすいです。

引用:

管理がしやすい


.NET であれば、クラス ライブラリとして作成し、他のプロジェクトから参照します。
作成途中であっても「プロジェクト参照」が使えますし、VSS と合わせると大変便利です。

---

万人にわかりやすい・管理しやすい、の 2 点において以下のリンクはかなり有用です。
一度、目を通されることを強くお勧めします。

  クラス ライブラリ開発者向けのデザイン ガイドライン

ただ、最低でも、継承の利点と欠点・インターフェイスの利点くらいまでは勉強して、
クラス ライブラリの作成に着手した方が良いかと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
taa
常連さん
会議室デビュー日: 2005/08/29
投稿数: 44
投稿日時: 2005-10-20 16:11
たつごろーさん、じゃんぬねっとさん回答ありがとうございます。
お二人の回答を聞く限り、そもそも共通的な変数・定数・構造体等を
持たなければいけないプログラム構成が間違っているような気がします。

ちょっとわからない部分もあったので、
以下に1つずつコメントしていきます。

引用:

そういうクラスを作ることになると思います。

複数の箇所で使われているから共通という発想ではなく、1つにまとめた
方がすっきりするものを1つのクラスにするという視点が良いと思います。

たとえ偶然同じ値であっても、別の意味があって、別の目的に使っている
ならば1つにまとめるべきではありません。個々のクラスに持つほうが良
いでしょう。

クラスを作っていくと、アプリケーション全体で共通の定数というのは、
ほとんど無い状態になるはずです。


たつごろーさんへ。
なるほどー、そういうものなんですか。
目的や処理毎にまとめるということはとてもわかりやすいのですが
実際にプログラミングをすると、同じような定義をそれぞれのクラス
へ記述しなければならないからちょっと面倒ですね。
また、共通で使用したい定数等はクラス毎に分けるとメンテナンスが
面倒そうなのでどうなのかなぁと思いました。


引用:

「共通のクラス」とは何でしょうか?
たとえば Common という名前のクラスがあって、
そこに汎用的な静的メソッドが詰め込まれているようなライブラリが、
世の中に溢れていますが、そういう類でしょうか?


じゃんねねっとさんへ。
説明が不十分ですみません。
VB.NETでプログラミングをしていく中で、それぞれのクラスで
共通的に使用する定数や構造体を、C言語でいうヘッダーファイルのように、
まとめたいと思っているのですが、ソース形式をモジュールやクラスなど、
どの形式で作成した方が良いのか分からず、クラス形式の事を「共通のクラス」
と表現していました。

引用:

標準モジュールは、OOP ではやめた方が良いでしょう。
いわゆる、グローバルという考え方が "できてしまい" ます。


じゃんねねっとさんへ。
どこかの本にも同じことが書いてありました。

引用:

万人にわかりやすい・管理しやすい、の 2 点において以下のリンクはかなり有用です。
一度、目を通されることを強くお勧めします。

  クラス ライブラリ開発者向けのデザイン ガイドライン


じゃんねねっとさんへ。
お勧めのリンクはとても参考になりました。ありがとうございます。


で、最後にお二人へ質問ですが、
もしかして、通常オブジェクト指向プログラミングでは
共通的な定義体(C言語のヘッダーファイルのようなもの)が
必要な場合は、クラスとして作成し、そのクラスを継承(Inherits)して
使用していくのが一般的だということですか?


[ メッセージ編集済み 編集者: taa 編集日時 2005-10-20 16:21 ]

[ メッセージ編集済み 編集者: taa 編集日時 2005-10-20 16:27 ]
宣伝中止!
大ベテラン
会議室デビュー日: 2005/08/30
投稿数: 155
お住まい・勤務地: 東京に作業場所変更・・・
投稿日時: 2005-10-20 16:21
引用:

taaさんの書き込み (2005-10-20 16:11) より:

引用:

.NET であれば、クラス ライブラリとして作成し、他のプロジェクトから参照します。
作成途中であっても「プロジェクト参照」が使えますし、VSS と合わせると大変便利です。


じゃんねねっとさんへ。
今まさにプロジェクト参照をして開発しています。便利ですね。
後、VSSってなんですか?




VSS:Visual Souce Safe
マイクロソフトのソース履歴管理ツール(?)だったと。
詳細はマイクロソフトのページを参照してみてください。
http://www.microsoft.com/japan/msdn/ssafe/
_________________
#「やらない」と「出来ない」を混同してはならない
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-20 16:25
引用:

taaさんの書き込み (2005-10-20 16:11) より:

後、VSSってなんですか?


Visual SourceSafe のことです。(^-^*)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
taa
常連さん
会議室デビュー日: 2005/08/29
投稿数: 44
投稿日時: 2005-10-20 16:31
すみません。
規約に引っかかってしまったみたいなので
宣伝部と思われる箇所を削除しました。

引用:

Visual SourceSafe のことです。(^-^*)


また、じゃんねねっとさん回答ありがとうございます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-20 16:34
追記された内容について返答です。

引用:

taaさんの書き込み (2005-10-20 16:11) より:

で、最後にお二人へ質問ですが、
もしかして、通常オブジェクト指向プログラミングでは
共通的な定義体(C言語のヘッダーファイルのようなもの)が
必要な場合は、クラスとして作成し、そのクラスを継承(Inherits)して
使用していくのが一般的だということですか?


あ、それは違います。
共通となる定義 (定数) などは、それはそれで共通となるクラスに分類して、
public なアクセス修飾子にしておけば問題ないと思います。
(うまく表現できませんが...)

それ以外のものは、使用するクラス内で定義しましょうということです。
プロジェクトによっては外部ファイルなどにしておくべき定数もありますが。

# 前レス、被ってしまいました...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)