プログラミングに特効薬や万能薬はない――複雑さへの対抗手段としての抽象化とKISS問題解決力を高めるコツはプログラミングの原則・思考にあり(3)(3/4 ページ)

» 2017年08月10日 05時00分 公開
[上田勲]

アーキテクチャ根底技法(1) 抽象

 英語  Abstraction

 What 〜概念的な「線引き」

 抽象とは、概念的に明確な「線引き」を行うことです。その線引きに従って、あるモジュールを、それ以外のモジュールから明確に区別します。

 抽象は、「捨象」「一般化」という2つの観点からまとめられます。

 「捨象」は、複雑な対象のいくつかの性質を捨て去り、特定の性質に目を向けることです。

「捨象」のイメージ

 「一般化」は、具体的な対象から共通の性質を抽出し、より汎用的な概念に定式化することです。

「一般化」のイメージ

 Why 〜複雑さへの対抗手段

 抽象は、人間が複雑なものに取り組む時に使用する、基礎的な原理です。

 「捨象」は、枝葉を取り除き、対象物の本質をむき出しにします。複雑度が下がり、真なる問題に集中できることになります。抽象化した概念は、無駄がなく、使いやすく、広く応用が利きます。

 「一般化」は、複数のものを、共通の特徴によってグルーピングし、「同じ」と見なすことです。そうして1つの事象における学びを他の場面でも適用することを可能とします。つまり「一を聞いて十を知る」です。

 プログラミングに特効薬や万能薬はありませんが、問題解決において、抽象化という思考法は、より「よい」「効率的な」解法を導き出すための強力な武器となります。

 How 〜「捨象」と「一般化」を駆使

 抽象化を行いましょう。

 抽象化は、優れた設計を構築するためのプログラマの基礎技術です。

 複雑な対象に取り組む時は「捨象」します。余計なものを捨て、本質を捉えるようにします。その場合、本質そのものを捉えることも大事ですが、取り組んでいる問題について、「今、着目している側面からの本質」として捉えることが大切です。

 異なる複数の対象に取り組む時は「一般化」します。共通する性質を見出し、共通点を組み合わせて汎用的な概念を構成します。プリンシプルが、この好例です。一般化は、複数の事象の間にプリンシプルを見つける「パターン認識」の技術です。身の回りのものにパターンを見つけ、それに名前を付け、プリンシプルとして複数場面に活用します。

 なお、抽象の反対は具体です。具体はわかりやすいですが、具体レベルの個別事象を、1つ1つバラバラに見ていては、無限に時間がかかります。さらに、個別具体的なので、応用が利きません。

 抽象によってこそ、多くの対象に一律の公式を適用することが可能になり、それによって圧倒的に効率的に考えることができるのです。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。