クラスとは何か

オブジェクト指向の概念であるクラス。
クラスとは何かと聞かれると最近の答えの流行りは設計図のようですね。
僕はあまりしっくり来ません。

設計図はクラス図のことで、UMLやSysMLの図の中の一つです。
少し大きめのソフトウェアを作る時、僕はクラス図を書いてクラス設計をします。

クラスが設計図ならクラス設計は設計図設計になってしまいます。
何かがおかしい。

僕はC言語からプログラマーの世界へ入ってるので、
オブジェクト指向否定派の一人でした。

オブジェクト指向の嬉しさが全くわからず調べてみても自動車やら動物やらの例ばかり。
で、何が嬉しいの?が全くわからない。
抽象化、多様性、ポリモーフィズム、カプセル化・・・だから何?

そんな僕がクラスの嬉しさについて少し語ってみようかと思います。
クラスの嬉しさは「再利用」と考えるのが良いのではないかと僕は考えます。


オブジェクト指向。
何気に言葉で躓きます。

オブジェクト → 物、物体、目標、対象・・・
指向 → ある目的をめざして向かうこと。定まった方向に向かうこと、また、向けること。

「オブジェクト」自体も意味不明なのですが、
「指向」は最早中国語か何かなのではないかと思えるくらい馴染みがありません。
指向性マイクとか指向性スピーカーとかで微妙に理解してたら迷子になります。

ちなみに英語
Object Oriented Programming

Oriented
~志向の、~を重視した、~本位の、~の好み[動向]に合わせた

英辞郎 - Oriented 参照

「しこう」の字違いますね。

さ、闇が深まり混乱の渦に巻き込まれたところで全部忘れてください。
言葉に深い意味はありません。


さて、冒頭でお話しました「再利用」。
「再利用」の嬉しさに異論はないと思います。

再利用できるものは使い方さえ知っていれば使えます。

例えば僕らは掃除機の仕組みを知らなくても
掃除機を使ってゴミを吸引することができます。
毎回掃除機を組み立てるところから始めていては家は埃だらけ。

「再利用」の嬉しさは、作る方ではなく使う方に集中できることです。
生産性が上がり品質の高いものを短期間で仕上げる事ができます。

いや・・・「再利用」なんて関数でもできるし。
でーすーよーねー。
僕もそのクチでした。

ちょっと並べて比べてみましょう。
「一切中身に手を加えずに再利用できるもの」という観点で考えてくださいね。

  • 変数や手続き(1行ずつの処理)
  • 関数(変数と手続きの組み合わせ)
  • クラス(関数と関数をまたいで使える変数の組み合わせ)
  • ライブラリ(クラスの組み合わせ)
  • ソフトウェア(クラスやライブラリや手続きの組み合わせ)
  • システム(ソフトウェアと業務フローの組み合わせ)
  • ビジネス(システムとキャッシュフローの組み合わせ)

それぞれ存在意義があります。
下に行くほどやれることは多くなりますが小回りが利かなくなります。
上に行くほどできることは少ないですが小回りが利きます。

丁度よいさじ加減というのがあるのです。
粒度は実現したい事次第です。

どの単位で再利用するか。
下に行くほど効果は絶大です。


最近流行りのPythonは関数すら書かなくても動く言語です。
クラスの嬉しさなんてわからないというのもわかります。

毎回クラスやオブジェクト指向について調べて
何かわかった気になっても時間がたったら不安になる。

そんな方にはもっと雑に説明しましょう。
ファイルを分ける嬉しさならば分かりますかね。
もしかして全部一枚のファイルに処理を書いた方が良い派ですか?
その理論はあなたのプログラミング力の成長ですぐに破綻します。
絶対に分けたくなりますって。

ファイルの分け方。これが案外難しい。
どうせ分けるなら再利用しやすい形で分けた方がよいですよね。
物を整理整頓するのも、次回使いやすいようにですよね。

再利用しやすい分け方(考え方)がオブジェクト指向であり
プログラム上で再利用しやすい形にしたのがクラスですね。
次回は一行書くだけで同じことができるかもしれません。

・・・というのは理想論で、
そんな素敵なクラスが出来上がるのは稀ですが。

再利用というキーワードを是非覚えておいてください。

クラスとは何か

おわり

コメントする

メールアドレスが公開されることはありません。