社会人学習講座 「Javaプログラミング概論」

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
復習ー I (General Review I) クラスとオブジェクトの概念 Concepts of class and object クラスの宣言とオブジェクトの生成 Definition of a class and creation of an object コンストラクタとメソッドのオーバーロー.
AIプログラミング Java とオブジェクト指向プログラミングの基 礎 認知システム論 情報工学コース コンピュータサイエンスコース 生体情報コース.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
社会人学習講座 「Javaプログラミング概論」
オブジェクト指向プログラミング(4) 静的分析(2)
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
プログラミング基礎I(再) 山元進.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミングIII演習 第1回目.
C#とC++とオブジェクト指向 上甲 健史.
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
RMI ソフトウェア特論 第6回 /
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
コンパイラの解析 (2) GCJのデータ構造 - 1.
~手続き指向からオブジェクト指向へ[Ⅱ]~
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
ソフトウェア工学 知能情報学部 新田直也.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト・プログラミング 第8回.
オブジェクト プログラミング 第2回 プログラムの基本.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
サブゼミ第7回 実装編① オブジェクト型とキャスト.
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

社会人学習講座 「Javaプログラミング概論」 第02回 前半 (2008年09月13日)

今日の教材 http://flute.u-shizuoka-ken.ac.jp/~s-okubo/class/java08/ にあります。 上記URLは、ご自宅でもアクセス可能です。 分量が沢山ありますが、全部やらなくて大丈夫です。 課題らしい課題もありません。 ソースを見て、分からないところ等ありましたら、お呼び下さい。

今日の内容 先週の復習とJavaの基本的な部分 前回の復習1(コンパイルと実行) 前回の復習2(クラスとは) static なメソッド 前回の復習3 (クラスの継承) abstract クラス・インターフェース Javaで書くGUI JavaアプレットとSwing

Javaのコンパイルと実行 テキストエディタでソースファイルを記述する。 たとえば、Hello.javaを書く。 コンパイルの方法 コンソール上で と入力する。 実行の方法 コンソール上で と入力する。 javac Hello.java java Hello

オブジェクト指向プログラミングと クラス

オブジェクト指向プログラミング main データをやり取りするオブジェクト(インスタンス)の 集合として構成されるプログラム インスタンス間で データをやりとりする。 それぞれのインスタンスが処理を行う。 インスタンスA main インスタンスB 関数のように 使えるクラス インスタンスC

クラスとは? いわば、インスタンスの設計図。 インスタンスが、 どの様な変数を持っているか どの様なメソッド(関数)を持っているか が記述してある。 あくまでも『設計図』なので、使用するためには、クラスに基づいたインスタンスを生成する必要がある。

オブジェクトって何? 直感編 缶A 缶 缶B 概念とか設計図の世界 実物(オブジェクト)の世界 中身 = オレンジ色の液体 できること オブジェクトって何? 直感編 概念とか設計図の世界 実物(オブジェクト)の世界 中身 = オレンジ色の液体 できること 中身を出す 中身を入れる 缶A 缶 中身 = ?? 何も言われないと 空である 缶B 中身 = 水色の液体 できること 中身を出す 中身を入れる できること 中身を出す 中身を入れる

オブジェクトって何? 直感とJava編 缶A 缶 缶B Javaだと インスタンス と呼ぶ 概念とか設計図の世界 実物(オブジェクト)の世界 中身 = オレンジ色の液体 できること 中身を出す 中身を入れる 缶A 変数 コンストラクタ 缶 中身 = ?? 何も言われないと 空である 缶B 中身 = 水色の液体 できること 中身を出す 中身を入れる できること 中身を出す 中身を入れる クラス メソッド インスタンス インスタンス

オブジェクトって何? Java編 Data1 Test Data2 Javaだと インスタンス と呼ぶ 概念とか設計図の世界 実物(オブジェクト)の世界 contents = 10; メソッド pushContents(); popContests(); Data1 変数 コンストラクタ Test int contents; contests=0; Data2 contents = 20; メソッド pushContents(); popContests(); メソッド pushContents(); popContests(); クラス メソッド インスタンス インスタンス

