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

九州大学学術情報リポジトリ

N/A
N/A
Protected

Academic year: 2021

シェア "九州大学学術情報リポジトリ"

Copied!
161
0
0

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

全文

(1)

九州大学学術情報リポジトリ

Kyushu University Institutional Repository

コンテキスト指向プログラミングの組込みソフト ウェアへの適用に関する研究

谷川, 郁太

https://doi.org/10.15017/4060187

出版情報:Kyushu University, 2019, 博士(工学), 課程博士 バージョン:

権利関係:

(2)

コンテキスト指向プログラミングの 組込みソフトウェアへの適用に関する研究

令和元年 12

谷川郁太

(3)

i

目次

概要

vii

1

章 序論

1

1.1

背景

. . . . 1

1.2

組込みソフトウェアへの適用における課題の分析

. . . . 5

1.3

研究の目的

. . . . 9

1.4

本論文の構成

. . . 12

2

章 関連研究

13 2.1 COP

以前のプログラミング技術についての概要

. . . 13

2.2 COP

のコンテキストアウェアシステム開発における立ち位置

16 2.3 COP

の概要

. . . 18

2.4 COP

言語

. . . 20

2.5 COP

の応用事例

. . . 22

2.6 COP

の要素技術

. . . 24

2.7 COP

AOP

の違い

. . . 28

2.8

本研究の位置づけ

. . . 29

3

RTCOP: C++

ベースのコンテキスト指向プログラミングフ レームワーク

31 3.1

概要

. . . 31

3.2

はじめに

. . . 32

3.3

提案

. . . 34

3.4

実装

. . . 38

3.5

評価

. . . 47

3.6

おわりに

. . . 54

(4)

ii

4

章 コンテキスト指向プログラミングにおける優先度に応じた

レイヤスケジューリング手法

55

4.1

概要

. . . 55

4.2

はじめに

. . . 56

4.3

事例紹介

. . . 57

4.4

解決すべき問題

. . . 59

4.5 COP

フレームワーク

RTCOS . . . 62

4.6

非正常系処理変更の応答時間の短縮方法の議論

. . . 63

4.7

提案

. . . 65

4.8

適用・評価

. . . 70

4.9

おわりに

. . . 72

5

章 ケーススタディ:複合現実環境による

IoT

教育システム

73 5.1

概要

. . . 73

5.2

はじめに

. . . 74

5.3 IoT

教育システム

. . . 76

5.4

実装

. . . 79

5.5

応用事例

. . . 82

5.6

おわりに

. . . 84

6

章 結論

85 6.1

まとめ

. . . 85

6.2

今後の展望

. . . 87

謝辞

88

参考文献

89

本研究に関する著者の発表論文

95

付録

96 A RTCOP

アプリケーションのソースコード

. . . 96

B RTCOP

ライブラリのソースコード

. . . 102

(5)

iii

C RTCOP

の自動生成コード

. . . 134

(6)

iv

図目次

1.1 IoT

2008

年 か ら

2009

年 に 生 ま れ た(

CISCO White

Paper

2)より)

. . . . 2

1.2

本研究における

IoT

の目標:状況に応じたサービス変更

. . . 2

1.3

本研究における

IoT

の目標

. . . . 3

1.4 COP

による横断的関心事の扱い

. . . . 4

1.5

組込みソフトウェア開発で用いられるプログラミング言語

. . 6

1.6

リアルタイム性の必要性

. . . . 6

1.7 COP

適用によるリソース消費量の増加

. . . . 7

1.8

同時に複数の振る舞い変更要求が起こる場合

. . . . 8

1.9

本研究での取り組み

. . . 10

2.1 OOP

の言語機能

. . . 15

2.2 AOP

による横断的関心事のモジュール化

. . . 15

2.3

本研究におけるコンテキスト

. . . 16

2.4 COP

の立ち位置

. . . 17

2.5 Context Toolkit

の構造(Deyらの論文3)より)

. . . 18

2.6 COP

のサンプルプログラム

. . . 19

2.7 COP

のスマートフォンアプリケーションでの使用例

. . . 23

2.8

スマートフォンアプリケーションの

COP

での実現例

. . . . 23

2.9

メソッドディスパッチ

:

プロキシオブジェクト

. . . 24

2.10

メソッドディスパッチ

:

仮想関数テーブルを書き換え

. . . . 25

2.11

レイヤアクティベーション

: with

ブロック

. . . 26

2.12

レイヤアクティベーション: 決定的なアクティベーション

. . 26

2.13

レイヤアクティベーション

:

イベント駆動

. . . 27

(7)

v

3.1 RTCOP

のプログラム記述例

. . . 37

3.2 RTCOP

の使用プロセス

. . . 39

3.3

レイヤードなクラスの構造

. . . 40

3.4 LayerdObject

の継承ツリーの案

. . . 41

3.5

メソッドディスパッチのための機構

. . . 42

3.6

アクティベーション前後の仮想関数テーブル

. . . 44

3.7

パーシャルクラス定義プログラム

. . . 45

4.1

機械制御の事例:レスキューロボット

. . . 58

4.2

電子制御の事例:掃除機ロボット

. . . 59

4.3 COP

のレイヤを用いた非正常系処理への切り替えの例

. . . 60

4.4 RTCOS

の構造

. . . 63

4.5

レイヤアクティベーション時の初期化プログラム例

. . . 66

4.6

レイヤスケジューラの構造

. . . 67

4.7

レイヤの状態遷移

. . . 67

4.8

レイヤスケジューラアルゴリズム

. . . 68

4.9

メソッドディスパッチの仕組み

. . . 69

4.10

評価プログラムの流れ

. . . 71

5.1 IoT

教育のための

COP

プログラム

. . . 76

5.2

複合現実システムの実行時の写真

. . . 77

5.3

実験に用いる掃除機ロボットを示す

. . . 78

5.4

システムの構成

. . . 78

5.5

ロボット

API

のクラス図

. . . 79

5.6

ユーザアプリケーションとロボットフレームワークの関係

. . 80

5.7 COP

の実現

. . . 81

5.8

応用事例

:

カーリングゲーム

(

ゲーム中

) . . . 82

5.9

応用事例: カーリングゲーム

(ゲーム終了時) . . . 83

(8)

vi

表目次

2.1

既存

COP

言語の一覧

. . . 21

3.1

無効化可能な

COP

の機能の一覧

. . . 35

3.2

ベンチマーク環境

. . . 47

3.3

メソッドディスパッチの計測結果

. . . 49

3.4

レイヤアクティベーションの計測結果

. . . 49

3.5

機能の有効・無効化による性能比較

. . . 52

4.1

適用結果:メソッド実行の時間

. . . 71

(9)

vii

概要

本論文では,コンテキスト指向プログラミング(

Context-Oriented Pro-

gramming: COP

)を組込みソフトウェアへ適用する際の課題を明らかにし,

それらの課題を解決するための研究に取り組む.本研究の目的は,

COP

を 組込みシステムに適用可能にすることによって,Internet of Things(IoT)の ような,近年の組込みソフトウェア開発に貢献することである.

COP

はコンテキストに依存する横断的関心事をモジュール化し,実行時 の状況に応じてそれらを有効化・無効化することで,現在のコンテキストに 動的に適応することを可能とするプログラミング技術である.ここでいうコ ンテキストとは,システムを取り巻く外部環境やシステムの内部状態,ある いはそれらの変化の順序である.このような特徴から,

COP

IoT

で求め られるような,コンテキストアウェアな組込みソフトウェアの開発に役立つ ことが期待できる.

COP

の組込みソフトウェアへの適用の課題は,省メモリやリアルタイム 性の確保といった,組込みソフトウェアにとって重要な要求を満たせない可 能性があることである.

COP

適用の問題として,次の三つが挙げられる.

(i) COP

機構によるメモリ消費量やプログラム実行時間の増加

(ii) COP

を利用可能なプログラミング言語が組込みシステム用プロセッ

サでサポートされていない可能性

(iii) COP

のレイヤアクティベーション時のリアルタイム性確保が困難

問題

(i)

は,

COP

アプリケーションには,

COP

