出来るのだASP Q&A掲示板(過去LOG)
訪問数 52046
昨日 889
今日 776 【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。 |
![]() ![]() ![]() ![]() ![]() |
![]() ![]() |
![]() ![]() ![]() ![]() ![]() ![]() |
[4962] ASPで継承 |
投稿者:kenさん 2005/03/22 17:13:29 |
ASPでのプログラミングについて、質問させて下さい。 Javaでいう「インタフェース」をJavaで実装できないか探っています。 つまり、抽象的な関数(Javaでいうメソッド)をあるファイル(Javaでいうクラス) で定義し、それを継承するファイルで、その実装をするというものです。 クラスの概念もないASPではできないと思いますが、 何か代替案があればご教授下さい。お願い致します。 |
[4963] Re:ASPで継承 |
投稿者:暇人さん 2005/03/22 17:29:35 |
VBSのバージョン5以降クラスがつかえます クラスファイルの継承はできないからINCLUDEしないと使えないけどね。 というよりこれ(VBSの仕様)だと関数の親玉ぐらいの扱いしかできない。 サーバーサイドインクルードで関数群(クラス群)を書きこんだファイルを埋めこめば似たような事はできます。 厳密にはだいぶ違いますけど感覚的に似たような事は可能です。 もっとも実感として(ASPで)完全なインターフェースの分離は難しいですね。 楽しようとするとコードがどんどん汚くなります。 設計をしっかりやる事が大切だと痛感します。 > ASPでのプログラミングについて、質問させて下さい。 > > Javaでいう「インタフェース」をJavaで実装できないか探っています。 > つまり、抽象的な関数(Javaでいうメソッド)をあるファイル(Javaでいうクラス) > で定義し、それを継承するファイルで、その実装をするというものです。 > > クラスの概念もないASPではできないと思いますが、 > 何か代替案があればご教授下さい。お願い致します。 |
[4964] Re:ASPで継承 |
投稿者:kenさん 2005/03/22 18:39:14 |
早速のお返事ありがとうございます。 > サーバーサイドインクルードで関数群(クラス群)を書きこんだファイルを埋めこめば似たような事はできます。 > 厳密にはだいぶ違いますけど感覚的に似たような事は可能です。 この方法を使うと、インタフェース的な実装が可能なのですか?? 色々調べてはみたのですが、VBScriptのクラスや上記方法に関する情報が少なく、 困っています。 ぜひ、この方法を具体的にご教授願えないでしょうか。 お願い致します。 > VBSのバージョン5以降クラスがつかえます > クラスファイルの継承はできないからINCLUDEしないと使えないけどね。 > というよりこれ(VBSの仕様)だと関数の親玉ぐらいの扱いしかできない。 > サーバーサイドインクルードで関数群(クラス群)を書きこんだファイルを埋めこめば似たような事はできます。 > 厳密にはだいぶ違いますけど感覚的に似たような事は可能です。 > もっとも実感として(ASPで)完全なインターフェースの分離は難しいですね。 > 楽しようとするとコードがどんどん汚くなります。 > 設計をしっかりやる事が大切だと痛感します。 > > > ASPでのプログラミングについて、質問させて下さい。 > > > > Javaでいう「インタフェース」をJavaで実装できないか探っています。 > > つまり、抽象的な関数(Javaでいうメソッド)をあるファイル(Javaでいうクラス) > > で定義し、それを継承するファイルで、その実装をするというものです。 > > > > クラスの概念もないASPではできないと思いますが、 > > 何か代替案があればご教授下さい。お願い致します。 |
[4967] Re:ASPで継承 |
投稿者:暇人さん 2005/03/24 12:29:25 |
遅れてすみません。全く暇じゃなくなった暇人です。 こないだまでは幸せでしたが。年度末処理が・・・ 余裕が無いので詳しく書けませんすみません ソースも普段使わないものでどこにしまったかものか。 何かいいわけ臭くなりましたがとりあえず触りだけ。 方法なんですが。自作クラスの中にOverLoadとかinheritsとか自作メソッドを作成し、あたかも継承、オーバーロードをしたかのごとく見せる。と言うものです。 ようするに使うとき hoge.overload とかやるわけです。 もともとどこかのサイトにJScriptで書かれていたものをVBScriptでもクラスが使えるようになった時に、やってみたものです。 でもできた後、気付いたのですがこれ関数だけでもできそうな・・・ うー、これだけの説明じゃ予備知識なしではできそうにないですね。すみません。 > > サーバーサイドインクルードで関数群(クラス群)を書きこんだファイルを埋めこめば似たような事はできます。 > > 厳密にはだいぶ違いますけど感覚的に似たような事は可能です。 > > この方法を使うと、インタフェース的な実装が可能なのですか?? > 色々調べてはみたのですが、VBScriptのクラスや上記方法に関する情報が少なく、 > 困っています。 > ぜひ、この方法を具体的にご教授願えないでしょうか。 > お願い致します。 |
[4968] Re:ASPで継承 |
投稿者:kenさん 2005/03/24 13:43:25 |
お忙しいところありがとうございます。 教えて頂いたことを参考に色々やってみようと思います。 ちょこちょここの掲示板はチェックしますので、 時間のある時に、追加の情報を教えていただければ幸いです。 よろしくお願いいたします。 > 遅れてすみません。全く暇じゃなくなった暇人です。 > こないだまでは幸せでしたが。年度末処理が・・・ > > 余裕が無いので詳しく書けませんすみません > ソースも普段使わないものでどこにしまったかものか。 > 何かいいわけ臭くなりましたがとりあえず触りだけ。 > > 方法なんですが。自作クラスの中にOverLoadとかinheritsとか自作メソッドを作成し、あたかも継承、オーバーロードをしたかのごとく見せる。と言うものです。 > ようするに使うとき hoge.overload とかやるわけです。 > もともとどこかのサイトにJScriptで書かれていたものをVBScriptでもクラスが使えるようになった時に、やってみたものです。 > でもできた後、気付いたのですがこれ関数だけでもできそうな・・・ > うー、これだけの説明じゃ予備知識なしではできそうにないですね。すみません。 > > > > > サーバーサイドインクルードで関数群(クラス群)を書きこんだファイルを埋めこめば似たような事はできます。 > > > 厳密にはだいぶ違いますけど感覚的に似たような事は可能です。 > > > > この方法を使うと、インタフェース的な実装が可能なのですか?? > > 色々調べてはみたのですが、VBScriptのクラスや上記方法に関する情報が少なく、 > > 困っています。 > > ぜひ、この方法を具体的にご教授願えないでしょうか。 > > お願い致します。 |
[5003] Re:ASPで継承 |
投稿者:暇人さん 2005/04/20 16:09:13 |
暇人です 年度末処理→年度始処理→引継ぎ→新人研修(指導員)→飲み会→新年度トラブル対応→通常業務 のKOコンボからやっと抜け出ました とても遅くなりましたが。 私が考えたインターフェース継承みたいな何かをのせときます。 インターフェース部はクラス1、関数1で成り立っています Class interface Public method(0) Public property(0) Sub Class_Initialize() method(0) = "method,2" property(0) = "property" End Sub End Class '補足説明:method(0) = "medhod,2" はメソッド名:methodの引数が2つあるということです。 'メソッドを増やしたければ配列を大きくして、"method2,0"という様に追加していってください。プロパティも同じですが引数の設定がない分簡潔です。 '仕様上メソッド名に,は使用できません。エラーします。 'クラス名は好きな名前に変更してください。 function Ride(a,b) Ride = "" Dim subClass Dim superClass Execute("Set superClass = New " & a) Execute("Set subClass = New " & b) Dim c Dim d Dim ck Dim msg Dim dummy ck = 0 On Error Resume Next Err.Clear For Each c In superClass.property Eval("msg = subClass." & c) If Err.Number <> 0 then msg = msg & "プロパティ:" & c & "がオーバーロードされていません。" Err.Clear End If Next For Each c In superClass.method d = Split(c,",") dummy = "msg = subClass." & d(0) & "(" if d(1) <> "0" Then For i = 1 to CLng(d(1)) dummy = dummy & "null," Next dummy = Left(dummy, Len(dummy) - 1) end if dummy = dummy & ")" msgbox(dummy) Eval(dummy) If Err.Number <> 0 then msg = msg & "メソッド:" & d(0) & "がオーバーロードされていません。" Err.Clear End If Next On Error Goto 0 Ride = msg end function '補足説明:関数名は自由に変更してください。 長くなりましたのでここまでで一旦送信します。 |
[5004] Re:ASPで継承 |
投稿者:暇人さん 2005/04/20 16:26:48 |
インターフェース部は前回送信分で全てです。 以下継承先の例。 Class test public property function method(a,b) metod = "test" end function End Class Dim strError strError = Ride("interface","test") If strError <> "" Then Response.Write strError Response.End End If Ride関数を実行する事により、インターフェース継承みたいな何かをします。 Ride関数の引数は文字列です。 インターフェース(継承元)が第一引数。 継承先が第二引数となります。 クラスtestはテスト用のいいかげんなクラスです。プロパティが足りないのでその旨表示されるはずです。本番ではちゃんとした継承先クラスを作成してください。 問題点 1、関数Rideを連発すれば多重継承もどきが可。しかし多重継承した際、同じメソッドが異なるインターフェース上に存在してもエラーしない。 2、関数Rideを読んだ際、クラスの初期化が自動実行されてしまう。 注意というか言い訳 1、もともとのコードはもっと長く、そこから切り出してます。エラーしたらごめんなさい。 2、IE5.0以上、ようするにVBS5.0以上がサーバーに入っていないと動きません。 関数Rideをうまいこと改造すると継承もどきもできますね。 その場合、継承元のクラスに配列metodと配列propertyを必ず常備しないといけないんですが。 |
TreeBBS For ASP V.0.1.3 |