見出し画像

オブジェクトという考え方

オブジェクト指向UIデザインに再び光が当たり、普段プログラミングをしないデザイナーやディレクターもオブジェクト指向という考え方に触れる機会が一気に増したと思います。

私自身も、これまで何度もOOUIでのオブジェクトについて説明してきましたが、その都度、もっとシンプルに説明できないかと考えていました。
そこで、ノンプログラマーの方にもわかりやすく、オブジェクトという概念を説明することを試みることにしました。

オブジェクト

オブジェクトとは、同じ種類のものをまとめて一つの名前を与えたもののことをいいます。ここでは、同じ特徴をもっていて同じ動きをするものを、同じ種類だと考えます。

いろいろな種類の自動車を抽象化して自動車オブジェクトと考える
似た特徴があり同じ動きをするものを抽象化する

たとえば、道路には4つのタイヤがついた箱がビュンビュン走っています。この箱はだいたいみんな似た形をしていて、箱の中には必ずエンジンが入っています。それに、走ったり止まったり、加速したり旋回したりという同じ動きをします。
なので、これらの箱は同じ種類だといえます。これらをまとめて言い表すために「自動車」という名前を与えておきましょう。このようにして、自動車オブジェクトを見つけることができました。

しかし、オブジェクトは目に見えるものだけに限りません。

たとえば私たちはメルカリで商品が購入されたら、商品を包んで宅配業者に持っていきます。
宅配業者では毎日たくさん配送を行いますが、どの配送にも、送り主、受取人、荷物、配送日時が必要です。また、配送にあたって配送状況という情報が生じます。そしてどの配送も、配送日時を変更したり、配送状況を変更したり、同じ操作ができます。なので、「配送」もオブジェクトとして考えることができます。
このように、目に見える有形物だけでなく、出来事や役割などもオブジェクトになりえます。

配送という出来事もオブジェクトになる

ところで、同じ特徴や動きをもつものを抽象化してオブジェクトにできるといいましたが、「特徴」や「動き」についてももう少し説明します。

オブジェクトの「属性」

オブジェクトでは、特徴のことを「属性」として表現します。属性は、ほかにデータや状態、プロパティとも呼ばれます。
たとえば、自動車オブジェクトなら、メーカー、車種、ボディカラー、トランスミッションといった属性があるでしょう。
属性には、個々の自動車によっていろいろな値がはいります。たとえば、ホンダのフィット、ボディカラーはプラチナホワイト・パール、トランスミッションはCVTというような具合です。

オブジェクトの「操作」

また、動きのことは「操作」として表現します。操作は、ほかにメソッドや振る舞い、アクションとも呼ばれます。
自動車の例でいえば、エンジンを始動する、エンジンを停止する、発進する、加速する、旋回する、停車するといった操作があるでしょう。
操作にも値を必要とする場合があります。たとえば高速道路を時速100kmで走行するときには、加速するという操作には「時速100kmまで」という値が入るでしょう。

属性に値が入っている「フィット」オブジェクト

ここまでで、オブジェクトという概念について、なんとなく理解できたでしょうか。
つぎに、オブジェクト指向プログラミングで開発を行ううえで重要な、クラスとインスタンスという概念についても説明します。

クラス

クラスとは、オブジェクトのひな形のようなものです。オブジェクトが具体的にどのような属性をもつか、どのような操作をもつかを定義したものがクラスです。
自動車の例でいえば、工場で自動車の設計図といったところです。

UIデザイナーやプログラマーは、クラスを設計しながら、システムにおいて各オブジェクトどのような存在で、何をするのかを定めていきます。この工程はオブジェクトモデリングとも呼ばれます。

インスタンス

インスタンスとは、とあるクラスから生成された個々のオブジェクトのことです。インスタンスには属性に値が入っており、実際に操作できます。外を走っている自動車は、自動車クラスのインスタンスといえます。

また、とてもややこしいですが、インスタンスのことをオブジェクトという場合もあります。オブジェクトとインスタンスの違いを挙げるとすれば、オブジェクトは概念的な意味での実体であり、インスタンスはあるクラスから生成される特定の実体を指すことです。

クラスをもとにインスタンス化した自動車オブジェクト

まとめ

ここまでで、オブジェクト、クラス、インスタンスという重要な概念を学んできました。
簡単に振り返ると、オブジェクトとは私たちがひとつの種類として認識できる概念のこと、クラスはシステム開発におけるオブジェクトのひな形、インスタンスはクラスを使って実体化したオブジェクトであるといえます。

「ツイート」オブジェクトの例

これらの概念を理解することは、UIデザインやシステム開発においてとても重要です。この知識をもとに、デザイナーもプログラマーも垣根なく、創造的にプロジェクトに取り組むことができることを祈っています。

参考文献

いいなと思ったら応援しよう!