回答ありがとうございました。
>否定するのには2つの理由があります。
2つともおっしゃる通りだと思います。
しかし、できれば、UMLの一つ(実際は複数図)のメンテナンスが魅力です。
>JavaがUMLになっただけでは、結局のところ何も変わらないのです。
一次元的(コード)なものが2次元的(図)になっていると思うのですが…。
あと、「オブジェクト指向とはクラス・継承・多態性だ」は間違っていると切り捨てていますが、なぜ間違っているのかを教えてもらえますか?
ちなみに、私は、間違っていないと思うのですが…。
「オブジェクト指向にはクラス・継承・多態性がある」というのは間違っていません。「オブジェクト指向とはクラス・継承・多態性だ」というのは間違っています。継承というのは道具であって本質ではないということです。
オブジェクト指向の本質は世界のモデル化とにあり、これがないものはオブジェクト指向とは呼べません。しかし、継承がなくても立派にオブジェクト指向になります。だから「オブジェクト指向とは継承である」とは言えないわけです。(多態性も同様です)
オブジェクト指向の本質が継承にあると勘違いしてしまうと、「継承はした方がいい/しなくてはならない」と間違って解釈してしまいます。継承はただの道具です。使いこなすのはいいですが道具に使われてしまってはいけません。必要な所にだけ使い、必要のない所には使わなければいいのです。
余談になりますが、道具と本質を見間違えるのはプログラマの悪い癖です。何をするかではなく、何であるかを見極めなくてはならないというのもメッセージの一つです。
JavaとUMLでは、1次元か2次元かという違いがありますが、1次元か2次元かという違いしかありません。本来は「プログラム」と「対象世界」という、もっと本質的な違いがあるはずなのです。
世の中には2次元で記述するプログラミング言語もいくつか存在します。しかしそれはあまり流行っていません。その理由は、たいして便利ではないからです。マウスという入力効率の悪いデバイスが必須になってしまうというのも欠点の一つです。
実際のところ、UMLのコード自動生成というのはここで強く非難するほど悪いものではありません。便利な道具であり、うまく生かせば手間を大幅に省くことができます。しかしそれでも敢えて非難するのは、そこに目を向けてしまうと本質を見失ってしまうからです。
UMLというのは、Javaを2次元にしたという程度のちっぽけなものではなく、もっともっとすごいものなのです。それを理解した後で使うのならいいと思うのですが、その頃にはコード自動生成は本質ではなく、あると便利だがなくてもかまわない、と思うでしょう。
『本質を見極める』ですね!
ご指導、ありがとうございました。
しかし、『本質を見極める』は、難しい...。
すなわち、オブジェクト指向は難しい...。