ソフトウエアの再利用 オブジェクト指向プログラミング サンテクノ㈱技術3課 清水利弘.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
C++ 基礎. 目次 C++ とは? C++ におけるオブジェクト指向 課題 C++ とは? Cには足りなかったものが付与されて出来た物 具体的には、 情報の隠蔽(カプセル化) 共通の名前付け(関数のオーバーロード) 再利用の仕組み クラスの導入 など オブジェクト指向 C++ では大規模なプログラミングの.
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Chapter3 クラス図(後半)             FM12014 劉鎧誠.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向プログラミング(4) 静的分析(2)
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
プログラミング基礎I(再) 山元進.
クラスその2∽(アドバンス)∽ 福岡工業大学  梶原 大慈       .
アルゴリズムとデータ構造1 2007年6月12日
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
CHAPTER1 UMLとオブジェクト指向の基本概念(2)
3-3 クラス図の関係その2.
クラス図(1) 後半 FM13010 村上 太一.
UMLの概要と オブジェクト指向の 基本概念
社会人学習講座 「Javaプログラミング概論」
C#とC++とオブジェクト指向 上甲 健史.
ピカチュウによる オブジェクト指向入門 (新版)
UML入門 UML PRESS vol.1 より 時松誠治 2003年5月19日.
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
UMLとは           032234 田邊祐司.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向基礎学習Ⅱ 平成20年7月1日 森田 彦.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
UMLの概要とオブジ工クト指向の基本概念 第2回
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
UMLの概要とオブジェクト指向の基本概念
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向プログラミング クラス 継承
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
設計情報の再利用を目的とした UML図の自動推薦ツール
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
Javaによる Webアプリケーション入門 第4回
サブゼミ第7回 実装編① オブジェクト型とキャスト.
プログラム分散化のための アスペクト指向言語
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
知識ベースの試作計画 ●●●研究所 ●●●技術部 稲本□□ 1997年1月.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

ソフトウエアの再利用 オブジェクト指向プログラミング サンテクノ㈱技術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にも定義されたことになります。

プログラム説明 ④つまり、共通の性質である「行動する」「吠える/鳴く」は、動物クラスに定義します。 ⑤固有の性質である「出産する」は哺乳類クラスに定義します。 ⑥「飛ぶ」は鳥クラスに定義します。