言語が提供する機能を実 現するための機構が必要となり,その分だけプログラムサイズや実行時のメ モリ消費量が増加すること,また,

COP

における振る舞い変更は,現在の コンテキストに応じたメソッドディスパッチによって実現されるため,その 際の

COP

機構による介入によって,プログラムの実行時間が増加すること

(10)

viii

である.

問題

(ii)

は,既存の

COP

言語は

Java

Smalltalk

など組込みソフトウェ ア向けでない言語を拡張したものが中心であるが,組込みシステム用のプロ セッサがサポートする言語は

C

または,C++のみであることが多いため,

既存の

COP

言語の多くは,組込みシステム用プロセッサ上で動かせない場 合があることである.

問題

(iii)

は,組込みソフトウェアの機械制御における非正常系処理のよう

な重要なものを

COP

で実現する場合,事故の発生や製品の故障を防ぐため に,非正常系処理の変更要求から振る舞い実行までの応答時間がかかること である.非正常系の処理の変更に時間がかかる要因としては,他の正常系の 変更が終了するのを待つ場合があることから,重要な振る舞い変更を優先し て実行する仕組みが必要である.

これらの問題については,以下の方法によって解決する.

(a)

省メモリかつ省実行時間の

COP

機構の実現

(b)

組込み向けのプログラミング言語のサポート

(c)

リアルタイム性確保に不可欠なスケジューラの提供

本研究では,上記によって課題を解決するために,以下の二つに取り組 んだ.

(1) C++

をベースとしたコンテキスト指向プログラミングフレームワー

クの提案

(2)

優先度付きのコンテキスト適応を実現するレイヤスケジューリング手 法の提案

取り組み

(1)

では,解決策

(a)

として,提案フレームワークをアプリケー ションごとに不要な機能の取り外しが可能となる仕組みとした.また,ネイ ティブ環境での低レベル操作によって

COP

機構を実現した.これにより,

メモリ消費量を抑え,プログラムの実行時間を削減した.さらに,解決策

(b)

として,COPを

C++

の拡張により実現した.これにより,C++しか サポートしていないような,組込みシステム用のプロセッサ上でも

COP

(11)

ix

プリケーションを開発することを可能とした.

取り組み

(2)

では,解決策

(c)

として,優先度付きのコンテキスト適応を実 現した.本手法では,同時に複数のコンテキスト適応が必要になった際に,

前もって設定しておいた優先度が高いものから順に処理を行う.これによっ

て,課題

(iii)

を解決し,

COP

を組込みソフトウェア開発に用いやすくした.

最後に,本論文では,組込みソフトウェアへの

COP

適用のケーススタ ディとして,複合現実

(Mixed Reality)

環境による

IoT

教育システムを紹介 する.このシステムによって,

COP

アプリケーションをいくつか開発し,

COP

フレームワークが想定通りの振る舞いをするか実験した.

(12)

1

第 1 序論 1.1 背景

Internet of Things(IoT)

という言葉が世間に広まってから今日に至るま で,

IoT

に関する多くの研究が行われてきたが,その言葉の定義は困難であ る.本章の冒頭では,IoT という言葉が広まった歴史的経緯を踏まえた上 で,本研究が最終的に目指すところを明らかにする.その後,コンテキスト 指向プログラミングの研究に取り組むまでの背景について述べる.以降の節 で,本研究の課題や目的について述べる.

IoT

の定義に関して,

IEEE

の国際標準1) によると,「

Internet of Things

IoT

)は,センサ,アクチュエータ,スマートオブジェクトのネットワーク で構成されるシステムであり,その目的は日常的なものや産業用のオブジェ クトを含む「すべて」のものを,インテリジェントでプログラム可能で,人 とものが相互作用する能力をより高める方法で,相互接続することである」

として知られているが,定義は難しいと記されている.

IoT

の定義が難しいことは,

IoT

という言葉が広まった歴史的経緯に由来 する.

IoT

という言葉は,米国

Auto-ID Center

Kevin Ashton

1999

年 に初めて用いた.この時は

RFID

のための言葉として使われており,物がつ ながることが目指された.

IoT

という言葉が広まったきっかけは,

2011

年の

CISCO

のホワイトペーパー2) である.ここでは,図

1.1

を示しつつ,

2008

年から

2009

年に接続されたデバイスの数が世界の総人口を超えたことによ り,IoTの時代を迎えたことを明らかにした.このように,始めに使われた ときと,世間に広まったときで,言葉の意味が違っていたことは,

IoT

とい う言葉の定義を困難にする一因である.

本研究において目指す

IoT

がどのようなものであるかを図

1.2

に示す.図 に示す通り,インターネットに接続されたデバイスは,他のデバイスとつな

(13)

1

章 序論

2

1.1 IoT2008年から2009年に生まれた(CISCO White Paper2)より)

1.2 本研究におけるIoTの目標:状況に応じたサービス変更

がることによって,新たなサービスを生み出すことが期待できる.例えば,

掃除機ロボットは,ロボット単体としては掃除サービスを行うが,家やス マートフォンと組み合わせることで,家に侵入者が入ったときに家主のス マートフォンに通知を行うような見回りサービスを提供できる.これらの サービスの内容を状況に応じて変更するスマートロボット,スマート家電と いったものを実現することが本研究が最終的に目指すところである.

このように,システムを取り巻く状況

(

コンテキスト

)

に応じて振る舞い

(14)

1

章 序論

3

1.3 本研究におけるIoTの目標

を変えるようなシステムは,コンテキストアウェアシステム 3)4) と呼ばれ ることがある.コンテキストアウェアシステムは,図

1.3

の上部に示すよう に,システムのセンサ情報などから現在のコンテキストを分析し,その結果 を基にアプリケーションの振る舞いを変更させるシステムである.本研究で は,アプリケーションの振る舞いを変更する部分について扱う.

コンテキストアウェアシステムを実装する際,コンテキストに依存する振 る舞いが横断的関心事となりうることを考慮する必要がある.例えば,屋 内外で全体の振る舞いを変えるようなシステムでは,図

1.3

の下部に示す ように,それぞれの状況の分岐処理と振る舞いが複数のクラスに散在する.

このようなシステムをオブジェクト指向プログラミング

(Object-Oriented

Programming: OOP)

言語の機能のみで開発する場合,上記の横断的関心事

を扱うための機構を開発者が一から構築する必要がある.

アスペクト指向プログラミング

(Aspect-Oriented Programming: AOP)

5) は,横断的関心事をモジュール化するためのプログラミング技術であり,上 記のようなソフトウェアの開発に役立てることができる.

AOP

に関する研

(15)

1

章 序論

4

1.4 COPによる横断的関心事の扱い

究として,

Marin

らは,横断的関心事を

13

種類に分類し,その中で動的な 振る舞いを持つ横断的関心事を

AOP

言語では扱えないことについて述べて いる.6)

動的な横断的関心事を扱うことができるものとして,コンテキスト指向プ ログラミング

(Context-Oriented Programming: COP)

7)8)9)10)11) が挙げら れる.

COP

はコンテキストに依存する横断的関心事を図

1.4

のように,レ イヤとしてモジュール化し,実行時の状況に応じてレイヤをアクティベート することで,現在のコンテキストに動的に適応することを可能とするプログ ラミング技術である.このように,COPはコンテキストに依存する横断的 関心事をモジュール化することや,それを動的に活性化・非活性化すること を可能にするプログラミング言語機能を有しており,IoTで求められるよう な,コンテキストアウェアな組込みソフトウェアの開発に役立つことが期待 できる.

(16)

1

章 序論

5

1.2 組込みソフトウェアへの適用における課題の 分析

本節では,COPを組込みソフトウェアに適用する際の課題を明らかにす る.そのために,

1.2.1

項で一般的な組込みソフトウェア開発における課題を 紹介し,1.2.2項で

COP

適用によって引き起こされる問題を明らかにする.

1.2.1 一般的な組込みソフトウェア開発における課題

組込みソフトウェア開発では一般的に,プログラムサイズ,メモリ消費量,

実行時間などの制約が存在する.例えば,

RENESAS

GR-SAKURA

12)と いうマイコンボードでは,

ROM

サイズが

1MB

