今回の内容 グラフとオブジェクト指向プログラミング Java を使う理由 Java の基本 Javaのライブラリ 開発 実行 クラスの再利用 クラス継承 抽象クラス 開発の要点

Similar documents
グラフを表すデータ構造 Javaでの実装

JAVA とテンプレート

Microsoft PowerPoint ppt

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

文字列操作と正規表現

グラフの探索 JAVA での実装

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値

プログラミング基礎I(再)

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

PowerPoint プレゼンテーション

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

JavaプログラミングⅠ

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

Prog2_12th

Microsoft PowerPoint - chap10_OOP.ppt

GEC-Java

PowerPoint Presentation

基本情報STEP UP演習Java対策

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

GEC-Java

Java言語 第1回

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Microsoft PowerPoint - prog03.ppt

メソッドのまとめ

二分木ヒープとは 集合 リストから 最小な 要素を取り出す 二分木ヒープは そのための標準的データ構造 二分木ヒープを保存するデータ構造 二分木ヒープの操作のメソッド 対象となるデータクラス 識別のためのlabelフィールド 値を保持するvalueフィールド

PowerPoint プレゼンテーション

GEC-Java

DVIOUT-exer

2

Java講座

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

JAVA入門

Java から見たオブジェクト指向入門 オブジェクト指向 AtoZ セミナー ( 株 ) 豆蔵井上樹

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Microsoft PowerPoint - OOP.pptx

CollectionsとLambda式

JavaプログラミングⅠ

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

JavaプログラミングⅠ

ガイダンス

JavaプログラミングⅠ

新・明解Java入門

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

JavaプログラミングⅠ

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

ガイダンス

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

Microsoft PowerPoint - prog04.ppt

Prog1_15th

グラフと組み合わせ 課題 7 ( 解答例 ) 2013/5/27 1 列挙 n 個の文字の集合 { } S = a, a,, an の全てからなる文字列 つまり同じ文字を含まない 長さ n の文字列を列挙する 方法を考える 1. 何通りの文字列があるかを答えなさい また そのことが正しい

Microsoft PowerPoint pptx

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

2004/11/23 オブジェクト指向プログラミング - モデル図とシーケンス図の表現方法 - オブジェクト指向プログラミング (OOP:ObjectOrientedPrograming) オブジェクト指向プログラミング言語 (OOPL) Java,C++,Delphi(Pascal),Visual

Javaプログラムの実行手順

Java 2 - Lesson01

Prog2_9th

デザインパターン第一章「生成《

PowerPoint プレゼンテーション

GUIプログラムⅣ

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

Microsoft PowerPoint - prog09.ppt

リファレンス,配列 例外処理

PowerPoint プレゼンテーション

V8.1新規機能紹介記事

デジタル表現論・第4回

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

Microsoft PowerPoint - prog09.ppt

問題1 以下に示すプログラムは、次の処理をするプログラムである

ガイダンス

第1章 ビジュアルプログラミング入門

オブジェクト指向プログラミング・同演習 5月21日演習課題

Prog1_6th

JavaプログラミングⅠ


PowerPoint Presentation

人工知能入門

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

Java知識テスト問題

問題1 以下に示すプログラムは、次の処理をするプログラムである

Java - Visual Editor

微分方程式 モデリングとシミュレーション

アスペクトの相互作用を解消するアスペクトの提案

JAVA入門

108 頁通過テスト 2. の本文 111 頁紹介文 136 頁練習 5-1 プログラム 136 頁練習 5-1 問 2 末尾に句点追加 158 頁練習問題文 161 頁練習 2-2 コメント文 166 頁練習 3-1 問 1 クラス名を挿入 178 頁通過テスト 3 文字 s を削除 180 頁コ

プログラミング入門1

Microsoft PowerPoint - lec06 [互換モード]

第2回講義

Microsoft Word - Android_SQLite講座_画面800×1280

4-1- 基 Java に関する知識 1 独立行政法人情報処理推進機構

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

Transcription:

JAVA 入門

