オブジェクト指向

【オブジェクト指向プログラミング】モデルとは?【→プログラミング初心者向け】

9月 13, 2019

what is model on object oriented
プログラム女子
オブジェクト指向のモデルって、一体、何なの?
世の中のあらゆる物事を構造化して考えることだよ。そこには色々な歴史があるので、その歴史を踏まえて、モデルって何かを考えていこう。

Tommy

この記事で分かること

  • オブジェクト指向の歴史が分かる
  • オブジェクト指向のおける「モデル」の意味が分かる
  • 「クラスとは何か?」が分かる

【オブジェクト指向プログラミング】モデルの概要

summary of model on object oriented

ここでは、ソフトウェアの「オブジェクト指向プログラミング」の基本だけど、最も重要であるとも言える、「モデル」について、どのような歴史背景で使われてきたのか、或いは「モデルとクラスの関係」はどのようなものなのか、さらにモデル化された後には何を考えないと行けないのかを説明します。

具体的には次の順番で説明します。

  1. オブジェクト指向とは
  2. モデルって例えば
  3. モデルとクラスの関係
  4. モデル化のその先へ

1.オブジェクト指向とは

オブジェクト指向は魔法の杖ではないです。だからそれは残念ながら私達の抱えるすべての問題を解決してくれるものでもありません。

だけど、少なくても私の身の回りでは、よくオブジェクト指向と言う言葉を聞くので、それは私達がソフトウェアを理解する為に役に立ちそうです。

モデルは昔のAI研究に登場

かつて、AIの研究には2つの方法がありました。それらは「確率的手法」と「分類と機械学習を用いた方法」と呼ばれる方法です。

現在では、前者が「Googleの方法」と言い、後者が「IBM Watsonの方法」と言ったほうが理解しやすいかもしれないです。

モデルの原型は「人の認識を観察する」

モデリングの歴史には、研究者たちはどのように人が物事を認識するのか?ということを考える必要がありました。それは認知科学コンピュータサイエンスにどう適応するのか?という問題を考えることと同じことになります。

なぜなら、当時、人がどのような物事を認識するのかを考えることなしに、AIのようなシステムは作ることができないと考えたからです。

学術的な分野では、このような「人の考えについて着目する研究」を分析哲学と呼びます。

「モデルを作る」とは「森羅万象を考える」こと

特に、人が物事をどのように認識するか?ということの研究は存在論と呼ばれています。

この存在論では、「全ての物事は、どのような関連があるか?」ということについて議論します。

ちょうどニワトリとタマゴはどちらが先か?という話のようなものです。ニワトリとタマゴがどちらが先か議論する為には、「ニワトリは何か?」という事と、「タマゴは何か?」ということが議論しなければならないですが、ニワトリやタマゴが何かを知る為には「ニワトリ」「タマゴ」とその他のものの関係を考えなければなりません。

この時関係を示す図のようなものが必要なのですが、この図をどのように描くか?というようなことは現在、グラフ理論と呼ばれる名前で研究されています。

私にも、ニワトリが先なのか、タマゴが先なのかはわからないけれど、少なくとも、ニワトリが先なのか、タマゴが先なのかを議論する為に、それらを指し示すものが必要あることは理解できます。

2.モデルって例えば

例えば、生物の分類について議論したいとします。

あなたには友達がいます。その友達はペットに犬を飼っています。そして、その友達はペットの犬に「アインシュタイン」と名付けます。この状況をソフトウェアの世界で言うと、「犬」という名前がクラス、犬:アインシュタインがインスタンスということになりますね。

今、私達は「犬」という分類について議論したいので、クラスの名前としては犬の名前「アインシュタイン」ではなく、「犬」という分類上の名前をクラスの名前にします。また、「猫」を登場させた場合、犬と猫の共通の呼び名は「動物」となるので、犬の上位概念は「動物」かもしれないです。同様に「あなた」や「私」は「人」という括りで呼ばれるかもしれないです。

それでは、「動物」と「人」の上位概念は何でしょうか?それは「生物」と呼ぶことができるかもしれないです。これが、もしも「犬」ではなく、「アインシュタイン」をクラスの名前として使っていたら、友達の犬「アインシュタイン」のことなのか、物理学者「アインシュタイン」のことなのか分からなくなってしまって、話が違った方向に行くかもしれないです。

example of model

3.モデルとクラスの関係

結局、普段私達がソフトウェアで使っているクラスは、前述したような場面でのモデリングが必要だった場面から登場しているようです。AIの研究は、人間が認識する物事をモデル化する必要があります。そのモデル化の過程で、「グラフ理論」を用いて、登場した物事の関係性を議論します。

私達がソフトウェアを作る時も、要求やニーズのような前提がありますが、この要求やニーズはモデル化される必要があります。このことは、先程述べた「どのように、私達が現実世界のものを計算可能なものにモデル化するか?」という意味で同じなので、それは「オブジェクト指向」と関係があります。

だから、「オブジェクト指向」を知る上で、「モデル化」を知る必要があります。そして、そのモデル化した最小の単位を、「クラス」と呼びます。

4.モデル化のその先へ

上の説明では、世の中の現象やニーズを「システム」と捉えるためには、モデル化をする必要があって、そのモデル化の最小単位を「クラス」と呼ぶということを説明しました。

では、「クラスやモデルの正しさはどのように測るのでしょうか?」

オブジェクト指向の世界では、クラスやモデルの正しさにはいくつかの原則があります。
下記の記事では、その原則を説明して、クラスやモデルの正しさは何なのかを説明しています。

オススメ
what is correctness of design on Object Oriented
【オブジェクト指向プログラミング】クラス設計の正しさとは?【→プログラム初心者向け】

続きを見る

また、オブジェクト指向言語と呼ばれるものがあります。pythonは1つのオブジェクト指向型のプログラミング言語です。

下記の記事では、pythonプログラミングの初心者向けの記事を紹介しています。pythonプログラミングの初心者の方は、読んでください。

オススメ
article of recommended to python beginner
【Python】初心者向けおすすめ記事まとめ【Pythonの文法をマスターする!】

続きを見る

pythonに限らず、「プログラミングする環境をどのように整えればよいのか?」という声に答えるために、
ブログ用のレンタルサーバでプログラミングする方法を下記の記事で紹介しています。プログラミングする環境を整えたい方はこちらを読んでください。

オススメ
how to programming on rental server
【Linux】レンタルサーバーでプログラミングする方法【→ブログのサーバーでできる!】

続きを見る

-オブジェクト指向
-