RAM

サイズが

128KB

で あり,このマイコン用アプリケーションでは,プログラムサイズやメモリ消 費量がこれらの数値を超えないようにしなくてはならない.

組込みソフトウェア開発では,使用できるプログラミング言語にも制限が ある.このことから,実際の開発で使用されるプログラミング言語には偏り がある.IPAの

2017

年の調査13) のアンケート結果を図

1.5

に示す.図の 通り,一番多く使われているプログラミング言語は

C

言語であり,それに続 いて

C++

,アセンブリ言語が用いられている.

使用できるプログラミング言語が制限される理由の一つは,本項冒頭で述 べたプログラムサイズやメモリ消費量に関連する.

Java

のような専用の実 行環境を必要とするプログラミング言語では,その実行環境を備えるための リソースが割かれる.例えば,

ARM

プロセッサを用いた組込み

Linux

の開 発で

Java

を用いる場合,Javaのために

RAM32MB

以上,ROM37MB以上 が必要となる.そのためプログラムがマイコンボードに載せられなかった り,開発者が自由に使用できるメモリ領域を減らすこととなる.二つ目の理 由としては,プロセッサがサポートするプログラミング言語が限られること が挙げられる.例えば,開発対象のプロセッサのコンパイラでサポートされ ているプログラミング言語が

C/C++

のみの場合,その他のプログラミング 言語を開発に用いるのは難しい.

(17)

1

章 序論

6

ฟ඾͗/W䛂⤌㎸䜏䝋䝣䝖䜴䜵䜰㛤Ⓨ䝕䞊䝍ⓑ᭩ϮϬϭϳ䛃

1.5 組込みソフトウェア開発で用いられるプログラミング言語

1.6 リアルタイム性の必要性

組込みソフトウェア開発では,リアルタイム性も重要である.

IPA

2017

年の調査結果13) を図

1.6

に示す.この調査結果によると,

8

割以上の組込 み製品には守らなければならない時間制約が存在する.このような時間制約 は事故の発生や製品の故障を防ぐために守る必要がある.組込みソフトウェ ア開発では,リアルタイム

OS

を用いることで,このような問題に対処する ことが一般的である.

(18)

1

章 序論

7

KW

ᶵᵓ䜢ᐇ⌧䛩䜛 䝣䝺䞊䝮䝽䞊䜽

KW

䜰䝥䝸䜿䞊䝅䝵䞁

KW

䛾䝯䝋䝑䝗䝕䜱䝇䝟䝑䝏䜔䝺䜲䝲䜰䜽 䝔䜱䝧䞊䝅䝵䞁ᶵᵓ䜢ᐇ⌧䛩䜛䛯䜑䛻䠈 䝯䝰䝸ᾘ㈝㔞䜔䝥䝻䜾䝷䝮䝃䜲䝈䛜ቑຍ

KW

䛾䝯䝋䝑䝗䝕䜱䝇䝟䝑䝏䛾䛯䜑䛻䠈 䝯䝋䝑䝗࿧䜃ฟ䛧᫬䛻௓ධ䛧䠈ᐇ⾜᫬㛫䜢 ቑຍ䛥䛫䜛

1.7 COP適用によるリソース消費量の増加

1.2.2 COP 適用における問題

本項では組込みソフトウェアに

COP

適用する際に考えられる課題につい て述べる.1.2.1項では組込みソフトウェア開発における一般的な課題とし て省リソースが求められること,使用できるプログラミング言語が限られ ること,リアルタイム性が求められることを挙げた.組込みソフトウェアに

COP

を適用する場合,上記の課題において以下の問題が起こりうる.

(i) COP

機構によるメモリ消費量やプログラム実行時間の増加

(ii) COP

を利用可能なプログラミング言語が組込みシステム用プロセッ

サでサポートされていない可能性

(iii) COP

のレイヤアクティベーション時のリアルタイム性確保が困難

問題

(i)

は,COPアプリケーションには図

1.7

のように,COP言語が提 供する機能を実現するための機構が必要となり,その分だけプログラムサイ ズや実行時のメモリ消費量が増加すること,また,

COP

における振る舞い 変更は,現在のコンテキストに応じたメソッドディスパッチによって実現さ れるため,その際の

COP

機構による介入によって,プログラムの実行時間 が増加することである.

問題

(ii)

は,

1.2.1

項でも述べた通り,組込みソフトウェア開発では現在

でも

C/C++

が多く使われていることである.組込みソフトウェアでは,性

能や省メモリが重視されており,未だにこれらのプログラミング言語が主流 である.また,多くの組込みシステム用のプロセッサがサポートする言語が

(19)

1

章 序論

8

1.8 同時に複数の振る舞い変更要求が起こる場合

C

または,C++のみであることも理由として挙げられる.一方で,既存の

COP

言語は

Java

Smalltalk

など組込みソフトウェア向けでない言語を拡 張したものが中心であるため,既存の

COP

言語の多くは,組込みシステム 用プロセッサ上で動かせない場合がある.

問題

(iii)

は,組込みソフトウェアの機械制御における非正常系処理のよう

な重要な処理の切り替えを

COP

で実現する場合,事故の発生や製品の故障 を防ぐために,非正常系処理の変更要求から振る舞い実行までの応答時間が かかることである.非正常系の処理の変更に時間がかかる要因としては,図

1.8

のように同時に複数の振る舞い変更の要求が起きた時に,他の正常系の 変更が終了するのを待つ場合があることから,重要な振る舞い変更を優先し て実行する仕組みが必要である.

COP

を組込みソフトウェアに適用するためには,これらの問題を解決し なければならないが,既存の

COP

の研究では,それが十分ではない.

(20)

1

章 序論

9

1.3 研究の目的

本研究の目的は,

COP

を組込みシステムに適用可能にすることによって,

Internet of Things (IoT)

のような,近年の組込みソフトウェア開発に貢献す ることである.そのために,

1.2

節で挙げた三つの問題を以下の方法によっ て解決する.

(a)

省メモリかつ省実行時間の

COP

機構を実現

(b)

組込み向けのプログラミング言語をサポート

(c)

リアルタイム性確保に不可欠なスケジューラの提供

本研究の取り組みとして,上記の解決策を用いた以下の二つの提案を 行った.

(1) C++

をベースとしたコンテキスト指向プログラミングフレームワー

クの提案

(2)

優先度付きのコンテキスト適応を実現するレイヤスケジューリング手 法の提案

本論文では,図

1.8

に示す通り,取り組み

(1)(2)

によって

1.2

節の課題 を解決する.また,組込み

COP

のケーススタディとして複合現実

(Mixed

Reality)

環境による

IoT

教育システムを紹介する.このシステムによって,

COP

アプリケーションをいくつか開発し,

COP

フレームワークが想定通り の振る舞いをするか実験する.以降,本研究での取り組みについて述べる.

1.3.1 C++ をベースとしたコンテキスト指向プログラミング

フレームワーク

1.2.2

項で述べた通り,

(i)

組込みソフトウェアへの

COP

適用は性能面の

要求が満たせずに問題となる場合がある.また,

(ii)

既存の

COP

言語は,

Java

Smalltalk

など組込みソフトウェア向けでない言語を拡張したものが

中心である.代表的な

COP

の調査では

Salvaneschi

らの論文 8)が著名であ

(21)

1

章 序論

10

нн䛻䜘䜛

KW 㛤Ⓨ⎔ቃ䛾ᐇ⌧

нн 䛻䜘䜛

KW 㛤Ⓨ⎔ቃ䛾ᐇ⌧

⤌㎸䜏䝋䝣䝖䜴䜵䜰㛤Ⓨ

䛾䛯䜑䛾ᶵ⬟ᣑᙇ

;ϭͿнн䜢䝧䞊䝇䛸䛧䛯

䝁䞁䝔䜻䝇䝖ᣦྥ䝥䝻䜾䝷䝭䞁䜾 䝣䝺䞊䝮䝽䞊䜽䛾ᥦ᱌

;ϮͿඃඛᗘ௜䛝䛾䝁䞁䝔䜻䝇䝖㐺ᛂ

