背景
《効能》アナログ思考からディジタル思考への扉を開く
地デジ化と同様に、アナログ思考(Java)からディジタル思考(Jython)へのパラダイムシフトは、まだ先…と諦めていませんか?受講者のみなさんの準備はいかがですか。
《背景》Jython を導入したのは:Java/Eclipse の隘路
Jython を導入したのは「Java/Eclipse の生産性の低さ」に業を煮やしてのものです。以前は Smalltalk で開発していただけに、そのギャップは痛烈でした。加えて、統合開発環境とは名ばかりの JBuilder/Eclipse には、キャンプ生活と違って、電気/ガス/水道が整備された恩恵(Smalltalk)に浴していただけに不満が募ります。
アプリケーションを実行中に、その機能を自由に拡張して、その場で検証できるのは、要求仕様の変更にも迅速/柔軟に対処できる術を必要とするシステム開発の現場では、欠かせない機能のひとつです。また、初心者にも、Java の学習環境として、Jython のインタープリター(対話モード)は重宝します。
(Java に限らず)機能の強化/拡張に伴い、複雑を通り越して肥大化する傾向にある「言語仕様のメタボリック症候群」の処方箋として、Java と同等のコードをより簡潔に表現できるだけでなく、言語仕様の拡張を待たずに、同等の機能を先行してシステム開発に導入できるのも魅力です。さらに、システム開発と要求仕様の変更が同時進行するときに、求められる術とは何か。その可能性を模索するヒントが得られます。
《背景》何が問題か
Jython には、伝統的な(C言語風の)for/switch 文がありません。それには、理由があります。それを理解しないまま、C++/Java で記述したコードを Python に置き換えたツケは、後に清算を余儀なくされます。なぜなら、伝統的な if/for 文や配列の境界問題などによって、コードは汚染され、要求仕様が変更されるたびに「メンテナンスの悪夢」が待ち受けているからです。
OOP の本質を理解して、デザインパターンを効果的に導入すると、コードの汚染問題を解消できます。そして、簡潔で見通しの良いコードを記述できるだけでなく、要求仕様の変更にも柔軟に対処できるようになります。
《背景》GoF を反面教師に
デザインパターンを導入するときによくある落とし穴は「GoF を鵜呑み」にして「損」をしていることです。C++/Java の事例を踏襲したまま Jython を導入しても、簡潔で見通しの良いコードは記述できません。パターンの表現(how)を踏襲しただけで、パターンの本質(what)を伝承していないコードをよく見掛けます。
たとえば「我が輩は猫である」を「I am a cat.」と訳したらどうでしょう。構文はそのままに単語を「置き換える」だけでも「意味は通じる」かもしれません。しかし、そこからは原文の趣を再現できません。本来の趣を損なわず、英語らしい表現にしたいと願うなら、原文の背景を理解できているかが鍵になります。
同様に、C++/Java で記述したままのコードを Python に「置き換える」だけでも「プログラムは動く」かもしれません。しかし、そこからはパターンの趣を再現できません。ともすると、実現方法に依存する問題を抱え込んだまま、それが後になって露呈したりするものです。本来の趣を損なわず、Python らしい表現にしたいと願うなら、パターンの背景を理解できているかが鍵になります。
デザインパターンの聖典として〈GoF〉が引用されます。しかし、それは先人の功績を示すカタログにすぎません。みなさんは、日本人講師と外国人講師のどちらから、外国語を学びたいと思いますか。同様に、パターンの本質を学びたいなら、そのルーツに触れることで、〈GoF〉が何を伝え、何を伝えなかったかが分かります。
《余録》構成の詳細
(1)はじめの一歩:GoF を反面教師に Java の隘路を開く
〈GoF〉の事例を鵜呑みにしたコードが抱える問題を提起します。典型的な Java のコードをもとに、if/for 文や配列の境界問題によって、 コードが汚染 される様子を提示します。連載で完成されるプログラムの仕様に沿って、学習の指針を提示します。
(2)Iterator パターンの隘路:for と別れる50の方法
Python には伝統的な(C言語風の)for 文がありません。それには理由があります。〈GoF〉で例示されたプロトコルは、 データ構造に依存 する情報は隠蔽してあるものの、特定の プロトコルに依存 するコードの汚染につながります。Python では、抽象表現を可能にする、特殊メソッド __iter__ を規定することで、この問題を解消します。
(3)Composite パターンの導入:配列と別れる50の方法
配列が抱える境界問題は、 バグの温床 になりがちです。単一オブジェクトと複合オブジェクトとを統一的に扱えないことが、コードの汚染につながります。この問題を解消する定石として〈GoF〉では Composite パターンを紹介しています。
(4)Command パターンの隘路:if と別れる50の方法
Python には伝統的な switch 文がありません。それには理由があります。Java では、すべてを first-class object として 統一的に扱えない ことが、コードの汚染につながります。Python では、抽象表現を可能にする、特殊メソッド __iter__ を規定することで、この問題を解消します。クラスやメソッドも first-class object として統一的に扱える、Jython の魅力を紹介します。
》作業中です《