今回の内容 グラフとオブジェクト指向プログラミング Java を使う理由 Java の基本 Javaのライブラリ 開発 実行 クラスの再利用 クラス継承 抽象クラス 開発の要点

グラフを記述するには 頂点 (Vertex) と弧 (Arc) その間の関係 素直にデータ構造として表現したい グラフは 頂点と弧の集合 弧から始点と終点を得る 頂点から その頂点を始点とする弧の集合を得る 頂点と弧をモノ (object) として捉える モノを中心にプログラムを考える枠組みが欲しい オブジェクト指向プログラミング

オブジェクト指向 (OBJECT ORIENTED) もの (object) の操作 動作を中心に考える 操作や動作を日本語で考え 出てくる名詞に注目する オブジェクトの構成 属性 (field): データなど 操作 (method) オブジェクト A 属性 (field) 操作方法 (method) 通信 操作 オブジェクト B 属性 (field) 操作方法 (method)

グラフをオブジェクト指向プログラミングで考える グラフの構造を表すデータ構造 グラフ 頂点 弧 階層的データ グラフの要素としての頂点と弧 頂点に接続している弧のリスト 弧の両端の頂点 頂点の一覧 グラフ ± + δ 弧の一覧

各データごとの操作 弧に値を設定する 探索問題 : 頂点や弧に印を付ける データのカプセル化 グラフとしての整合性を維持 頂点や弧に属性等を追加 型の継承と拡張 弧に 流れ の属性を付けて拡張 グラフの可視化

様々な OOP 言語 Smalltalk80 Xerox, Palo Alto 研究所 C++ B. Stroustrup C にOOPを導入 Java Sun Microsystems (Oracle) Ruby まつもとひろゆき スクリプト言語

C++ ではなく JAVA を使う理由 豊富なユーティリティー java.util.arraylist など 使い易い開発環境 (IDE) NetBeans Eclipse 多数の OS で使える Windows Linux Solaris OSに依存しない実行形式 GUI 開発が容易 IDE を使うと簡単

JAVAの基本 全てがクラス 開始点となるクラスが必要 public static void main(string[] args) メソッドから始まる mainは主となるクラスを起動するだけ コンストラクタメソッド クラスと同じ名前のメソッド デストラクタは無い 自動ガベージコレクション

一つのクラスで一つのファイルが基本 ファイル名はクラス名と同じ ヘッダファイルが無い ライブラリは import 文を使う C/C++ のポインタは無い 原始型は値代入 クラスオブジェクトは参照

文法はだいたいC++ と同じ 原始型はint double char booleanなど 原始型に対応したクラスがある Integer Double Character Boolean など 文字列 Stringや原始型の配列はクラス ポインタが無い デストラクタは書かない 不要なオブジェクトは自動で削除される クラスは階層化され パッケージになっている