䜢ᐇ⌧䛩䜛䛯䜑䛾䝇䜿䝆䝳䞊䝷䛾 ᥦ᱌

⤌㎸䜏䝋䝣䝖䜴䜵䜰䜈䛾KW㐺⏝䛾䜿䞊䝇䝇䝍䝕䜱䛸䛧䛶䠈

」ྜ⌧ᐇ

;DŝdžĞĚZĞĂůŝƚLJͿ䝅䝇䝔䝮䜢⤂௓

KW 䜰䝥䝸䜿䞊䝅䝵䞁䛾 ᐇ㊶⎔ቃ䜢ᥦ౪

нн 䛻䜘䜛

KW㛤Ⓨ⎔ቃ䛾ᐇ⌧

⤌㎸䜏䝋䝣䝖䜴䜵䜰㛤Ⓨ

䛾䛯䜑䛾ᶵ⬟ᣑᙇ

ᐇ㦂

⤌㎸䜏䝋䝣䝖䜴䜵䜰䛻KW䜢㐺⏝ྍ⬟䛻 䛩䜛䛯䜑䛾ྲྀ䜚⤌䜏

1.9 本研究での取り組み

るが,

C/C++

を拡張した

COP

言語は紹介されていない.

上記の問題を解決するために,筆者は

C++

をベースとしたコンテキスト 指向プログラミングフレームワークを提案する.本フレームワークは,解決 策

(a)

として,提案フレームワークをアプリケーションごとに不要な機能を 外せる構成可能な仕組みとする.また,ネイティブ環境での低レベル操作に よって

COP

機構を実現する.これにより,メモリ消費量を抑え,プログラ

(22)

1

章 序論

11

ムの実行時間を削減する.さらに,解決策

(b)

として,

COP

C++

の拡張 により実現する.これにより,

C++

しかサポートしていないような組込み システム用のプロセッサ上でも

COP

アプリケーションを開発することを可 能とする.

1.3.2 優先度付きのコンテキスト適応を実現するレイヤスケ

ジューリング手法

1.2.2

項で述べた通り,

(iii)

既存の

COP

ではコンテキスト適応について のリアルタイム性が考慮されていない.例えば,組込みソフトウェアの機械 制御では,事故の発生や製品の故障を防ぐために,非正常系処理の変更要求 から振る舞い実行までの応答時間は重要である.これを

COP

で実現する場 合,コンテキスト適応のリアルタイム性を考慮する必要がある.

取り組み

(2)

では,解決策

(c)

として,優先度付きのコンテキスト適応を 実現する.本手法では,同時に複数のコンテキスト適応が必要になった際 に,前もって設定しておいた優先度が高いものから順に処理を行う.これに よって,課題

(iii)

を解決し,COPを組込みソフトウェア開発に用いやすく する.また,高優先度レイヤアクティベーション時の専用のメソッドディス パッチを備えることで,例外発生という緊急時の応答時間を削減することを 可能とする.

1.3.3 ケーススタディ:複合現実環境による IoT 教育システム

本論文では,組込みソフトウェアへの

COP

適用のケーススタディとして,

複合現実

(Mixed Reality)

環境による

IoT

教育システムを紹介する.本シス テムは,

Internet of Things (IoT)

の開発についての学習を目的としており,

プロジェクションマッピング環境によって再現した実験空間で現実のロボッ トを動作させる.このロボットのアプリケーション開発に

COP

を適用し,

本研究における

COP

が想定通りにアプリケーションが動作することを確か める.このシステムの特徴は,様々な実験環境をプロジェクションマッピン グで容易に実現できること,実際のロボットを使って実験を行うことができ

(23)

1

章 序論

12

ることである.

1.4 本論文の構成

本論文の構成は以下の通りである.第

2

章では,本研究に関連する先行研 究を紹介し,本研究との比較を行う.第

3

章では,前述した

1) C++

をベー スとしたコンテキスト指向プログラミングフレームワークを提案し,第

4

章 では,

2)

優先度付きのコンテキスト適応を実現するためのスケジューラを提 案する.第

5

章では,組込みソフトウェアへの

COP

適用のケーススタディ として,複合現実環境による

IoT

教育システムを紹介する.最後に第

6

章で まとめを述べる.

(24)

13

第 2 関連研究

本章では,関連研究の紹介を行う.2.1節では,

COP

以前の

OOP

AOP

について概説する.

2.2

節で

COP

のコンテキストアウェアシステム開発に おける立ち位置を明らかにし,以降の節で,

COP

に関する既存研究を紹介 する.

2.3

節で

COP

の概要について述べ,

2.4

節で既存の

COP

言語をいく つか紹介する.

2.5

節で

COP

の応用事例を示し,既存研究において,

COP

がどのような領域で用いられているのかを明らかにする.また,3章,4章 のための準備として,

2.6

節で

COP

の要素技術をいくつか紹介する.

2.7

節 で,COPを採用する理由を明らかにするために,COPと類似の技術である

AOP

との違いを示す.最後に,

2.8

節で本研究の

COP

における位置づけに ついて述べる.

2.1 COP 以前のプログラミング技術についての概要

本節では,本研究の準備のために,

COP

以前の

OOP

AOP

について概 説する.

2.1.1 OOP について

オブジェクト指向プログラミング(Object-Oriented Programming: OOP)

14) は,互いに関連するデータとそれらに対する操作をオブジェクトとして まとめ,それらオブジェクト同士のメッセージの通信によってプログラムを 構築するプログラミングパラダイムである.特に重要な点は,オブジェクト へのアクセスを外部公開したインターフェースからしか行えないようにカプ セル化することによって,オブジェクト内部の仕様変更による外部への影響 や外部からの干渉によるオブジェクトの状態の破壊を防ぎ,プログラムの再 利用性を向上させているところである.

(25)

2

章 関連研究

14 OOP

の機能を図

2.1

に示す.C++や

Java

といった多くの

OOP

言語で は,オブジェクトの定義のためにクラスを用いる.図中の右側のプログラム ではクラスを定義しており,関連する変数とそれらに対する操作を定義した メソッドのグループ化を行っている.このクラスを図中の左側のプログラム のようにインスタンス化することで,クラス内の変数群が実際のメモリ中に 配置される.オブジェクト同士のメッセージ通信は,相手側のインスタンス のメソッドを実行することで行う.メソッドはクラス内で定義される関数と して実現されており,この関数をプログラム中で呼び出すことによってメ ソッドを実行する.

上記の他に,OOP言語の機能として,継承やメソッドディスパッチ,ポ リモーフィズムがある.継承は継承元のクラスの変数やメソッドを継承先の クラスに受け継ぐ機能であり,ソースコードの再利用を促進させる.図の例 では

CleanerRobot

クラスが

Robot

クラスを継承し,その変数とメソッドを 受け継いでいる.メソッドディスパッチは,メソッド呼び出し時の状況に応 じて実行するメソッドを切り替える機能である.ポリモーフィズムは同名 のメソッドを複数定義し,引数の数や型,インスタンスの型などに応じてメ ソッドディスパッチを行う機能である.OOPのポリモーフィズムは継承と 関係が深く,継承元クラスのメソッドを継承先のメソッドの定義で上書きす ることで,クラスのインスタンスによって振る舞いを変更することが可能で ある.

2.1.2 AOP について

アスペクト指向プログラミング(

Aspect-Oriented Programming: AOP

5)は,横断的関心事を扱うためのプログラミングパラダイムである.横断的 関心事とは,OOPのオブジェクトにまとめられずに複数のオブジェクトに 散在してしまう共通性を持った処理である.有名な例として,ログの書き込 みが挙げられる.ログの書き込みは色々なクラスから実行されるため,それ ぞれのクラスに散在しがちである.

AOP

では図

2.2

のように,アスペクト というモジュールを用意し,そこに各クラスに散在する処理とその処理の差 し込み先の指定を記述することで,横断的関心事を一つのモジュールとして

(26)

2

章 関連研究

15

ͬͬη䝥䝻䜾䝷䝮 ĐůĂƐƐƉƉ΂

ƉƵďůŝĐ ƐƚĂƚŝĐ ǀŽŝĚDĂŝŶ;ƐƚƌŝŶŐ΀΁ĂƌŐƐͿ΂

