courseraで Pattern-Oriented Software Architecturesを学びました。

Pattern-Oriented Software Architectures: Programming Mobile Services for Android Handheld Systems | coursera

なぜPOSAを学んだか?

POSAを学んだ目的は、自分のオブジェクト指向設計能力を向上させるためだ。

デザインパターンを身につける

今年の目標の一つが、デザインパターンを身につけること。

去年はRubyやC++を学ぶことで、オブジェクト指向を身につけた。

そして今年は更なる成長のために、 デザインパターンを身につけることを本年度の目標にしたのだった。

アーキテクチャ・パターンという新しい考え方を身につける

今回学んだPOSAというものは、デザインパターンとは違う。 デザインパターンの上位に位置する、アーキテクチャ・パターンというものだ。

デザイン・パターンはクラス間の関係を示すのに対して、 アーキテチャ・パターンは、システムやモジュール同士の関係を示す。 アーキテクャ・パターンのなかに、デザインパターンが現れる。

あまりメジャーではないけれども、だからこそ人より抜きん出るためには、 デザインパターンとともに、アーキテクチャパターンをみにつけたいと思った。

並列プログラミングを身につける

これは棚からぼたもちだったのだけれども、 このcourseraのコースは平行プログラミングについても一通り説明されている。

今まで、平行プログラミングを真面目に学んだことがなかったため、 網羅的に学べるとてもよい機会だった。

Androidと平行プログラミング、そしてパターン

パターンだけが、学習の対象ではなかった。以下のことが学べた。

  • Android
  • 平行プログラミング
  • パターン

Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects

Douglas Schmidt先生は、以下の本の著者の一人。Schmidt先生、渾身の著作!

講義はこの本に書いてある内容、すなわち、

平行プログラミングに関するアーキテチャ・パターン

が中心的な話題となっている。

また、その学習のためのプラットフォームとしてAndroidOSが 採用されているという内容。 パターンが体系的に、順番に、解説されていくものを想定していたため、 このような進め方は予想外だった。

詳しく解説されたGofのパターンは以下。軽く触れたものはもう少しある。

  • Factory Method
  • Bridge
  • Command
  • Strategy
  • Template Method

また、POSAについては以下。

  • Half-Sync/Harf-Async
  • Active Object
  • Monitor Object
  • Producer-Consumer

とても熱い講義

Schmidt先生は、教えることにたいしてとても熱心に感じた。 やや早口だが、とても生き生きとはなしいている。 また、掲示板にしょっちゅう出没してコメントを精力的に書き込んでいるのにも驚く。

Douglas Schmidtさん本人のYoutubeチャンネルから、実際の動画を見ることができる。

https://www.youtube.com/channel/UCt-Wvc_ojTzGLpjhruIXYSw

そして、なぞのPDF群。いろいろなパターンに関する覚え書きがたくさんある。貴重な資料。

Assignmentは簡単

Assignmentは、とても簡単な内容。 githubから課題を落として、TODOとなっている場所を10箇所くらい修正する。

スケジュールの前半は、JavaのConcurrencyに関する話題が課題。

  • RentrantLock
  • ReadWriteLock
  • Semaphore
  • ConditionObject
  • CountdownLatch

Ping-Poigというプログラミングを作成した。

スケジュールの後半になって、ようやくAndroidの話題がでる。 Androidのライブラリを利用した並列処理について学ぶ。

  • HaMeR framework
  • AsyncTask framework

中級・上級を目指してガチにAndroidを極める人のための講義

ServiceやIntentがどういう思想のもとに設計されているかが、 パターンという観点から整理されて解説される。

並列プログラミングを題材にして、パターンが解説されていく。 実例を通して学べるところがよい。

市場にでているAndroidの参考書は、技術的な詳細よりも、 動くアプリを作成することに重点が置かれてかかれている。

この講義は、フレームワークの仕組みをJavaや設計の観点から詳しく解説しているので、 世の中の参考書にはない、貴重な学習材料だ。

中級・上級を目指して本気でにAndroidを学ぼうとする人に最適だと思う。

POSAをどう生かすか?

実例にそってパターンを学ぶ

正直、この講義だけではPOSAが分からない。Gofも部分的にしか紹介されない。

Androidと平行プログラミング、そしてパターン、いろいろ覚えることが多く、 頭の中で整理できないでいる。

思ったことは、パターンはパターンそのものとして学習するのではなくて、 コードや実例を通じて学んだ方がわかりやすいということだ。 そういう意味では、Androidが題材にされいてるところはよかった。

パターンは、折にふれてリファレンスを参照して、 繰り返し慣れ親しむことで覚えていくのがよいだろう。 普段のコードリーディングで、『これってパターンかも』と思ったら、 その度ごとにGoogleで調べるように心がけたい。

オブジェクト指向設計をもっく詳しく

パターンというのは、課題があってその解決策として導かれるもの。 GofやPOSAは、オブジェクト指向を大前提にしている。 オブジェクト指向の課題から、必然的に導かれたものがパターンとなる。

なので、パターンの本質を身につけるためには、 もっと深くオブジェクト指向設計を学ぶ必要を感じる。 オブジェクト指向設計の解説書として定評のある以下の本を買った。 これで、オブジェクト指向の本質的な部分を学びたい。

あと、POSA2の日本語訳、出版されないかな。