• ベストアンサー

共通関数をどうするべきか

複数の場面で共通の関数を使っていました。 EXCELなどのVBの共通関数は、VB2010ではmoduleに置けば 同じになることが分かりましたが、批判もあるようです。 取り敢えず、次の3つに絞りこみましたが、どれが適当でしょうか。 1 moduleに記述してどこでも自由に呼び出せるようにすべき 2 common等のクラスを作って、そこにまとめて置く 3 あくまで関連するクラスに付属させるべき。重複は仕方ない。 4 その他(理由をお願いします)

質問者が選んだベストアンサー

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

オブジェクト指向的には3ぽいけど、 重複は無駄や冗長を含んでいる可能性が 高いわけで、重複しないようにすれば いいのでは? この手の質問をする人やオブジェクト指向 が理解できないという人を良く見ますが、 人間が日常生活でやり易いように手順を 考える事に近くて、既存の .NET Framework を参考にして設計すれば、そこまで悩む必要 は無いと思います。 プログラムだから共通関数にっていう意識 が強いんじゃないでしょうか?実装方法に ついてもインターフェースや継承など色々 あるので、質問にあげられている条件だけ では最終決定できないですね。 3がベースで、2寄りのものも存在して、 4で機能面をフォローといった感じに 思います。

noname#159617
質問者

お礼

すみません。そうなんです。 EXCELのVBしか触ってないので・・・ クラスとかその辺を読んでいたらグチャグチャになりました。 とりあえず今まで使ってきた共通関数をモジュールに移したんですが、 これは必要なのだろうか??ということで今悩んでいます。 取り敢えず作るべきものは決まっています。 ご意見有り難うございました。

noname#159617
質問者

補足

