まだ続き。
https://wetch.hatenablog.com/entry/2019/10/20/120414
そもそもやりたかったことを思い出すと、3変数関数に対してとなるようなを1個ずつ決めたかったのだった。なのでIMathFuncインターフェイスの実装であるConcreteFunctionクラスを書いてみるとこうなる。
とりあえずとする。
まずはのみを変数としたConcreteFunctionOfA
Implements IMathFunc Private b_ As Double Private c_ As Double Property Get IMathFunc_Parameters() IMathFunc_Parameters = Array(b_, c_) End Property Property Let IMathFunc_Parameters(para) b_ = para(0) c_ = para(1) End Property Function IMathFunc_Substitute(x As Double) As Double IMathFunc_Substitute = x * (b_ - c_) ^ 2 - 2 End Function Function IMathFunc_InitialValue() As Double() Dim result(1) As Double result(0) = -1 result(1) = 7.5 IMathFunc_InitialValue = result End Function
次にのみを変数としたConcreteFunctionOfB
Implements IMathFunc Private a_ As Double Private c_ As Double Property Get IMathFunc_Parameters() IMathFunc_Parameters = Array(a_, c_) End Property Property Let IMathFunc_Parameters(para) a_ = para(0) c_ = para(1) End Property Function IMathFunc_Substitute(x As Double) As Double IMathFunc_Substitute = a_ * (x - c_) ^ 2 - 2 End Function Function IMathFunc_InitialValue() As Double() Dim result(1) As Double result(0) = -1 result(1) = 6.5 IMathFunc_InitialValue = result End Function
最後にConcreteFunctionOfC
Implements IMathFunc Private a_ As Double Private b_ As Double Property Get IMathFunc_Parameters() IMathFunc_Parameters = Array(a_, b_) End Property Property Let IMathFunc_Parameters(para) a_ = para(0) b_ = para(1) End Property Function IMathFunc_Substitute(x As Double) As Double IMathFunc_Substitute = a_ * (b_ - x) ^ 2 - 2 End Function Function IMathFunc_InitialValue() As Double() Dim result(1) As Double result(0) = -1 result(1) = 7.9 IMathFunc_InitialValue = result End Function
・・・ほとんど一緒になってしまった。というか実際コピペで作った。なんか1周して元に戻ってきた感じ。
この3つのクラスの共通部分を何とかくくりださないと意味がないな。