日別アーカイブ: 2022-05-15

ソフトウェア構築例

オーソドックスに

何かを成し遂げるに王道なしとはよく言われます。ソフトウェアにおいても何ら変わりはありません。ソフトウェアも多くのパーツから成り立っています。

歴史のある工業製品のように経年劣化で摩滅するようなことはありませんが、時代の流れによる価値の変遷は避けようがありません。

そのため、改訂やメンテナウンスは必須です。よって、一時的な動作に満足することなく管理しやすいように設計・製造されなければなりません。

今般、今までにない大きなシステムを手掛けています。基本的な機能を有するタイニー版から完全版まで網羅するとなればかつてない大きさになると想定します。

そこでソフトウェア作成の原点に立ち返り、ものづくり作成テクノロジーのビルディングブロック方式に思いを馳せました。

ビルディングブロック方式

物を作る時、ビルディングブロック方式を採用すると機能の交換や新規追加がしやすくなります。

ロジックや機能をコンパクトにまとめたブロックの集合体を作ろうと考えています。

プログラミングをする上で関数化を図ったりテーブルを利用してシンプル化する方法があります。

機能が強化された場合でもプログラムコードを修正せず、テーブルを変更することによって対応する方法があります。ナンバープレイス自動解法システムに基礎中の基礎を応用しています。参考になればありがたいです。

応用例の始まり

プログラミングの説明

<textarea id="msg" style="width:540px; height:160px; font-size:16px; border:1px solid;"></textarea>
<script type="text/javascript">			<!--  -->
const SPC=" ";				//"&emsp;"; &emsp;&emsp;
const METHOD =	[/** 0					1					2 **/
	/* 0 */		["Singles",			"シングル",				81],
	/* 1 */		["HiddenSingles",	"隠れたシングル",		27],
	/* 2 */		["NakedPairs",		"二国同盟",				27],
	/* 3 */		["HiddenPairs",		"隠れ二国同盟",			27],
	/* 4 */		["PointingPairs1",	"ポインティングペア1",	18],
	/* 5 */		["PointingPairs2",	"ポインティングペア2",	18]
				];
	examine1();									//定義した数だけ実行する
function examine1(){							//再実行でないとき、start1から呼び出される
	for(var i=0; i<METHOD.length; ++i){			//テーブル項目数を参照
		var name=window[METHOD[i][0]]();		//定義した関数を呼び出す
		message(letter2(i)+SPC+METHOD[i][0]+SPC+name+SPC+METHOD[i][1]+SPC+METHOD[i][2]+"\n");
		console.log(i, METHOD[i][0], name, METHOD[i][1], METHOD[i][2]);
	}
	return true;
}

//関数の定義例
function Singles(){return "Singles-10";}
function HiddenSingles(){return "HiddenSingles-11";}
function NakedPairs(){return "NakedPairs-12";}
function HiddenPairs(){return "HiddenPairs-13";}
function PointingPairs1(){return "PointingPairs1-14";}	
function PointingPairs2(){return "PointingPairs2-15";}	
function message(word){			//display message
	document.getElementById('msg').innerHTML += word;
}
function letter2(n) {return (" "+n).slice(-2);}		<!-- send ' 1' -->
</script>

 

本プログラムコードを説明します。

  • ➊HTMLのtextarea要素:1行
  • ❷script要素:2行~33行
  • ❸定数定義:3行~11行
  • ❹主文:12行
  • ➎主文を構成する関数:13行~20行
  • ❻部品となる個の関数:22行~28行
  • ❼共通サービス関数:29行~32行

このプログラムはナンプレ自動解法プログラムを作る時の骨格を示しています。

ナンプレ解法は重要なもので10個以下ですが、複雑で難解な課題を解くにはかなりの解法を用意しなければなりません。このタイニー版に一つずつ解法を追加できるように配慮されています。

将来、処理が増大した時プログラムコードにおいて、METHODデータ要素に関数名、関数名称、制御データを追加します。加えて関数本体を28行の次に追加します。このようにすることによってプログラム構造が複雑化することが避けられます。