こんにちは、さっそくですが質問です。
現在、VBでWindowsアプリを作成しています。
VBアプリの経験が0に等しいため、いろいろと調べながら作業を
しています。ちなみに、Javaは経験があります。
※意味不明な箇所があったらごめんなさい。
ボタンをクリックすると、Textの入力データを取得して、加工する
処理をつくりました。
複雑な処理になったので(1部重複)、Form クラス内にPrivateメソッドを作成して処理を任せるようにしました。
進めていると、Fromが大きくなってきまして、"このままではまずい..処理を行うソースを1つのクラスでまとめて管理しよう"と思い、ユーティリティクラス(?)を作成しました。
そのクラスでの、メソッドの公開レベル(修飾子)でつまってしまいました。
基本的にこのクラスのメソッドは上記のFormもしくは、関連したFormで
しか使用しないためPublicではなく特定の範囲内のみで公開するべきと
かんがえました。
いろいろと調べてみたのですが、この考えを実現する方法がわかりません。
(Javaでいうところの同一パッケージ内の公開みたいな感じです)
Friendというものがありましたが、ちょっと違う気がします。
(よくわかっていませんが..)
このような場合どういった方法をとればいいのでしょうか?
もしくは、そもそも私の考えがまちがいなのでしょうか?
(Formはでかくなってもしかたがないとか..別のやり方があるなど..)
VB設計での暗黙値的設計も今の段階で、分かっておりません。
そのあたりも含め、ご存知の方がおりましたら、よろしくお願いします。
No.4
- 回答日時:
(1).NetとVBの関係
以下は個人的意見です。Windows3.1時代の目標モデルは、Windows SDKで、それに対応した言語Packageが、C/C++7,VB2だと思います。Windows95からは、それがDocument-View方式になり、Windows2000でそれはいちおう完成したと見ています。その間の開発言語がVB4~6,VC2~6です。
WindowsXP以降は、目標モデルがSoftware Factoriesとなり、そのためにWindowsに.Netが導入されます。対応して出てきたのが、VB2002~2005,Managed C,C#です。.Netの導入により、VBやCのRuntimeのかなりの範囲を.Netがカバーしますが、従来のVBやCのRuntimeも使用できます。というわけで、.NetはVB固有のRuntime(?)ではありません。VBやCのRuntimeと、API層の中間に位置しています。
(2)Partialクラス
前回述べたように、PartialクラスはVB2005から使える、一種の便利機能だと思えます。なので、そこだけに注目した書籍やサイトは余り見た事がありません。
・プログラミング Visual Basic.NET Vol1,2.日経BPプレス
(2002時代に出た解説書で、今でも公式の基礎解説です)
・プログラミング Visual Basic 2005 上下.日経BPプレス
(上記の続編で、Partialクラスの使用法が載っています)
・Insider .NET(けっこう利用してます)。
(3)暗黙値的設計
暗黙知的設計ですよね?。私に言えるのは、(2)であげた書籍などを探って頂けたら、それなりに見えてくる、という事だけです。というか「Javaよりだいぶいい加減」と思われるのではないでしょうか?。際たるものは、無宣言でFormを表示できる事です。これはVB2002で一時廃止されたのですが、VBプログラマーの熱い要望に応えて(?)、2003以降では復活しました。
参考URL:http://www.atmarkit.co.jp/fdotnet/
ご回答ありがとうございます
(1).NetとVBの関係
なるほどです。だいぶイメージがつかめました。
(2)Partialクラス
やはり、このクラスを使って実装するのがベターかと考えています。
教えていただいた書籍等参考にさせていただきます。
(3)暗黙値的設計
はい..暗黙知的設計です..。
いろいろと見てみます。ありがとうございます。
No.3
- 回答日時:
見せたくない関数やメソッド作ったとしても ソースレベルで配布してしまっては意味がないように思います
VB.NETでしたら Protected、Friend Protected、Friend、Privateなどのアクセス指定子あります
プロジェクト内のクラスの場合
Public、Friend Protected、Friendへのアクセスが可能です
プロジェクト外のDLLなどへの参照の場合
Publicのみへのアクセス可能 ・・・ クラスオブジェクト経由
自プロジェクト内へクラスを追加してこのクラスがInheritsを使用してDLLのクラスを継承した場合
クラスオブジェクトを使用する側は『プロジェクト内のクラスの場合』と同様です
追加クラスの中では MyBase経由で参照クラスのPublic,Protected,Friend Protected指定子へアクセス可能です
ソース提供なら Public, Friend Protected, Friend
DLL提供Inherits継承なら Public, Friend Protected, Protected
が使用可能なようです
ご回答ありがとうございます。
なにやら、知らない言葉がでてきて混乱ですw
さっそく周辺情報を調べてみました。公開に関する仕様がある程度(?)理解できました。ありがとうございます。
ちなみに、
「見せたくない関数やメソッド作ったとしても ソースレベルで配布してしまっては意味がないように思います」
すいません。最終的な配布はDLLになると思います。(規模は不明ですが)
開発という小さな世界の中ではソースレベルという回答でした。
なので、「見せたくない」というよりは、「むやみに使われたくない」
という背景です。
No.2ベストアンサー
- 回答日時:
VB6,VB2002(初代.Net),2003,2005のどれをお使いでしょうか?。
(1)VB6
同じ問題にぶつかりました。VB6には実装継承がないので、Javaのような細かい制御が効きません。せっぱつまってeventを利用しました。
Form側のPrivateメソッドを全てeventにおきかえ、そのeventを目標クラスに接続して、eventの実装コードをそのクラス内に書きました。結局これは、#1さんの言うImplementsと同じなのですが、多少コードが直感的という利点があります。
(2)VB2002,2003
こっからは実装継承があるので、#1さんの方法が標準になると思います。
(3)VB2005
Partialクラスを使う方法があります。これは任意のクラス(Form含む)のコードを、分散して書く方法で、個人的な意見では「隠れディレクティヴ」です。
コンパイラーは、Patial Class Formのクラス名~End Classまでのブロックを、Formクラスの一部とみなし、コンパイル時にPatialブロックの内容を、Formクラスに結合してコンパイルします。
なので空のClassを用意して、Patialブロックを作り、ブロック内にPrivate関数を書けばOKです(ClassはいくつあってもOKです)。
(4)その他
暗黙値的設計とは、Formの暗黙のインスタンス化などの事でしょうか?。補足を下さい。
この回答への補足
すいません...
暗黙値的設計 = 一般的に、VBを使ってアプリを設計する際の、常識的
な設計
という意味でした。意味不明な言葉を使ってしまってすいません。
例えば、今回のように、ボタンをクリックされて処理を行うという際に、
・複雑な処理の場合
1. とにかくボタンクリック内に記述する
2. Formクラス内のメソッドに分ける
(多少Formはでかくなっても仕方がないという考え)
3. クラスを分けて管理
といた選択や
・簡単処理の場合
1. ボタンクリックに書いてしまう
2. 複雑な処理の管理と統一性を持たせるために、同じクラスなどで管 理する
といった、一般的にはこういう風にやることが多いといった知識です。
この辺りの知識につきましても、サイト、書籍など、参考になるものが
ありましたら、宜しくお願いします。
ご回答ありがとうございます。
Visual Studio 2005 を使っています。ランタイムは.Net 2.0です(?)
(ご質問の答えになっているでしょうか?
.Net と VBの関連がまだいまいち理解できておりません..)
そうなりますと、(3)の方法が使えるということでしょうか?
ちなみに、(3)の方法を実装するにあたり、参考になるサイトを教えていただければ幸いです(他に、VBについて参考になるサイトもあれば..)
No.1
- 回答日時:
そのクラスを使う際に提供するのはクラスファイルなのでしょうか
それともActiveX.DLLなどのバイナリ提供なのでしょうか
前者であるならPublicもFriendも同じような振る舞いをします
後者ならPublicはアクセスできますがFriendはアクセスできません
お使いの環境がVB6なら他に指定の方法がないため範囲を限定した公開といった使用方法は無理だろうと思います
あとあるのはImplementsによる継承ですがこれもご質問の用途むきではありません
ご回答ありがとうございます。
提供はクラスファイルです。
ちなみに、後者のほうに関係しますが、Friendはdll単位でアクセス制限がかかるという考え方であっているでしょうか?
(アセンブリ単位という記述がありましたが..)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- 公認会計士・税理士 申告書等の税理士欄について 5 2022/09/14 17:23
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 2 2023/03/02 18:54
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- 弁護士・行政書士・司法書士・社会保険労務士 資格制度上の他資格の試験免除の撤廃について 4 2022/03/29 13:48
- 弁護士・行政書士・司法書士・社会保険労務士 司法試験合格者の司法書士試験の受験について 3 2022/08/31 16:40
- 国家公務員・地方公務員 公務員試験の数的処理で苦戦しています。 1 2023/01/30 08:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
抽象クラスをJUNITでテストする...
-
抽象クラスからオーバーライド...
-
JavaにListElement型ってあるん...
-
「ラッパークラス」の存在意義...
-
オーバーライドとラッパーの違い
-
C#からDLLを呼びたいのですが・...
-
vb.net 自作プロパティの削除に...
-
(vba)他のアプリケーションの右...
-
setTextについて
-
抽象クラスのエラーが出ます
-
委譲って何ですか?
-
単体テストのテストケースにて...
-
【C#】クラスのコンストラクタ...
-
JavaでのAPIの覚え方ってみさな...
-
オブジェクト指向の特徴
-
JTextFieldの入力制限
-
ASP.NETでの共通コードの書き方...
-
「インターフェイス」って何の...
-
「IOException は対応する try ...
-
Javaのインターフェイスの意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
(vba)他のアプリケーションの右...
-
抽象クラスをJUNITでテストする...
-
「ラッパークラス」の存在意義...
-
ASP.NETでの共通コードの書き方...
-
JTextFieldの入力制限
-
「継承されたメソッドの可視性...
-
C# 「データが失なわれる可能性...
-
VB DLLプロジェクトについて
-
c++でのヘッダーファイルの循環...
-
【C#】クラスのコンストラクタ...
-
「IOException は対応する try ...
-
ファイルパスが取得出来ない(P...
-
メソッドの引数にクラス名を渡す
-
ゲッターを使わないで変数にア...
-
Javaのインスタンス化の構文の...
-
オーバーライドとラッパーの違い
-
vb.net 自作プロパティの削除に...
-
なぜインタフェースを使うのか?
-
VBがオブジェクト指向言語でな...
おすすめ情報