“オブジェクト”に着目すること

メリット 疎結合になる <-> 密結合

オブジェクト同士のコミュニケーションを記述すればよい

オブジェクト指向のプログラミングというよりは、オブジェクト指向とは、どのような世界の捉え方であるかを書いています。

オブジェクトとは

“オブジェクト”というのは、

“並列助詞を使用せず命名が可能な物事”

つまり

“意味を持つ情報の単位”

だと思っています。

オブジェクトの例

“ベッドA”、“まくらA”、“布団A”、“パソコンA”

これらは、“と”などの並列助詞を使用せず命名ができています。

そのため、これらは”オブジェクト”と捉えることができます。

また、“大きさ”や”パーツ”などの単体では存在できない存在も、“オブジェクト”として捉えることができます。

オブジェクトを含んだオブジェクト

また、“ベッドA”、“まくらA”、“布団A”をまとめて、“寝具A”と命名が可能です。

そのため、オブジェクトである”ベッドA”、“まくらA”、“布団A”のあつまりである”寝具A”も同様にオブジェクトと捉えることができます。

文脈によって定義できるオブジェクト

一方、“ベッドA”と”パソコンA”をまとめたものはなんと呼称できるでしょうか。

一般的な文脈において、そのふたつのまとまりを表す言葉は存在しません。

よって、“ベッドAとパソコンA”と呼称されるでしょう。

これは、並列助詞を用いて記述されるため、単一のオブジェクトとはみなさず、2つのオブジェクトとして扱います。

あるいは、“ベッドA”と”パソコンA”が同じ車の荷台に積まれている場合、“積載物A”というオブジェクトとして定義できるでしょう。

オブジェクトのもつ属性(プロパティ)

オブジェクトは”高さ”、“質量”、“年齢”、“傷”など、さまざま要素を持っています。

それを、“属性(プロパティ)“と呼びます。

便宜上、“値1”を持った”プロパティ1”、“値2”を持った”プロパティ2”をもった”オブジェクトA”を、次のように記します。

オブジェクトA = {
    プロパティ1 : "値1",
    プロパティ2 : "値2"
}

例えば、“ベッドA”は以下のように表すことができるでしょう。

ベッドA = {
    質量 : "80kg",
    耐荷重 : "150kg",
    メーカー : "A社",
    大きさ : {
        高さ : "80cm",
        幅 : "75cm",,
        長さ : "200cm"
    },
    すべての傷 : {
        傷A : {
            大きさ : "5cm",
            種類 : "ひっかき",
            位置 : "右足"
        },
        傷B : {
            大きさ : "15cm",
            種類 : "へこみ"
            位置 : "天板"
        }
    },



}

“ベッドA”は”大きさ”や“傷”というオブジェクトを内包していることがわかります。

さらに、“すべての傷”というオブジェクトは”傷A”や”傷B”というオブジェクトを内包していることがわかります。

先に述べたように、オブジェクトはオブジェクトを内包することが可能なため、上記のような階層構造を持つことが可能です。

また、“大きさ”というのは、そのものが単体で存在するものではありませんが、“オブジェクト”として捉えられます。

上では省略しましたが、他にも”製造年月日”や”シリアル番号”などさまざまな属性や、“パーツ”などのオブジェクトが、“ベッドA”には内包されていると考えられます。

オブジェクト指向とは

以上の”オブジェクト”という概念を用いて、次のように考えるのが”オブジェクト指向”だと思っています。

世界に存在するもの全ては、それぞれが意味を持ち、独立した”オブジェクト”である。
存在するものは”世界”と”そのオブジェクト”との境界を持っていて、意味を持ち独立している。
“オブジェクト”同士の関係性は、“オブジェクト”の”ふるまい(反応)“によって定義される。

という考えだと思っています(私見です)。

“オブジェクト”同士の関係性は、“オブジェクト”の”ふるまい(反応)“によって定義される。

ということに関して、以下で説明を行いたいと思います。

オブジェクト同士はいかに情報をやりとりするか

人や動物などがわかりやすい例ですが、オブジェクトには、動作を行うものがあります。

例えば、人は歩いたり、考えたりします。また、犬は歩いたり、吠えたりします。

このような”ふるまい”をメソッドと呼びます。

メソッドは一般的に”関数”として表されます。

関数であらわされるメソッド

メソッドは、そのメソッドを持ったオブジェクトが行うふるまいを記述するものでした。

それは、

関数とは何か

関数とは、“入力”を受け取り、“出力”を返すものです。

ここで、“入力”や、“出力”は存在しなくても関数として成立します。

これを

出力 = 関数名(入力)

と書きます。

例えば、関数”吠える”を考えます。

まず、吠えることの”入力”は”対象”でしょう。これは、見知らぬ人であったり、ある動物の内在的な不安だったりします。

そして、出力は”鳴き声”でしょう。吠えるとは、音を出すことだと思っています。

これは、いかのように記述できます。

鳴き声 = 吠える(対象)