PHPなどオブジェクト指向言語のクラスとオブジェクトとは

JavaやPHP,Rubyはオブジェクト指向のプログラミング言語です。

Cや古いバージョンのPHPは手続き型言語と言いうそうです。

大学とかで習うプログラミングはC言語が多いのではないでしょうか。

 

Java言語を使うプロジェクトで開発していたときは、1つのメソッド内にずらずらとコードを書き続けるC上がりのエンジニアみたいな人もいました。

でも、お客さんから言わせればどう書かれていようが仕様通りに動けばいいんでしょうけど。

恥ずかしくならない程度に僕の知っているオブジェクト指向についてまとめていこうと思います。(内容違ってたらすみません)

オブジェクト指向とは

まずオブジェクト指向とは。

オブジェクト指向の”オブジェクト”は物という意味です。

1つのWEBシステムを構築するプログラムを分解し、各パーツを”オブジェクト”として定義し役割を与えてそれらを利用して処理を構築します。

そしてそのオブジェクトは処理とデータを持ちます。

 

僕はプログラミングを勉強し始めた頃ここまででちんぷんかんぷんでした(笑)

そんなとき先輩がしてくれた説明がなんとなく理解出来たのでそのときの説明をそのまま書きます。

先輩はデブでにちゃにちゃしてていつも手に紙が張り付いていましたが、めちゃくちゃ頭が良くてお酒の美味しい店をたくさん知ってて今でも尊敬しています。

先輩「例えばポットをオブジェクトとしてイメージしてみよう。ポットには水を貯めて加熱し保温する機能があります。
ポットオブジェクトは、現在の水の量現在の水の温度をデータとして持ちます。
そして、現在の水の温度が下がってきたら加熱するという処理を持ちます。しかし、その加熱する処理は水が空の場合は行いません。
オブジェクトを細かく分解するなら、ポットオブジェクトは温度を計測するセンサーオブジェクト水を貯めるタンクオブジェクトお水を加熱するヒーターオブジェクトからなります。
センサーオブジェクトは、現在の水の温度をデータとして持ち、温度を計測する処理を持ちます。
タンクオブジェクトは、現在の水の量をデータとして持ち、給水したりその水を貯めるという処理を持ちます。
ヒーターオブジェクトは、加熱する処理を持ちます。」

確かこんなんだったと思います。

これ結構イメージできませんか?僕はこれでなんとなく理解できました。

 

そして、WEBシステムにはMVCという役割があります。

DBにアクセスする役割のM(モデル)と、画面を構築するV(ビュー)、MやVを操作するC(コントローラー)です。

このMVCは1つのWEB処理を実行するためのオブジェクトです。

1つのWEB処理がポットだとしたときに、センサーやタンクなどがMVCになります。

 

このように世の中全ての物や概念などがオブジェクトとして定義できます。

クラスとは

クラスはオブジェクトがどんなデータを持ちどんな処理をするかを定義するものです。

データ部分のことをインスタンス変数と言います。

処理部分のことをメソッドや関数と言います。(メソッドと関数は厳密には別物なのかな?)

よく言われるのは、オブジェクト指向のクラスとは設計図のことで、その設計図から実際に物にしたものをインスタンスと言います。

インスタンスとは

インスタンスとは、クラスを元に実体化させた物です。

インスタンスのことをオブジェクトと呼んだりもします。

「実体化とか手で持てるわけじゃないじゃんw」のように思うかもしれませんが、クラスを元に実際にメモリに確保されます。

 

1つのクラスから作成できるインスタンスは1つではありません。

例えば上で紹介したポットオブジェクトの場合は、ヒーターやタンクは1つずつしか使いませんが、それらを固定する為のネジオブジェクトがあったとします。

ネジは様々な規格がありますがここでは1つの規格のネジを使うとします。

ネジは1つのポットオブジェクトに1つではありません。複数使います。そしてネジを設計するクラスは1つだけです。

オブジェクト指向のメリット

オブジェクト指向の最大のメリットは、大規模プロジェクトの場合にそれぞれの役割を分割できるところです。

プログラミングをパーツごとに担当者を決めて設計やコーディングが出来るので競合したりすることが無いです。

 

それと、僕にとっての最大のメリットは現実世界のもので例えやすいところです。

例えば僕はシステム開発を依頼されたら頭の中で”大きなのっぽの古時計”をイメージします。

そして、あれが必要これが必要的な感じで概要と見積をまとめます。(大概は外れて予算超えて泣きますが)

ただ、これはデメリットでもあると思います。

オブジェクト指向のデメリット

オブジェクト指向のデメリットは、オブジェクト指向を理解するのが大変だということ。

分かってしまえば面白いのですが、いくら現実のものとして例えれると言ってもサクッと理解できるものではないでしょう。

最初はクラスとインスタンス変数とメソッドから成るプログラムのパーツを組み立ててシステム構築をする程度に思って、くちゃくちゃのスパゲティを組んで失敗するのが一番成長すると思います。

まとめ

オブジェクト指向とは、プログラムのパーツを1つの物(オブジェクト)として定義して組み立てる言語。

クラスで設計書で、実体化させたものをインスタンスと言う。

慣れれば考えやすくて設計などもしやすいが、慣れるまではかなり大変だと思う。

でも、実際最近の言語はオブジェクト指向の言語が多いため、理解しなければいけない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA