統合開発環境によって表現された 言語機構によるコードのモジュール化

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 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Javaのための暗黙的に型定義される構造体
情報伝播によるオブジェクト指向プログラム理解支援の提案
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
AspectScope によるアスペクトとクラスのつながりの視覚化
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
C#とC++とオブジェクト指向 上甲 健史.
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
アスペクト指向プログラミングと Dependency Injection の融合
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
ソフトウェア工学 知能情報学部 新田直也.
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
AspectScope による アスペクト指向プログラ ミングの支援
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アスペクト指向言語のための 独立性の高いパッケージシステム
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
第5回 プログラミングⅡ 第5回
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

統合開発環境によって表現された 言語機構によるコードのモジュール化 数理・計算科学専攻 10M37143 寺本 裕基 指導教員:千葉 滋 教授

コピー&ペースト開発 同じようなコードを記述するとき使用 手軽で使いやすい 保守性の問題 悪い再利用例 同じようなコードを記述するとき使用 手軽で使いやすい 保守性の問題 一箇所変更すると他のモジュールも変更しなければならない class Rectangle extends Shape { int width, height; void setWidth(int w) { width = w; this.display.update(this); } void setHeight(int h) { height = h; class Circle extends Shape { int radius; void setRadius(int r) { radius = r; display.update(this); }}

関数抽象を用いたモジュール化 メソッドの利用 update処理を一つにまとめること で、保守性を上げる 変更は一箇所で済む 良い再利用例  で、保守性を上げる 変更は一箇所で済む class DisplayUpdate { static void update(Shape s) { s.display.update(s); } class Rectangle extends Shape { int width, height; void setWidth(int w) { width = w; DisplayUpdate.update(this); } void setHeight(int h) { height = h; class Circle extends Shape { int radius; void setRadius(int r) { radius = r; DisplayUpdate.update(this); }}

言語を用いたモジュール化の限界 複雑な言語を導入すれば強力なモジュール化が可能 隠れたコスト パラメータ(関数引数) クラス アスペクト ・・・ 隠れたコスト 新しい言語を導入しなければならない 言語が次第に複雑になる 複雑なので言語を理解するのが難しい 開発環境、ライブラリ、フレームワークなども用意しなければ ならない

アスペクト抽象 あちこちで同じコードが実行されるとき、どこで実行さ れるかを抽象化(一箇所にまとめる) あちこちで個別にメソッド呼び出ししない 複雑 aspect Update { pointcut change(Shape s): execution(void Shape+.set*(..)) && this(s); after(Shape s) : change(s) { s.display.update(s); }} class Rectangle extends Shape { int xpos, ypos; int width, height; void setX(int x) { xpos = x; }}

提案:同期機能付きコピー&ペースト 強化した単一機能でモジュール化 一つの機能を学習すればよい 同期により保守性の問題を解決 統合開発環境 Eclipse がコピー元の変更をペースト先 の領域に自動的に反映 Concerns view 従来:  多数の機能を言語に導入して解決 言語の学習が困難

コード領域の同期

コード領域の同期 コピー&ペースト

コード領域の同期 updateをredrawに変更

コード領域の同期 updateをredrawに変更 変更が自動で伝わる

Concerns ビュー 同期領域への名前付け Concerns ビューからコピー が可能 コードに名前をつけられる モジュールの再利用が容易

パラメータ化 同期領域のうち部分的に同期しないことも可能 引数を使用場所によって別のものにできる

パラメータの同期 パラメータの同期も可能 同期領域内で同じパラメータを複数回使用できる

デモ1

どのようなパラメータで使用されているか一目でわかる アスペクト抽象 あちこちで同じコードが実行されるとき、どこで実行さ れるかを抽象化(一箇所にまとめる) あちこちで個別にメソッド呼び出ししない aspect Update { pointcut change(Shape s): execution(void Shape+.set*(..)) && this(s); after(Shape s) : change(s) { s.display.update(s); }} コードが実行される場所が一目でわかる class Rectangle extends Shape { int xpos, ypos; int width, height; void setX(int x) { xpos = x; }} どのようなパラメータで使用されているか一目でわかる

Concerns ビューによるアスペクト抽象 コード使用場所の一覧表示 同期の問題点を解消 どこが同期されているのかわかりにくい 意図せず別のコードが書き変わってしまう可能性 パラメータの表示 どのようなパラメータで使用されているのか把握できる

AspectJ との比較 AspectJ の欠点 引数が異なる処理は複数のアスペクトを定義する必要 がある aspect DisplayUpdate { after(Rectangle r) : execution (* *.set*(..)) && this(r) { r.display.update(r.xpos, r.ypos, r.width, r.height); } after(Circle c) : execution (* *.set*(..)) && this(c) { c.display.update(c.centerX-c.r, c.centerY-c.r, 2*c.r, 2*c.r);

カリー化の実現 引数を複数持つ関数に引数を一つ渡すと、残りの引 数を持つ関数を返す def sum(x: Int)(y: Int) = x + y; // カリー化関数の定義(Scala) sum(1)(2) // 3 という演算結果を返す sum(1) // sum(y: Int) = 1 + y という関数を返す

デモ2

カリー化実現の問題点 Concerns ビューではどの引数がパラメータ化され ているかわからない

関連研究 Fluid AOP[Honら ‘06] Linked Editing[Toomimら ‘04] 複数のモジュールにまたがるコードを一度に編集可能 アスペクト指向プログラミングの知識が必要 Linked Editing[Toomimら ‘04] リファクタリング用のツール 既に存在するコードクローンを同時に編集可能 パラメータの同期はできない Concerns ビューに相当する機能はない

まとめ 統合開発環境を活用したモジュール化の提案 対外発表 再利用したいコードを複製し、同期 言語拡張を必要とせず擬似的なアスペクトやカリー化 の実現 対外発表 情報処理学会 第73回全国大会 IDE を活用した言語機構に頼らないコード再利用のためのモ ジュール化 PPL 2011(ポスター)