見えるオブジェクト指向なんてうまい話はなかなかないか

懲りずにC#で交流回路計算機を作り始めた。
なんでこんなもの作りたくなるのかというと、そりゃオブジェクト指向っぽいからだろう。
まず、回路素子。
こいつらは、インピーダンス・アドミタンスがある、電流を流せば電圧降下が起きる、電圧をかけると電流が流れる。
これは回路素子のお約束。そのお約束を抽象クラス か インターフェースで表してあげる。
すれば、3つの回路素子を自在に組み合わせた直列回路というのを組み合わせた並列回路も作れるかも知れない。
次に、電圧・電流・インピーダンス・アドミタンスを表すのに使う複素数。
これの計算はかなりめんどくさい。
けど演算子のオーバーロードで、かなりスマートに使うことができる。


と、まぁ複雑な回路でなければ解けるだけの仕組みは簡単に作れますね。
実際、1時間少しで完成した。まぁ不完全な部分はあるけど。概ねOKですよ。
もっとも、複素数クラスは以前作ったものを一部改造しただけだけどね。
あとはファイルを読み書きする仕組みを作ればいいかなと思ってる。
こんなファイルを読み込みたいなと。

E 100
f 60
Begin Seri
R 100
L 50m
Begin Para
L 100m
Begin Seri
L 10m
C 50u
End Seri
End Para
End Seri

初めに電圧・周波数を設定し、1行1素子で書いていくと。
Begin Seri~End Seriの間がそれぞれ直列、Begin Para~End Paraの間がそれぞれ並列。
まぁ多分これでいけるかなと。
これだと、スペースでLと10m、BeginとSeriのように分解するだけで解釈できるから、やりやすい。
値にk,m,u,n,pを付けるとSI接頭語のk(キロ)・m(ミリ)・μ(マイクロ)・n(ナノ)・p(ピコ)に相当する倍率をかけると。
これも装備できればかなり強いと思う。
かの有名なSpiceみたいな高級さはないし、性能も低いけど、
結構わかりやすい書き方だと思うんだよね。


インスタンスに命令するだけで適当に動いてくれるのは本当にありがたいですね。
再帰的に物事をやっていくのって結構めんどくさいけど、
インスタンスに「やれ」と言ったら、そこから別のインスタンスに「やれ」と言えばいいと。
だから使う方も簡単だし、作る方も簡単。なかなかこんなものはないかと。
階乗を再帰的に関数を呼び出して求めるという変な例があるけど、
あれを作るのとさほど難しさは変わらないというおもしろいこともありましたからね。
そんなのを活用してやっていけばいいかなと。