• 検索結果がありません。

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
53
0
0

読み込み中.... (全文を見る)

全文

(1)

Javaから見たオブジェクト指向入門

(株)豆蔵 井上 樹

(2)

趣旨

M Javaを通してオブジェクト指向に対する理解

をより深め、次のステップへの足がかりとな

るようにする

(3)

2000.10.20 オブジェクト指向AtoZ 3

対象

M オブジェクト指向をこれから始めたい方

M Javaをもっと使いこなしたい方

M 必要な知識

n

Javaの言語仕様

n

UML

(4)

Agenda

M この先何が必要か

M オブジェクト指向最初の一歩

M Javaに隠されたフレームワーク

M まとめ

(5)

2000.10.20 オブジェクト指向AtoZ 5

この先何が必要か

M Javaを使いこなしたい

M いいソフトウエアを作りたい

M オブジェクト指向はいいソフトウエアを作るための

技術のひとつ

M Javaにはオブジェクト指向の技術が詰まっている

オブジェクト指向の知識が必須

(6)

どんなオブジェクト指向の

知識が必要か

M オブジェクト指向

M フレームワーク

M パターン

M コンポーネント

M 分散オブジェクト

M etc....

(7)

2000.10.20 オブジェクト指向AtoZ 7

オブジェクト指向の基本概念

M オブジェクト

M クラス

M クラスとインスタンス

M オブジェクト指向で作られたソフトウエア

M フレームワーク

(8)

オブジェクト

M 自分専用の属性と操作を持つ

M 他のオブジェクトや外界からのメッセージに反応し

て動く

色を変える 色を変える色を変える 色を変える(黄色黄色黄色)を実行して黄色 を実行してを実行してを実行して

オブジェクト

オブジェクト

色を変える(色) 場所を変える(場所) 色を変える(色)

(9)

2000.10.20 オブジェクト指向AtoZ 9

クラス

M オブジェクトの設計図

n

属性とメソッドの定義が書いてあるもの

