Java マスター講座:基礎から応用まで学ぶ17回(JavaTutor, Paiza.IO, Online GDB を使用)(全17回の教材)(目次)
このページは,大学で使用された自作の教育資料を公開するためのページである.クリエイティブ・コモンズBY NC SAライセンスの下で公開している.
【目次】
- pi-1. プログラミング入門 [PDF], [パワーポイント]
- pi-2. Java プログラミングの基本 [PDF], [パワーポイント]
- pi-3. 式の抽象化とメソッド [PDF], [パワーポイント]
- pi-4. 条件分岐, ステップ実行 [PDF], [パワーポイント]
- pi-5. コレクション, リスト, マップ [PDF], [パワーポイント]
- pi-6. 繰り返し(ループ) [PDF], [パワーポイント]
- pi-7. クラス, メソッド, オブジェクト生成(コンストラクタ) [PDF], [パワーポイント]
- pi-8. クラス設計 [PDF], [パワーポイント]
- pi-9. スーパークラス, サブクラス, 継承 [PDF], [パワーポイント]
- pi-10. コレクション, ジェネリクス [PDF], [パワーポイント]
- pi-11. 多相性, インターフェイス, デザインパターン [PDF], [パワーポイント]
- pi-12. 時間, スリープ, 疑似乱数, タイマー [PDF], [パワーポイント]
- pi-13. 今までの総まとめ [PDF], [パワーポイント]
- pi-14. イベント, イベントハンドラ, ソケット通信 [PDF], [パワーポイント]
- pi-15. カプセル化, MVCモデル, オブジェクトのマッピング [PDF], [パワーポイント]
- pi-16. プログラムのテスト, アサーション, 例外処理 [PDF], [パワーポイント]
- pi-17. プログラム設計 [PDF], [パワーポイント]
YouTube 再生リスト「Java の基本」:
https://youtube.com/playlist?list=PLwoDcGBEg9WH6D0fsLu3M53VahHRr-cRx
YouTube のチャンネル「金子邦彦」
https://youtube.com/user/kunihikokaneko
【関連する外部ページ】
- JavaTutor のURL:http://www.pythontutor.com/java.html#mode=edit
- Paiza.IO の URL: https://paiza.io/j
- OnlineGDB の URL: https://www.onlinegdb.com/
【サイト内のJava 関連ページ】
1. プログラミング入門
https://www.slideshare.net/slideshow/pi1-255592621/255592621
資料:pi-1. プログラミング入門 [PDF], [パワーポイント]
概要:プログラミングは,コンピュータを制御するためのプログラムを作成するタスクである.Javaプログラミング言語は,異なる環境でも同じプログラムが動作するプラットフォーム非依存性を特徴とし,世界中で広く活用されている.プログラムの実行については,計算誤差など,技術的に注意すべき点があり,理解と適切な対処が必要である.プログラミングの習得には,基本概念の理解と実践的な経験の積み重ねが重要となる.
ソースコード
1-5
public class YourClassNameHere {
public static void main(String[] args) {
System.out.println(1.0/3.0);
}
}
1-5
public class YourClassNameHere {
public static void main(String[] args) {
System.out.println(3 * 1.1);
}
}
2. Java プログラミングの基本
SlideShare: https://www.slideshare.net/slideshow/pi2-java/255592630
資料:pi-2. Java プログラミングの基本 [PDF], [パワーポイント]
概要:Javaプログラミングの主要なポイントは,オブジェクト指向プログラミングと制御構造である.プログラミングはプログラムを設計・製作することである.オブジェクトは,プログラム内で,処理の対象となる基本的な構成要素である.オブジェクトに対する操作や処理はメソッドであり,必要に応じて引数を使用してメソッドに値を渡すことができる.プログラムの実行の流れは制御構造によって制御され,条件分岐による選択的実行や繰り返し処理によってプログラムの動作を細かく制御することが可能である.
ソースコード
2-2
public class Main {
public static void main(String[] args) {
int x = 100;
}
}
public class Main {
public static void main(String[] args) {
int x = 100;
String s = "abc";
}
}
3. 式の抽象化とメソッド
SlideShare: https://www.slideshare.net/slideshow/pi3-255592644/255592644
資料:pi-3. 式の抽象化とメソッド [PDF], [パワーポイント]
概要:プログラミング言語Javaを用いたソフトウェア開発において,メソッドは,プログラムの再利用を可能にする機能単位として重要な役割を果たす.抽象化を用いることで,類似した複数の処理をメソッドとして一般化でき,コードの重複を減らし保守性を向上させることができる.プログラムは基本的に上から下へ順番に実行されるが,メソッド呼び出しによって実行位置が移動し,その際にメソッド内で使用する変数の自動的な生成と消去が行われる.これらの機能を適切に活用することで,効率的で運用しやすいプログラムを制作することが可能となる.
ソースコード
3-1
public class YourClassNameHere {
public static void main(String[] args) {
int x = 100;
int y = 200;
System.out.println(x + y);
}
}
public class YourClassNameHere {
public static void main(String[] args) {
int x = 100;
int y = 200;
System.out.println(x * y);
}
}
public class YourClassNameHere {
public static void main(String[] args) {
int x = 100;
int y = 200;
System.out.println((x + 10) * y);
}
}
public class YourClassNameHere {
public static void main(String[] args) {
double teihen = 2.5;
double takasa = 5;
System.out.println(teihen * takasa / 2);
}
}
3-2
public class YourClassNameHere {
public static double foo(double a) {
return a * 1.1;
}
public static void main(String[] args) {
System.out.println(foo(100));
System.out.println(foo(150));
System.out.println(foo(400));
}
}
4. 条件分岐, ステップ実行
SlideShare: https://www.slideshare.net/slideshow/pi4-255592657/255592657
資料:pi-4. 条件分岐, ステップ実行 [PDF], [パワーポイント]
概要:条件分岐は条件式に基づいて異なる処理を選択実行する基本的な構造である.その動作はステップ実行によって視覚的に確認できる.ステップ実行により,変数の値の変化や実行フローの推移を観察できる.プログラム内では,オブジェクトに属する操作や処理としてメソッドが定義され,必要に応じて引数を指定して呼び出される.これらの要素を組み合わせることで,通常の逐次実行とは異なる実行の流れが実現され,条件に応じて実行箇所を変化させることが可能となる.
ソースコード
4-1
public class YourClassNameHere {
public static void main(String[] args) {
int age = 10;
if (age <= 12) {
System.out.println("500 yen");
} else {
System.out.println("1200 yen");
}
}
}
5. コレクション,リスト,マップ
SlideShare: https://www.slideshare.net/slideshow/pi5-255592811/255592811
資料:pi-5. コレクション,リスト,マップ [PDF], [パワーポイント]
概要:Javaのコレクションは,複数のデータを効率的に管理するためのJavaの標準機能である.主要なコレクションとして,順序付きデータを扱うリスト,キーと値のペアを管理するマップがある.ArrayListクラスに実装されたリストは,要素の追加・削除が容易で,インデックスによるアクセスが可能である.HashMapクラスに実装されたマップは,キーによる高速な要素アクセスと,一意性が保証されたキーによるデータ管理を実現する.これらの機能を使用することで,プログラム内でのデータ管理を効率的に行うことができる.
資料中のソースコード
5-1
import java.util.ArrayList;
public class YourClassNameHere {
public static void main(String[] args) {
ArrayList m = new ArrayList();
m.add("15");
m.add("8");
m.add("6");
m.add("32");
m.add("23");
System.out.println(m.size());
}
}
5-3
import java.util.HashMap;
public class YourClassNameHere {
public static void main(String[] args) {
HashMap x = new HashMap();
x.put(1, "Red");
x.put(2, "Yellow");
x.put(3, "Blue");
System.out.println(x.size());
}
}
6. 繰り返し(ループ)
SlideShare: https://www.slideshare.net/slideshow/pi6/255592830
資料:pi-6. 繰り返し(ループ) [PDF], [パワーポイント]
概要:Javaプログラミングにおける繰り返し処理のために,for文や拡張for文を使用できる.for文は初期化,継続条件,更新処理を1行で指定でき,配列やリストの処理に適している.拡張for文はコレクションの要素を直接参照できる特別な構文で,よりシンプルなコード記述を可能にする.これらの制御構文と組み合わせて使用される主要なデータ構造として,配列やリストがある.配列は固定サイズで同じ型のデータを連続して格納し,添字でアクセスする.リストはArrayListなどの実装があり,要素の動的な追加・削除が可能で,より柔軟なデータ管理を実現する.
資料中のソースコード
6-1
public class YourClassNameHere {
public static void main(String[] args) {
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
System.out.println(days[9]);
}
}
6-1
public class YourClassNameHere {
public static void main(String[] args) {
double x[] = {10, 20, 30, 40};
int i;
for(i = 0; i <= 3; i++) {
System.out.println(x[i]);
}
}
}
6-1
public class YourClassNameHere {
public static void main(String[] args) {
double x[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int i;
for(i = 0; i <= 10; i++) {
System.out.println((9.8 / 2) * x[i] * x[i]);
}
}
}
6-1
public class YourClassNameHere {
public static void main(String[] args) {
double x[] = {8, 6, 4, 2, 3};
double y[] = {0, 0, 0, 0, 0};
int i;
for(i = 0; i <= 4; i++) {
y[i] = x[i] * 1.1;
}
}
}
6-2
import java.util.ArrayList;
public class YourClassNameHere {
public static void main(String[] args) {
ArrayList m = new ArrayList();
m.add("15");
m.add("8");
m.add("6");
m.add("32");
m.add("23");
for(String s: m) {
System.out.println(s);
}
}
}
7. クラス,メソッド,オブジェクト生成(コンストラクタ)
SlideShare: https://www.slideshare.net/slideshow/pi7/255592938
資料:pi-7. クラス,メソッド,オブジェクト生成(コンストラクタ) [PDF], [パワーポイント]
概要:オブジェクト指向プログラミングでは,クラスとオブジェクトが重要である.クラスは,同種のオブジェクトの集合である.クラスのコンストラクタによって個別のオブジェクトが生成される.オブジェクトの操作においては,thisキーワードが重要な役割を果たす.thisは,メソッド内でそのメソッドが所属するクラスの属性やメソッドにアクセスするための特殊な参照であり,これによってオブジェクトの属性値を細かく設定したりなどが可能となる.この仕組みにより,データとそれを操作するメソッドが一体として扱われるようになり,プログラムの構造化と保守性の向上が実現される.
ソースコード
7-2
class Ball {
double x;
double y;
double r;
String color;
public Ball(double x, double y, double r, String color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}
public void printout() {
System.out.println(this.x);
System.out.println(this.y);
System.out.println(this.r);
System.out.println(this.color);
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Ball a = new Ball(8, 10, 1, "blue");
Ball b = new Ball(2, 4, 3, "green");
a.printout();
b.printout();
}
}
7-3
class Ball {
double x;
double y;
double r;
String color;
public Ball(double x, double y, double r, String color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}
public void printout() {
System.out.println(this.x);
System.out.println(this.y);
System.out.println(this.r);
System.out.println(this.color);
}
public double dist() {
return this.x + this.y;
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Ball a = new Ball(8, 10, 1, "blue");
Ball b = new Ball(2, 4, 3, "green");
a.printout();
b.printout();
System.out.println(a.dist());
}
}
7-4
class Ball {
double x;
double y;
double r;
String color;
public Ball(double x, double y, double r, String color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}
public void printout() {
System.out.println(this.x);
System.out.println(this.y);
System.out.println(this.r);
System.out.println(this.color);
}
public double dist() {
return this.x + this.y;
}
public void move(double xx, double yy) {
this.x = this.x + xx;
this.y = this.y + yy;
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Ball a = new Ball(8, 10, 1, "blue");
Ball b = new Ball(2, 4, 3, "green");
a.move(5, 5);
b.move(10, 10);
a.printout();
b.printout();
System.out.println(a.dist());
}
}
7-4
class Ball {
double x;
double y;
double r;
String color;
public Ball(double x, double y, double r, String color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}
public void printout() {
System.out.println(this.x);
System.out.println(this.y);
System.out.println(this.r);
System.out.println(this.color);
}
public double dist() {
return this.x + this.y;
}
public void move(double xx, double yy) {
this.x = this.x + xx;
this.y = this.y + yy;
}
public void right(double xx) {
this.move(xx, 0);
}
public void left(double xx) {
this.move(-xx, 0);
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Ball a = new Ball(8, 10, 1, "blue");
Ball b = new Ball(2, 4, 3, "green");
a.move(5, 5);
b.move(10, 10);
a.left(5);
b.right(10);
a.printout();
b.printout();
System.out.println(a.dist());
}
}
8. クラス設計
SlideShare: https://www.slideshare.net/slideshow/pi8/255592946
資料:pi-8. クラス設計 [PDF], [パワーポイント]
概要:クラス定義は,オブジェクト指向プログラミングの基本である.クラスでは,属性とメソッドを定義することを通じて,オブジェクトの構造と動作を定める.オブジェクトは,クラスで定めれた属性を持つ実体として機能し,プログラム内で独立したものとなる.各オブジェクトの状態は,属性値によって表現される.そして,適切なメソッドを通じて属性が管理される.クラスの設計とメソッドの実装を工夫することで,オブジェクトの属性に不適切な値が設定されることを防ぎ,プログラム全体の信頼性を確保することができる.
class Signal {
String color;
public Signal(String color) {
this.color = color;
}
}
public class YourClassNameHere {
public static void main(String [] args) {
Signal s = new Signal("red");
}
}
8-1 2つめ
class Signal {
String color;
public Signal() {};
public void red() { this.color = "red"; };
public void yellow() { this.color = "yellow"; };
public void blue() { this.color = "blue"; };
}
public class YourClassNameHere {
public static void main(String [] args) {
Signal s = new Signal();
s.red();
}
}
8-2
class Signal {
String color;
public Signal() {};
public void red() { this.color = "red"; };
public void yellow() { this.color = "yellow"; };
public void blue() { this.color = "blue"; };
public void go() {
if (this.color.equals("blue")) { this.yellow(); }
else if (this.color.equals("yellow")) { this.red(); }
else if (this.color.equals("red")) { this.blue(); }
}
}
public class YourClassNameHere {
public static void main(String [] args) {
Signal s = new Signal();
s.red();
s.go();
}
}
8-3
class Product {
String s;
public Product() {};
public void active() { this.s = "active"; };
public void deactive() { this.s = "deactive"; };
public void on() {
if (this.s.equals("deactive")) { this.active(); }
}
public void off() {
if (this.s.equals("active")) { this.deactive(); }
}
}
public class YourClassNameHere {
public static void main(String [] args) {
Product p = new Product();
p.deactive();
p.on();
}
}
8-4
public class YourClassNameHere {
public static double foo(double a) {
return a * 1.1;
}
public static void main(String [] args) {
double p;
p = 120;
System.out.printf("%f\n", foo(p));
p = 200;
System.out.printf("%f\n", foo(p));
}
}
8-5
public class YourClassNameHere {
public static double x(double a) {
return a * 1.1;
}
public static double y(double b) {
return x(b * 100);
}
public static double z(double c) {
return x(c * 200);
}
public static void main(String [] args) {
System.out.printf("%f\n", y(5));
System.out.printf("%f\n", y(12));
System.out.printf("%f\n", z(8));
System.out.printf("%f\n", z(16));
}
}
9. スーパークラス,サブクラス,継承
SlideShare: https://www.slideshare.net/slideshow/pi9/255592968
資料:pi-9. スーパークラス,サブクラス,継承 [PDF], [パワーポイント]
概要:クラス継承は,オブジェクト指向の重要な機能である.スーパークラスは,共通する属性やメソッドを持つ一般的なクラスである,サブクラスはそのスーパークラスを特殊化した下位のクラスである.サブクラスはスーパークラスの属性とメソッドを継承するが,コンストラクタは継承されないため独自に定義する必要がある.また,メソッドのオーバーライドにより,継承したメソッドを再定義することができ,これによってサブクラス固有の振る舞いを実現することができる.このような仕組みにより,プログラムの再利用性と拡張性が向上する.
10. コレクション,ジェネリクス
SlideShare: https://www.slideshare.net/slideshow/pi10/255592976
資料:pi-10. コレクション,ジェネリクス [PDF], [パワーポイント]
概要:Javaのコレクションは,オブジェクトの集まりを1つのまとまりとして扱う機能であり,ArrayListやHashMapなどの標準クラス(Javaシステムに標準装備されたクラス)が提供されている.基本データ型をコレクションで扱う際には,対応するラッパクラス(Boolean,Character,Integer,Doubleなど)を使用する必要がある.コレクションに格納するオブジェクトの型は型変数によって指定される.これにより異なるクラスのオブジェクトであっても,それら異なるクラスが共通のスーパークラスを持つ場合には,スーパークラスを型変数に指定することで同一のコレクションで管理できる.さらに,ジェネリクスによってクラス定義時に型をパラメータ化することで,格納するオブジェクトの型に制限を設けるなどができ,型安全性を確保できる.
11. 多相性,インターフェイス,デザインパターン
SlideShare: https://www.slideshare.net/slideshow/pi11/255592988
資料:pi-11. 多相性,インターフェイス,デザインパターン [PDF], [パワーポイント]
概要:オブジェクト指向プログラミングにおける重要な設計概念として,クラス階層,多相性,インターフェース,デザインパターンがある.クラス階層では,共通機能をスーパークラスにまとめ,個別機能をサブクラスに実装することで,コードの再利用性と保守性を向上させる.多相性により,同じ名前のメソッドがクラスによって異なる動作をとることを実現でき,プログラムの柔軟性を高める.インターフェースは,クラスが実装すべきメソッドを定義する一種の仕様書として機能する.そのことで,クラスの実装が,インターフェースに準拠することを保証する.設計手法として,デザインパターンが体系化されており,プログラムの品質向上と開発効率の改善に寄与する.
12. 時間,スリープ,疑似乱数,タイマー
SlideShare: https://www.slideshare.net/slideshow/pi12/255592993
資料:pi-12. 時間,スリープ,疑似乱数,タイマー [PDF], [パワーポイント]
概要:Javaの標準ライブラリは,プログラミングに必要な多様な機能を提供している.例えば,時間制御,並行処理などの機能がある.Thread.sleep()メソッドを使用することで,ミリ秒単位での処理の一時停止が可能となり,プログラムの実行タイミングを精密に制御できる.また,java.util.Randomクラスを用いることで,アルゴリズムに基づいた再現可能な疑似乱数を生成できる.さらに,マルチスレッド機能を活用することで,複数の処理を並行して実行することが可能となり,Threadクラスを継承したサブクラスのrunメソッドに処理を記述し,startメソッドで実行を開始することで,効率的な並行処理を実現できる.
13. 今までの総まとめ
SlideShare: https://www.slideshare.net/slideshow/pi13/255593001
資料:pi-13. 今までの総まとめ [PDF], [パワーポイント]
概要:オブジェクト指向プログラミングでは,メソッドはクラスに属する操作であり,オブジェクトの振る舞いを定めるものである.クラスは同種のオブジェクトの集まりである.継承によりスーパークラスの機能をサブクラスが受け継ぎ,新機能を追加できる仕組みを提供する.抽象化は共通する特徴や機能を抽出して一般化する過程であり,メソッドやクラス階層による抽象化を通じて,コードの再利用性と保守性を向上させる.これらは,効率的なプログラム開発を可能にする.
14. イベント,イベントハンドラ,ソケット通信
SlideShare: https://www.slideshare.net/slideshow/pi14-255593014/255593014/a>
資料:pi-14. イベント,イベントハンドラ,ソケット通信 [PDF], [パワーポイント]
概要:Javaプログラミングにおけるイベント処理とネットワーク通信の基本的な仕組みの説明である.イベントハンドラは,タイマーやユーザー操作などのイベント発生時に実行される処理を定義するものである.マルチスレッド実行により,メインプログラムとは独立して動作する.この実装にはTimerTaskクラスを用いることができ,定期的なタスク実行を容易に実現できる.さらに,ネットワークプログラミングの基礎となるソケット通信では,ServerSocketクラスを使用してサーバプログラムを実装し,クライアント側とのデータ送受信を実現する.これらの技術を組み合わせることで,ネットワークアプリケーションを開発することができる.
SlideShare: https://www.slideshare.net/slideshow/pi15-mvc/255593026
資料:pi-15. カプセル化,MVCモデル,オブジェクトのマッピング [PDF], [パワーポイント]
概要:オブジェクト指向プログラミングの基本概念であるカプセル化は,Javaにおいてpublicやprivateによるアクセス制御により実現される.MVCモデルではアプリケーションを「モデル」「ビュー」「コントローラー」の3つのコンポーネントに分離することで,プログラムを見通し良くする.さらに,オブジェクトマッピング技術により,JavaオブジェクトとデータベースやDOMオブジェクトとの連携が可能となり,Webアプリケーションの開発効率を高めることができる.
SlideShare: https://www.slideshare.net/slideshow/pi16/255593032
資料:pi-16. プログラムのテスト,アサーション,例外処理 [PDF], [パワーポイント]
概要:プログラム開発において,体系的な設計手法と適切なエラー処理が重要である.不可欠である.プログラム設計レシピは,分析,仕様,例,作成,テストの5段階で構成され,各段階を着実に実行することでプログラムの質を向上させる.プログラムの実行時には様々なエラーが発生する可能性があり,その中でも論理的エラーは発見が困難である.このため,アサーションを用いて「必ず成立するはずの条件」を明示的に記述し,論理的エラーの早期発見を図る.さらに,実行時に発生する予期せぬ事態に対しては例外処理の仕組みを活用し,try-catch文による適切な対処を行うことで,プログラムの堅牢性を高めることができる.これらの技術を適切に組み合わせることで,信頼性の高いソフトウェアの開発が可能となる.
SlideShare: https://www.slideshare.net/slideshow/pi17/255593053
資料:pi-17. プログラム設計 [PDF], [パワーポイント]
概要:UMLは,プログラムの設計図を表現するための統一モデリング言語であり,クラスの構造や相互関係を視覚的に表現できる特徴を持つ.UMLにおいて,クラス定義ではクラスの属性,コンストラクタ,メソッドを定義する.さらに,クラス階層によって複数のクラスの親子関係を形成し,継承機能を通じてスーパークラスの属性とメソッドをサブクラスが受け継ぐことで,プログラムの構造化と再利用性を高める.これらは,効率的なプログラム開発と保守性の向上に貢献する.
15. カプセル化,MVCモデル,オブジェクトのマッピング
16. プログラムのテスト,アサーション,例外処理
17. プログラム設計