PowerPoint プレゼンテーション

情報教育のブーターとしてのプ
ログラミング
情報教育論 2002.12.16
情報教育のブーターとしてのプ
ログラミング
情報教育において「プログラミング」の学習は、
「ブーターの読み込み」の過程に相当する
「ブーター」とは、コンピュータが起動(ブート)する際に
一番最初に読み込まれる最小限の命令群
ブーターは、その後に読み込まれる、より複雑なプロ
グラム(ひいてはシステム全体)の基礎となる
ここでは、「応用的な知識を生み出すために必要な最
小限の基盤」を表す比喩
コンピュータの本質
コンピュータの本質はプログラム
コンピュータのあらゆる動作はプログラム
によって規定される
「コンピュータの何たるか」を理解するため
には、「プログラムの何たるか」を学ばなけ
ればならない
プログラムとは
プログラムは「仕事の手順」を書いたもの
プログラムが書けないことを、コンピュータ
は実行できない
人間は手順が書けなくてもいろいろなことを実
行できる
人の顔を見分ける、声を聞き分ける、字を
読む
プログラムの基本構造(1)
プログラムの基本は命令文の連続
1:
2:
3:
fd(100);
rt(90);
fd(100);
.………
……….
……….
命令は上から順に実行される→逐次構造
プログラムの基本構造(2)
同じ命令の繰り返しを
ひとまとめにして記述で
きる →繰り返し
for( i=0; i<4; i++){
fd(100);
rt(90);
}
プログラムの基本構造(3)
あらかじめ設定した条
件に応じて複数の命
令を選択的に実行で
きる →条件分岐
if( i==2 ){
fd(100);
}
else{
fd(50);
}
プログラムの基本構造(4)
逐次、繰り返し、条件分岐は、仕事の手順を記述
する際のもっとも基本となる構造
これら三つをまとめて「制御構造」と呼ぶ
プログラムの基本構造(5)
逐次、繰り返し、条件分岐は「入り口1つ、出口1
つ」の構造を持つ点で共通している
一つの構造の中に別の構造を埋め込んで(=入
れ子構造)、複雑な手順を実現できる
プログラムのコメント(1)
実際にプログラムを書く場合、命令文(=コ
ンピュータに対する指示)だけを書けば済
むわけではない
命令文に加えて、コメント(=人間に対する
注釈)を書くようにする
コメントはコンピュータの動作にとっては不
要だが、人間にとっては重要な意味を持つ
プログラムのコメント(2)
コメントには目的を書く
×
double x; // xは正の数とする
double y;
○
double x; // xは正の数とする
double y;
// xの小数部は0.5以上か?
// xを四捨五入する(xの小数部は?)
if((x - Math.floor(x)) < 0.5){
if((x - Math.floor(x)) < 0.5){
y = Math.floor(x); // xの整数部を
y = Math.floor(x); // (0.5未満)xの
// yとする
// 整数部をyとする
}else if((x - Math.floor(x)) >= 0.5){
}else if((x - Math.floor(x)) >= 0.5){
y = Math.floor(x) + 1; // xの整数部+1を y = Math.floor(x) + 1; // (0.5以上)xの
// yとする
// 整数部+1をyとする
}
}
プログラムのコメント(3)
/**
* 家を描くプログラム
* 作成日:00.5.3 (1bcBコース教材より)
*/
import Turtle;
class House01 extends Turtle{
/**
* 家を描く
*/
void start(){
見出しコメント
ブロックコメント
// 屋根を描く
rt(30); // 前処理(タートルの角度を調整する)
int i;
for(i=1; i<=3; i++){
fd(100); rt(120);
// 三角形の一辺を描く
}
rt(60); // 後処理(タートルの角度を調整する)
}
}
// 本体を描く
for(i=1; i<=4; i++){
fd(100); rt(90);
}
// 四角形の一辺を描く
行コメント
書法を徹底したプログラム
日本語プログラミング
日本語をベースとしたプログラミング言語
が実現されることによって、従来コメントと
して記述していた内容がそのままプログラ
ムの命令文となる
岡田さんによる日本語プログラミングのレク
チャー
日本語プログラミング言語「言
霊」
Javaと日本語プログラム言語
例えばタートルグラフィックスで家を書くプ
ログラムはJAVAではどうなるか?
public class House extends Turtle{
public static void main( String args[] ){
drawHouse( 100 ); //一辺の長さが100の家を描く。
}
//家を描くメソッド
public static void drawHouse( int length ){
drawTriangle( length ); // 一辺の長さがlength の三角形を描く。
drawRectangle( length ); //一辺の長さがlength の四角形を描く。
}
//三角形を描くメソッド
public static void drawTriangle( int length ){
rt(30);//前処理として角度を調整する
for( int i=0 ; i<3 ; i++ ){ //一辺を描く処理を3回繰り返す
fd(length); rt(120); //一辺を描く処理
}
lt(30); //後処理として角度を調整する
}
//四角形を描くメソッド
public static void drawRectangle( int length ){
//「一辺を描く」という処理を4回繰り返す。
for( int i=0 ; i<4 ; i++ ){
rt(90); fd(length); //一辺を描く処理
}
}
}
Javaと日本語プログラム言語
日本語プログラミング言語「言霊」を用いる
と、先ほどのプログラムが日本語で記述で
きる
「言霊」によるプログラム
メインとは{
大きさが100の家を描く。
}
大きさが「A(整数型)」の家を描くとは{
長さがAの三角形を描く。
長さがAの四角形を描く。
}
長さが「A(整数型)」の三角形を描くとは{
30度右に曲がる。
{A歩進む。120度右に曲がる。}を3回繰り返す。
30度左に曲がる。
}
長さが「A(整数型)」の四角形を描くとは{
{90度右に曲がる。A歩進む。}を4回繰り返す。
}
言霊の特徴
手続きの表現が自由である
文法表現が理解しやすい
手続きの表現が自由
ここでは「大きさが~の家を描く」と表現し
たが、状況によっては違う表現の方が良い
かもしれない・・・
メインとは{
大きさが100の家を描く。
}
大きさが「A(整数型)」の家を描くとは{
長さがAの三角形を描く。
長さがAの四角形を描く。
}
手続きの表現が自由
好きなように表現を変えることができる
メインとは{
大きさが100の家を描く。
}
大きさが「A(整数型)」の家を描くとは{・・・}
メインとは{
一辺の長さが100の家を描く。
}
一辺の長さが「A(整数型)」の家を描くとは{・・・}
手続きの表現が自由
メインとは{
家を、三角形と四角形の長さを100として描く。
}
家を、三角形と四角形の長さを「A(整数型)」として描く
とは{・・・}
メインとは{
家描画100。
}
家描画「A(整数型)」とは{・・・}
手続きの表現が自由
既存のプログラム言語では、可能な表現
が限られている
手続き名の変更
引数の順序
drawLine( 0 , 0 , 100 , 100 );
手続きの表現が自由
日本語プログラム言語「言霊」なら、好きな
文型で表現する事ができる
座標(0,0)から座標(100,100)に線を引く。
座標(「A(整数型)」、「B(整数型)」)から
座標(「C(整数型)」、「D(整数型)」)に線を引くとは{
・・・
}
コメントがプログラムになる
言霊はその表現力により、
Javaなどで記述していたコメントの
大部分が必要なくなる。
文法表現が理解しやすい
Javaによる以下の表現がどういう意味か、
わかるでしょうか?
if ( a%3 == 5 && b != 10 ){ ・・・ }
既存のプログラム言語は、文法が難しいと
いう問題がある
文法表現が理解しやすい
日本語プログラム言語「言霊」では、以下
のような記述になる
if ( a%3 == 5 && b != 10 ){ ・・・ }
もし aを3で割った余りが5と等しい かつ
bが10と等しくない ならば{
・・・
}
※空白を入れなくても解釈できます。
文法表現が理解しやすい
既存のプログラム言語は文法が難しいと
言う問題がある
その為、やるべき事が分かっているのに、
その処理の記述ができないという人が非
常に多い。
文法表現が理解しやすい
例えば、以下の問題。
タートルグラフィックを使って以下の画像を描いて下さい。
ただし、for文とif文を使って下さい。
ヒント:繰り返し回数が奇数と偶数で場合分けをする
文法表現が理解しやすい
議論すると、この?部分が分からず困る人がたく
さんいる。
public static void main( String args[] ){
for( int i=0 ; i<4 ; i++ ){
if( ?????? ){
drawSikaku( 50 );
}else{
drawSankaku( 50 );
}
move( 60 );
}
}
文法表現が理解しやすい
メインとは{
繰り返し回数(整数型)を生成する。
繰り返し回数に0を代入する。
{
繰り返し回数を2で割った余りが0と等しいならば{
長さが50の4角形を描く。
}そうでなければ{
長さが50の3角形を描く。
}
右に60移動する。
繰り返し回数を1増やす。
}を4回繰り返す。
}
日本語プログラミング言語「言
霊」
これにより、
Java言語の文法に悩むのではなく、
アルゴリズムを考え、作り出し、記述する
事に集中できる
プログラムを学ぶもう一つの意味
何故、プログラムを学ぶか?
コンピュータの本質を理解するため
論理的思考・表現能力を得るため
論理的思考能力とは?
・ 漠然としたアイデアを具体的な「目的」に
置き換える能力
・ 「目的」を実現する為に必要なプロセスを、
正確に順序だてて組み立てる能力
・ 組み立てたプロセスを正確かつ
簡潔に記述する能力
なぜプログラムを学ぶのか
この能力は、あらゆる所で必要になる
なぜなら…
自分の考えを組み立てる能力
自分の考えを他人に伝える能力
に等しいからである
なぜプログラムを学ぶのか
端的な例として…
授業中に
大地震が発生したら
どうする?
なぜプログラムを学ぶのか
なるべく多くの人命を救わなければならない!
目的
・建物内にいる人を避難場所に誘導する
・消火活動を行う
・避難場所を整備する(食料・布団・テントの確保)
・外部へ救難要請
なぜプログラムを学ぶのか
建物内の人を迅速に避難場所に誘導するためには?
・避難経路の確保する
・限られた通路を有効活用して誘導する
・人数を数人単位のグループに分割し、
グループ単位で行動する
なぜプログラムを学ぶのか
限られた通路を有効活用して誘導する為には?
なぜプログラムを学ぶのか
限られた通路を有効活用して誘導する為には?
なぜプログラムを学ぶのか
出口の一つが使えなかった場合、
限られた通路を有効活用して誘導する為には?
なぜプログラムを学ぶのか
避難方法
教室内でグループに分かれる。
避難はA、B、C・・・の順序で行われる。
避難中、各グループ内ではぐれないよう注意する。
避難経路は、前ページに従う。
A
B
C
D
E
F
ネットワークプログラムと
通じるものがあると思う…
なぜプログラムを学ぶのか
論理的思考・表現能力があれば・・・
「地震が発生した際にどのように行動すれば
被害が少なくできるか」 について、
他人に伝え、議論する事が出来る
これを養う為の訓練なのです。
このような能力は、社会のあらゆる所で
必要になってきます
なぜプログラムを学ぶのか
タートルで以下の絵が書けると言う事は
絵を書くための論理的なプロセスを
分析・創造・表現
する事ができると言う事なのです