一応感想ですが、この手の質問ってよくあるのですか? 同じところで悩む人が意外と多いみたいですね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 複数のクラスで共通した関数を使いたい場合

    C++なのですが、複数のクラスで共通して使いたい関数がある場合、親クラスに共通したい メンバ関数を作り、その子として複数のクラスを作るのが良いのでしょうか? それ以外の方法だとクラスの外でstatic宣言した関数であればクラス内で使えるようでした。 (static宣言しないとコンパイルエラーとなりました) しかし以下のサイトにあるように「共通関数継承のデメリット」があるようで推奨していないようです。 ttp://d.hatena.ne.jp/katzchang/20110216/p1 ttp://blog.jnito.com/entry/20110217/1297896355 なお、自分には上記サイトの内容は難しくて理解できませんでした。 つまり、「数のクラスで共通して使いたい関数がある」場合、上記サイトはどうすればいいと言っているのでしょうか? よろしくお願い致します。

  • 複数クラスで共通の関数、変数の呼び出し方

    お世話になります。 質問させて頂きたいことは 複数のクラスで共通して使われる関数、変数があった場合、その関数、変数は私の中で次の2通りの方法が思い当たったのですがどちらのほうがメモリ等の使用からよいのでしょうか? 1つめは あるヘッダファイル****.hを作成し、その中で関数を宣言し、変数はそのヘッダファイルのソースファイル中のグローバル変数とする。 2つめは クラスを作成し、静的メンバ関数、静的メンバ変数とする。 ネット等で拝見すると、あまりグローバル変数というのはよく見られていないようなので2つめの方がいいのかなと思っているのですが、静的メンバを今まで使ったことがないので、このような用途に使われるべきなのかも正直わかっていません。 検討外れのことを言っているのかもしれませんが、教えて頂ければと思っております。宜しくお願い致します。

  • VC++6.0からVB.NETで作成した関数を呼ぶことができますか?

    VB.NET(Visual Basic 2005 Express Edition)でクラスライブラリ(AAA.dll)を作成し、BBBというModuleにCCCというFunctionをひとつ作成しました。 そのFunctionをVC++6.0で作成したプログラムから呼び出すことは可能でしょうか?また、可能な場合はどのような手順で呼び出すことができるのでしょうか? ■VB6.0でDLLを作成した場合 DLLのファイル名とFunction名さえ指定すればVC++6.0よりLoadLibrary、GetProcAddress関数を使用して呼び出せる。 ■VB.NETでDLLを作成した場合 DLLのファイル名+Module名+Function名という構成になってしまい、従来のLoadLibrary、GetProcAddress関数ではModule名が指定できないように思われるのですが・・・どうなんでしょう。 ご存知の方いらっしゃいましたらご教授お願いいたしますm(_ _)m

  • VB6.0のString関数に代わるVB2008のそれは?

    2009年1月27日にVB 2008Expressをダウンロードしたばかりの初学者です。 ですから、色々とわからないことだらけです。 で、今回は VB6.0のString関数に代わるVB2008のそれ。 ? String(12, "*") ************ Function Strings(ByVal C As Char, ByVal L As Integer) As String   Return Space(L).Replace(" ", C) End Function 少しは探しましたが、適当なのがなくてStrings関数を作成してしまいました。 2週間程度の初学者。 しかも、文字列関連のヘルプは昨日に初めて紐解いたばかり。 ですから、「適当なのがない」との判断はかなり怪しいものです。 そこで、「VB6.0のString関数に代わるVB2008のそれは、これですよ!」という回答をお願いします。

  • VB.NETのモジュールで定義した関数のように、どこからでも呼び出せる 関数は、C#でどのように記述するのでしょうか?

    C#2005で、どこからでも呼べる関数ができないか悩んでいます。 昔、関数のプログラムを作っていた頃から、進歩せず オブジェクト思考的なプログラミングが苦手で、 エラー 名前 '***関数名***' は現在のコンテキスト内に存在しません。 というエラーがたくさん出て、苦しんでおります。 VB.NETのモジュールで定義した関数のように、どこからでも呼び出せる 関数は、C#でどのように記述するのでしょうか? クラスが基本という方針はわかりますが、まず手がかりが欲しいです。

  • 異なる複数の言語から共通モジュールを呼び出す方法

    4つの独立したサーバで、それぞれ異なる言語で記述されたシステムが1つずつ稼動しています。例えばC++、Java、PHP、Rubyとします。 これら4つのシステムに同一の機能追加を行いたいと考えているのですが、4つの言語でそれぞれプログラムを作成するのは大変なので、何とか1つで済ませることは出来ないかとやり方を探っています。 例えばCで「myCommon.dll(またはmyCommon.so)」という共通モジュールを作成したとして、C++、Java、PHP、Rubyで稼動している各システムからこの共通モジュールを呼び出す方法はあるのでしょうか?(共通モジュールは各サーバに1つずつ配置する予定です。ネットワーク越しに実行するわけではありません。) 一応、共通モジュールを実行形式にして、各システムからexec関数などを使用して呼び出すことは出来るようなのですが、共通処理を実行形式で置いておくのが何となく気持ち悪いのと、関数が複数定義してある場合にコマンドラインオプションで処理を振り分けないといけなくなるため、スマートなやり方では無いのではないかと感じています。 理想的なのは、共通モジュールに定義された関数を、それぞれの言語でネイティブな関数のように呼び出せることなのですが・・・。 このように複数の言語から呼び出されるような共通処理を作成する場合、「常套手段」のようなものはあるのでしょうか?

  • 共通クラスからの調整状態の切替について

    いつもお世話になってます。 皆さんのおかげでちょっとづつですが Java に慣れてきたところです。 今回もヨロシクお願いします! 今、問題となっているのはメニューからモード切替により 画面上に配置されている各種コントロールなどの調整状態を 切り替えたい(setEnabled())のですが切り替えられません。 コンテナ上に配置されている Component を取得して setEnabled() により切り替えようとしています。 ***** Component[] wkObj = jContentPane.getComponents(); for( int i=0; i<CtlCnt; i++ ) wkObj[i].setEnabled(true); ***** 状況としては複数の画面を持つアプリケーションを作成しています。 メニューやステータスバーなど基本部分を共通化するため 共通クラスを作成して、共通クラスを継承した各種クラス(画面)を 作成しています。 メニューの処理は共通クラスが持っているため 共通クラス内で上記コードを記述してあります。 各種画面用に乗せているコンポーネントの調整状態を切り替えるのは 共通クラスからではムリなのでしょうか? この文章で分かってもらえますかね?(汗)

  • VB6.0とVB.NETの違いについて

    初めて2日目です 会社の研修でVB6.0をやることになり 参考書を片手に悪戦苦闘しています 学生のころにVB.NETをかじったことがあるのですが 割と似ているところがあったりして戸惑っています VB.NETの癖で構文してしまうのでエラーがたくさん出てしまいます そこで皆さんにお聞きしたいのですが VB6.0とVB.NETの違いを教えていただきたいのですが お聞きしたいことは 1)VB.NETとVB6.0の機能や用途についての違い 2)VB.NETとVB6.0で共通で使える関数 3)逆に互換性のない関数(VB6.0では使えないもの) 4)(あれば)同じ記述で違う機能の関数 5)上記とは逆に違う記述で同じような機能を持つ関数 以上のことをお聞きしたいです 質問の内容をもう少し具体的にかければよかったのですが 学習を始めて間もないので抽象的ですいません

  • VB.NETでDLL関数を呼び出すには

    VB.NETでDLLの関数を呼び出す時に、 NewではなくCreateObject()を使って呼び出すには、 どのように記述をすればよいのでしょうか。 具体的には、 ソリューション名 ClassLibrary1で ---------------------------------- Imports System.Windows.Forms Public Class Class1 Public Sub test() MessageBox.Show("テスト") End Sub End Class ---------------------------------- のコードをビルドしてClassLibrary1.dllを生成して、 ソリューション名 ConsoleApp1で ---------------------------------- Imports ClassLibrary1 Module Module1 Sub Main() Dim obj As Class1 obj = New Class1() 'obj = CreateObject("Class1") obj.test() End Sub End Module ---------------------------------- のコードをビルドして実行すると、 正しく実行できますが、 obj = New Class1() を obj = CreateObject("Class1") のようにすると図のようなエラーになります。 Newではなく、CreateObject()を使ってDLLを呼び出すには、 どのように記述をすればよいのでしょうか。 よろしくお願いします。 (Windows10)(Visual Studio 2022)

  • vb2008でのクラスライブラリ実行に関して

    vb2008でのクラスライブラリ実行に関しての質問なのですが、 クラスライブラリで以下の内容のプロジェクトを作成しました。 プロジェクト名:TEST ファイル名:TEST1.vb '~プログラム内容~ Module D01001B Public Function Main(ByVal CmdArgs() As String) As Integer     'バッチの処理内容 End Function End Module このバッチをデバックしたいのですが、どうやらクラスライブラリは 単体ではデバックできないらしくどうすればできるのか困っています。 調べてみると新しいプロジェクトでWindowsフォームアプリケーション を選択し、フォームからボタンを押して実行する方法があるとの ことなのですがどのように記述したらよいかわかりません。 できればどのように記述すれば実行(呼び出し)できるのか教えていただけないでしょうか? 以上