All Articles

2019-07-15

知識の抽象化

抽象化

抽象化とは以下の2点を指していると考えています。

  • 複雑な事柄を単純にする

    • モデリング
  • 複数の事柄から共通点を抜き出す

    • パターン化

共通点

配列やリストを考えた時に以下の共通点が浮かんだ。

  • 値を複数保持する事ができる
  • インデックス(添字)、またはキーを指定して特定の値を取得できる
  • 反復して値を取り出せる

    • forforeach

プログラミング言語におけるコレクション

先程の共通点を持つ型はプログラミング言語によって様々。

PHPの場合

  • array
  • 連想配列

C#の場合

  • Array
  • List
  • Dictionary
  • etc…

Javaの場合

  • Array
  • List
  • Dictionary
  • etc…

arrayやDictionaryなどの個々の具体的な要素があり、そこから共通点を抜き出したモノが抽象となる。

経験談

  • PHPで独自のコレクションクラスを作成したい
  • C#でクラスを反復処理できるようにするためにはIEnumerable<T>を実装する必要があった
  • PHPでも同じことをするには同様の実装をする必要があるだろうと推測してIEnumerableに相当するインタフェースがないか検索を行った
  • 調べた結果としてIteratorやIteratorAggregateを実装すると良いことがわかった

問題に遭遇したときにパターン化してみることで、問題解決できることがあるかもしれない。

おわりに

この記事を書くことで得られた気づき。

  • 共通点を作り出すためには具体的な要素がまず必要
  • 共通点を大きな集合とすることで、具体的な要素を関連付けられる
  • 新しいことを学ぶ際に、分類することで理解がしやすくなるのでは?
  • 問題解決も同様に単純化・パターン化して考えてみると良いかもしれない
  • コレクションはプログラミング言語という文脈で名称が異なる

    • ドメイン駆動設計的に言うと境界づけられたコンテキスト
    • プログラミング言語ごとにユビキタス言語がある

参考