ͬͬ䜲䞁䝇䝍䞁䝇໬

ZŽďŽƚƌŽďŽƚ сŶĞǁůĞĂŶĞƌZŽďŽƚ;Ϳ͖

ͬͬ䝯䝋䝑䝗ᐇ⾜

ƌŽďŽƚ͘'Ž&ŽƌǁĂƌĚ;Ϳ͖

ͬͬůĞĂŶĞƌZŽďŽƚ䜽䝷䝇䛾䝯䝋䝑䝗䛜ᐇ⾜䛥䜜䜛

΃

΃

ͬͬ⥅ᢎඖ䜽䝷䝇䛾ᐃ⩏

ĐůĂƐƐZŽďŽƚ΂

ƉƌŝǀĂƚĞŝŶƚƐƉĞĞĚ͖

ƉƵďůŝĐǀŽŝĚ'Ž&ŽǁĂƌĚ;Ϳ΂

͙

΃

͙

΃

ͬͬ⥅ᢎඛ䜽䝷䝇䛾ᐃ⩏

ĐůĂƐƐůĞĂŶĞƌZŽďŽƚ ͗ZŽďŽƚ΂

ƉƵďůŝĐ ǀŽŝĚ 'Ž&ŽǁĂƌĚ;Ϳ ΂

ͬͬ᪂䛧䛔ฎ⌮䛷ୖ᭩䛝

΃

͙

΃

2.1 OOPの言語機能

Ͳ ͙

нDϭ;Ϳ͗ǀŽŝĚ нDϮ;Ϳ͗ǀŽŝĚ

Ͳ ͙

нDϭ;Ϳ͗ǀŽŝĚ нDϮ;Ϳ͗ǀŽŝĚ

Ͳ ͙

нDϭ;Ϳ͗ǀŽŝĚ нDϮ;Ϳ͗ǀŽŝĚ

Ͳ ͙

нDϭ;Ϳ͗ǀŽŝĚ нDϮ;Ϳ͗ǀŽŝĚ

㻨㻨㻭㼟㼜㼑㼏㼠㻪㻪 㻸㼛㼓㻭㼟㼜㼑㼏㼠

Ͳ ͙

н>ŽŐŐŝŶŐ;Ϳ͗ǀŽŝĚ

㻸㼛㼓㼓㼑㼞

Ͳ ͙

нtƌŝƚĞ;ƐƚƌŝŶŐͿ͗ǀŽŝĚ

䜴䜱䞊䝤

2.2 AOPによる横断的関心事のモジュール化

まとめる.アスペクトによって各メソッドに処理を差し込む箇所のことを ジョインポイント,差し込む箇所の指定をポイントカットと呼ぶ.また,差 し込む工程のことをウィーブと呼ぶ.5)

AOP

COP

と横断的関心事を扱う という点で関連する技術なので,2.7節で

COP

と比較を行う.

(27)

2

章 関連研究

16

ศᯒ 䝺䜲䝲

ษ䜚᭰䛘

୍⯡ⓗ䛺 䝁䞁䝔䜻䝇䝖

ᮏ◊✲䛾䝁䞁䝔䜻䝇䝖

⎔ቃ䜢⾲䛩䝕䞊䝍

ᮏ◊✲䛾ᑐ㇟

2.3 本研究におけるコンテキスト

2.2 COP のコンテキストアウェアシステム開発にお ける立ち位置

本節では,コンテキストアウェアシステム開発における

COP

の立ち位置 を明らかにするために,コンテキストアウェアシステムの既存研究で用いら れているコンテキストの定義やコンテキストアウェアシステムのアーキテク チャについて紹介し,

COP

や本研究との違いを明らかにする.

2.2.1 コンテキストの定義

コンテキストの定義は,研究者によって異なる.コンテキストアウェアシ ステム研究のいくつかの定義を紹介する.

Schilit

らは,コンテキストを「場 所,近くの人のアイデンティティ,オブジェクト,およびそれらのオブジェ クトへの変更」としている.15) ここで,コンテキストアウェアという用語 が初めて登場した.Ryanらは,「ユーザの場所,環境,アイデンティティ,

時間」をコンテキストとし16)

Dey

は「ユーザの感情状態,注意の焦点,場 所と方向,日付と時刻,およびユーザーの環境内のオブジェクトと人物」を コンテキストとした17)

コンテキストの定義の中で有力なものとしては,

2000

年頃の

Dey

らの以 下の定義がある.「ユーザとアプリケーション自体を含む,ユーザとアプリ ケーションの間の相互作用に関連すると考えられるエンティティの状況(つ まり,人物,場所,またはオブジェクト)の特性評価に使用できる情報」4)

(28)

2

章 関連研究

17

䝁䞁䝔䜻䝇䝖䜰䜴䜵䜰䝅䝇䝔䝮

㛤Ⓨ䛻㛵䛩䜛ᢏ⾡

͙

䜰䞊䜻䝔䜽䝏䝱

䝁䞁䝔䜻䝇䝖ㄆ㆑

䝉䞁䝅䞁䜾 䝁䞁䝔䜻䝇䝖ᣦྥ

䝥䝻䜾䝷䝭䞁䜾

͙

͙

͙

ŽŶƚĞdžƚ dŽŽůŬŝƚ

䝁䞁䝔䜻䝇䝖䜰䜴䜵䜰 䝅䝇䝔䝮䜢䛹䛖స䜛 䜉䛝䛛

2.4 COPの立ち位置

この定義は,コンテキストアウェアシステムに関するサーベイ論文18)19) で も重視されている.

本研究におけるコンテキストの関係を図

2.3

に示す.本研究では,分析さ れたデータから実行時に振る舞いを変更することに重点を置いており,デー タの分析自体は本研究の対象ではない.そのため,上記の定義では不適当で あるため,別の定義を用いる.本研究におけるコンテキストは,「

COP

のレ イヤを活性化・不活性化させる環境を表すデータ」とし,一般的にコンテキ ストと呼ばれている分析対象となる情報のことを「環境を表すデータ」と する.

2.2.2 コンテキストアウェアシステムのアーキテクチャ

コンテキストアウェアシステム開発における

COP

の立ち位置を図

2.4

に 示す.

COP

はプログラミング言語機構として,コンテキストに依存する振 る舞いをモジュール化するための機能を持っているため,ここではアーキテ クチャに関する技術として分類している.ここでは,同じくアーキテクチャ に分類した

Context Toolkit

4)3) との違いについて述べる.

Context Toolkit

は,センシング情報からコンテキストを判定し,それを

サービスに反映させるためのフレームワークである4)3)

Context Toolkit

(29)

2

章 関連研究

18

䝁䞁䝔䜻䝇䝖ุᐃ䛜 㔜ど䛥䜜䛶䛝䛯 䜰䝥䝸䜿䞊䝅䝵䞁ഃ䛻 䛹䛖཯ᫎ䛥䛫䜛䛾䛛䠛

2.5 Context Toolkitの構造(Deyらの論文3)より)

の構造を図

2.5

に示す.図の下の部分がコンテキストを判断するための構造 であり,この部分をどのように実現するのかが重視されていることが図から も読み取れる.コンテキストによる振る舞いの違いをどのように実現するか については明示されていない.一方,

COP

はコンテキストによって振る舞 いを変化させることを重視しており,そこが

Context Toolkit

と異なるとこ ろである.

2.3 COP の概要

COP

は実行時のコンテキストに応じて振る舞いを変化させることを可能 とするプログラミング技術である.Robert Hirschfeld らは,COPが対応す べき要素として,コンテキスト,振る舞いの変種,レイヤ,アクティベー ション,スコーピングを挙げている7)

コンテキストという言葉は,

2.2

節で紹介したコンテキストアウェアネス に関する研究で使われてきており,いくつかの定義が存在する.

COP

では,

言語仕様として,計算上アクセス可能な情報はコンテキストとみなすことが できるとしている7).コンテキストとして挙げられるものとしては,システ ムを取り巻く外部環境だけでなく,システム内部で発生する情報も含まれ る.また,それらの変化の順序もコンテキストとみなすことができる.

(30)

2

章 関連研究