package StudentSample; public class Student { // クラス内のフィールド private String name=null;// 名前 private int studentid=0; // 学生番号 private int record=0; // 点数 /** * コンストラクタ : インスタンスを生成する */ public Student(String name, int studentid) { this.name=name; this.studentid=studentid; /** 取得メソッドと設定メソッド **/ public int getstudentid() {return studentid; public String getname() {return name; public int getrecord() {return record; クラス宣言 クラス内フィールドクラス内のデータ コンストラクタクラスインスタンス生成 メソッドクラスインスタンス操作 public void setrecord(int record) { this.record = record;

便利なライブラリ オンラインマニュアル http://java.sun.com/javase/ja/6/docs/ja/api/ 基本的なクラス :java.lang 入出力 :java.io コレクション ( リストなど ):java.util 基本 GUI:java.awt 拡張 GUIセットSwing:javax.swing

開発環境 http://java.sun.com/javase/ja/6/download.html NetBeans http://www.netbeans.org/index_ja.html プロジェクト管理 UMLとの連携 メソッド名の補完 パーツを使ったGUI 構築 CVS 等を使ったバージョン管理

プログラム開発の手順 作業ディレクトリを決める デフォルトでは ~/Documents/NetBeansProjects NetBeans を起動 ファイル 新規プロジェクト プロジェクトウィンドウ内で プロジェクト名 ソースパッケージ デフォルトパッケージ で右ボタン 新規

新しいクラスを作る GUI の無い主クラス Java 主クラス GUI のある主クラス JFrame フォーム テンプレートを上手に使う

構築と実行 プロジェクトウィンドウ内で プロジェクト名 プロジェクトを構築 プロジェクトウィンドウ内で プロジェクト名 プロジェクトを実行 主クラス名 ファイルを実行 デフォルトでは ファイルを保存すると コンパイルする

サンプルプログラムを作成する場合例 :STUDENTSAMPLE プロジェクト StudentSample を作成する プロジェクトディレクトリの構造 src の下に *.java ファイルをダウンロード プロジェクト内にクラスが表示される

OOP と開発効率 OOPはプログラム開発効率を改善する カプセル化 クラス内部の構造を隠す 変更をクラス内に止め 他に影響を与えない クラスの継承 再利用 機能や属性を既存のクラスに追加する 抽象クラス 機能や属性の似たクラスをグループ化する

クラスの継承 再利用 既存のクラスを継承して拡張 クラスの継承とインターフェイスの利用 既存のクラスとの調整をするクラスを作る インターフェイス的な調整 既存のクラスを要素として持つクラスを作る

クラスの継承 出来上がったクラスの資産を生かす 標準的クラスの資産を生かす クラスの組に共通なデータや動作を定義する 一つのクラスしか継承できないことに注意 クラス スーパークラス

アクセス制限 public class B extends A public class A { private int a; protected int b; public int c; method public class C method

ABSTRACT CLASSES 基本となるデータ構造とメソッドを定義 メソッドの一部は実装が定義されていない abstract method 継承クラスを定義して使う 例 java.util.abstractlist 上記の実装の一つがjava.util.ArrayList

INTERFACES abstract methodのみで構成されている アクセス方法だけが指定されている 他のプログラムからの見え方を規定 class A implements インターフェイス { 例 java.lang.runnable メソッドrun() が定義されている スレッドからの呼び出しに使う

例 : COMPARABLE インターフェイス 大小関係があるインスタンスを表す 順序付けることができる 必ずメソッド int compareto() を実装しなければならない 引数と比較して 0 または ±1 を返す ソートプログラムは Comparable インターフェイスを持ったクラスを compareto() を使って並べ替える クラスの中の構造は知らなくて良い

プログラム開発の要点 開発 保守コストを下げる クラスの再利用 ルーチン化したコードを再利用 他の人のノウハウを借用 分かりやすい構成 自分にも他人にもわかるように 修正箇所の限定 修正の影響範囲を明確化

プログラム開発の要点 2 アルゴリズムをデータの詳細と切り離す ソートのアルゴリズムは ソートされるデータの詳細とは関係ない スレッドプログラムは 各スレッド内で何をしているかと関係ない 問題をオブジェクトの運動として捉える 小さなオブジェクトへ分割 小さなオブジェクトならば その役割が明確になる

Student.java package StudentSample; /** * Student.java * Created on 2007/04/15, 11:34 * 生徒のクラス * @author tadaki */ public class Student { // クラス内のフィールド private String name=null;// 名前 private int studentid=0; // 学生番号 private int record=0; // 点数 /** * コンストラクタ : インスタンスを生成する */ public Student(String name, int studentid) { this.name=name; this.studentid=studentid; /** 取得メソッドと設定メソッド **/ public int getstudentid() {return studentid; public String getname() {return name; public int getrecord() {return record; public void setrecord(int record) { this.record = record; 1/1 ページ

StudentRecord.java package StudentSample; import java.util.arraylist; import java.util.collections; import java.util.list; /* * StudentRecord.java * * Created on 2007/04/15, 11:34 * @author tadaki */ public class StudentRecord { private List<Student> students = null;// 生徒一覧 private String names[] = { "Aoyama", "Asou", "Baba", "Chou", "Egashira", "Eto", "Funaki", "Goto", "Gunji", "Hara", "Hashimoto", "Ikeuchi", "Ito", "Jo", "Kayama", "Mori", "Naito", "Tada", "Yamada", "Yoshida" ; /** コンストラクタ */ public StudentRecord() { // 生徒一覧を初期化 students = Collections.synchronizedList(new ArrayList<Student>()); // 登録 for (int i = 0; i < names.length; i++) { Student s = new Student(names[i], 1000 + i); s.setrecord((int) (100 * Math.random())); students.add(s); public void liststudents() { int max = 0; Student best = students.get(0); 1/2 ページ // 拡張された for ループ for (Student s : students) { int r = s.getrecord(); System.out.print(String.valueOf(s.getStudentID())

StudentRecord.java + ":" + s.getname() + ":"); System.out.println(String.valueOf(r)); if (r > max) { max = r; best = s; System.out.println(); System.out.print("Best is "); System.out.print(String.valueOf(best.getStudentID()) + ":" + best.getname() + ":"); System.out.println(String.valueOf(best.getRecord())); /** * @param args the command line arguments */ public static void main(string[] args) { StudentRecord studentrecord = new StudentRecord(); studentrecord.liststudents(); 2/2 ページ

Student.java package StudentSample2; /** * 生徒のクラス * Comparable インターフェイスの例 * @author tadaki */ public class Student implements Comparable<Student> { private String name = null;// 名前 private int studentid = 0; // 学生番号 private int record = 0; // 点数 /** * コンストラクタ * @param name 名前 * @param studentid 学生番号 */ public Student(String name, int studentid) { this.name = name; this.studentid = studentid; /** * 学生番号取得 * @return 取得した学生番号 */ public int getstudentid() { return studentid; /** * 名前取得 * @return 取得した名前 */ public String getname() { return name; /** * 得点取得 * @return 取得した得点 */ public int getrecord() { 1/2 ページ

Student.java return record; /** * 得点設定 * @param record 設定する得点 */ public void setrecord(int record) { this.record = record; @Override /** * Student インスタンスの比較 * インターフェイス Comparable で必須 */ public int compareto(student o) { int k = 1; if (this.getrecord() < o.getrecord()) { k = -1; return k; 2/2 ページ

StudentRecord.java package StudentSample2; import java.util.arraylist; import java.util.collections; import java.util.list; /** * * @author tadaki */ public class StudentRecord { private List<Student> students = null;// 生徒一覧 /** 名前一覧 */ private String names[] = { "Aoyama", "Asou", "Baba", "Chou", "Egashira", "Eto", "Funaki", "Goto", "Gunji", "Hara", "Hashimoto", "Ikeuchi", "Ito", "Jo", "Kayama", "Mori", "Naito", "Tada", "Yamada", "Yoshida" ; /** コンストラクタ */ public StudentRecord() { // 生徒一覧を初期化 students = Collections.synchronizedList(new ArrayList<Student>()); // 登録 for (int i = 0; i < names.length; i++) { Student s = new Student(names[i], 1000 + i); s.setrecord((int) (100 * Math.random())); students.add(s); /** * 学生一覧印刷 */ public void liststudents() { // 拡張された for ループ for (Student s : getstudents()) { System.out.print(String.valueOf(s.getStudentID()) + ":" + s.getname() + ":" ); System.out.println(String.valueOf(s.getRecord())); 1/2 ページ

StudentRecord.java /** * 学生一覧取得 * @return 学生一覧の Vector */ public List<Student> getstudents() { return students; /** * ソートの実行 * @param <T> Comparable インターフェイスを実装したクラス * @param t Vector<T> */ public static <T extends Comparable<T>> void sort(list<t> t) { for (int i = t.size(); i > 0; i--) { for (int j = 0; j < i - 1; j++) { if (t.get(j).compareto(t.get(j + 1)) > 0) { T c = t.get(j); t.set(j, t.get(j + 1)); t.set(j + 1, c); /** * @param args the command line arguments */ public static void main(string[] args) { StudentRecord studentrecord = new StudentRecord(); StudentRecord.sort(studentRecord.getStudents()); studentrecord.liststudents(); 2/2 ページ