オブ脳の演習(3)。社員に取締役を追加する。

オブ脳 in PHP

step3 取締役を追加

ProEvo > PHP Evo > オブ脳 in PHP > step3 取締役を追加


1. 取締役を追加
1.1 何をやるか?
2. ソースの変更
2.1 取締役クラスの作成
2.2 社長クラスの変更
3. 実行する
3.1 UIの修正
3.2 実行

1. 取締役を追加

1.1 何をやるか?

演習にしたがって取締役の処理を追加します。
具体的には取締役クラスの作成および社長クラスで取締役クラスを生成する処理を追加します。

2. ソースの変更

2.1 取締役クラスの作成

まずはUnitTestを作成します。 ソースは次の通り、

Tests/torishimariyaku.php
<?php
require_once 'PHPUnit.php';
require_once 'torishimariyaku.php';

class torishimariyakuTest extends PHPUnit_TestCase {
	var $shain;

	function torishimariyakuTest($name)
	{
		$this->PHPUnit_TestCase($name);
	}

	function setup()
	{
		$this->shain = new Torishimariyaku();
	}

	function testStandup()
	{
		$ret = $this->shain->standup();
		$this->assertEquals("取締役がふんぞりかえって立ちました。\n", $ret);
	}

	function testKyuryou()
	{
		$kyuryou = $this->shain->getKyuryou(100);
		$this->assertEquals(402, $kyuryou);
	}
}
?>
		
また、テストスイートに上記のテストを追加します。
ソースは以下のようになります。
alltests.php
<?php
// UnitTest
require_once 'PHPUnit/GUI/HTML.php';
require_once 'Tests/shachouTest.php';
require_once 'Tests/tantouTest.php';
require_once 'Tests/shuninTest.php';
require_once 'Tests/buchouTest.php';
require_once 'Tests/torishimariyakuTest.php';

// run Test Suites
$suite = array();
array_push($suite, new PHPUnit_TestSuite("shachouTest"));
array_push($suite, new PHPUnit_TestSuite("tantouTest"));
array_push($suite, new PHPUnit_TestSuite("shuninTest"));
array_push($suite, new PHPUnit_TestSuite("buchouTest"));
array_push($suite, new PHPUnit_TestSuite("torishimariyakuTest"));

$result = new PHPUnit_GUI_HTML($suite);
$result->show();
?>
	
上記のテストを通るように取締役クラスを作成します。
ソースは次のようになります。
torishimariyaku.php
<?php
require_once 'shain.php';

/*
 * 取締役
 */
class Torishimariyaku extends Shain {
	function standup()
	{
		return "取締役がふんぞりかえって立ちました。\n";
	}

	function getKyuryou($kihonkyu)
	{
		return $kihonkyu * 4 + 2;
	}
}
?>
		
実行結果は次のようになります。
[取締役テスト結果]

2.2 社長クラスの変更

社長クラスのUnitTestに取締役を指定したときの処理を追加します。
テストのソースは次のようになります。

shachouTest.php
<?php
// $Id: 3-step3.html 1 2009-03-19 11:17:04Z atsushifx $
require_once 'PHPUnit.php';
require_once 'shachou.php';

class shachouTest extends PHPUnit_TestCase {
	var $shachou;

	function shachouTest($name)
	{
		$this->PHPUnit_TestCase($name);
	}

	function setup()
	{
		$this->shachou = new Shachou();
	}

	function testStandup()
	{
		$_POST["tantou"] = "担当"; $_POST["kihonkyu"] = "100";
		$ret = $this->shachou->main();
		$this->assertEquals("担当が普通に立ちました。\n私の給料は100円です。\n", $ret);

		$_POST["tantou"] = "主任"; $_POST["kihonkyu"] = "100";
		$ret = $this->shachou->main();
		$this->assertEquals("主任がすばやく立ちました。\n私の給料は201円です。\n", $ret);

		$_POST["tantou"] = "部長"; $_POST["kihonkyu"] = "100";
		$ret = $this->shachou->main();
		$this->assertEquals("部長がだるそうに立ちました。\n私の給料は300円です。\n", $ret);

		$_POST["tantou"] = "取締役"; $_POST["kihonkyu"] = "100";
		$ret = $this->shachou->main();
		$this->assertEquals("取締役がふんぞりかえって立ちました。\n私の給料は402円です。\n", $ret);
	}
}
?>
		
上記のテストが通るように社長クラスを変更します。
ソースは次のようになります。
shachou.php
<?php
// $Id: 3-step3.html 1 2009-03-19 11:17:04Z atsushifx $
require_once 'tantou.php';
require_once 'shunin.php';
require_once 'buchou.php';
require_once 'torishimariyaku.php';

class Shachou {
	function main()
	{
		switch ($_POST["tantou"]) {
		case "担当":
			$shain = new Tantou();
			break;

		case "主任":
			$shain = new Shunin();
			break;

		case "部長":
			$shain = new Buchou();
			break;

		case "取締役":
			$shain = new Torishimariyaku();
			break;

		}

		$ret = "";
		$ret .= $shain->standup();
		$kihonkyu = $_POST["kihonkyu"];
		$kyuryou = $shain->getKyuryou($kihonkyu);
		$ret .= "私の給料は" . $kyuryou . "円です。\n";
		return $ret;
	}
}
?>
		
修正が終わったらすべてのテストを実行します。
次のような表示が出れば修正は完了です。
[全テストの実行結果]

3. 実行する

3.1 UIの修正

UIに取締役を追加します。
ソースは次のようになります。

run.php
<?php
// $Id: 3-step3.html 1 2009-03-19 11:17:04Z atsushifx $
require_once 'shachou.php';
?>
<head>
	<title>standup step2</title>
<body>

<form method="post" action="<?= $_SERVER["PHP_SELF"];?>">
	社長:
	<select name="tantou">
		<option>担当
		<option>主任
		<option>部長
		<option>取締役
	</select>
	基本給=<input type="text" name="kihonkyu" size="10">
	<input type="submit" name="standup" value="立ちなさい">
</form>
<p>
<?php
$shachou = new Shachou();
echo "
\n";
echo $shachou->main();
echo "
\n"; ?>

3.2 実行

実行して、動作を確認します。テストがすべて通っていれば正常に動作するはずです。
以下のリンクで動作が確認できます。
[step3 動作デモ]

以上で、step3は終了です。


$Revision: 1 $
Last update: $Date: 2009-03-19 20:17:04 +0900 (譛ィ, 19 3譛 2009) $