Skip to main content
QUICK REVIEW

[論文レビュー] On the Interaction of Object-Oriented Design Patterns and Programming Languages

Gerald Baumgartner, Konstantin Läufer|arXiv (Cornell University)|May 31, 2019
Software Engineering Research参考文献 29被引用数 27
ひとこと要約

この論文は、一般的なオブジェクト指向言語における欠落を特定し、それらが一般的な設計パターンの実装を複雑にする要因となっていることを明らかにした。その上で、継承とは分離されたサブタイプ化、スコープが静的(レキシカル)なクロージャー、およびマルチメソッドディスpatchといった、直交的で汎用性の高い言語構文を提案する。主な貢献は、これらの構文を用いて設計パターンを記述するフレームワークを提供することであり、これにより、異なる言語コミュニティにわたって、より明確でポータブルかつ普遍的に適用可能なパターン記述が可能になる。

ABSTRACT

Design patterns are distilled from many real systems to catalog common programming practice. However, some object-oriented design patterns are distorted or overly complicated because of the lack of supporting programming language constructs or mechanisms. For this paper, we have analyzed several published design patterns looking for idiomatic ways of working around constraints of the implementation language. From this analysis, we lay a groundwork of general-purpose language constructs and mechanisms that, if provided by a statically typed, object-oriented language, would better support the implementation of design patterns and, transitively, benefit the construction of many real systems. In particular, our catalog of language constructs includes subtyping separate from inheritance, lexically scoped closure objects independent of classes, and multimethod dispatch. The proposed constructs and mechanisms are not radically new, but rather are adopted from a variety of languages and programming language research and combined in a new, orthogonal manner. We argue that by describing design patterns in terms of the proposed constructs and mechanisms, pattern descriptions become simpler and, therefore, accessible to a larger number of language communities. Constructs and mechanisms lacking in a particular language can be implemented using paradigmatic idioms.

研究の動機と目的

  • 既存のオブジェクト指向プログラミング言語の制限が、広く使われている設計パターンの実装にどのように歪みや複雑さをもたらすかを特定すること。
  • 実世界の設計パターンを分析し、言語機能の欠落によって生じる共通のイディオムを抽出すること。
  • 設計パターンの実装をより良く支援する、最小限で直交的な言語構文とメカニズムのセットを提案すること。
  • これらの一般化された構文を用いて設計パターンを記述することで、異なる言語エコシステムにわたるアクセシビリティと再利用可能性を向上させることを提唱すること。
  • 構造的サブタイプ化、クロージャー、マルチメソッドディスpatchといった、静的に型付けされたオブジェクト指向言語に欠落しているが、将来的な言語設計において不可欠な機能を特定することにより、今後の言語設計を導くこと。

提案手法

  • C++、Java、ML、Modula-3などの言語を対象に、実装の欠落によって生じる共通のイディオムを特定する。
  • ガベージコレクションの欠如、一等級のクロージャーの不在、サブタイプ化およびインターフェースの弱いサポートといった、繰り返し現れる言語の欠陥を同定する。
  • 直交的な言語構文のセットを提案する:継承とは分離されたサブタイプ化、スコープが静的(レキシカル)なクロージャーオブジェクト、およびマルチメソッドディスパッチ。
  • これらの構文が、現在の言語イディオムよりも単純に、すべての既存の設計パターンを表現できることを示す。
  • 欠落している構文は、ターゲット言語における代表的なイディオムを用いてエミュレート可能であり、これによりパターンのポータビリティが実現可能であると主張する。
  • C++、Java、ML、Modula-3などの既存言語を評価し、主要なパターン要件を満たすための不足を明らかにする。

実験結果

リサーチクエスチョン

  • RQ1主流のオブジェクト指向言語における言語制限が、一般的な設計パターンの実装にどのように歪みや複雑さをもたらすか。
  • RQ2現在の静的に型付けされたオブジェクト指向言語に欠落しているが、設計パターンのクリーンで自然な実装を妨げる言語構文やメカニズムは何か。
  • RQ3多様なプログラミング言語にわたって設計パターンの表現を簡素化できる、最小限で直交的な言語構文のセットを定義できるか。
  • RQ4一般化された構文のセットを用いることで、特定の言語機能に依存せずに設計パターンを記述できる範囲はどの程度か。
  • RQ5特定の言語機能の欠落は、明確さや正しさを損なわずに、確立されたプログラミングイディオムを用いて実際には補完可能か。

主な発見

  • C++にはガベージコレクションが存在しないため、Handle-Body や Envelope-Letter のようなパターンは、ガベージコレクションがある言語ではより単純に実装可能であるが、C++では複雑なイディオムに依存する。
  • Singleton パターンは、モジュール構造や一等級のオブジェクトをサポートする言語ではほとんど不要であるため、一部のパターンは言語機能の欠落を補うための代替手段にすぎないことが示唆される。
  • サブタイプ化は継承とは明確に分離可能であり、そのようにすることで両方のメカニズムが強化され、型安全性とコード再利用性が向上する。
  • スコープが静的(レキシカル)なクロージャーオブジェクトは、関数型プログラミングや抽象データ型プログラミングのスタイルを可能にし、クラスベースのカプセル化のより柔軟な代替手段を提供する。
  • マルチメソッドディスパッチは単一ディスパッチを拡張し、複数の引数にわたる多態性の自然な表現を可能にし、表現力が向上する。
  • 現存する言語は、すべての提案された構文をサポートしていない——特に構造的サブタイプ化、クロージャー、インターフェース、マルチメソッドの組み合わせをサポートする言語は存在しない——したがって、このような言語は言語設計において顕著な前進をもたらす。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。