アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、さっそくですが質問です。

現在、VBでWindowsアプリを作成しています。
VBアプリの経験が0に等しいため、いろいろと調べながら作業を
しています。ちなみに、Javaは経験があります。
※意味不明な箇所があったらごめんなさい。


ボタンをクリックすると、Textの入力データを取得して、加工する
処理をつくりました。

複雑な処理になったので(1部重複)、Form クラス内にPrivateメソッドを作成して処理を任せるようにしました。

進めていると、Fromが大きくなってきまして、"このままではまずい..処理を行うソースを1つのクラスでまとめて管理しよう"と思い、ユーティリティクラス(?)を作成しました。

そのクラスでの、メソッドの公開レベル(修飾子)でつまってしまいました。
基本的にこのクラスのメソッドは上記のFormもしくは、関連したFormで
しか使用しないためPublicではなく特定の範囲内のみで公開するべきと
かんがえました。
いろいろと調べてみたのですが、この考えを実現する方法がわかりません。
(Javaでいうところの同一パッケージ内の公開みたいな感じです)

Friendというものがありましたが、ちょっと違う気がします。
(よくわかっていませんが..)

このような場合どういった方法をとればいいのでしょうか?
もしくは、そもそも私の考えがまちがいなのでしょうか?
(Formはでかくなってもしかたがないとか..別のやり方があるなど..)

VB設計での暗黙値的設計も今の段階で、分かっておりません。
そのあたりも含め、ご存知の方がおりましたら、よろしくお願いします。

A 回答 (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/
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

(1).NetとVBの関係
なるほどです。だいぶイメージがつかめました。

(2)Partialクラス
やはり、このクラスを使って実装するのがベターかと考えています。
教えていただいた書籍等参考にさせていただきます。

(3)暗黙値的設計
はい..暗黙知的設計です..。
いろいろと見てみます。ありがとうございます。

お礼日時:2007/12/17 20:17

見せたくない関数やメソッド作ったとしても ソースレベルで配布してしまっては意味がないように思います



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
が使用可能なようです
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

なにやら、知らない言葉がでてきて混乱ですw
さっそく周辺情報を調べてみました。公開に関する仕様がある程度(?)理解できました。ありがとうございます。

ちなみに、
「見せたくない関数やメソッド作ったとしても ソースレベルで配布してしまっては意味がないように思います」

すいません。最終的な配布はDLLになると思います。(規模は不明ですが)
開発という小さな世界の中ではソースレベルという回答でした。
なので、「見せたくない」というよりは、「むやみに使われたくない」
という背景です。

お礼日時:2007/12/17 20:08

 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. 複雑な処理の管理と統一性を持たせるために、同じクラスなどで管 理する

といった、一般的にはこういう風にやることが多いといった知識です。

この辺りの知識につきましても、サイト、書籍など、参考になるものが
ありましたら、宜しくお願いします。

補足日時:2007/12/16 14:40
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

Visual Studio 2005 を使っています。ランタイムは.Net 2.0です(?)
(ご質問の答えになっているでしょうか?
.Net と VBの関連がまだいまいち理解できておりません..)

そうなりますと、(3)の方法が使えるということでしょうか?
ちなみに、(3)の方法を実装するにあたり、参考になるサイトを教えていただければ幸いです(他に、VBについて参考になるサイトもあれば..)

お礼日時:2007/12/16 14:25

そのクラスを使う際に提供するのはクラスファイルなのでしょうか


それともActiveX.DLLなどのバイナリ提供なのでしょうか

前者であるならPublicもFriendも同じような振る舞いをします
後者ならPublicはアクセスできますがFriendはアクセスできません

お使いの環境がVB6なら他に指定の方法がないため範囲を限定した公開といった使用方法は無理だろうと思います
あとあるのはImplementsによる継承ですがこれもご質問の用途むきではありません
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
提供はクラスファイルです。

ちなみに、後者のほうに関係しますが、Friendはdll単位でアクセス制限がかかるという考え方であっているでしょうか?
(アセンブリ単位という記述がありましたが..)

お礼日時:2007/12/16 14:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!