2010-11-28

多重継承はC++の用語として不適切

C++の規格上、派生と継承は、明確に区別するべきであることはすでに述べた。

本の虫: abstract classで知らなかったこと、付記、派生と継承の違い

ところで、「多重継承」という言葉がある。これは、Multiple Inheritance(複数の継承)という言葉の一般的な訳語である。多重継承は、実はC++には相応しくない言葉である。クラスは派生(derive)するものであって、継承(inherit)するものではないからである。

規格ではどうなっているかというと、Multiple base classes(複数の基本クラス)となっている。規格の文章は多重継承という言葉を使っていない。ただし、注記として、「複数の基本クラスを使うことは、しばしば多重継承と呼ばれている」などと書いてある。つまり、通称として多重継承という言葉が一般的であるということに言及しているのだ。

また、すでに書いている参考書の文章を見なおしたところ、なんと、派生と書くべきところで継承という言葉を使っている箇所があまりにも多数あった。これはまずい。

「DerivedクラスはBaseを継承しているから~」とか、「継承クラス」とか、「publicで継承」などと使っている。どうやら無意識に使っていたらしい。

現実世界では、派生と継承は、明確に使い分けられていない。一体どのように参考書を書けばいいのだろうか。もし、厳密に言葉を使い分けるとすると、やや見慣れない文章になってしまう。というのも、派生という単語を動詞として用いる場合は、「Derivedクラスは、Baseクラスから派生されている」というように、必ず受身で使わなければならないからだ。あるいは、「Derivedクラスは、Baseクラスの派生クラスである」などのように、名詞として使わなければならない。すでに書いた文章を修正しているが、どうも派生という言葉を厳密に正しく使うのは、たまに違和感を覚える。

思うに、自然言語は、規格の文章ほど厳密でなくてもいいということなのだろう。規格の文章では、同じ意味を表す用語が複数あるのは、混乱を招くだけである。しかし、自然言語では、同じ意味を表す言葉がひとつしかないというのは、むしろ稀である。ニュースピークなどという言語は、いかに共産主義がはびころうとも、決して根付くことはないであろう。この点は、一安心だ。

2 comments:

Anonymous said...

横にそれるけれど
be derived は「派生される/されている」
でなく「派生する/している」じゃないですかね。
英語の態と日本語の態とは逆になっているというか。

江添亮 said...

日本語にすると、「DeriveはBaseから派生する」、でも、あまり違和感がありませんね。

というかどうも、日本語にすると、
「DeriveはBaseから(プログラマーによって)派生されている」
という風に、本来の主語が脱落しているかのような印象をうける。