オブジェクト指向…だと…⁉ ~ SysMLってこんなもの(その2)

2022年12月1日

素人目線でSysMLを解説するその2。今回は「オブジェクト指向」解説です。

コンピュータ界隈で、高尚で哲学的でとっつきにくい言葉の代表格「オブジェクト指向」。この言葉を素人目線で説明するなんて、無謀にも程があると自分でも思う。

SysMLとオブジェクト指向

「SysMLはオブジェクト指向の…」という説明を見ることががあります。厳密にはSysMLはオブジェクト指向で使わないとダメ、絶対、とは誰も言っていない。でもSysMLはオブジェクト指向の考え方で使うことを前提に設計されていて、現実的にはオブジェクト指向風でしかお話できない言語と思ってほぼ間違いない。という訳でSysMLを理解しようと思ったら、オブジェクト指向のイメージを持っておいた方がいい。

プログラミングテクニックとしてのオブジェクト指向は何かパズルかアートのようでとてもわかりにくい。でもそういうパズルみたいなのはSysMLの理解には(とりあえず)要らん。オブジェクト指向のいちばん根っこの部分だけ知っておけばO.K.そして根っこだけなら別に難しいものじゃない、と思う。

オブジェクト指向ってこんなもの

オブジェクト指向の特徴を一言でいうと、

主語がある。

です。

そんなものが特徴になるのか?なるのです。なぜならば…

昔々、プログラミング言語には動詞しかありませんでした。

昔はプログラム言語のことを「命令文」とも言っていました。命令文には主語がありません(中学校で習いましたよね?)。これはある意味当たり前で、だってプログラム言語に書かれている命令は全てコンピュータがやるに決まっているんだから、主語なんて書く必要ないじゃん?

オブジェクト指向は小人さん(動作主体)を定義した

ところが、オブジェクト指向はコンピュータの中に仮想の「小人さん」を作って、その小人さんが仕事するよ!っていう風にしたのです。仕事A,B,CがあったとしたらコンピュータがABC全部をやるんじゃなくて、仕事Aは小人さんaが担当するよと。ま、でも結局小人aを演じているのはコンピュータなんだけどね。しかもその小人さんaは元々存在しないのだから、「小人さん」がどんなやつか、特技とか趣味とか見た目とかを定義するところから始めないといけないという。

なんでわざわざそんな面倒くさいことをするのかと思うが、やってみたら色々便利だった。で、この「色々便利」な部分というのがオブジェクト指向のいろんなテクニックやら思想やらに発展するのですが、その辺はSysMLを理解するためには当面必要ない。

とにかくSysML的に押さえておくべきオブジェクト指向のポイントはひとつ、元々存在しない「小人さん(動作主体)」をイチから定義して作りだすということです。

SysMLのオブジェクト指向的特徴とは

結局SysML言語をオブジェクト指向的にとらえるためのポイントは以下の2つ。

  • 「主語(動作主体)」と「動詞」がある
  • 要素には「定義」と「使用(例)」がある

「主語(動作主体)」と「動詞」がある

元々プログラム言語には「動詞」があり、オブジェクト指向で「主語」が追加されてめでたく「主語」と「動詞」が揃いました。実は「主語」はSysMLの「構造図」に、「動詞」は「振る舞い図」に対応します。「主語」を説明したり定義するのが「構造図」、「動詞」を説明したり定義するのが「振る舞い図」です。

要素には「定義」と「使用(例)」がある

これは例えると、

「お弁当」と「お弁当の定義」は違うよね

という話です。お弁当は食べられるけど、「お弁当の定義」は食べられません。

ふつうならお弁当を作るのに必要なのはごはんやおかず、具材、お弁当箱ですね。でも、コンピュータの仮想空間でお弁当を作ろうとするとき必要なのはごはんやおかずではありません。「お弁当とは何か」という「定義」です。定義さえあれば幾らでも、好きなだけお弁当を作ることができる。仮想空間ですから。逆に定義がないと絶対に作れません。現実の世界と違って、仮想空間では定義しないものは存在できないのです。

だからオブジェクト指向のSysMLでシステムを設計する際も

  1. 要素を「定義」する
  2. 定義した要素を「使用」する
  3. 要素の「使用」を組み合わせて新たに要素を「定義」する → 2.へ戻る

というのが一つの基本になっています。

上記のような特徴をもつオブジェクト指向は、コンピュータプログラム開発という特殊な状況だからこそ発展したものと言えます。しかし実はこれらの特徴はプログラムに限らす様々なシステム全般の設計・開発にも非常に有効なのです。SysMLがオブジェクト指向なのはなんとなくUMLベースだから、ではなく、必然なのです。

で、どうしてこの特徴がシステム設計に有効なのかは、次回につづく。