19

ͬͬŽŶƚĞdžƚ:

䛻䛚䛡䜛౛

,ĞůůŽŚĞůůŽ сŶĞǁ,ĞůůŽ;Ϳ͖

ŚĞůůŽ͘WƌŝŶƚ;Ϳ͖

ͬͬ

䝺䜲䝲ɲɴ䛾䜲䞁䝇䝍䞁䝇໬

ůĂLJĞƌɲсŶĞǁ>ĂLJĞƌɲ;Ϳ͖

ůĂLJĞƌɴсŶĞǁ>ĂLJĞƌɴ;Ϳ͖

ͬͬ

䝺䜲䝲

ɲ

䜢䜰䜽䝔䜱䝧䞊䝖

ǁŝƚŚ;ɲͿ΂

ŚĞůůŽ͘WƌŝŶƚ;Ϳ͖

΃

ͬͬ

䝺䜲䝲

ɴ

䜢䜰䜽䝔䜱䝧䞊䝖

ǁŝƚŚ;ɴͿ΂

ŚĞůůŽ͘WƌŝŶƚ;Ϳ͖

΃

ƉƵďůŝĐůĂLJĞƌɲ΂

ƉƵďůŝĐǀŽŝĚ,ĞůůŽ͘WƌŝŶƚ;Ϳ΂

ƐLJƐƚĞŵ͘ŽƵƚ͘ƉƌŝŶƚůŶ;͞ɲ͟Ϳ͖

΃

΃

ƉƵďůŝĐůĂLJĞƌɴ΂

ƉƵďůŝĐǀŽŝĚ,ĞůůŽ͘WƌŝŶƚ;Ϳ΂

ƐLJƐƚĞŵ͘ŽƵƚ͘ƉƌŝŶƚůŶ;͞ɴ͟Ϳ͖

΃

΃

ƉƵďůŝĐĐůĂƐƐ,ĞůůŽ΂

ƉƵďůŝĐǀŽŝĚWƌŝŶƚ;Ϳ΂͙΃

΃

2.6 COPのサンプルプログラム

振る舞いの変種は,ベースとなるクラスやメソッドの部分定義であり,レ イヤは,これら振る舞いの変種をグループ化したモジュールである.既存の

COP

言語では,レイヤ上で部分定義されるクラスやメソッドのことをそれ ぞれパーシャルクラス,パーシャルメソッドと呼んでいる.COPはレイヤ を実行時のコンテキストに応じて動的にアクティベーションするフレーム ワークを持ち,これによって,プログラム中のクラス・メソッドを一度に変 更する.

Robert Hirschfeld

らは,上記の論文において,レイヤアクティベーション のスコープを明示的に記述することの必要性を述べているが,COP言語に よっては必ずしもこれが満たされているとは限らない.レイヤアクティベー ションの方法の違いについては

2.5

節で述べる.

COP

のサンプルプログラムを図

2.6

に示す.ここで使っているサンプル プログラムは,

Java

COP

拡張である

ContextJ

10)のものである.このプ ログラムでは,上記の

COP

の要素を用いてプログラムを実行中に振る舞い

(31)

2

章 関連研究

20

変更する方法について示している.レイヤαとβを定義し,その中で

Hello

クラスの

Print

メソッドのパーシャルメソッドを定義している.レイヤア

クティベーションは

with

ブロック内のスコープ範囲で行われ,この時にメ ソッド呼び出しを行うと,メソッドのディスパッチ先が変化する.

2.4 COP 言語

COP

の研究によって,これまでに様々な

COP

言語が提案された.表

2.1

にこれまでに提案された主な

COP

言語をまとめる.これらの言語は,ベー スとなるプログラミング言語を拡張することで実現されている20)

ContextL

11) は,最初に

COP

の拡張を行った言語である.

ContextL

Lisp

がベースであり,Common Lisp のオブジェクトシステムを拡張し ている.それに続き,動的プログラミング言語で

COP

ライブラリが開 発 さ れ た .こ れ ら の ラ イ ブ ラ リ は ,ベ ー ス と す る 言 語 で 提 供 さ れ る メ タレベルの機能を用いて実現されている.例として,

Smalltalk

をベー スとする

ContextS

21)

Ruby

をベースとする

ContextR

22)

JavaScript

を ベースとする

ContextJS

23)

Lua

をベースとする

ContextLua

24)

Python

をベースとする

ContextPy

25)

PyContext

26)

Erlang

をベースとする

ContextErlang

27) な ど が あ る .こ れ ら 動 的 プ ロ グ ラ ミ ン グ 言 語 以 外 に ,

Java

を拡張したものとして

ContextJ

10)

ContextJ*

7)

ContextLogicAJ

28)

JCop

9),EventCJ29)30) などがある.また,C#のアスペクト指向プログラ ミング言語として

LOOM.NET

31) があり,このサンプルプログラムとし

て,

LOOM.NET

を用い

COP

を実現したものがある.ネイティブ環境で

動作させることが可能な

COP

言語としては,

Objective-C

をベースとし た

Subjective-C

32)が挙げられる.この言語は

macOS

iOS

を対象として いる.

(32)

2

章 関連研究

21

2.1 既存COP言語の一覧

!"#$%&'("

)

*+,-%* &%/&0123

456789:;#$%&< 12;(

=> ? @A BCD,*+,-%*

E

FGHI;J%KBDLMNO

#PQR8S?TL,U#,VWX!

Y

%#,H1J%K Z[\]'(38J%KB

DLMNO#HIP^_`a"

= bb= ?cE dJ%K

e ebf f fg eh i gjk` lm"

n niop

BDLM/;J%Kqr!"0sJDNO#Ut

uvw45

e e@x?E

y*# ;45` zR8*+{&|}~J%

KBDLMNO# €_‚`a"

=i =i #ƒ„-…w †‡123("

Yxf> Yxf >

ˆ‰Š#,‹1PŒ"(ŽBDLM/

!"

p pT pT'

p pT

#L‘,Ž’PQ"#L‘,“”9_

•–,!"

=— ˜™Yš ›

›'BCD,^œ*+{&#{ž7

'(3 4Ÿ!"•#* *+{&w }z"

eio¡@? ¢ o¡@? ¢

