忍者ブログ

5年ぶりのプログラミング

「 プログラミング 」

[PR]

2024.05.10 Friday 14:36

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

プログラミングの歴史

2009.03.16 Monday 17:14

プログラミング言語には、英語、日本語、中国語というように様々な言語があります。

元々は、コンピュータが直接理解できる唯一の言語という0と1だけで形成された機械語しかなかったのですが、

それでは人間にはひどく扱いにくいものです。


PR

続きを読む

プログラムとはなにか

2009.03.15 Sunday 21:02

根本的なことを考えてみたいと思います。

プログラムとはなんでしょうか?



続きを読んでくださって、ありがとうございます。

オブジェクト指向が仕様変更に強いわけ

2008.10.14 Tuesday 23:44

昔ながらのやり方で、下記のようなじゃんけんプログラムを作成した。

・プレイヤーは二人で、ジャンケンの様子を再現する
・ジャンケンは3回勝負
・3回勝負で勝った回数の多いプレイヤーが勝ち
・引き分けも1回の勝負
・3回勝負後の勝ち数が同じ場合は、引き分けとする

//ジャンケンプログラム

public class SimpleJanken {

public static final int STONE = 0; // グー
public static final int SCISSOR = 1; // チョキ
public static final int PAPER = 2; // パー

public static void main(String[] args) {
System.out.println("ジャンケン開始\n");

int player1WinCount = 0;
int player2WinCount = 0;

for(int cnt=0; cnt<3; cnt++)
{
// 乱数を格納する変数
double randomNum = 0;

// プレイヤー1が何を出すか決める
int player1Hand = 0;

randomNum = Math.random() * 3;

if (randomNum < 1)
{
// randomNum が 0.0以上1.0未満の場合、グー
player1Hand = STONE;
System.out.print("グー");
}
else if (randomNum < 2)
{
// randomNum が 1.0以上2.0未満の場合、チョキ
player1Hand = SCISSOR;
System.out.print("チョキ");
}
else if (randomNum < 3)
{
// randomNum が 2.0以上3.0未満の場合、パー
player1Hand = PAPER;
System.out.print("パー");
}

// プレイヤー2が何を出すか決める
int player2Hand = 0;

randomNum = Math.random() * 3;

if (randomNum < 1)
{
// randomNum が 0.0以上1.0未満の場合、グー
player2Hand = STONE;
System.out.print("グー");
}
else if (randomNum < 2)
{
// randomNum が 1.0以上2.0未満の場合、チョキ
player2Hand = SCISSOR;
System.out.print("チョキ");
}
else if (randomNum < 3)
{
// randomNum が 2.0以上3.0未満の場合、パー
player2Hand = PAPER;
System.out.print("パー");
}

// プレイヤー1の勝利
if ( (player1Hand == STONE & player2Hand == SCISSOR)
|| (player1Hand == SCISSOR & player2Hand == PAPER)
|| (player1Hand == PAPER & player2Hand == STONE) )
{
player1WinCount++;
System.out.println("\nプレイヤー1が勝ちました!\n");
}
// プレイヤー2の勝利
else if ( (player1Hand == STONE & player2Hand == PAPER)
|| (player1Hand == SCISSOR & player2Hand == STONE)
|| (player1Hand == PAPER & player2Hand == SCISSOR) )
{
player2WinCount++;
System.out.println("\nプレイヤー2が勝ちました!\n");
}
else
{
System.out.println("\n引き分けです!\n");
}
}
System.out.println("ジャンケン終了\n");

if (player1WinCount > player2WinCount)
{
System.out.println(player1WinCount + "VS" + player2WinCount + "でプレイヤー1の勝ちです!\n");
}
else if (player1WinCount < player2WinCount)
{
System.out.println(player1WinCount + "VS" + player2WinCount + "でプレイヤー2の勝ちです!\n");
}
else if (player1WinCount == player2WinCount)
{
System.out.println(player1WinCount + "VS" + player2WinCount + "で引き分けです!\n");
}
}
}




長々となってしまったが、少し更新しようとすると、あちこちの修正が必要になってしまう。そのために従来方式では、仕様変更に極端に弱いのだ。

オブジェクト指向では、下記のように役割を考える。

上記プログラムでは、3人の役者がいると考えられる。

・ジャンケンをするプレイヤー田中さんと山田さん
・ジャンケンの勝ち負けを判断する審判 鈴木さん


それぞれ3人の人物が行ったことは、ざっと下記のとおり。

田中さん
 じゃんけんをする
 自分の勝った回数を数える

山田さん
 じゃんけんをする
 自分の勝った回数を数える

鈴木さん
 じゃんけんの開始を宣言する
 勝ち負けを判定する
 どちらが勝ったか判定する


そうです。田中さんと山田さんというのは、本質的には同じなんです。名前が違うだけで。

そこで、出てくるのがJavaの考え方であるクラス。

田中さんと山田さんが所属しているのが、プレイヤークラス。
鈴木さんが所属しているのが、審判クラス。


機能としては、プレイヤークラスに、プログラムしておけば、プレイヤーの名前を変えようが、数が増えようが、大きな変更は不要になります。

田中さん、山田さんは、プレイヤークラスを実際に使う実体、インスタンス。ほら、Javaらしくなってきた。


なんか、ピンときた俺でした。





続きを読んでくださって、ありがとうございます。

5年ぶりのプログラミング

2008.09.21 Sunday 15:28

はじめまして。

弥助といいます。

もともと、私は入社時は、PL\SQLをつかってプログラミングをしていたのですが、
そのプロジェクトが終了してからは、まったくプログラムに関係することなく、

運用、インフラ系の仕事に携わっていました。

しかし、昔の開発時代が忘れられず、会社にはずっと開発への異動希望を
出し続けていました。

そして、とうとう異動が認められて、来年3月には、開発部署へ
異動することになったのです。



ただ喜びもつかの間。

プログラムがさっぱりわからなくなっているのです。
もともとJavaといったオブジェクト指向の言語には、ついていけてなかったということもあり、
PL/SQLをやっていたのですが、今度配属される開発部署では、Javaや.NETが
主流ということ。

ちょっと勉強してみるか・・・そういう気持ちで、いまこのブログを書いています。




 

忍者ブログ