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

知識工学

N/A
N/A
Protected

Academic year: 2021

シェア "知識工学"

Copied!
16
0
0

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

全文

(1)

知識工学

岡山大学大学院

講師 竹内孔一

(2)

本日の内容

•   知識のモデル化

–  オブジェクト指向

(3)

オブジェクト指向

•  オブジェクト指向

–  60 年代から 70 年代

• 

オブジェクトという独立要素どうしの通信でプログラミング

–  ダイナブック  (60 年代 )

•  Alan Kay 大学ノート大のパソコン構想,小学生も扱える

• 

ユーザ言語

Smalltalk (

のちに

smalltalk-80) メッセージのみで対象を操作する

–  オブジェクト

•  通信手段をもつ

•  クラスとインスタンスで整理

•  メソッドという属性を持つ

object object

(4)

オブジェクト指向

•  考え方

–  オブジェクトという独立要素どうしの通信で全体として機 能させる

•  利点

–  モノとモノどうし関係をそのまま記述

–  あとから追加しやすい ( 手続き型言語との違い ) –  シュミレーションできる

•  注意

–  解を得る方法は別 ( 探索など )

•  プログラミング言語 (Win/Linux/Mac/Solaris)

–  smalltalk, Java, C++,Ruby, PHP, C#(Win のみ )

•  設計のための記述

–  UML (unified modeling language)

(5)

オブジェクト指向

•  基本要素

–  クラス

•  クラス名,データ,メソッド

–  クラスとインスタンス

•  クラスを具体化したも ->

 インスタンス -> オブジェクト

•  性質

–  データ抽象化 –  多相性

時計クラス

時計

現在の時間 時間の出力 時間の修正

クラス図

クラス名 データ ( 変数 )

メソッド

インスタンス化

tokei = new 時計 (Java 風の記述 )

(6)

練習 11

•   電波時計のオブジェクトについて

–  クラス名,データ,メソッドについて考えよ

(7)

オブジェクト指向 ( 記述例 )

•   Java を例に

class Doumo { // クラス名 // 変数

public String doumodesu; // 修飾子,型,変数名 // メソッド

void kotoba(String words) {

doumodesu=words; // 変数にセット } }

修飾子 : public, private などでアクセスを指定

        カプセル化

(8)

class Hello {

public static void main(String[] args) {

System.out.println("Hello from Java");

// インスタンス化↓

Doumo takashi=new Doumo();

// メソッド呼び出し↓

takashi.kotoba(" どうもどうも ");

// 変数へのアクセス↓

System.out.println(takashi.doumodesu);

} }

class Doumo { // 変数

String doumodesu;

// メソッド

void kotoba(String words) {

doumodesu=words; // 変数に引数をセット }}

main

関数

画面に出力

(9)

object MyHello { //main はオブジェクト def main(args: Array[String]) {

println(“Hello world”) // セミコロン不要 val takashi= new Doumo("")

takashi.kotoba(“ ハローどうもどうも ”)   // 型は自動 println(takashi.doumodesu)

} }

class Doumo (var doumodesu:String) { // いちいち内部変数書かなくて良い

def kotoba(words:String) { doumodesu=words

} }

Scala だとこんな感じ

(10)

クラス ( 型 ) を使う良い点

•   型のチェックで人の誤りを防ぐ

–  人が思っていた型と違う => プログラムミス

•  型の持つメソッドを利用することでコードが減 らせる

10

takahashi.doumodesu.length() Doumo 型

String 型

6 という値

“ どうもどうも ” の文字数

int 型

=>6 Java の

例で

Ruby だと

“ どうもどうも ”.length と文字列に操作できる

(11)

練習 12

•  実行結果として「どうもどうも」と出力されるように   □ を埋めよ

class Hello {

public static void main(String[] args) {

System.out.println("Hello from Java");

Doumo takahashi=new Doumo();

takahashi.kotoba(" どうもどうも ");

System.out.println(        );

} }

class Doumo {

String doumodesu;

void kotoba(String words) { doumodesu=words;

}}

(12)

具体例からオブジェクトの設計

•  グリッド問題

–  ジョブが次々と入ってきてサーバに渡す

–  制御サーバ,計算サーバのクラスを考えてみよう

制御サーバ

サーバ A

ジョブ サーバ B サーバ C

処理速度が

A,B,C

それぞれで違う ジョブ

ジョブ

制御サーバ データ :   ? メソッド : ?

サーバ

データ : ジョブ ID

メソッド :  ジョブの処理,処理状況の報告       処理終了の報告

( 例 )

(13)

オブジェクト指向

•   オブジェクト指向の設計

ユースケース図

–  作ろうとしているシステムの機能を整理する –  機能に基づいてオブジェクトを設計

クラス図

–  必要なオブジェクトを書き出し,データとメソッドに ついて整理する

UML に従った記述

(14)

グリッド問題の例

•  制御サーバの機能

–  ジョブの管理

–  ジョブ投入の戦略 –  各サーバの特徴

–  各サーバの状態の把握 ユースケース分析

オブジェクトの整理 ジョブ ジョブ管理

各計算サーバ サーバの状態 の監視

ジョブ投入の 戦略作成

 制御サーバの機能を   より詳細に分解

3 3

n

(15)

練習 13

•   グリッド問題を分析した下記オブジェクト図に おいて,各オブジェクトのデータ,メソッドを記 述せよ

オブジェクトの整理 ジョブ ジョブ管理

各計算サーバ サーバの状態 の監視

ジョブ投入の 戦略作成

3 3

n

(16)

練習 13 のヒント

オブジェクトの整理

ジョブ管理

各計算サーバ サーバの状態 の監視

ジョブ投入の 戦略作成

3 a n

各通信の線がメソッドに当たる D: データ, M: メソッド

D:

ジョブ

ID(

グリッドの世界に入った

)

ジョブ

ID (

各計算サーバで

)

ジョブ

M: ジョブ開始    ジョブ終了 ジョブ数報告

b c

d

M:

ジョブ数取得

  全体の負荷状態報告

これはやらない 再利用性

D: ジョブリスト   待ちキュー

  ジョブ状態(run?stop?) M: ジョブ投入

  ジョブ状態取得

M:ジョブ状態取得   サーバ負荷取得   ジョブ投入命令

参照

関連したドキュメント

目的 これから重機を導入して自伐型林業 を始めていく方を対象に、基本的な 重機操作から作業道を開設して行け

耐震性及び津波対策 作業性を確保するうえで必要な耐震機能を有するとともに,津波の遡上高さを

指針に基づく 防災計画表 を作成し事業 所内に掲示し ている , 12.3%.

をき計測磁については 約機やぞの後の梅線道燦ω @J III 祭賞設けて、滋問の使用!窓織象件後紛えているをのもあ~.正し〈誕lÉをされていない官能筏

モノづくり,特に機械を設計して製作するためには時

車両の作業用照明・ヘッド ライト・懐中電灯・LED 多機能ライトにより,夜間 における作業性を確保して

また,既設設備については,基準地震動 Ss