サンプルプログラム Test dt dt test01=2; multiple(); クラスTestの詳細 class Test{ int test01=2; public void multiple(int test03){ System.out.println(test01 * test03); } public class Sample03a{ public static void main(String[] args){ Test dt = new Test(); dt.multiple(100); dt.test01=5; クラスTestの インスタンスdtを生成 dt test01=2; multiple(); メソッドを、引数100を渡して実行 test01=5; multiple(); dt インスタンスdtの変数test01に代入

static

クラスメンバとインスタンスメンバ 変数やメソッドには、static をつけることができます。 クラスメンバは、インスタンスを生成しなくても利用する ことができます。 クラスメンバには、 クラス名.メンバ名 のようにアクセスします。

直感的な図 Test 概念とか設計図の世界 実物(オブジェクト)の世界 int contents; static と書かれたメンバが居ることに注目! static int st_cont; pushContents(); static cont(); インスタンスを生成しなくても、アクセス可能。 Test.st_cont=10; クラス名.メンバ名でアクセスする。 今回は、Test.st_cont の様にする。 Test. cont();

直感的な図 Test Data1 Data2 概念とか設計図の世界 実物(オブジェクト)の世界 int contents; static int st_cont; st_cont; pushContents(); pushContents(); static cont(); cont(); Data2 contents = 20; Test.st_cont=10; st_cont; Test. cont(); pushContents(); cont();

直感的な図 Test Data1 Data2 概念とか設計図の世界 実物(オブジェクト)の世界 int contents; static int st_cont; st_cont; pushContents(); pushContents(); static cont(); cont(); 同じものを利用。 Data2 contents = 20; Test.st_cont=10; st_cont; Test.cont(); pushContents(); cont();

Test.st_cont=15とすれば、Data1.st_cont も15に。 直感的な図 概念とか設計図の世界 実物(オブジェクト)の世界 Test int contents; Data1 contents = 10; static int st_cont; st_cont; pushContents(); pushContents(); Test.st_cont=15とすれば、Data1.st_cont も15に。 static cont(); cont(); Data2 contents = 20; Test.st_cont=15; st_cont; Test.cont(); pushContents(); cont();

直感的な図 Test Data1 Data2 ここに値を代入! Data1.st_count=20 概念とか設計図の世界 実物(オブジェクト)の世界 Test int contents; Data1 contents = 10; static int st_cont; st_cont; pushContents(); pushContents(); static cont(); cont(); Data2 contents = 20; Test.st_cont=20; st_cont; Test.cont(); pushContents(); ここに代入と同じ結果に! cont();

クラスの書き方の例 static と書くだけです インスタンスを生成しなくても使える class Test{ static int st_data; int data; public void test_func01(){ System.out.println(data); } public static void test_func02(){ System.out.println(st_data); public class Sample04a{ public static void main(String[] args){ Test.st_data=10; Test.test_func02(); } static と書くだけです インスタンスを生成しなくても使える

継承

継承とは あるクラスが存在しているとき、それを流用して、違うク ラスを記述することができる!。 Test01 Test02 int data01; int data01; int data02; test_func01(); test_func01(); もとのクラスをスーパークラス、新しくできたクラスをサ ブクラスと呼びます。 新しくできたサブクラスは、普通のクラスと同様の方法 でインスタンスを生成し、使えます。

サブクラスの書き方 もとのクラスを拡張(extends)する形で書きます。 直感的には、以下のような感じ。 スーパー クラス Test02 class サブクラス名 extends スーパークラス名 { 拡張したい内容を書く。 } 直感的には、以下のような感じ。 スーパー クラス Test02 int data02; int data01; test_func01(); Test01 サブ クラス 拡張された部分

サブクラスの書き方例 スーパークラス 拡張された内容 Test02 Test01 int data01; サブクラス int data02; class Test01{ int data01; void test_func01(){中略} } class Test02 extends Test01{ int data02; スーパークラス 拡張された内容 Test02 Test01 int data01; サブクラス int data02; test_func01();

生成されたインスタンス dt02.test_func01()のように、 普通にアクセス dt02.data01のように、 普通にアクセス class Test01{ int data01; void test_func01(){中略} } class Test02 extends Test01{ int data02; } public class Sample04d{ public static void main(String[] args){ Test02 dt02 = new Test02(); 以下略 dt02.test_func01()のように、 普通にアクセス dt02.data01のように、 普通にアクセス dt02 data01; data02; 普通に生成 test_func01();

メソッドのオーバーライド サブクラスの方で、 スーパークラスと同じ名前・引数の メソッドを定義した場合、 サブクラスで書いた方が有効に class Test01{ int data01; void test_func01(){中略} } class Test02 extends Test01{ int data02; void test_func01(){中略} } メソッドのオーバーライド dt01(生成されたインスタンス) Test01 data01; data02; test_func01(); test_func01(); dt01.test_func01()として、 こちらが使われる。 こちらは使われない

アブストラクトクラス と アブストラクトメソッド

アブストラクトとは クラスを書く際に、拡張されることを前提に、クラスを書 くことができる。 アブストラクトクラス アブストラクトクラスは、拡張されることが前提なので、 それ自身をクラスにするインスタンスは作れない。 アブストラクトクラスの中では、拡張時にオーバーライド されることを前提に、メソッドを書くことができる。 アブストラクトメソッド アブストラクトメソッドは、サブクラス内でオーバーライ ドしないと、コンパイル時にエラーが出る。

アブストラクトクラス 拡張されることを前提としたクラス 書式:通常のクラスの書き方に abstract とつける。 abstract 修飾子 class クラス名{ クラスと同じように、 変数の宣言 コンストラクタ メソッド 等を書く }

アブストラクトクラスの例 アブストラクトクラス Test01をスーパークラスとするサブクラスTest02 abstract class Test01{ void test01(){ System.out.println("Test 01"); } class Test02 extends Test01{ void test02(){ System.out.println("Test 02"); public class Sample06a{ public static void main(String[] args){ Test02 dt01 = new Test02(); アブストラクトクラス Test01をスーパークラスとするサブクラスTest02 インスタンスを生成。 Test01 dt01 = new Test01();はできない。

アブストラクトメソッド サブクラスで、オーバーライドされる前提のメソッド。 サブクラス内でオーバーライドされないと、コンパイル時 にエラーが出る。 書式:メソッドに abstract とつける。 abstract 修飾子 class クラス名{ 略 abstract 修飾子 返値の型 メソッド名(引数); } 必ずオーバーライドされるため、 実際に行う内容は、ここには書かない

アブストラクトメソッドの例 アブストラクト クラス アブストラクトメソッド Test01を スーパークラス とする サブクラスTest02 abstract class Test01{ void test01(){ System.out.println("Test 01"); } abstract void test02(); class Test02 extends Test01{ void test02(){ System.out.println("Test 02"); public class Sample06b{ public static void main(String[] args){ Test02 dt01 = new Test02(); アブストラクトメソッド Test01を スーパークラス とする サブクラスTest02 必ずオーバーライド

インターフェース

インターフェースとは アブストラクトメソッドだけを宣言するための機能。 インターフェース内には、定数とアブストラクトメソッド のみを記述できる。 インターフェースに基づいたクラスを書くことができる。 このことをインターフェースを実装するという。 データのやり取りの方法を強制するので、インター フェースと呼ばれる。 クラスと異なり、2つのインターフェースを、1つのクラ スに同時に実装できる。

インターフェースの書き方 書式: interfaceの中では、記号定数の宣言とアブストラクト メソッドしか書くことができません。 interface interface名{ 記号定数の宣言 アブストラクトメソッド } interfaceの中では、記号定数の宣言とアブストラクト メソッドしか書くことができません。

クラスの書き方 その1 このインターフェースに基づいたクラスを書くことを、 インターフェースを実装すると言います。 このインターフェースに基づいたクラスを書くことを、 インターフェースを実装すると言います。 インターフェースを実装するには、次のように書きます。 書式: class クラス名 implements interface名{ 省略 } アブストラクトメソッドは、クラス内でオーバーライドする 必要があります。

クラスの書き方 その2 2つ以上のインターフェースを同時に実装できます。 書式: class クラス名 implements interface名,interface名{ 省略 } , で区切って、インターフェース名を実装したいだけ繋げ ます。

クラスの書き方 その3 クラスを継承し、さらにインターフェース実装できます。 書式: class クラス名 extends クラス名 implements interface名{ 省略 }

クラスの拡張とインターフェース クラスを拡張するとき、スーパークラスとして利用できる のは、ただ1つだけ。 インターフェースは、複数を同時に利用できる。 普通の拡張 クラス クラス その1 2つのスーパークラスは持てない クラス クラス その2 インターフェースと スーパークラスは同時にもてる クラス インターフェース その1 クラス インターフェースは2つ同時でもOK インターフェース その2 クラス

インターフェースの例 インターフェース インターフェースを 実装したクラス interface InterTest01{ double root_2 = 1.41421356; void test01(double ddt); } class Test02 implements InterTest01{ public void test01(double ddt){ System.out.println(ddt*root_2); public class Sample07a{ public static void main(String[] args){ Test02 dt01 = new Test02(); dt01.test01(100.0); インターフェース インターフェースを 実装したクラス インスタンスを生成。 メソッドを実行。