平成13 年度 第27 回福島県情報教育研究会
研究大会発表資料

1. はじめに
清陵情報高校では教育課程の変更が行われ,工業系の選択科目が資格(基本情報)コース,制御コース,ネットワークコース,マルチメディアコースの 4 つの目的別コース制となった。そのなかのネットワークコースでは,ネットワーク技術( 2 年 2 単位, 3 年 2 単位)をネットワークの理論や知識を学習を行う座学とし,プログラミング技術( 2 年 2 単位, 3 年 2 単位)をネットワークプログラミングやサーバ設定などを目指した実習とし,情報通信技術( 3 年 2 単位)の科目の中で,電気通信の座学と自分自身で設定した課題に取り組む実習を織り交ぜた。そこで,選択ネットワークコースのプログラミング技術での学習指導を研究したので紹介する。
2. 高校でのプログラミング言語
高校で指導しているプログラミング言語は,アセンブラ, BASIC , C , VisualBASIC ではないだろうか?実際に産業界で利用する言語ととなるとアセンブラや C 言語が多く,また,経済産業省の基本情報技術者試験など資格検定でも取り上げられていることから,おのずとアセンブラや C 言語の学習に力を注いでいる。また, MS-Windows で GUI プログラミングに取り組む場合には VisualBASIC しか選択肢が無いのでは?ここで,各言語の特徴を考る。
(1) BASIC
BASIC の指導は,身近にあるポケコンや DOS ベースのパソコンで行えたことや,グラフィックや Beep 音, I/O などを手軽に扱えるため,プログラミング入門として多くの学科で行われている。 GOTO を多用するとプログラムの構造が見にくくなる。
(2) アセンブラ
アセンブラはマシン語に直結しているためハードに密着した低レベルのプログラミングに適する。ハードウェア学習を行った後に,ポケコンやワンボードマイコンで学習するのが効果的だが, CPU の構成や動作などのハードウェア理解でつまづく生徒も多い。
(3) C,C++言語
C 言語は,構造化言語であり大規模プログラムに適し, UNIX を作る際に使われた。ポインタを使いメモリや I/O を直接制御できることから,広く産業界で利用されている。しかし, MS-Windows95 などのマルチタスクで GUI な OS が登場し広まったが, ANSI の C 言語ではネットワークや Window プログラミングはできず,各 C 言語メーカのライブラリの対応が必要である。また,マルチタスクプログラミングは,構造化だけではやりにくくオブジェクト化の要素が含まれる。そこで, C 言語を発展させた C++ が登場するわけであるが,オブジェクトの概念と実装が理解しにくい面があり,高校教育では難しい状況である。結局,高校の C 言語は数値演算・データ処理や制御に利用し,グラフィックや音楽を含めたアプリケーション開発には至っていないのが現状ではないだろうか?
(4) VisualBASIC
VisualBASIC は, MS-Windows において最もプログラミング教育に適した開発環境である。 BASIC といいながら, C 言語の構造化を取り入れており,また, GUI でコントロールオブジェクトを配置しプログラムを埋め込むため,一応のオブジェクト化がされている。また,マルチメディア・ネットワークを手軽に利用でき,アプリケーションとして配布が容易にできることから,多くの学校で課題研究や実習に取り入れられているのではないだろうか。
(5) JAVA
Sun MicroSystems が 1995 年に発表した言語であり, C++ 言語からわかりにくい部分を取り除き,携帯電話や PDA ,パソコン,サーバなどあらゆる機器で共通動作することを目的につくられた。コンパイラなどのソフトは, Sun MicroSystems の Web サイト (( 図 2-1 http://java.sun.com/j2se/1.3/ja/) から無料でダウンロードのほか雑誌の付属 CD から入手できる。 C 言語とは違い標準で膨大なクラスライブラリがあり GUI プログラミングやネットワークプログラミングができる。ソースはコンパイルされ各機種共通のバイトコードとなり, VM( バーチャルマシン ) 上でインタプリタで動作するため実行速度は若干遅い。近年開発ツール ( 図 2-2) の充実や JAVA2 仕様の確定 ( 図 2-3) が伴って,携帯電話, PDA ,サーバのプログラムでは JAVA 言語が利用されるのが多くなってきている。特に i アプリの JAVA 採用によって,携帯電話分野での JAVA の進展にはめざましいものがある。
図 2-1 JDK1.3 ダウンロードサイト 図 2-2 Borland JBilder
Java2 Platform Micro Edition |
Java2 Platform Standard Edition |
Java2 Platform Enterprise Edition |
携帯, PDA 用として,小容量の K バイトレベルの JAVA を扱う。 |
パソコン用として,各種 OS でのアプリケーションやブラウザ上でのアプレットを扱う。 |
サーバ用として,データベース接続などができるサーブレットを扱う。 |
図 2-3 JAVA2 での仕様
3. 選択ネットワークコースの取り組み
(1) 選択ネットワークコースの内容
年 |
ネットワーク技術 (2年2単位,3年2単位 ) |
プログラミング技術 (2年2単位,3年2単位 ) |
情報通信技術 (3年 2単位 ) |
2 |
1.情報ネットワーク 情報伝達の方法 情報通信システム 2.情報ネットワークの発展 情報ネットワーク データ通信,情報通信網 3.通信ネットワークシステム 基本構成 ネットワークの形態 データ伝送技術,制御 4. ネットワークアーキテクチャ OSI TCP/IP 6. LAN LAN と WAN トポロジー,伝贈媒体 アクセス制御方式 LAN 間接続機器 7.インターネット 発展の歴史 仕組み,サービス 接続方法とアドレス イントラネット |
1. プログラミングの基礎 開発手順 流れ図 OS とプログラミング言語 2. 問題処理とプログラミング 文字,数値の取り扱い 演算子,条件分岐,ループ 3.VisualBASIC でのプログラミング コントロールオブジェクト イベントとプロシージャ メソッド プログラムの実行 ネットワークコントロールオブジェクト 4.VisualBASIC 演習 ぱたぱたアニメーション ペイントソフト,チャット 5.JAVA によるプログラミング クラス メソッド |
|
3 |
5. OLTP OLTP の構成 求められる性能と信頼性 8.電気通信サービス 電気事業者法と通信サービス WAN における電気通信サービス ISDN の電気通信サービス マルチメディア時代における各種電気通信サービス |
5.JAVA によるプログラミング アプリケーション i アプリのクラス 6.JAVA 実習 ラケットゲーム カラフル時計 チャット 7. サーバプログラミング Web サーバ DB サーバ CGI ,サーブレット サーブレット練習 |
1.電気通信技術の基礎 伝送理論 伝送技術 2.端末設備の接続のための技術 データ通信技術の基礎 パケット交換方式の概要 インターフェース条件と伝送制御 接続制御手順とデータ転送 接続工事の技術 3.端末設備の接続に関する法規 工事担任者規定など 端末設備規則 技術的条件 有線電気通信法など コンピュータの利用形態 4.設定課題 |
選択ネットワークのプログラミング技術において 2 年生の 2 学期後半までではオブジェクトプログラミングやネットワークプログラミングの概念理解のためにも VisualBASIC を取り入れている。その後, JAVA の学習をおこないながら JAVA 実習やサーバ実習を行う。
(2) オブジェクトプログラミングの基本
オブジェクトプログラミングは,従来のプログラミングとは違いオブジェクトに中にプログラムやデータを埋め込む。また,実行形態も異なりイベントがあったときに,該当オブジェクトが呼び出され実行される。
< VisualBASIC の場合>
コントロールオブジェクトを定義した後,プログラムを記述 ( 図 3-1) する。

図 3-1 コントロールオブジェクトの配置とプロシージャへのプログラム記述
イベントが発生すると,該当オブジェクトにイベントが通達され,プロシージャに記述されている内容が実行さる ( 図 3-2) 。このような実行形態をイベントドリブン型といい, Windows などのマルチタスク OS の GUI アプリケーションの基本形態であり,オブジェクトプログラムが必要になったゆえんである。
(3)ネットワークプログラミングの基本
ネットワークプログラミングは, TCP/IP の理解した後に行うのが望ましいが,ホスト名, IP アドレス,ポート, TCP/UDP の簡単な学習をすると, LAN 上でテキストデータのやりとりが可能となる。
ホスト名や IP アドレスはコンピュータ同士を接続するために,使用さるものである。 IP アドレスは, DOS プロンプトより winipcfg で確認できる ( 図 3-3) 。ホスト名は,コントロールパネルのネットワークよりコンピュータ名で確認できる ( 図 3-4) 。

図 3-3 winipcfg の実行例 図 3-4 コントロールパネル→ネットワーク
ポートとは, I/O ポートアドレスと同じで,ネットワークでデータのやりとりを行うためにはポート番号を合わせることが必要である。 1000 以前はシステムが使うので,ユーザプログラムでは, 1000 以上を利用する ( 図 3-5) 。ちなみに http: は 80 を使う。

図 3-5 PORT
TCP と UDP の違いは,コネクションにある。 UDP は一方的にデータを送りつける。 TCP では,データを送ったことを相手に確認する。 LAN 上で信頼性がある場合には, UDP の方が接続手順も単純でありプログラムで利用しやすい。

図 3-6 TCP と UDP
VisualBASIC では, WinSock コントロールオブジェクトを使うと簡単に接続できる。 ( 図 3-7)

Private Sub Command1_Click()
Winsock.RemoteHost = Text2.Text
If OSvr.Value = False Then
Winsock.RemotePort = 1001
Winsock.Bind 1002
Else
Winsock.RemotePort = 1002
Winsock.Bind 1001
End If
End Sub
Private Sub Command2 _Click()
Unload Me
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
If Text1.Text = "" Then Exit Sub
Winsock.SendData Winsock.LocalHostName + ">>" + Text1.Text
Text1.Text = ""
End If
End Sub
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock.GetData strData
LB.AddItem strData
End Sub
|
図 3-7 VisualBASIC によるテキスト送信の例
(4) JAVAプログラミング
JAVA は,前述の SunMicroSystemsの Webサイトや雑誌の付録 CD から手に入れ,インストールする。 20MB 以上あるので雑誌の付録 CD が無難である。すべて標準を選んでインストールする。 ( 図 3-8)
その後, autoexec.bat に path として c:\jdk1.3\bin を追加し再起動する。

図 3-8 jdk1.3 のインストール
ソースプログラムの記述には,メモ帳などのテキストエディタを使用する ( 図 3-9) 。保存する時のファイルの種類 *.*を選んで,拡張子 .java で保存することに注意する。

図 3-9 HelloJAVA.java のソースプログラム
DOS プロンプトを起動して,コンパイルする。 ( 図 3-10) ファイル名の大文字小文字を区別する。エラーがある場合は,エラーの種類と行番号が出るので参考にしてデバッグする。

図 3-10 javac によるコンパイル
java コマンドでクラスファイル HelloJAVA を実行する。標準出力の DOS プロンプト画面に, HelloJAVA が表示される。 ( 図 3-11)

図 3-11 java コマンドによるHelloJAVA の実行
以上のように, JAVA プログラミングは, MS-DOS 上で C 言語を扱うのと変わらない。しかし, JAVA は GUI プログラミングができる。オブジェクトの生成は, new を使って生成する。コードだけで書くとわかりにくいが,ツールもあるのでそれを使うと良い。
/*
Flag.java
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class Flag{
public static void main(String[] args){
JPanel mypanel = new JPanel(){
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.white);
g.fillRect(0,0,300,200);
g.setColor(Color.red);
g.fillOval(100,50,100,100);
}
};
mypanel.setPreferredSize(new Dimension(300,200));
JFrame frame=new JFrame("FLAG");
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
frame.getContentPane().add(mypanel);
frame.pack();
frame.setVisible(true);
}
|

図 3-12 JAVA による GUI プログラミングの例
JAVA のネットワークプログラミングであっても,パラメータは,ホスト名,ポートなど VisualBASIC とさほど変わらない。接続には Socket オブジェクトを使用する。
Socket socket; // ソケット String enc; // エンコーディング BufferedReader rd; // 入力用ストリーム BufferedWriter wt; // 出力用ストリーム String host; // ホスト Int port; // ポート // 接続 try{ socket=new Socket(host,port); // ソケットオブジェクト生成 rd=new BufferedReader( new InputStreamReader( socket.getInputStream(),enc)); // インプットストリーム作成 wt=new BufferedWriter( new OutputStreamWriter( socket.getOutputStream(),enc)); // アウトプットストリーム作成 } catch(IOException e){ // 例外 ( エラー ) 処理 System.out.println("Can't connect to "+host+" #"+port); System.exit(1); } // 受信処理 String s; Try{ While (true){ s=rd.readLine(); // rd オブジェクトがあるので,その中の読み込みメソッド if(s==null) break; log.append(s+'\n'); } } catch(IOException e){ System.out.println("Connection closed.\n"); } |
図 3-13 ChatClient.java の一部抜粋

図 3-14 ChatServer と ChatClient の実行画面
4. i- アプリの作成
i- アプリは, nttdocomo 拡張クラスライブラリを使用する。その他, J2MM 仕様のクラスライブラリも使用する。 NTTDoCoMo より開発ツールである Doja が Web サイトで配布されているのでダウンロードしインストールする ( 図 4-1) 。

図 4-1 Doja のインストール
インストールがすむと KtoolBar が生成される。環境を設定し,プロジェクトを作成する。


図 4-2 環境設定と新規プロジェクト作成
メモ帳でソースプログラムを書き,保存後ビルドする。

図 4-3 ソース作成とビルド
エラー無くビルドが完了したら,アプリケーション属性設定を行う ( 図 4-4) 。 AppName と AppClass は必須でありその他は自動的に入力されている。また,ネットワークを使う場合には, PackageURL に http://www.seiryojoho-h.ed.jp/iappli/Racket.jar などサーバへの URL を正しく入れなければならない。その他,ネットワークを使う場合には環境設定も必要である。現在の i- アプリでは,プログラムをパッケージ化した jar ファイルの容量が 10KB までしか使えないので,注意する。また,スクラッチパッドは 5KB 以下にする。

図 4-4 属性の設定
実行を押すとエミュレータが起動し, i- アプリが実行される。実機とは処理速度が違う点や画面サイズも若干異なるので参考にしながらプログラムの改良をする。

図 4-5 i- アプリの実行
5. ネットワーク対応 i- アプリの作成
ネットワークを使うことは, i- アプリの機能を最大限に生かしたプログラムが可能となる。しかし,セキュリティの関係上 i- アプリの格納されているサーバとしか通信できない。また,利用できるプロトコルも HTTP に限られ,接続には, HttpConnection を使用する。
サーバも書込許可がないとファイルへの書込はできないので,通常は CGI で書き込む。
Try{ tb1.setText("Net 接続中 "); // ネット書込 HttpConnection hc=(HttpConnection)Connector.open("http://www.test.com/i/aaa.txt",Connector.READ_WRITE,true); hc.setRequestMethod(HttpConnection.POST); hc.setRequestProperty("Content-Type","text/plain"); OutputStream outs=hc.openOutputStream(); OutputStreamWriter out=new OutputStreamWriter(outs); out.write(strtmp); out.flush(); out.close(); hc.connect(); // ネット読込 InputStream ins=hc.openInputStream(); InputStreamReader in=new InputStreamReader(ins); strtmp=""; dat=0; while((dat=(char)in.read())!=-1){ strtmp=strtmp+(char)dat; } in.close(); hc.close(); tb1.setText("Net 切断 "); }catch(IOException e){ // 例外処理 ( エラー処理 ) tb2.setText("error:"+e); } |
図 5-1 i- アプリのネットワークプログラミングの例

図 5-2 通信プログラム実行画面
6. まとめ
コンピュータやネットワークの発達に伴って,プログラミングのやりかたや言語が変化してきた。特に C 言語プログラムが Windows になってから,授業での対応が難しくなってきた。 C 言語の GUI プログラミングは,各開発ツールのやり方の勉強に時間をとられすぎる。その点, VisualBASIC が直感的に GUI プログラミングできたので,教育界の GUI プログラミングでのスタンダードになっているのではないか。しかし, VisualBASIC も今度のヴァージョンからは, VB.NET として変わってしまう。また,ネットワークプログラムは,サーバの学習をしなければならない。
今後プログラミング言語として,何を教えればいいのか?
JAVA は, GUI やネットワークに対応したオープンな言語であり, C++ で難解であったオブジェクトが理解しやすい。また,サーバ,パソコン,カーナビ, PDA ,携帯電話, IC カードいろいろな分野に広がりつつあり,産業界での必要なものとなっている。それをふまえ,先見的な大学では, 1 年次 C 言語でプログラミング基礎をおこない,その後 JAVA を行うようになってきている。高校でも情報に関係する学科であれば, JAVA はその後の進路選択に役立つものになると考える。
〜 参考文献 〜
実教出版社 30 時間マスター VisualBASIC
技術評論社 VisualBASIC6.0 初級プログラミング入門 上,下
技術評論社 はじめての VisualBASIC6.0 インターネットプログラミング
翔泳社 VisualBASIC MAGAZINE 2000 8 月号〜 2001 6 月号
インプレス社 INTERNET MAGAZINE 2001 4 月〜 7 月号
ソフトバンク社 UNIX USER 2001 2 月〜 5 月号
技術評論社 JAVA 入門
ソフトバンク社 C MAGAZINE 2001 4 月〜 7 月号
日経 BP 社 日経ソフトウェア 2001 4 月〜 7 月号
技術評論社 JAVA PRESS vol19
技術評論社 図解 JAVA 流オブジェクト指向入門
ナツメ社 i モード対応 JAVA で作る i アプリ