ソフトウエアの再利用

ソフトウエアの再利用
オブジェクト指向プログラミング
サンテクノ㈱技術3課
清水利弘
第一回 ソフトウエアの再利用
ソフトウエアの再利用と
オブジェクト指向とは
ソフトウエアの再利用
なぜ再利用可能なソフトウエアが必要か
実務レベルで見ると、生産性と品質が大きな理由。
なぜ再利用可能なソフトウエアではだめなのか
これには、多くの技術的、組織的、政治的そして
心理学的な問題が関係している。
なぜソフトウエアの再利用なのか
オブジェクト指向は、ソフトウエア再利用の技術に
なるか
オブジェクト指向のメリット
拡張性の比較
拡張性のないシステム
規
模
オブジェクト指向
規
模
バージョン
新規開発
バージョン
すでに開発済み
オブジェクト指向のメリット
プログラムミス混入割合の比較
拡張性のないシステム
規
模
オブジェクト指向
規
模
バージョン
バージョン
プログラムミスが混入しているモジュールの割合
オブジェクト指向の考え方(1)
オブジェクト指向とは
モノのあり方に着目して、現実の世界をモ
デル化することである!
たとえば、テレビ、洗濯機、車、人
オブジェクト指向の考え方(2)
モノを中心に考えて、あとはそのモノが、どう言う 指示が来ればどういう
動作をすれば良いのか、それさえ明らかにしておけば、 内部構造をどう
作ろうが全く関係なく、すなわち部品とか属性とか ロジックとかいったも
のを隠蔽してしまえるわけです。
機能Aを
実行せよ
機能Bを
実行せよ
オブジェクト指向の役割と動作(1)
オブジェクト指向の基本的考え方は、オブ
ジェ
クトの役割とメッセージによる協調動作です。
メッセージ
オブジェクト指向では、オブジェクトとオブジェ
クトはメッセージによりコミュニケーションを行
います。
これください
千円になります。
意思伝達
買う人
売る人
オブジェクトの役割と協調動作(1)
あなたがAさんの依頼を受けてあるプログラムの
開発責任者になった場合を考えよう
設計作業
Aさん
設計指示
開発依頼
Bさん
役割:デザイナ
プログラミング作業
Cさん
自分
プログラミング指示
役割:マネージャ
役割:プログラマ
オブジェクトの役割と協調動作(2)
オブジェクトは、それぞれ役割も持っています。
図中の「依頼」や「指示」がオブジェクト間の
「メッセージ」にあたります。
オブジェクトとオブジェクトが、メッセージによる
協調動作を行って全体として1つの目的を達成する
というのがオブジェクト指向の基本的考え方です。
なぜオブジェクト指向か
システム開発の問題
見積もった予算で決められた納期までに
完成させるのが基本です。しかし。。。
最大の原因のひとつは、開発スタート時点
で要求定義が明確にできないことです。
なぜオブジェクト指向か
オブジェクト指向に期待するもの
上流工程
下流工程
要求定義
設 計
プログラム
様々な工程において
オブジェクト指向は
適用できる
オブジェクトとは
オブジェクトとは「もの」です。認識の対象となるも
ので、目にみえるものと目に見えない概念があり
ます。同じものでも見る人の視点により異なった
認識をします。その視点による異なった認識対象
がオブジェクトです。
オブジェクトとは
存在する「もの」
認識できる「もの」
テレビ
オブジェクトとは
視点によりことなる認識
テレビ
商品
見る人
販売する人
テレビ
ディスプレイ
ゲームをする人
製品
製造する人
オブジェクトの持つ特徴(1)
属性
オブジェクトは固有の姿、形、性質などの属性を
持ちます。たとえば、
オブジェクト
属性
大きさ  大
車
色
 青
重さ
 重