クラス 楕円 {     // 属性 色     塗りつぶす色; 幅と高さ サイズ; ...     // メソッド 色を変える(色 指定色) { 塗りつぶす色 = 指定色; 塗りつぶす(); } ... }

(10)

クラスとインスタンス

M インスタンス = クラスから作られたオブジェクト

インスタンス = クラスから作られたオブジェクト

インスタンス = クラスから作られたオブジェクト

インスタンス = クラスから作られたオブジェクト

M クラスに書かれた仕様に基づいてオブジェクトを生

成することをインスタンシエーションという

楕円

オブジェクト

楕円

オブジェクト

楕円

オブジェクト

楕円クラス

(11)

2000.10.20 オブジェクト指向AtoZ 11

ソフトウエア

ソフトウエア

ソフトウエア

ソフトウエア

オブジェクト指向で作られた

ソフトウエア

M オブジェクト指向で作られ

たソフトウエアは「オブジェ

クト」という単位で構成さ

れている

M この「オブジェクト」がお互

いにメッセージをやり取り

することでソフトウエアが

実現される

オブジェクト

(12)

フレームワーク

M オブジェクト指向でソフトウエアを作る際の様々なノ

ウハウ(部品の組合わせ方や、業務フロー)を再利

用可能な形で提供したもの

M 半完成品なので、利用時には利用方法に合わせて

実現化する

フレームワーク

フレームワークを

(13)
(14)

最初の一歩

オブジェクトを作る!

(15)

2000.10.20 オブジェクト指向AtoZ 15

Java = OOP ?

M Javaでは自分で

オブジェクト(クラ

ス)を作らなくて

も、ソフトウエア

の作成は可能

class AddressBook { int maxAddress = 100; int currentIndex = 0;

String name[] = new String[maxAddress]; String address[] = new String[maxAddress]; String tel[] = new String[maxAddress];

...

public void add(String val1, String val2, String val3) { name[currentIndex] = val1; address[currentIndex] = val2; tel[currentIndex] = val3; currentIndex++; } ... }

(16)

オブジェクトを作るとは?

M 「オブジェクトを作る」

とは、ソフトウエアを

構成するクラスを自

身で定義し、ソフトウ

エアを組み上げてい

くこと

import java.util.*; class AddressBook {

Vector addresses = new Vector(); ...

public void add(Person aPerson) { addresses.add(aPerson); } ... } class Person { String name; String address; String tel; ...

(17)

2000.10.20 オブジェクト指向AtoZ 17

オブジェクトを作るメリット

M ソフトウエアの構造が理解しやすくなる

n

「オブジェクト」という、より抽象度の高い単位で

ソフトウエアを見ることができる

M オブジェクト指向の技術を利用しやすくなる

n

分散、永続化、再利用

(18)

オブジェクトの作り方

M ソフトウエアをオブジェクトの集合として捉える

n

機能とデータの集合からオブジェクトの集合へ

M それぞれのオブジェクトに役割を与え、オブジェク

ト同士の協力関係を考える

M 余談:このために「オブジェクト指向設計」が存在

する

(19)

2000.10.20 オブジェクト指向AtoZ 19

オブジェクトを作るときの注意点

M オブジェクトに沢山の役割を持たせない

n

オブジェクトの役割は1つ!

M オブジェクトが協力し合うことが大事

1つのオブジェクトが

頑張る形

オブジェクトが協力

しあうような役割分担

(20)

役割分担の例

:人 :ジョッキ get残ってる量() まだ飲めるか判断() :人 :ジョッキ まだ飲める?() まだ飲めるか判断() true

ジョッキ以外にもお皿や鍋があったとすると…

•左のモデルは、全ての判断を人が行わないといけない

(21)

2000.10.20 オブジェクト指向AtoZ 21

次の一歩

オブジェクトを作らない!

(22)

オブジェクトを作らないとは?

M 「車輪の再発明」の回避

n

プログラマはなんでも自分で作ってしまう(作り

たがる)傾向がある

M 再発明したものは

n

既存のものよりも質が落ちることが多い

n

既存のものがしてきたことと同じ失敗を繰り返

n

テストによる信頼性確認が必要

(23)

2000.10.20 オブジェクト指向AtoZ 23

作ってしまいがちなクラス

M オブジェクトの集合(コンテナクラス)

n

配列で実装しがち

M ソート

M 日付、カレンダー

n

日付とその計算方法に関するクラス

M フォーマッタ

n

表示形式を整えるためのクラス

(24)

再利用という視点

M Javaではクラスライブラリで再利用可能な部品を

提供している

n

コンテナクラス

Vector, Hashtable

n

ソート

Arrays.sort()

n

日付・カレンダー

Date, Calendar

n

フォーマッタ

DateFormat, MessageFormat

M 「既に有るものは作らない」という考え方が大切

M 近年、様々な粒度の再利用部品が提供されること

で、プログラミングスタイルが変化しつつある

(25)

2000.10.20 オブジェクト指向AtoZ 25

プログラミングスタイルの変化Ⅰ

M 従来は大部分のコードをプログラマが作成し、小

さな再利用部品を利用していた

ライブラリ プログラマの作る部分

(26)

プログラミングスタイルの変化Ⅱ

M プログラマはライブラリから必要な部品を探し、そ

れらを組合わせ、足りない部分を作るという開発

スタイルに変化しつつある

ライブラリの提供する部分 プログラマが作る部分

(27)

2000.10.20 オブジェクト指向AtoZ 27

オブジェクト指向最初の一歩:まとめ

M オブジェクトを作ろう!

n

これから作るものをオブジェクトの集合として考

える

n

オブジェクトを作ることで、オブジェクト指向のメ

リットを享受

M オブジェクトは作らないようにしよう!

n

再利用の視点

(28)
(29)

2000.10.20 オブジェクト指向AtoZ 29

Javaをより活用するためには

M Javaの提供するクラスライブラリとそこで提

供される仕組みについて理解する必要があ

M 自身の作ったオブジェクトがクラスライブラリ

側からどのように利用されるかを知る

(30)

Javaのオブジェクト

M Javaでは、全てのオブジェクトがObjectクラスを継

承したクラスとなる

M 自分で作成したオブジェクトも例外ではない

Person

Object

Person

実装時のクラス

(31)

2000.10.20 オブジェクト指向AtoZ 31

Objectクラスの継承は

何を意味するか?

M Javaクラスライブラリでは全てのオブジェクトに適用可能な

仕掛け(フレームワーク)が提供されている

M Objectクラスを継承しているということはこの仕組みに取り

込まれているということになる

Object

Vector

*

elements

Person

Object

Vector

*

elements

クラスライブラリの構造

利用時の構造

(32)

ライブラリ側から見ると

M どのようなクラスから利用されるか分からない

M 「Objectクラス」という形でクラスライブラリを利用す

るクラスを抽象化して扱っている

(33)

2000.10.20 オブジェクト指向AtoZ 33

クラスライブラリの修得

M Javaクラスライブラリの持つフレームワーク

を理解すれば、よりJavaクラスライブラリを

有効に活用することができる

M 余談:Javaクラスライブラリを知ること

→ Java開発者の設計意図を知ること

(34)

Javaに隠されたフレームワーク

M どんなフレームワークに取り込まれている

かはObjectクラス(java.lang.Object)を見ると

わかる

Object

equals(Object)

fianlize()

toString()

Objectクラスに用意されている、

Javaクラスライブラリのフレーム

ワークで利用される代表的なメソッド

(35)

2000.10.20 オブジェクト指向AtoZ 35

定義:ホットスポットとフローズンスポット

M フローズンスポット

n

フレームワーク内の変更されない部分

M ホットスポット

n

フレームワーク内の変更可能な部分

n

フレームワークに柔軟性を与える

n

Objectクラスに用意されているtoString()や

equals()はホットスポット

n

HotSpotとは別もの

(36)

Javaに隠された

フレームワークの紹介

M toString()

文字列化が必要なフレームワークで使用さ

れるメソッド

M equals()

オブジェクトの比較が必要なフレームワーク

で使用されるメソッド

(37)

2000.10.20 オブジェクト指向AtoZ 37

toString()

M オブジェクトを文字列化したいところで使わ

れる

M System.out.println(anObject)等

public static String valueOf(Object obj) {

return (obj == null) ? "null" : obj.toString();

}

(38)

toString()を設定すると…

M 以下のテストプログラムを考える

class Test {

public static void main(String argv[]) {

Person aPerson = new Person(“井上 樹”,

“横浜市”, "045-***-****");

System.out.println(aPerson);

}

}

(39)

2000.10.20 オブジェクト指向AtoZ 39

toString()設定前

M 以下のPersonクラスでテストプログラムを実行する

class Person { String name; String address; String tel;

public Person(String nam, String add, String phone) { name = nam; address = add; tel = phone; } }

実行結果

> java Test

Person@60deb39c

(40)

toString()設定後

M 以下のPersonクラスでテストプログラムを実行する

> java Test

井上

井上

井上

井上 樹

樹 横浜市在住

横浜市在住

横浜市在住

横浜市在住

tel:045-***-****

class Person { // 以下のメソッドを追加 public String toString() {

return name + " " + address + "在住 tel:" + tel; }

}

(41)

2000.10.20 オブジェクト指向AtoZ 41

equals()

M オブジェクトが同じかどうか比較するところで使わ

れる

M VectorのindexOf()等

public synchronized int indexOf(Object elem, int index) { if (elem == null) {

... } else {

for (int i = index ; i < elementCount ; i++) if (elem.equals(elementData[i])) return i;

}

return -1; }

(42)

オブジェクトが「同じ」とは?

M 質問

n

私の時計.equals(彼の時計) を実行したら、 trueが返っ

(43)

2000.10.20 オブジェクト指向AtoZ 43

「同じ」とはの答え

M 例

n

時間、メーカー、色、形、インスタンス

M 「同じ」の概念は場面によって異なる

M それを定義するのがequals()

M デフォルトでは同一インスタンスかどうかを

比較

(44)

equals()を設定すると…

class Test {

public static void main(String argv[]) { Vector addresses = new Vector();

Person aPerson = new Person("井上 樹", "横浜市", "045-***-****"); addresses.add(aPerson);

Person query = new Person("井上 樹", "", "045-***-****"); int resultIndex = addresses.indexOf(query);

System.out.println("検索結果:"); if (resultIndex >= 0) {

Person resultPerson = (Person)addresses.elementAt(resultIndex); System.out.println(resultPerson);

} else {

System.out.println("見つかりませんでした"); }

(45)

2000.10.20 オブジェクト指向AtoZ 45

equals()設定前

M 先ほどの toString() 設定後のPersonクラス

でテストプログラムを実行する

> java Test

検索結果

検索結果

検索結果

検索結果

:

見つかりませんでした

見つかりませんでした

見つかりませんでした

見つかりませんでした

実行結果

(46)

equals()設定後

M 以下のPersonクラスでテストプログラムを実行する

class Person {

public String getName() { return name; }

public String getAddress() { return address; } public String getTel() { return tel; }

public boolean equals(Object obj) { Person person = (Person)obj;

if (name.equals(person.getName()) && tel.equals(person.getTel())) { return true; } else { return false; } > java Test 検索結果 検索結果検索結果 検索結果: 井上 井上井上 井上 樹樹樹樹 横浜市在住横浜市在住横浜市在住横浜市在住 tel:045-***-****

実行結果

(47)

2000.10.20 オブジェクト指向AtoZ 47

toString()やequals()を

定義する意味

M toString()やequals()を再定義することで、

Javaの提供するフレームワークに自身の作っ

たオブジェクトを適用することができる

M 新規コードを書く量を減らすことができる

n

例:equals()を定義すれば、検索ルーチンを書か

なくても良い

(48)

Javaに隠されたフレームワーク:まとめⅠ

M Javaでオブジェクトを作ると、自動的にJava

の提供するフレームワークへの適用が可能

になる

M フレームワークから利用されるメソッド

(toString()やequals())を再定義することで、

フレームワークをより活用できるようになる

(49)

2000.10.20 オブジェクト指向AtoZ 49

Javaに隠されたフレームワーク:まとめⅡ

M Objectクラス以外にもフレームワークを利用するた

めのクラスは沢山隠されている

M クラスライブラリを知ることが、Java活用の第一歩

M クラスライブラリ修得のコツ

n

1つのクラスに注目するのではなく、関連しあう複数の

クラスで何が実現されるかに注目

n

ホットスポットとフローズンスポットを見極める

(50)
(51)

2000.10.20 オブジェクト指向AtoZ 51

オブジェクトを作ろう!

M オブジェクトを作ることで初めて、オブジェク

ト指向を元にした様々な技術を利用すること

ができる

M ただ、既に存在するオブジェクトは再利用す

ること

(52)

フレームワークを利用しよう!

M Javaのクラスライブラリでは様々なフレーワー

クを提供している

M それらのフレームワークを利用することが

Java・オブジェクト指向修得への道

(53)

2000.10.20 オブジェクト指向AtoZ 53

これからのステップ

M 分析からオブジェクト指向を使えば、もっと有効に

オブジェクト指向を活用できる

M フレームワークを作ってみよう

n

クラスライブラリに無いものは自分で作り、作ったものを

再利用可能なようにまた、クラスライブラリに追加してい

n

部品が増えてくれば、開発者はより本質的な部分に注

力できる

n

自分のノウハウをフレームワークとして蓄積

参照

関連したドキュメント

l 「指定したスキャン速度以下でデータを要求」 : このモード では、 最大スキャン速度として設定されている値を指 定します。 有効な範囲は 10 から 99999990

11) 青木利晃 , 片山卓也 : オブジェクト指向方法論 のための形式的モデル , 日本ソフトウェア科学会 学会誌 コンピュータソフトウェア

CIとDIは共通の指標を採用しており、採用系列数は先行指数 11、一致指数 10、遅行指数9 の 30 系列である(2017

納付日の指定を行った場合は、指定した日の前日までに預貯金口座の残

また、JR東日本パス (本券) を駅の指定席券売機に

目標 目標/ 目標 目標 / / /指標( 指標( 指標(KPI 指標( KPI KPI KPI)、実施スケジュール )、実施スケジュール )、実施スケジュール )、実施スケジュールの の の の設定

サンプル 入力列 A、B、C、D のいずれかに指定した値「東京」が含まれている場合、「含む判定」フラグに True を

「就労に向けたステップアップ」と設定し、それぞれ目標値を設定した。ここで