出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

ASPで継承   kenさん [2005/03/22 17:13:29] [4962]
  Re:ASPで継承   暇人さん [2005/03/22 17:29:35] [4963]
    Re:ASPで継承   kenさん [2005/03/22 18:39:14] [4964]
      Re:ASPで継承   暇人さん [2005/03/24 12:29:25] [4967]
        Re:ASPで継承   kenさん [2005/03/24 13:43:25] [4968]
          Re:ASPで継承   暇人さん [2005/04/20 16:09:13] [5003]
            Re:ASPで継承   暇人さん [2005/04/20 16:26:48] [5004]

[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
Program By YasNet