オブジェクトのもつ特徴(2)
振舞い
オブジェクトは固有の「振る舞い」を持ちます。
たとえば、車でいうと、アクセルを踏むと動き、ハ
ンドルを回すと曲がり、ブレーキを踏むと止まり
ます。これらをオブジェクト指向の言葉で操作と
呼びます。
アクセル
ハンドル
ブレーキ
オブジェクトのもつ特徴(3)
関連
オブジェクトは、それ自身の単独での存在ではあ
まり意味を持ちません。他のオブジェクトとの関
連によって意味を持ちます。
製造する
メーカ
会社オブジェクト
テレビ
所有する
所有者
人オブジェクト
オブジェクトのもつ特徴(4)
アイデンティティ
オブジェクトは必ずそれを一意に識別する
アイデンティティ(識別子)を持ちます。
たとえば、車でいうと、その車をナンバーで
識別することができる。
オブジェクトのもつ特徴(5)
オブジェクトのプロパティと特性
・属性(姿、形、性質)をもつ(属性)
・他のオブジェクトとの間に関連をもつ(関連)
この「属性」と「関連」をまとめてプロパティと呼び
ます。
・振舞いを持つ(操作)
「プロパティ」と「操作」をまとめてオブジェクトの
特性と呼びます。
オブジェクトのもつ特徴(6)
オブジェクトでないもの
・1Kg、2m、3時間
これらは、あるオブジェクトの性質に属するもの
・赤、青、緑
これらは、あるオブジェクトの性質に属するもの
オブジェクト指向プログラムミング
三大要素について
①クラス
②ポリモーフィズム
③継承
クラスとインスタンス
クラス(class)
オブジェクト指向のもっとも基本的な仕組みは「ク
ラス」です。
共通の特性(属性、関連、操作)を持つオブジェク
トの集合、またはそれを抽象化しものを「クラス」と
呼びます。
クラスは英語のclassで「分類」「種類」といった
「同種のものの集まり」という意味を持ちます。
クラスとインスタンス
インスタンス(instance)
クラスと対になる要素(または、属するオブジェク
ト)を「インスタンス」と呼びます。
インスタンスは英語のinstanceで「具体的なも
の」「実例」を意味します。
クラスとインスタンス
クラスとインスタンスは数学の集合論に相当する。
クラスは種類、インスタンスは具体的なもの。
例)
犬 : ポチ、ころ、タロー・・・・
国 : 日本、韓国、ドイツ、アメリカ・・・
クラスの定義
クラスの定義例
//犬クラスの定義
Class Dog {
String name ;
// 名前
Dog(String name) { // コンストラクタ(インスタンス作成時に動
作)
this.name = name ;
}
String cry() {
// 命令されると「ワン」と吠える
return “ワン” ;
}
}
クラスの定義
2匹の犬を吠えさせるサンプル
//2匹の犬を作る
Dog pochi = new Dog(“ポチ”) ;
Dog taro = new Dog(“タロー”) ;
//ポチとタローに「鳴け」と命令し、結果を出す
System.out.println(pochi.cry()) ;
System.out.println(taro.cry()) ;
プログラム説明
①Dog(・・)は、Dogクラスのコンストラクタです。
インスタンス作成時に動作します。
②cry()は、メソッドと呼ばれるものです。
③相手のインスタンスにメッセージを送って仕事を
頼みます。このメソッドを呼び出すことを、メッ
セージパッシングといいます。
④cry()を2回実行すると。2回「ワン」と表示されま
す。
ポリモーフィズム(多態性)
ポリモーフィズム(polymorphism)とは、
英語で「いろいろな形に変わる」といった意
味をもつ言葉、日本語では「多態性」「多相
性」などと訳される。
この仕組みをひと言で表現すると「類似し
たクラスに対するメッセージの送り方を共
通にする仕組み」といえる。
ポリモーフィズム(多態性)
動物クラス
全体で共通なAnimal(動物)クラスを定義します。
Class Animal { //動物クラス
abstract String cry() ; //ここでは具体的な鳴き
//方を定義しない。
}
ポリモーフィズム(多態性)
赤ん坊、犬のクラス定義
Class Baby extends Animal { //赤ん坊クラス(動物を継承)
String cry() {
return “オギャー” ; //「オギャー」と泣く
}
}
Class Dog extends Animal { //犬クラス(動物を継承)
String cry() {
return “ワン” ;
//「ワン」と鳴く
}
}
プログラム説明
①動物にはたくさんの種類があります。
②具体的な鳴き方を決めることはできませんので、
cryというメッセージを受けることだけを定義して
います。
③具体的な動物として、赤ん坊、犬の各クラスを定
義します。
④クラス名を宣言しているところで“extends
Animal”とかいてあるのは、「継承」と呼ばれる宣
言です。(javaの例)
⑤これで、ポリモーフィズムの準備はOKです。
ポリモーフィズム(多態性)
トレーナークラス
Class Trainer {
//トレーナークラスの定義
void execute(Animal animal) { //引数は動物
//相手を泣(鳴く)かせてその結果を印字する。
System.out.println(animal.cry()) ;
}
}
プログラム説明
①相手が誰であっても「泣け/鳴け」と指示するト
レーナークラスを定義します。
②ここでのポイントはexecuteメソッドの引数が、
Animal(動物)クラスのインスタンスとなっている
ことです。
継承(インヘリタンス:inheritance)
継承をひと言で表現すると「ものの種類の共通
点と相違点を体系的に整理する仕組み」です。
オブジェクト指向では「ものの種類」はクラスのこ
とですから、表現を変えると「似たもの同士のクラ
スの共通点と相違点を整理する仕組み」ともいえ
ます。
継承は、全体集合と部分集合に相当する。
オブジェクト指向では、全体集合を「スーパークラ
ス」、部分集合を「サブクラス」と呼びます。
継承
継承のサンプル
//動物クラス
Class Animal {
void move() { ……… } // 行動する。
String cry() { ……….} // 吠える・鳴く
}
//哺乳類クラス(動物クラスを継承する)
Class Mammal extends Animal {
void bear() { ……..} // 出産する。
}
/鳥クラス(動物クラスを継承する)
Class Bird extends Animal {
void fly() { ……..}
// 飛ぶ。
}
プログラム説明
①Animal(動物)、Mammal(哺乳類)、Bird(鳥類)
の3つのクラスを定義します。
②MammalとBirdクラスの定義で“extends Anim
al”と書いてあるのは、Animalクラスを継承する
ことの宣言です。
③Animalクラスで定義した性質(ここではmove、c
ryというメソッド)が自動的にMammalとBirdにも
定義されたことになります。
プログラム説明
④つまり、共通の性質である「行動する」「吠える/
鳴く」は、動物クラスに定義します。
⑤固有の性質である「出産する」は哺乳類クラスに
定義します。
⑥「飛ぶ」は鳥クラスに定義します。