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