b@e1 ?e£%LM/jk`¤¥6¦"ž1}

§¨;

  

(33)

2

章 関連研究

22

2.5 COP の応用事例

これまで研究において,

COP

はスマートフォンアプリケーション29)33)34) やデスクトップアプリケーション35)36),サーバサイドソフトウェア37) 等 の開発で用いられてきた.スマートフォンアプリケーションでは,スマート フォンの

GPS

や各種センサの値に応じてアプリケーションの振る舞いを変 更する.例えば,

Malte Appeltauer

らは,

GPS

情報の有無やスマホのバッ テリ残量によって,図

2.7

のように地図表示の方法を変更するアプリケー ションを開発した33).このアプリケーションは待ち合わせをした友達と互 いに自分の位置を伝え合うアプリケーションで,相手のスマートフォンに

GPS

情報がある場合は,それによって得られる位置情報が相手から通知さ れ,

GPS

情報が無い場合は,事前に登録された予定や当日の交通情報から 予想される現在地を表示する.また,スマートフォンのバッテリの残量が少 なくなると,省電力のために文字だけの表示に切り替える.

COP

では,こ のような変更を行う際に,図

2.8

にようにアクティブなレイヤを切り替える ことで振る舞い変更を行う.

デスクトップアプリケーションの応用事例としては,テキストエディタ の

CJEdit

35)や,グラフィカルエディタの

Geuze

36)等がある.CJEditはド キュメントとコードを一緒に扱えるテキストエディタで,コンパイル単位内 のコメントにリッチテキストの書式設定を行うことができる.このテキスト エディタは,ユーザの現在の作業がプログラミングかコメント記述かによっ て,ユーザインタフェースやキーダウン等のアクションへのイベント処理 を変更する.

Geuze

はグラフィカルエディタであり,画像描画中や画像移動 中といった,現在のソフトウェアの動作をコンテキストとして扱い,マウス クリックやマウス移動といったアクションへのイベント処理の内容を変更 する.

サーバサイドソフトウェアの応用事例としては,ContextChat37) などが ある.これは,

ContextErlang

27)で書かれたインスタントメッセージサーバ で,ユーザは

ContextErlang

におけるコンテキストアウェアエージェントと して実装されている.これによって,ユーザがオフラインになると受信した

(34)

2

章 関連研究

23

཭㐩䛾䝇䝬䞊䝖䝣䜷䞁䛛䜙

఩⨨ሗ࿌䛜᭷䜛ሙྜ

཭㐩䛾䝇䝬䞊䝖䝣䜷䞁䛛䜙

఩⨨ሗ࿌䛜↓䛔ሙྜ

ሙᡤ䠖 䞉༤ከ㥐 ᆅୗ

άື䠖

䞉㟁㌴䜢᥈䛧䛶䛔䜛

⮬ศ䛾䝇䝬䞊䝖䝣䜷䞁䛾 䝞䝑䝔䝸ṧ㔞䛜ᑡ䛺䛔ሙྜ

䝇䜿䝆䝳䞊䝹䛸஺㏻᝟ሗ䛛䜙 䛹䛾䛒䛯䜚䛻䛔䜛䛛䜢᥎  'W^䛾

఩⨨᝟ሗ

2.7 COPのスマートフォンアプリケーションでの使用例

2.8 スマートフォンアプリケーションのCOPでの実現例

メッセージがサーバに保存され,オンラインになると配信されるような仕組 みを実現している.また,オプションのバックアップ有効化によってリモー トサーバにメッセージを保存したり,メッセージに対する色の変更や絵文字 の追加などのカスタムフィルタを提供する.

(35)

2

章 関連研究

24

2.6 COP の要素技術

2.4

節で紹介した

COP

言語は各々実装方法が異なるが,その核となる要 素技術として以下のものが挙げられる20)38)

メソッドディスパッチ

レイヤアクティベーション

COP

のメソッドディスパッチでは,現在のアクティブなレイヤによって実 行するメソッドを切り替える.レイヤアクティベーションは前者のメソッド ディスパッチのために,レイヤのアクティブ状態を変更することである.

以降,研究課題を達成する上で重要な上記の要素について,既存の

COP

言語で採用されている方法を紹介し,それぞれの利点・欠点について記す.

さらに,提案フレームワークでどの方法を採用したかについて述べる.

Malte Appeltauer

らは

COP

のためのメソッドディスパッチの実現手段を 二つの方法に分類している20).それぞれの方法について,図

2.9

,図

2.10

に 示す.一つはメソッドディスパッチのたびにプロキシオブジェクトを介する

Ă сŶĞǁ;Ϳ͖

Ă͘Dϭ;Ϳ͖

Ă͘DϮ;Ϳ͖

䜸䝤䝆䜵䜽䝖䝥䝻䜻䝅

䜰䜽䝔䜱䝤䛺 䝺䜲䝲䛾䝸䝇䝖

>ĂLJĞƌɲ

>ĂLJĞƌɴ

;ϭͿ䝯䝑䝉䞊䝆㏦ಙ

ůĂLJĞƌ>ĂLJĞƌɲ΂

ĐůĂƐƐ΂

Dϭ;Ϳ΂͙΃

΃

΃

ůĂLJĞƌ>ĂLJĞƌɴ΂

ĐůĂƐƐ΂

DϮ;Ϳ΂͙΃

΃

΃

;ϯͿ䝯䝋䝑䝗ᐇ⾜

;ϮͿ䜰䜽䝔䜱䝤䛺䝺䜲䝲䛾☜ㄆ

ͬͬ䜰䜽䝔䜱䝧䞊䝖ᐇ⾜

ĐƚŝǀĂƚĞ;>ĂLJĞƌɲͿ͖

;ĂͿ᭦᪂

2.9 メソッドディスパッチ: プロキシオブジェクト

(36)

2

章 関連研究

25

Ă сŶĞǁ;Ϳ͖

Ă͘Dϭ;Ϳ͖

Ă͘DϮ;Ϳ͖

;ϭͿ䝯䝑䝉䞊䝆㏦ಙ

Dϭ;Ϳ͗>ĂLJĞƌɲ䛾䜰䝗䝺䝇 DϮ;Ϳ͗>ĂLJĞƌɴ䛾䜰䝗䝺䝇 䜽䝷䝇䛾௬᝿㛵ᩘ䝔䞊䝤䝹

ůĂLJĞƌ>ĂLJĞƌɲ΂

ĐůĂƐƐ΂

Dϭ;Ϳ΂͙΃

΃

΃

ůĂLJĞƌ>ĂLJĞƌɴ΂

ĐůĂƐƐ΂

DϮ;Ϳ΂͙΃

΃

΃

;ϮͿ䝯䝋䝑䝗ᐇ⾜

ͬͬ䜰䜽䝔䜱䝧䞊䝖ᐇ⾜

ĐƚŝǀĂƚĞ;>ĂLJĞƌɲͿ͖

;ĂͿ᭦᪂

2.10 メソッドディスパッチ: 仮想関数テーブルを書き換え

方法である.プロキシオブジェクトは,メッセージ受信後にアクティブなレ イヤを調べ,実行するメソッドをディスパッチする.もう一つはアクティブ なレイヤが変更されるたびに,仮想関数テーブルを書き換える方法である.

前者はメソッドディスパッチのたびにアクティブなレイヤを調べるための オーバヘッドがかかる.後者はレイヤアクティベーションのたびに仮想関数 テーブルを変更するためのオーバヘッドがかかる.

紙名はレイヤアクティベーションの方法と影響範囲によって

COP

言語の 分類を行っている38).レイヤアクティベーションの方法は以下のものがあ る.それぞれのサンプルプログラムを図

2.11

,図

2.12

,図

2.13

に示す.

with

ブロック

:

アクティベーション範囲をブロックで囲む方法である.こ の方法はレイヤがアクティブである範囲を明示的に表せるが,制御フ ローをまたがるアクティベーションを表現するのが難しい.また,ブ ロックがプログラム中に散在する問題がある9)

決定的なアクティベーション: アクティベーションの命令が用意されてお り,その命令を実行するとレイヤが永遠にアクティブとなる方法であ る.制御フローをまたがるアクティベーションは容易だが,意図しな いレイヤアクティベーションの衝突が起こる恐れがある38)

(37)

2

章 関連研究

26

ͬͬŽŶƚĞdžƚ:䛻䛚䛡䜛౛

,ĞůůŽŚĞůůŽ сŶĞǁ,ĞůůŽ;Ϳ͖

ͬͬ᪥ᮏㄒ䝰䞊䝗䛸ⱥㄒ䝰䞊䝗䛷䝺䜲䝲䜢ኚ᭦

DŽĚĞŵŽĚĞ с:ĂƉĂŶĞƐĞ͖

>ĂLJĞƌũĂƉĂŶĞƐĞ>ĂLJĞƌ ĂŶĚĞŶŐůŝƐŚ>ĂLJĞƌ ͙

ͬͬ:ĂƉĂŶĞƐĞ>ĂLJĞƌ䜢䜰䜽䝔䜱䝧䞊䝖 ŝĨ;ŵŽĚĞсс:ĂƉĂŶĞƐĞͿ΂

ǁŝƚŚ;ũĂƉĂŶĞƐĞ>ĂLJĞƌͿ΂

ͬͬ͞䛣䜣䛻䛱䛿͟䛸⾲♧

ŚĞůůŽ͘WƌŝŶƚ;Ϳ͖

΃

΃

ͬͬŶŐůŝƐŚ>ĂLJĞƌ䜢䜰䜽䝔䜱䝧䞊䝖 ĞůƐĞŝĨ;ŵŽĚĞссŶŐůŝƐŚͿ΂

ǁŝƚŚ;ĞŶŐůŝƐŚ>ĂLJĞƌͿ΂

ͬͬ͞,ĞůůŽ͟䛸⾲♧

ŚĞůůŽ͘WƌŝŶƚ;Ϳ͖

΃

΃

2.11 レイヤアクティベーション: withブロック

ŝĨ;ŵŽĚĞсс:ĂƉĂŶĞƐĞͿ΂

ͬͬ:ĂƉĂŶĞƐĞ>ĂLJĞƌ䜢䜰䜽䝔䜱䝧䞊䝖 ĂĐƚŝǀĂƚĞ;ũĂƉĂŶĞƐĞ>ĂLJĞƌͿ͖

΃ĞůƐĞŝĨ;ŵŽĚĞссŶŐůŝƐŚͿ΂

ͬͬŶŐůŝƐŚ>ĂLJĞƌ䜢䜰䜽䝔䜱䝧䞊䝖 ĂĐƚŝǀĂƚĞ;ĞŶŐůŝƐŚ>ĂLJĞƌͿ͖

΃

͙

ͬͬ䜰䜽䝔䜱䝤䛺䝺䜲䝲䛻䜘䛳䛶⾲♧䛜ኚ䜟䜛 ŚĞůůŽ͘WƌŝŶƚ;Ϳ͖

2.12 レイヤアクティベーション: 決定的なアクティベーション

イベント駆動

:

青谷らが提案した

EventCJ

30)で行っている方法である.こ の方法ではイベント宣言とレイヤ遷移規則を用いてレイヤアクティ ベーションを宣言的に指定する,イベント宣言で宣言したイベントが 発生した際に,レイヤ遷移規則に応じてレイヤやコンテキストを切り

(38)

2

章 関連研究

27

替える.この方法の特徴としては,レイヤアクティベーションの指定 が宣言的に行われることでアクティベーションのためのコードが散在 しないことや,レイヤ遷移規則を用いることでモデル検査を行いやす く,仕様との一致を検査できることが挙げられる.

また,レイヤアクティベーションの影響範囲としては,スレッドごと,ある いはインスタンスごとのアクティベーションやアプリケーション全体の振る 舞いが変更される大域的なアクティベーションがある.

ͬͬ

᪥ᮏㄒ䝰䞊䝗䛻ኚ᭦䛥䜜䜛᫬䛻㉳䛣䜛䜲䝧䞁䝖

ĚĞĐůĂƌĞĞǀĞŶƚ:ĂƉĂŶĞƐĞDŽĚĞ;,ĞůůŽŚĞůůŽ͕DŽĚĞŵŽĚĞͿ ďĞĨŽƌĞĞdžĞĐƵƚŝŽŶ;ǀŽŝĚŚĂŶŐĞDŽĚĞ;DŽĚĞŵŽĚĞͿͿ

ΘΘĂƌŐƐ;ŵŽĚĞͿΘΘƚĂƌŐĞƚ;ŚĞůůŽͿ ΘΘŝĨ;ŵŽĚĞсс:ĂƉĂŶĞƐĞͿ

͗ƐĞŶĚdŽ;ŚĞůůŽͿ͖

ͬͬ

᪥ᮏㄒ䝰䞊䝗䜲䝧䞁䝖᫬䛾䝺䜲䝲㑄⛣

ƚƌĂŶƐŝƚŝŽŶ:ĂƉĂŶĞƐĞDŽĚĞ͗

ŶŐůŝƐŚ>ĂLJĞƌ ͍ŶŐůŝƐŚ>ĂLJĞƌ Ͳх:ĂƉĂŶĞƐĞ>ĂLJĞƌ

͍ͮͲх:ĂƉĂŶĞƐĞ>ĂLJĞƌ͖

ͬͬ

ⱥㄒ䝰䞊䝗䛻ኚ᭦䛥䜜䜛᫬䛻㉳䛣䜛䜲䝧䞁䝖

ĚĞĐůĂƌĞĞǀĞŶƚŶŐůŝƐŚDŽĚĞ;,ĞůůŽŚĞůůŽ͕DŽĚĞŵŽĚĞͿ ďĞĨŽƌĞĞdžĞĐƵƚŝŽŶ;ǀŽŝĚŚĂŶŐĞDŽĚĞ;DŽĚĞŵŽĚĞͿͿ

ΘΘĂƌŐƐ;ŵŽĚĞͿΘΘƚĂƌŐĞƚ;ŚĞůůŽͿ ΘΘŝĨ;ŵŽĚĞссŶŐůŝƐŚͿ

͗ƐĞŶĚdŽ;ŚĞůůŽͿ͖

ͬͬ

ⱥㄒ䝰䞊䝗䜲䝧䞁䝖᫬䛾䝺䜲䝲㑄⛣

ƚƌĂŶƐŝƚŝŽŶŶŐůŝƐŚDŽĚĞ͗

:ĂƉĂŶĞƐĞ>ĂLJĞƌ ͍:ĂƉĂŶĞƐĞ>ĂLJĞƌ ͲхŶŐůŝƐŚ>ĂLJĞƌ

͍ͮͲхŶŐůŝƐŚ>ĂLJĞƌ͖

ͬͬ

ୖ䛷ᐃ⩏䛧䛯䜲䝧䞁䝖䜢Ⓨ⏕䛥䛫䠈䝺䜲䝲䜢ኚ᭦䛩䜛

ŚĞůůŽ͘ŚĂŶŐĞDŽĚĞ;:ĂƉĂŶĞƐĞŽƌŶŐůŝƐŚͿ

ͬͬ

䜰䜽䝔䜱䝤䛺䝺䜲䝲䛻䜘䛳䛶⾲♧䛜ኚ䜟䜛

ŚĞůůŽ͘WƌŝŶƚ;Ϳ͖

2.13 レイヤアクティベーション: イベント駆動

(39)

2

章 関連研究

28

2.7 COP と AOP の違い

本節では,コンテキスト指向プログラミング(

COP

)と類似の技術である アスペクト指向プログラミング(AOP)5)と比較し,その違いを示す.

AOP

はオブジェクトに分割が難しい横断的関心事を扱うプログラミング 言語であり,ポイントカットと呼ぶ箇所に横断的関心事のモジュールを差し 込むことで関心事の分離を可能にしている5)

COP

AOP

は横断的関心 事をモジュール化するための特別な言語サポートがあるところが類似して いる.

Salvaneschi

らは,

AOP

COP

の焦点の違いとして,

AOP

の焦点はモ ジュール化にあり,COPの焦点は実行時の振る舞い変更にあるとしている

8).また,その根拠として,

COP

の研究が主にアクティベーションメカニズ ムに集中していることを挙げている.

ダイナミックアスペクト指向プログラミング(

Dynamic Aspect Oriented

Programming :DAOP

)は,実行時にアスペクトをアクティブ化すること

が可能な

AOP

である.これにより,実行中にソフトウェアの動作を変更 することができる.

DAOP

フレームワークとして,

CaesarJ

39)

Prose

40)

JAC

41),AspectWerkz42)などが存在する.これらのアプローチはコンテキ スト適応をサポートするために活用できる.

COP

DAOP

の違いとして,

DAOP

はコンテキスト適応にも扱える一般的な機構であるのに対し,COP はコンテキストを扱うための機能を直接提供するところが異なる.

図 1.1 IoT は 2008 年から 2009 年に生まれた( CISCO White Paper 2) より)
図 1.8 同時に複数の振る舞い変更要求が起こる場合
図 2.5 Context Toolkit の構造( Dey らの論文 3) より)
図 3.4 の (b) において,SubHello の LayerdObject から BaseHello の Lay-

参照

関連したドキュメント

る、関与していることに伴う、または関与することとなる重大なリスクがある、と合理的に 判断される者を特定したリストを指します 51 。Entity

  BCI は脳から得られる情報を利用して,思考によりコ

学生部と保健管理センターは,1月13日に,医療技術短 期大学部 (鶴間) で本年も,エイズとその感染予防に関す

2021] .さらに対応するプログラミング言語も作

Results indicated three key findings: seventy percent of university students who had an Instagram account were using the account during the study; the level of life satisfaction

生活のしづらさを抱えている方に対し、 それ らを解決するために活用する各種の 制度・施 設・機関・設備・資金・物質・

Google マップ上で誰もがその情報を閲覧することが可能となる。Google マイマップは、Google マップの情報を基に作成されるため、Google

検討対象は、 RCCV とする。比較する応答結果については、応力に与える影響を概略的 に評価するために適していると考えられる変位とする。