オブジェクト指向システム分析到着・・・

koichikさんのコメント : Csus4.net – Just example. ≫ Blog Archive ≫ PoEAA 4th により書名を教えてたいただき、早速購入したのですが・・・・・

む、むずいっす・・・・。 付録AのOSAの形式的定義の構成を抜粋します・・・。

* A.1 ORMから第一階述語と規則への写像 * A.1.1 述語 * A.1.2 規則 * A.2 第一階言語から数学的モデルへの写像 * A.3 OSAメタモデル * A.3.1 図A.4における最初の制約の変換 * A.3.2 図A.4における二つ目の制約の変換 * A.3.3 図A.4における三つ目の制約の変換 * A.3.4 図A.4における四つ目の制約の変換

なかなか手ごわそうです・・・オブジェクト指向システム開発―分析・設計・プログラミングへの実践的アプローチ

30歳からの成長戦略

超オススメできる。

あとで書くかも。いや、(ビジネス的な視点に興味がある人なら)買いなさい。とりあえず。

オブジェクト指向設計の説明

職場のやりとりの中で、オブジェクト指向を知らない上司にオブジェクト指向を説明する羽目になった。

たとえ話で説明したのだけど、なかなかうまくいったように思う。上司にも「わかりやすい!」と感謝してもらえ、かつマイmixi限定でやりとりを公開したら結構好評で、わたくしカナリゴキゲン(←アホ)なので、ここにもやり取りを残しておくことにする。うほ。

### やりとり

上司「なんで継承構造が複雑だと問題なの?」

自分「(継承を駆使した(※))オブジェクト指向設計のメリットは2つです。1つは、実作業者をある種のカタにはめられること。もう1つは、機能を共有できることです。」 (※: テンプレートメソッド的なイメージを持っていただければ。)

自分「たとえると、ビジネスフォームみたいなものです。たとえば、契約書とかで、本文には「甲が乙に・・・の義務を負う」みたいなヤツありますよね? 甲の部分を変えれば別の契約書になりますし、逆に言えば、ソコしか変えることが出来ないので、いわゆるカタにはめる格好になります。そして肝心の契約本文は共有できるので、契約を起こすたびに文面を考える必要はありません。継承を多用したオブジェクト指向設計っていうのは、こんな感じなんです。」

上司「ふーん、いいじゃない。」

自分「ですけど、問題点もあるんです。」

上司「何?」

自分「たいていの開発の場合、契約書テンプレートを作る人と、テンプレートを埋める人は別の人なんです。そして、継続してメンテナンスしないといけない。しかも、契約書の場合と異なり、両者は常に整合性をもっていないとイケないんです。 たとえば、法律の改正があって、契約書を修正しないといけないとしましょう。契約書の場合だと、テンプレートを修正して終わりですけど、ソフトウェア開発の場合だと、そうはいきません。現実の契約書テンプレートとは異なり、契約書テンプレートを修正すると、この契約書テンプレートを元にして作った契約書も全部修正されちゃうことになるんです。去年作った契約書も全部です。」

上司「あー」

自分「しかも、この(イケてない)協力会社がつくったソースの構造は複雑で、契約書にたとえると、契約書の本文に、「?の詳細については、・・・を参照」みたに契約書の構成が複雑で全貌を容易につかめないような感じなわけです。 これを将来的にメンテナンスしていくのは大変ですよ。」

上司「なるほどねー」

てな具合。

ライブドアと年功序列

Doblog – Joe’s Labo –

> 人事制度を作る時、従業員に対して“将来のビジョン”が描けるかどうかが非常に重要 な鍵となる。十年後自分がどうなっているか、あるいは自分の希望する業務に携われる かどうか。平たく言えば「その会社で夢がかなうか」ということだ。

一見古臭そうだけど、実は大きなパワーをもつ日本企業の施策については、この本が詳しい。しかも面白い。オススメできる。

Contextが提示されていないResultは疑うべきだ

サイボーグ戦士の日記

> よって思ったのはContextが明示されていないResultは > 逆に全て疑ってかかるべきですね。 > 銀の弾丸は存在しないですから。

日ごろぼんやり思っていることを明快に語ってくれる言葉に出会えることは喜びだ。

* Context+Logic → Result * What + How → What

なる構造と整理している。

まったく同じContextは存在しない。ゆえに、Resultは役に立たないか・・・というとそんなことはない。 多少Contextが違っても、Logicを抑えておけば、Contextの違いに対応して異なるResultを導き出すことが出来る。

Javaメモリモデル

職場で設計に関する議論があり、自分がJavaのメモリモデルを理解していないことを痛感させられた。 というわけで、

* Javaの理論と実戦: Javaメモリ・モデルを修正する 第1回 * dW : Java technology : Javaの理論と実戦: Javaメモリ・モデルを修正する 第2回 * Java言語規定 スレッド及びロック

などを読んで学習。メインメモリとローカルメモリの同期をとることが肝要と理解した。

Java言語仕様は、メモリモデルと呼ばれる、いわゆるRAM、キャッシュ、レジスタなどなどから構成される実際のマシンのメモリを適切に抽象化したモデルを用い、そのモデルがどのような要件を満たさねばらないか?を規定している。あくまでもモデルに対する要件のみを規定しているため、実際のマシンアーキテクチャから、比較的独立性を確保することができる。という仕組みになっているようだ。誰が考えたか知らないが、うまい仕組みだ。モデルの適切な定義・モデルの適切な利用と感じられる。

さて、この作業を通じて改めて思うのは、Whatを正しく知るためにはHowを知らなくてはならないということである。ある概念を、自然言語や類似の概念でいくら説明されても、詳細は理解できない。「それがどうやって実現されるか」を知らなくては、概念をキチンと理解できないのだ。

この例でいうと、プログラミング言語がどのような機能性を果たしているかを説明するためには、プロミング言語の処理がどのように実行されるかを知らなくてはならないということになる。

ただ、このWhatとHowの関係で注意していただきたいのは、Howを説明するときに使用する下位の概念の抽象度・詳細度である。 Howはある下位の概念を用いて記述されなければならず、かつ、問題を説明するのに適切なレベルで詳細な概念を用いて説明しなくてはならない。Howを説明する際に用いた概念が詳細すぎては、Howが複雑になりすぎて、Whatを理解することが難しいことは容易に理解できるだろう。

What -> How -> What -> …

無限ループ・・・。

オチはない。

追悼

[結] 石井さんの訃報 – 結城浩の日記

とあるML経由で事実を知った。

直接お会いしたことはないのだけど、自身がxUnitを実践する際に非常に参考にさせていただいた。実際、自身のプロジェクトでも、テスト対象のオブジェクトにtoString()メソッドを持たせるテクニック、expectedとactualのdiffをとるテクニックなど、実際に活用させていただいたアイディアがある。

Agile界に、pragmaticな方法論を提供したという意味で、皆に幸せを与えた方だと思う。

心よりご冥福をお祈り申し上げます。