Home >> Lecture 2
Sun Microsystems社が開発し、一般にかなり普及しているプログラミング言語と言えるでしょう。 特に、Java言語が普及する要因となったのは、言語的に先進の機能を有しているだけでなく、 サーバ(ネットワークでサービスを行なうコンピュータ)、 通常のPC、あるいは家電製品に組込まれるコンピュータ上で、プログラム上から利用されるライブラリ (Library:様々なプログラムの機能が詰め込まれたもの)が整備されたことも大きいのではないでしょうか。
- Java SE(Standard Edition)…WindowsやMac OS X上で動くJava
- Java EE(Enterprize Edition)…サーバマシンで動くJava
- Java ME(Micro Edition)…組込み型のコンピュータで動くJava
授業の中では、Java SEのライブラリを使って作られているタートル・グラフィックスを利用します。 このような広範囲の利用目的で作られているJava言語では、様々な実行形態があり、次のような実行形態 があります。 本屋さんに並んでいるJava関係の本のタイトルを見て混乱しないように、 ちょっと知識として知っておいてください。
- アプレット(Applet)…ネットワーク上でHTMLファイルと共にWebブラウザに移動されて実行されるもの(Java SE)
- アプリケーション(Application)…そのコンピュータだけで実行されるもの(Java SE)
- ビーンズ(Java Beans)…部品をプログラミングするという形態で作るアプリケーション(Java SE)
- サーブレット(Servlet)…サーバ上で実行されるアプリケーション(Java EE)
- JSP(JavaServer Page)…サーブレットがHTML上に直接記述されるもの(Java EE)
タートル・グラフィックスは、アプリケーションの形で実行されます。 このような様々な実行形態の他に、 Javaに関連するプログラミング言語もあります。 しかし、Java言語とは異なり、一応独立しているものなので、注意を要します。
また、Javaには豊富な 標準ライブラリ、オープンで追加できるライブラリも整備されており、非常に活発な開発が行なわれています。
Javaを学んでいれば将来、情報関係のどのような分野に行っても、あるいは情報関係で なくても、プログラミングについて共通の理解を得ることができます。Javaファミリーがかなり普及して いますので、ここで学ぶ言語上の概念は利用価値が高いと思われます。
皆さんが記述したプログラミング言語と、 コンピュータで実行できる機械語(Machine Language)との間の変換をする必要があります。 この変換を行い実行までさせるには、一般には次のような3つの方式があります。
- コンパイル(Compile)方式…コンパイラによって、ソーステキストをコンパイラで直接CPUで実行できる機械語に変換する方式です。高速に実行されますが、CPUの種類やOSの種類が変わると動かないので、各種類別にコンパイルされた機械語をのプログラムを用意しなければなりません。なお、機械語に変換されたプログラムのことをオブジェクト・コード(Object Code)と呼ぶことがあります。C/C++言語はこの形を採用しています。
- インタープリタ(Interpreter)方式…コンパイルせず、ソースプログラムをそのまま逐次解釈しながら実行する方式です。インタープリタと呼ばれるプログラムが必要になりますが、そのプログラムさえあれば、CPUやOSの種類を問わず実行することができます。しかしながら、逐次的に解釈しながら実行するので、実行速度は低速になります。 Lispの他、JavaScript、Lua、Pythonなどのスクリプト言語がこの形になっています。
- 中間コード(Intermediate Code)方式…コンパイラによって、ソーステキストを中間コードに変換します。 この中間コードは、機械語そのものではありませんが、それに近い形にしておけば、かなり高速に実行することができます。また、中間コードを実行するランタイム・インタープリタ(Runtime Interpreter)とライブラリなどの実行環境が揃っていれば、CPUの種類やOSの種類が変わってもどこでも実行することができます。
Javaは、ネットワーク上を移動するアプレットという実行形式があるため、どこかのコンピュータに 特化した機械語(Machine Language)を出す訳にはいかず、中間コード方式を採用しています。この中間コードは、 ほとんど機械語に近い形をしており、ある仮想的なマシン(Virtual Machine)を想定しています。 そのためこの仮想マシンをJava VM(Java Virtual Machine)と呼び、中間コードのことを仮想マシンコード (Virtual Machine Code)と呼んでいます。この仮想マシンコードの機械語は、それぞれのCPUで高速に 実行できますので、ランタイム・インタープリタは小さなものになります。また、標準のライブラリなどが揃っていれば どのコンピュータでも実行することができます。AppleScriptも中間コード方式を採っていますが、逆にかなり ソーステキストに近い形での中間コードなので、実行速度はそれほど速くありません。
Mac OS Xでアプリケーションは「.app」という拡張子で、Windowsでのアプリケーションは、「.exe」という拡張子で 終わっていなければいけませんでしたが、Javaも同じように拡張子を使ってファイルの種別を行なっています。
- ソーステキストは、「.java」という拡張子がついています。
- 仮想マシンコードは、クラスファイルと呼ばれていて、単体のクラスファイルは、「.class」という拡張子がついています。
- クラスファイルがいくつかまとめられたものは、アーカイブファイルと一般には呼ばれていて、 Java独自のアーカイブファイルは、「.jar」という拡張子がついています。 また、Windowsで標準的に使われているWinZIP形式のアーカイブファイルも利用できて「.zip」という拡張子がついています。
その他に開発環境で用意しているプロジェクト・ファイルがあります。Xcodeの場合は、「.xcode」あるいは「.xcodeproj」 という拡張子になっています。ただし、Xcodeの前身であるProject Builderの場合には、「.pbproj」という拡張子になっています。 「.pbproj」や「.xcode」の拡張子がついたプロジェクト・ファイルを最新のXcodeで開くと、 「プロジェクト・ファイルが古いので最新のXcode用にアップデートしますか?」と聞いてきます。 OKを押すと、「.xcodeproj」の拡張子がついたプロジェクト・ファイルが作られます。 BlueJの場合は、プロジェクトのフォルダに「bluej.pkg」および 「bluej.pkh」というファイルがあり、これでプロジェクトを管理しています。 プロジェクト・ファイルを利用することによって、複数のソーステキストを管理することができます。
WinZIP形式のファイルはWindows XPやVistaでは、縦にベルトのついたフォルダとして、その中身が見えてしまうので 注意して下さい。Microsoft社が「使いやすくしたつもり」ですが却って初心者の混乱を招くことになっています。 Javaのライブラリとして保存されているZIPファイルは、展開する必要はありません。
Jarファイルは、そのままダブルクリックすると、Windows XPやMac OS Xでは、アプリケーションの場合は 起動させることができます。これは、Jarファイルの中に、最初に起動させるクラス(後述)が指定されている からです。
Javaの開発環境は、最低限のコマンドが揃っている標準開発環境と、それを利用してエディタなどが ついている統合開発環境(Integrated Development Environement:IDE)の2つに分かれています。 JDKは、Sun Microsystems社あるいはそこからライセンス受けている会社(Apple社など)が用意している 標準開発環境です。
JDK(Java Development Kit)とJRE(Java Runtime Environment)は、コンパイラのあるなしが 大きな違いになっています。JREは標準でWindowsにも入っていますが、JDKは標準で入っていないので、 Lecture 1にあるように、ダウンロードしてインストールする必要があります。既にナナエディタのために、 ダウンロードした人は、再インストールの必要はありません。JREの方にも標準で必要とされるライブラリは 入っています。
JDKについては、次のようなコマンドが用意されています。コンソール(Windowsではプロンプト入力) か起動させることができます。
javac…Javaのコンパイラです。 java…Javaのランタイム・インタープリタです。これはJREにも含まれています。 appletviewer…アプレットという実行形態を表示させるためのものです。
JDKのバージョンに関しては、コラムを参照してください。
Mac OS Xにおけるにおけるクラス・ライブラリの位置は以下の位置に収められています。 なお、日本語のMac OS Xでは、「Library」は日本語のカタカナで「ライブラリ」、「System」は「システム」と Finder上では表記されています。
つまり、システムが共通に持っているクラス・ライブラリ以外に、それぞれのユーザ個人でクラス・ライブラリを 持てるような構造になっています。このような機能は、Windowsでは、まだ発見されていません。 また、今回開発環境として使うBlueJは、独自に(その内部に)必要なライブラリを持つことが可能です。 まずは、タートル・グラフィックスのライブラリを単体のアプリケーションとして実行してみます。 以下のリンクをクリックして、ダウンロードして下さい。
SFC Turtle Graphics (箕原版) 0.9.7.2版のダウンロード
Safariでダウンロードするとデスクトップ上に「SFC Turtle Graphics」というフォルダができる筈です。
ダウンロードしたした「SFC Turtle Graphics >> ライブラリ >> Java >> Extensions」 のフォルダに開いてみて下さい。そこに、「SFCTurtle0972.jar」というファイルがあります。 この「SFCTurtle0972.jar」ファイルをダブルクリックして、起動させてみて下さい。 単体で起動できるようになっています。
Javaできちんと設定されているJar形式のファイルは、ダブルクリックすると、 自動的に、「Jar Launcher」というアプリケーションがMac OS X上から実行されて、Javaの アプリケーションとして実行されます。ここでは、「Home0972」という名前のアプリケーションとして実行され、 デモのタートルが動きます。
なお、このライブラリはWindowsでも動くようになっています。 Macintosh版でも、Windows版でもの開発環境として使うBlueJの中に、 このライブラリが入っていますので、自宅のWindowsで課題をやりたい人は、これを別個にダウンロードする必要は ありません。あくまでも、Javaではライブラリもアプリケーションとして起動できる例を示すために、上記の実習を 行なったに過ぎません。
このタートル・グラフィックスのウィンドウでは、メニューが追加がされていますので、 その部分だけここでは説明します。
- 「File」
- このメニューには、「Restart」と「Stop」および「Quit」があります。 「Restart」は、実行途中でも最初から再実行されます。 「Stop」は、途中で実行を停止させます。 ただし、再開の機能はありません(0.9.7.0版)ので、「Restart」で最初から実行させて下さい。 「Quit」は実行を終了します。 終了は、ウィンドウのアプリケーションメニュー(この場合は「Home0970」)から、「終了」(あるいはCommand+Q)でも可能です。 まず、「Speed」メニューですが、最初の項目が「No Wait」になっています。これは、描画にまったく 時間を待たないものになります。これを選べば、タートルがなくなります。 次に、「Property」メニューができています。3つの項目について説明します。これらはタートルが 作成されるときに参照されます。個々のタートルについて作成後はプログラム上で変更できます。
- 「Center Oriented」
- タートルを作成する際に、これまで100,100のxy座標でしたが、この項目がチェックされていると、画面中央に タートルが配置されます。チェックされていなければ、これまで通り、x座標100、y座標100に配置されます。
- 「Color Turtles」
- タートルを作成する際に、緑色だけでしたが、この項目がチェックされていると、複数のタートルについて 「緑→赤→青→マゼンタ→シアン→黄色→オレンジ→ピンク」の順番で、タートルの色を初期化します。 チェックされていなければ、緑色になります。
- 「Show Turtle」
- タートルを作成する際に、この項目がチェックされていると、タートルを表示します。 逆にチェックされていないとタートルが表示されません。ただし、軌跡を残すことはできます。 軌跡だけを残したいときにチェックを外します。
Xcodeは、Macintoshの標準的な統合開発環境で、Metrowerks社(Motorola社の半導体部門であるFreescale社に 吸収されてしまいましたが)の「CodeWarrior」という製品に近い形でのユーザ・インターフェースを持っています。 Mac OS 9までの時代までは、CodeWarriorでMacintoshのプログラマは開発していましたが、Mac OS Xになって 「Project Builder」という開発環境が標準で提供されるようになり、CodeWarriorは組込み製品用になってしまいました。 また、Project BuilderもMac OS X 10.3からは「Xcode」という名称を変えて提供されています。 10.3以降のMacintoshを購入すれば、Xcode ToolというフォルダがDVDの中に添付されていますので、それをインストール すれば使えるようになります。現在教室にインストールされているXcodeの版は、2.4.1版です。
BlueJとも共通するのは、「プロジェクト」を作り、その中でプログラムを作っていくという方式です。 Xcodeは、Macintoshで動く多人数で作る商用アプリケーションも開発可能ですが、簡単な小さなプログラムも 案外すぐに作って動かせるという簡単なユーザ・インタフェースをもっています。ちなみに、Microsoft Visual Studioも、元は使いにくかったのですが、お得意の「他のOSのいいとこどりをする(ライセンス料は払わず)」 戦法で、同じように使いやすくなってきています。Visual Studio Express版を使えば、C#やJ#といった C++やJavaと酷似した言語を使うことができます。
Xcodeでは、Javaの様々な実行形態のプログラムを開発できる以外に、C/C++のプログラムや、 Objective-CというNeXT社から受け継いだApple社独自のオブジェクト指向のC言語も開発することができます。 また、Javaにおいても、Apple社の新しいアプリケーション開発用のライブラリCocoaを利用した アプリケーションを開発することもできますし、iPod Touchのアプリケーションも開発することができます。
Javaのフリーの開発環境は、これ以外にEclipse、Borland社のJBuilder、JDKにも添付されているNetBeansと あるのですが、だんだんJavaのいろいろな実行形態に対応するためにプラグイン(追加機能)を入れすぎている ために、版を重ねるために初心者にはほとんど使えないものになってしまいました。 この授業ではMac OS X標準の開発環境であるXcode以外に、フリーライセンスで、WindowsでもMac OS Xでも 共通に使えて、しかも唯一初心者に使いやすくカスタマイズ (Customize:目的にあわせてソフトウェアの構成を変更できること)ものとして、BlueJを選んでいます。
BlueJは、オリジナルのものは以下のサイトから最新のオリジナルをダウンロードすることができます。 もともとオーストラリアのシドニー大学とモナッシュ大学のBlueというプロジェクトから発展して、 オーストラリアのメルボルンにあるデークン(Deakin)大学と、英国のケント(Kent)大学の 共同プロジェクトで開発・メンテナンスされています。初心者にJavaを教えるための開発環境なので、 誰でも非常に簡単にJavaで開発することができます。加えて、ユーザがカスタマイズ(Customize: ユーザの状況に併せてソフトウェアを変更・修正すること)が非常に可能になっていて、英語版も 日本語版に簡単に変えることができます。
標準のBlueJについているテンプレートは、非常に難しいサンプル・プログラムになっています。 そのため、この授業では、日本語版のメニューを持ち、簡単なサンプル・プログラムをテンプレートで 表示するようなカスタマイズを行なっています。また、上記のタートル・グラフィックスのプログラムも 簡単に実現するためのテンプレートも予め用意してあります。 このカスタマイズされたBlueJの中には、タートル・グラフィックスのライブラリも組み込んであります。 授業では、Macintoshに標準装備されている優れた開発環境Xcodeは使わずに、 BlueJを使ってプログラミングします。 それは、Windowsユーザの学生の方がほとんどなので、履修者の方が自宅で課題ができるようにするためです。
今回、授業で使うタートル・グラフィックスが入ったテンプレートや、簡単なアプリケーション、アプレット を作成できるテンプレートが入ったBlueJのカスタマイズ版を用意しました(7.9MB)。 これを利用することによって、非常に簡単にプログラムすることができます。
BlueJ for SFC 3.0.4(Mac OS X版)のダウンロード
Safariでダウンロードすると、「BlueJSFC304Mac」という名前のフォルダができます。 Firefoxの場合は、ダウンロードしたZIP形式のファイルをダブルクリックして下さい。解凍するアプリケーションが 起動されて、上記のフォルダが作成されます。 これでインストールは終了です。この中の「BlueJ.app」というファイルを起動すると、BlueJが起動されます。
Windows版のBlueJについては、ダウンロードのページに書かれていますので、 それをみて、インストールしてみて下さい。
BlueJファイルを上記のようにダウンロードしてインストールして、BlueJを起動させてみましょう。 日本語のメニューになっていれば大丈夫です。
AppleScriptとは異なり、Java言語は、いきなり命令文を記述することはできません。 最初に「クラス(Class)」という構造を作り、その中にメソッド(Method)を記述する形になります。 それでは、簡単なプログラムを見ていきましょう。
public class Sample {public void start( ) {}ここにプログラムしたいことの中身を記述します。}
上記はタートル・グラフィックスで出てくるプログラムの概形ですが、Java言語でのプログラムの 構造を踏襲していますので、この例で説明します。まず、外側にあるのは、クラスを定義するブロック (クラス・ブロック)です。この中に複数のメソッドを定義します。ここでは、「Sample」という名前の クラスが定義されています。「class」という名前の前に「public」という修飾子がついていますが、 これは「外部に公開された」という意味になっています。外側から見えるクラスが、実行環境から呼ばれて プログラムとして実行されるわけです。
内側のメソッド定義では、「start( )」という名前のメソッドが定義されています。これにも「public」 がついていますが、これも外部に公開されるメソッドであるという意味です。また、「void」という修飾子 もついています。これは、何かの機能を行なうけれども、何も情報を返さない(空の情報を返す)という 意味になっています。「void」というのが、「空の」という意味を持っているので、この言葉使われます。
皆さんがタートル・グラフィックスを利用してプログラムを記述するのは、このstartメソッドの内側 のブロック(メソッド・ブロック)です。 タートル・グラフィックスのライブラリの中から自動的に、このstartメソッドが起動されるように手配して あります。
C/C++系の流れを含むJava言語では、記号(すべて半角です)が特殊な意味を持っています。 最初に、授業の中でポイントとなる記号の紹介をしておきます。これらの記号の使い方を間違えると、 コンパイラは、すぐにエラーを出してきます。それが、Javaでの書き方で嫌な部分なのですが、 「記号に重要な意味が込められている」と考えて、コンパイラが間違った使い方を指摘してくれている (サポートしてくれている)と思ってください。
半角記号 読み 意味 注意すべきポイント 半角の空白 区切り 語と語の区切りを表します。 . ドット、ポイント 日本語の「の」 単なる点ではなく、〜の〜という所属を表します。 , カンマ 複数の列挙 複数の値を列挙するときの区切り記号として使います。 ; セミコロン 文の終わり 日本語の「。」のように文の終わりを示します。「:」(コロン)と間違いやすいので注意して下さい。 { } ブレース(波括弧) ブロック 複数の文をひとまとまりにします。ブロックの「始まり」と「終わり」を示しています。 " " 二重引用符 文字列 2つの"で文字列を括ります。 ' ' 一重引用符 文字 2つの'で1つの文字を括ります。 ( ) 丸括弧 式・キャスト・メソッド 式の評価の優先順位を変えたり、違う型に変えたり、名前の後ろにつくと、メソッドを意味することになります。 // 2つのスラッシュ コメント これ以降行の最後までコメントとして扱われます。 /*と*/ スラッシュとアスタリスク コメント /*から*/までの複数行がコメントとして扱われます。
Javaでは日本語の名前などを使えますが、 原則的には使いません。これは、日本語の文字コードがJIS、Shift-JIS、EUC、Unicodeと4種類あり、それらの 4種類の中でも版によってさまざまな違いがあるからです。たとえば、Shift-JISでもローマ数字や、丸付き数字、 あるいは括弧などに入った数字・文字などは、WindowsとMacintoshで異なりますから、メールで使えないのは ご存知かと思います(Windowsは1983年版のJISに基づいていますし、Macintoshは2000年度版のJISに基づいて います)。また、クラスと呼ばれるものに日本語の名前をつけてしまうと、 Mac OS X 10.4以降ではUnicodeの最新仕様に基づいていますので、 多くのソフトウェアが対応できなくなってしまいます。 そのため、基本的には、Javaでは半角の英語(ローマ字)だけを名前に使うようにしてください。
また、大文字・小文字の区別も名前ではしています。更に、言語上で用いる以下の小文字の予約語 (Reserved word:Java言語仕様ではキーワードKeywordと呼んでいます)は、変数名などにつけるこ とはできません。これらの予約語は、BlueJやXcodeなどの開発環境では、異なる色の文字として表示されます。 エディタ上の色分けに注意して下さい。
また、名前の付け方にも特徴があります。予約語の一覧や、Javaにおける名前の付け方は、 コラム(標準Javaにおける予約語の一覧と名前の付け方)を参照して下さい。
「タートル・グラフィックス(Turtle Graphics)」というのは、1970年代にLogoというプログラミング言語によって 使われたグラフィックスを描画するための「ライブラリ(Library)」です。 ライブラリというのは、自分で記述しなくても、予め他の人が主要なプログラムを記述しておいてくれて、後は それを利用するだけになっている便利なプログラム集のことです。 タートルという名前が示すように、亀が動いた形跡が、線として残るような形になっています。 まっすぐに進むだけではなく、回すこともできます。
それでは、サンプルのプログラムを見てみましょう。次のプログラムは、BlueJで、タートル・グラフィックスの テンプレートを選択してプロジェクトやクラスを生成すると、自動的にでてくるものです。
// タートルグラフィックスのライブラリを利用する import sfc.turtle.TurtleFrame; import sfc.turtle.Turtle; import sfc.turtle.ImageTurtle; import sfc.turtle.TextTurtle; // クラスの定義 public class FirstTurtleProgram extends TurtleFrame { // mainメソッドの定義 public static void main(String [ ] args) { new FirstTurtleProgram( ); } // startメソッドの定義 public void start( ) { Turtle turtle = new Turtle( this ); turtle.rotate( 90 ); turtle.forward( 100 ); } }
上記のimportで始まる4行は、タートル・グラフィックスで用いるクラスをこれから利用するということを コンパイラに伝えるものです(「import」という単語には、「輸入する、持ち込む、取り入れる」という意味があります)。 それ以外の構造は、ほぼ通常のアプリケーションのプログラムと同じです。 まず、クラス名はここでは、「FirstTurtleProgram」としてあります。このクラスは、「extends」という フレーズがついていて、その後に「TurtleFrame」というクラス名が書かれています。 これは、このプログラムがTurtleFrameというクラスを継承して(extendは「拡張する」という意味の動詞ですから、「拡張して」) 作られることを意味しています。
なお、上記のプログラムで出てくるように、「TurtleFrame」、「Turtle」、「ImageTurtle」、「TextTurtle」 は、タートル・グラフィックスで使っているクラス名なので、自分で作るときのクラス名としては使わないで下さい。
このクラスには、2つのメソッドがあり、 1つは「main( )」という名前のメソッドで、もう1つは「start( )」いう名前のメソッドです。 アプリケショーンの場合は、publicな(外部に公開された)クラスの「public static void main( String [ ] )」 という名前の形式(シグネチャ:Signatureと呼ばれています)のメソッドが最初に実行されるという決まりが あります。同じように、C/C++言語でもmain()関数が実行されるという決まりがあります。それを踏襲したものです。 main( )メソッドの中には、このFirstTurleProgramクラスで記述されるオブジェクトを1つ生成する(「new」)という 文がついています。これで、オブジェクトが生成されて、アプリケーションが走り始めます。 タートル・グラフィックスでは、オブジェクトが生成されるとstart( )メソッドを呼ぶという仕掛けになっています。 そのため、start( ) メソッドのブロックの中に記述されてことが実行されます。
start( )メソッドの中を見てみましょう。Turtleというクラスの変数 turtleが宣言されていて、 初期値として新しく作られたTurtleクラスのオブジェクト(new Turtleという記述)が代入されています。 このnew Turtle( ) は、オブジェクトを作るコンストラクタ(Constructor)と呼ばれる特殊なメソッドです。 さて、このコンストラクタには、パラメータとして「this」がつけられています。このthisは、作られた プログラム(クラス)のウィンドウを示すもので、「このウィンドウの中にタートルを配置せよ」という意味 だと思って下さい。
turtleは、その後、90度回転(rotate)させられ、100ドット進められて(forward)います。 これで、水平線の軌跡を残します。ピリオド「.」は、日本語の「の」と同じだと思って下さい。 「turtle.rorate( 90 );」は、「turtleのrotateメソッドを90というパラメータで呼び出す」という意味です。
このクラスの私家版のタートル・グラフィックスは大幅に拡張されています。すべての機能は、 以下のページに出ています。どのような機能が使えるか、見て下さい。授業の中では、全部は扱いません。
Java(箕原)版タートル・グラフィックスのメソッド一覧表
「BlueJ for SFC 2.5.3」の中にある、BlueJ.appをダブルクリックして アプリケーションを起動します。 Dockに登録しておいても良いでしょう。
BlueJのアプリケーションのメニューの「環境設定」からエディタのサイズを大きくしておきましょう。 標準は14ptですが、18ptぐらいの方が見やすいと思います。
- 「プロジェクト」メニューの「新規作成」から、1つプロジェクトを 作成します。BlueJでは、 1つだけのプロジェクトを作成するだけで、 1回の授業のすべてのプログラムを扱えると思います。 プロジェクト名は、半角英字で入れてください。空白が入っても構わなかったかと思います。
- 「BlueJ: 入力したプロジェクト名」というウィンドウが出ますので、このウィンドウで 「新規クラス」ボタンを クリックしてください。クラス名を入れる ウィンドウが出てきます。標準で、「SFC タートル・グラフィックス」に チェックが入っていると思います。 クラス名も半角英字で、最初は大文字からいれてください。 クラス名では空白は入れないでください!たとえば、「FirstTurtleProgram」とします。
- 上記で「FirstTurtleProgram」と入力した場合は、オレンジでFirstTurtleProgramのクラスアイコンが 長方形で表示されます。このクラスはまだコンパイルされていないので、青い斜線が掛かっています。 ダブルクリックしてください。エディタが現われます。
- このエディタのウィンドウが、プロジェクトのウィンドウと被って重なって表示されるので、 エディタのウィンドウをドラッグして右下に移動させる ようにしてください。
- エディタのウィンドウで、「コンパイル」を押してください。プログラムを修正したときは、コンパイル・ボタンを 押せば、自動的に保存もされます。
- 先程のプロジェクトのウィンドウに戻り、FirstTurtleProgramのクラスアイコンを 「右クリック」します。 選択された長方形のアイコンの右下に、ちょっとした斜線が表示されます。 右クリックができない人は、 「Controlキーを押しながらクリック」でも結構です。なお、右クリックの設定は、 「システム環境設定」のアプリケーションで、「マウス」の項目で設定できますので、それを利用して下さい。
- 右クリックで、でてくるコンテンツメニューから、 「void main(String[])」という 項目を選んでください。 そうすると「BlueJメソッド呼出し」というウィンドウが 出てくるのですが、何も入力せず、「OK」ボタンを 押せば結構です。
- プロジェクトウィンドウも右の方に移動しておいた方がいいのですが、 Turtleのウィンドウがでて、実行されます。
- 実行終了のさせ方は、「Turtle」のウィンドウをクリックして、前面に出すと 「Fileメニュー」が出てきますので、 「Quit」を選んでください。また、起動されたプログラムは、「BlueJ Virtual Machine」というアプリケーション名に なっていますので、アプリケーションメニューの方の「Quit」を選んでも終了できます。
- プログラムを修正したりして、もう一度実行させたければ、上記の4番の手順から 行なってください。
- 他のプログラムを作りたいときは、上記手順の2番からの繰返しになります。
「デスクトップ」のフォルダを指定できるでしょうか。そのフォルダを選んで「Project2010」という 名前にします。「Project2010」というフォルダが 作成されます。プロジェクトウィンドウの中で、「新規クラス」ボタンを押し、「SFC タートル・グラフィックス」 についているチェックボタンはそのままにしておいて、「FirstTurtleProgram」という名前を入力して下さい。 その名前のアイコンが出てきますので、上記のようにダブルクリックして開き、中を確認したら、「コンパイル」 ボタンをおして、コンパイルして実行します。
以降、課題をや実習を始めるときには、毎回「新規クラス」ボタンを押して、 新しいプログラムを入力できるような状態にしておいてください。
タートルを作ったら次のようなメソッドを利用して、亀を回転させることができます。
タートルの名前.rotate( 整数 );上記の整数は、-360〜360の間で指定することができます。時計回りです。最初はタートルは12時(真上)の方向を 向いています。もう説明する必要もありませんが、90度回転させた後に直進(forward)すれば横線を引いてくれます。 さて、タートルはその他にはどんなことができるでしょうか。以下に、この時点でその他ができる操作を記述しておきます。
タートルの名前.forward( 整数 ); // 直進させます(マイナス値だとバックします) タートルの名前.back( 整数 ); // 戻らせます(後進します、マイナス値だと前進します) タートルの名前.right( 整数 ); // 右にいきます(マイナス値だと左にいきます) タートルの名前.left( 整数 ); // 左にいきます(マイナス値だと右にいきます) タートルの名前.penup( ); // ペンを上げます タートルの名前.pendown( ); // ペンを下げます タートルの名前.setPenWidth( 整数 ); // ペンの幅を変えます(通常は1) タートルの名前.setPenColor( 色 ); // ペンの色を変えます(通常は黒)
ペンを上げた後に、亀を動かしても、そこには形跡の線が残りません。形跡の線を残すには、ペンを下げる必要があります。 また、上記の<色>としては、次のような色が用意されています。縦棒|は、「いずれか」を表しています。
Red | Blue | Green | Yellow | Black | White |
Cyan | Magenta | Gray | Orange | Pink
ここまでわかれば、次のような課題もできると思います。
最初のプログラム「FirstTurtleProgram」について、すべてを日本語で記述し直してみてください。 変数名やクラス名、あるいはメソッド名は、英語のままで構いません。改行もあわせてください。 課題用紙の裏面を利用します。たとえば、「new FirstTurtleProgram( );」は、 「FirstTurtleProgramというクラスのオブジェクトを作る。」という風になります。 「{」は「始まり」で、「}」は「終わり」と記述しましょう。
同じことを何回もさせるのに、何行も同じことを書くのは面倒ですね。こういうときは、コピー&ペーストを使いますが、 それでも手作業が面倒ですね。まず正方形を描く場合について、startメソッドの中だけを抜き出して書いてみました。
//例題1:四角形を描く Turtle turtle = new Turtle( this ); turtle.forward( 100 ); turtle.rotate( 90 ); turtle.forward( 100 ); turtle.rotate( 90 ); turtle.forward( 100 ); turtle.rotate( 90 ); turtle.forward( 100 ); turtle.rotate( 90 );
結局、100ドット進めて、90度回す部分を4回も同じことを記述しています。 このように、同じことを何回も記述するのは面倒ですし、回数が増えると大変ですね。 Squeakでは、時計ボタンがあり、繰返しで永遠に同じことをやってくれました。 同じようにJavaでは、ある特定の部分を指定して、何回も繰り返させることができます。 この特定の部分というのは、「ブロック(Block)」と呼ばれていて、Javaでは、メソッドやクラスの定義と同様に 波括弧(Brace)で括ります。以下のような感じです。 この波括弧{}は、半角で記述します。
{
//ここにまとめたい命令文を書きます
}
このブロックの中に書かれる文は、少し右側にTab(タブ)キーを使ってずらしてあげます。 そうすると、ブロックの始めから終わりまでがわかって、読みやすくなるからです。 これから、ブロックを使ったいろいろ実行の流れを制御する書き方が出てきます。 これらの書き方のことを、「制御文(Control Statement)」と呼んだりします。 制御文には繰返しや、条件によって行なう内容を変える条件分岐があります。 それでは、ちょっとブロックの書き方の例を見てみましょう。 次の例では、2つの命令文がまとめられています。
{ turtle.forward( 100 ); turtle.rotate( 90 ); }
さて、前置きが長くなりましたが、このブロックを利用したJavaの繰返し文の書き方を見てみましょう。 Javaには以下のような3つの形の繰返し文があります。
ここでは、無条件に永遠に繰り返すこと記述の仕方を書いてみましょう。永遠に繰り返しますので、タートルを止めるのは、 Command+Qあるいは、メニューから終了(Quit)を選んで下さい。以下の書式はで、{ ブロック }と書かれているところは、 上記のようなブロックをここに記述します。
while ( true ) { ブロック }
このwhile文は、丸括弧の中に条件を書き、「〜の間」ブロックを繰返し実行するという制御を行ないます。 この条件として、trueというものが書かれていますので、ここでは、「真の間」すなわち「いつでも」繰返しを行なうということを 意味しています。 たとえば、先ほどの正方形を永遠繰返し文で記述したい場合は、次のように記述します。startメソッドの中だけを抜き出して書いてみました。
//例題2:永遠繰返し文で正方形を描く Turtle turtle = new Turtle( this ); while ( true ){ turtle.forward( 100 ); turtle.rotate( 90 ); }
繰返しの部分は、Scratch(英語版)で記述すると次のような感じになります。
先ほどのプロジェクトウィンドウの中で、「新規クラス」ボタンを押し、「SFC タートル・グラフィックス」 についているチェックボタンはそのままにしておいて、「SquareLocus」という名前を入力して下さい。 Locusというのは、「軌跡」という意味です。 その名前のアイコンが出てきますので、ダブルクリックして開き、startメソッドの中を上記のようなプログラムにして、「コンパイル」 ボタンをおして、コンパイルして実行します。永遠に繰り返しますので、止めるのは、タートルグラフィックスの ウィンドウを選び、Command+Qあるいは、メニューから終了(Quit)を選んで下さい。
以下の課題は、永遠繰返し文を使っても良いですし、コピー&ペーストを使って、同じことを何回も記述して書いても構いません。
永遠繰返し文を使って、一辺が60ドットの正三角形と正五角形を描画します。クラス名は、それぞれ 「TriangleLocus」と「PentagonLocus」で作成します。
5つの角から構成される星形を描画しなさい。大きさは、全体が100ドットぐらいで収まるぐらいで。 各辺が交差するような形でも、☆のような形のどちらでも構いません。 クラス名「StarLocus」という名前にします。
次のような、図を描いてみなさい。 一辺の大きさは適当で構いませんが、小さすぎて見えないのは困ります。 どれを描くかは、授業で指定します。 クラス名はそれぞれ、「RectangleLocus」(長方形)、「StairsLocus」(階段のような形)、「NotchesLocus」(のこぎりのような ジグザグ)、「CrossLocus」(白十字)、「ConfettiLocus」(八角形のこんぺいとう)、 「ParallelLocus」(平行四辺形)、「AsteriskLocus」(*のような形)、「RulersLocus」(定規のような形)という名前にします。
「Project2010」のプロジェクトウィンドウの中で、「新規クラス」ボタンを押し、「アプリケーション」に チェックボタンを押して、「MyApplication」という名前を入力して下さい。 その名前のアイコンが出てきますので、上記のようにダブルクリックして開き、中を確認したら、「コンパイル」 ボタンをおして、コンパイルして実行します。
同じく、「Project2010」のプロジェクトウィンドウの中で、「新規クラス」ボタンを押し、「アプレット」に チェックボタンを押して、「MyApplet」という名前を入力して下さい。 その名前のアイコンが出てきますので、上記のようにダブルクリックして開き、中を確認したら、「コンパイル」 ボタンをおして、コンパイルして実行します。
<<Previous Lecture | >>Next Lecture |