第 1 回 Java 基本技術講義 Javaによるオブジェクト指向 0 プログラミング構造 多くの言語は されたプログラムである (1 ルール化容易年生から学んできた C 言語も含めて ) ハード動作に近い ミスを見つけやすい 但し プログラム自体も大規模になり と が重要 Windows 95 1500 万行 Windows XP 3500 万行 Windows Vista 5000 万行 型プログラミングが注目されるようになった 1
オブジェクト指向プログラム オブジェクト指向型プログラミングとは? 動作 を もの に関連付けて 個々のプログラムを作成する ( 例 ) 構造化プログラミング ( 例 ) オブジェクト指向プログラミング Sin を計算 Sin 式 結果を表示 結果を保存 Degで計算 θ で計算 保存ファイル Text 形式 Bmp 形式 表示画面数値表示グラフ表示 自律分散 協調動作プログラミングとも考えられる 2 オブジェクト指向プログラム オブジェクト指向のプログラミング もの ( オブジェクト ) を組み合わせるルール 自動車 = エンジン + ハンドル + タイヤ アクセル + ブレーキ 使っていいところと使ってはいけないところを定義 もの ( オブジェクト ) を再利用するルール 再利用方法と使い方を定義新型車 = 従来車の + 低燃費 ( 混乱が起きないように ) 基本部分エンジン もの ( オブジェクト ) の機能拡張をするルール エンジンモータハイブリッド車 = 空転再生可能 + 可能 機能拡張するための抽象化と拡張ルールを定義 3
オブジェクト指向言語の特徴 オブジェクト指向の3 大要素 1. カプセル化 ( ) ( カプセル化 継承 ポリモーフィズム ) もの の特性と動作をまとめて大きな 部品を作り, かつアクセス範囲を限定して部品の独立性を高めるための仕組み もの の特性として変化してはならないものを して守り 変化する必要のないものを してプログラミングを容易にする 4 オブジェクト指向言語の特徴 オブジェクト指向の3 大要素 ( カプセル化 継承 ポリモーフィズム ) 2. 継承 ( ) ある のメソッドや変数などの定義情報を別のクラスに取り込む仕組み よく似たクラスを作るときに共通部分を定義した ( これを と呼ぶ ) を用意し, それを 継承する と宣言するだけで, 定義情報をそのまま利用できるようにすること 5
オブジェクト指向言語の特徴 オブジェクト指向の3 大要素 ( カプセル化 継承 ポリモーフィズム ) 3. ポリモーフィズム ( ) 日本語では と訳す 継承を抽象化することで 概念で もの をまとめ 機能を変更することを前提としたプログラミング手法を指す このポリモーフィズムの仕組みは, ソフトウエアに大きな柔軟性をもたらす 自動車 ではなく 4 輪で走行するもの と抽象化することで 継承先に 動力 を選択する自由度を与えることとなる 6 オブジェクト指向 オブジェクト指向型言語の歴史と分類 最初は設計思想として提案された (1970 年代 ) 1980 年代にMicrosoftがC++ を発表したが 難しすぎた 1990 年代に Sun Microsystems が Java を発表したが 普及はいまいち 2000 年代にWeb 発達 +Java JDK 無料配布で急激に普及した 1970 年代 1980 年代 1990 年代 2000 年代 Smalltalk Perl Ruby, Python C Objective C JavaScript Silverlight C++ Java C# Z80 MS DOS Windows3.1 WindowsXP 7
Java 言語とオブジェクト指向 Java の開発経緯とその構造 家電製品の制御用ソフトウェアとして開発を開始 (1) 家電製品は種類が豊富 もの 基準のオブジェクト指向 調理器具冷却器具冷蔵庫 電圧変換温度制御 冷却サイクル消費電力 瞬間冷却 冷凍庫 霜取り 加熱器具 タイマ機能加熱制御 トースター 焼き加減 電子レンジ 電磁制御 もの が持つ機能をまとめることで 開発の効率化や 次世代開発におけるプログラム構築の が可能 8 Java 言語とオブジェクト指向 Java の開発経緯とその構造 家電製品の制御用ソフトウェアとして開発を開始 (2) 使われるCPUが様々 搭載でCPU 依存を吸収 Java プログラム作成コンパイルバイトコード Application JavaVM JavaVM Applet Web ブラウザ + JavaVM JavaVM 同じ思想 =Microsoft Visual C# +.NET Framework 9
Java 開発環境の準備 自宅でできる Java の勉強 < 開発ツール > Java 2 Platform Standard Edition Development Kit 5.0 JDK 5.0 with Java EE & J2SE runtime http://java.sun.com/j2se/1.5.0/ja/download.html *2009/10 から JDK6.0 に本格移行 < 統合ソフトウェア > Eclipse IDE for Java EE Developers (Eclipse 3.3) http://www.eclipse.org/downloads/ 10 プログラミングスキル習得の秘訣 インストール方法などはネット情報を参照に またネット上には困ったときやわからないときに参考になるページがたくさんあります サンプルも豊富です ネットで検索しながら学ぶ方法を身につけましょう プログラムは眺めていても身につきません まずはやる気を出すために 環境を整えましょう なにか読本やネット講座を一つ選んで 最後までやりきることが重要です プログラミングは教えてもらって学ぶものではありません 自分で学び 習得していくものです ( 他の学業と違う ) この授業では短期間に習得するための手助けをしますが 細かいところは省略します 必ず自習をしてください 11
参考文献 http://www.javaroad.jp/index_basic.htm jp/index htm http://www.atmarkit.co.jp/im/carc/serial/object02/object02.html http://itpro.nikkeibp.co.jp/article/lecture/20061204/255699/?st=lecture&p=2 http://www.javaroad.jp/opensource/js_eclipse1.htm 12 第 2 回 java 基本技術講義 Java 基本文法 13
Java 文法の概要 歴史的に見ても C 言語に近い 進化 便利になっている C 言語とほとんど変わらない基本文法 変数種類 C C++ Java 演算子演算子記入例演算文の簡略記入例説明同様な書き方型デフォルト値サイズ 演算子 += x+=y 記入例では x=x+y x? : x? y : z if-else 文を簡略化した記述方法 記入例ではxがtrue のときyを実行し xがfalseのときはzを実行 Java 演算子 byte 0 -= 8bit x -= y x = x - y 算術演算子 short 0 配列関連の記述に使用 記入例では *= 16bit x *= y x 配列のインデッ = x * y [] x[0] int 0 クス番号が /= 32bit 0の配列要素を表す x /= y x = x / y %= x %= y x = x % y long 0 オブジェクトの限定名を記述する際に使用 記入例 64bit. x.y はx&= オブジェクト内のx &= yインスタンス変数の参照など y x = x & y ビット演算子 float 00 0.0 と見ることができる = とが 32bit x = y x = x y double 0.0値を指定された型に変換する際に使用 記入例は値 ^= 64bit x ^= y x = x ^ y x ( 型 ) (int)x をint 型に変換することを表す char u0000<<= 16bit x <<= y x = x << y シフト演算子 boolean false オブジェクト 配列を生成する際に使用する演算子 >>= 1bit x >>= y x = x >> y 記入例はxクラスのオブジェクトの生成を表す >>>= x >>>= y x = x >>> y 14 Java 文法の概要 C 言語とほとんど変わらない基本文法 for 文 do while 文 for ( 初期化 ; 条件 ; 更新 ) { while ( 式 ) { 文 ( 複数可 ) 文 ( 複数可 ) if 文 do { if ( 式 ) { 文 ( 複数可 ) 文 ( 複数可 ) while ( 式 ); else { switch 文文 ( 複数可 ) switch ( 式 ) { case 値 : 文 ( 複数可 ); break; case 値 : 文 ( 複数可 ); break; case 値 : 文 ( 複数可 ); break; default: 文 ( 複数可 ); break; 15
Java 文法の概要 C 言語とちょっと違う標準入出力 標準出力 C 言語 printf( a+b=%dです, c); + でつなげる Java 言語 System.out.print( a+b= +c+ です );. は 標準入力 C 言語 int a; 確かにC 言語の &( アドレス演算子, ポインタ ) scanf( %d, &a); は理解しにくいものですが みなさんがわからんわからん言うから,Java ではこんなに複雑になってしまった Java 言語 int a; String str; BufferedReader d = new BufferedReader(newInputStreamReader(System.in)); str = d.readline(); a = Integer.parseInt(str); そう!Java では がありません! 16 Java の実践 プログラミングは座学ばかりでも仕方がない 動かそう! (1)Eclipseの起動プログラムからEclipseを起動 Workbench をクリック (2) 新規プロジェクトの作成ファイル - 新規 -プロジェクトを選択 Javaプロジェクトを選択 次へ (3) プロジェクトの設定プロジェクト名 :Hello JRE プロジェクト固有 5.0を選択終了 (F) をクリック 17
Java の実践 (4)main クラスの作成 Helloを右クリックして, 新規 クラス名前に Hello と入れ, 修飾子 :public public mainにチェック終了 (F) をクリック (5) 打ち込み 右のように打ち込み (6) 実行実行 実行 Javaアプリケーションを選択コンソールに文字が出たら成功 18 Java の実践 練習問題 1 Scan プロジェクトの下に, 以下の ScanTest クラスを作成しなさい import java.io.*; class ScanTest{ public static void main(string[] args) { int a,b,wa; String str; BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); str = d.readline(); a=2; b = Integer.parseInt(str); wa = a+b; System.out.print( print("a+b="+wa); +wa); Java では大文字小文字の区別あり! 19
Java の実践 最初はいろいろ赤字のメッセージがでるが, 気にしないで全てを打ち込む 修正 1. d.readline() の をクリックして try/catchで囲むを選択 修正 2. b=integer. の をクリックして変数の初期化を選択 実行実行 実行 Java アプリケーションを選択コンソールに数字を入れ, 正解が出ますか? 20 Java の実践 練習問題 1 の解説 import java.io.*; C 言語の #include と同じ public class ScanTest { public static void main(string[] args) { main 文宣言 ( 最初に読まれる ) int a, b, wa; String str = null; Stringクラス インスタンス化 BufferdReaderクラスのコピーを d として作ります BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); try { 例外処理です str = d.readline(); Javaではプログラムの正常動 catch (IOException e) { // TODO 自動生成された catch ブロック e.printstacktrace(); a = 2; b = Integer.parseInt(str); Integerクラス wa = a+b; System.out.println("a+b="+wa); 作を妨げる可能性のある部分については必ず例外処理が必要となる インスタンス化, クラスについては次週に説明します 21
Java の実践 練習問題 2 以下の指定に基づき, プログラムを作成しなさい プロジェクト名 :Search クラス名 :MaxMin 動作 :5つの正の整数をキーボードから入力させ, その中の最小値, 最大値をコンソール上に表示しなさい. 1 年プログラミング基礎の問題です 22 Java 文法の補足 文字列 C 言語の場合, 文字列の宣言は char で行われたが,charh は数字も扱える Java 言語では文字列専用のCharacter String StringBufferが用意されている. ( 例 )Stringi の場合文字関連の関数を集めたもの ( クラス ) 宣言 生成 クラスとは変数宣言と関連する関数の集合体であり, 後ほど勉強する String aaa = "This is an index."; int point = aaa.indexof("index"); System.out.println(point); 23
Java 文法の補足 数値データ 数値データは変数と関数 ( メソッド ) の両方を持っている. ( 例 )int の宣言 変数型 宣言 生成 関数例 int i1 = 125; Integer i2 = 126; Integer i3 = new Integer(127); Integer i4 = Integer.valueOf("128"); 便利にした分, 混乱しやすい 24 Java 文法の補足 配列 CPU 内の配列の持ち方は C 言語と同じである. 配列の記述方法は String とよく似ている 宣言 生成 int[] intarray; String[] stringarray; double[] doublearray = new double[10]; 最初に初期化する場合は { でデータを記述する double[] doublearray = {1.05d, 1.06d, 1.07d; String[] stringarray = {"Sunday", "Monday", "Tuesday"; 25
Java 文法の補足 配列の参照, 代入 C 言語と同じように代入, 参照が可能 int intarray[] = new int[10]; intarray[5] = 50; System.out.println(intArray[5]); Java 配列は 0 番目から 2 次元配列 表記方法が違うが機能は C 言語と同じ int[][] int2array = new int[10][5]; String[][] string2array = { {"Sunday", "Monday", {"Monday", "Tuesday" ; 26 Java 文法のまとめ Java 基本文法を学んで 利点は C 言語とほとんど変わらない基本文法 C 言語で使用者が苦手とした部分を改善 ( ポインタの排除 ) C 言語で使用者が間違いやすい部分を改善 ( 文字列 ) Java 基本文法を学んで 欠点は ポインタなどを回避しているので複雑な表現 クラスってちょっと不気味 ( 直感的ではないという点 ) Java が簡単 便利だと考えられ, いろんな本や web で取り上げられているが, 決して簡単ではない. むしろ,C 言語より奥が深い 27