C++でオブジェクト指向プログラミングを始めるには?基本概念をわかりやすく解説
オブジェクト指向プログラミング(Object-Oriented Programming、OOP)は、「オブジェクト」という概念を土台としたプログラミング手法(パラダイム)です。オブジェクトは、属性(attribute)という形でデータを保持し、メソッド(method)という形で処理内容を備えています。
たとえば「人間」をオブジェクトとして捉えると、身長・性別・年齢といった属性を持ち、「移動する」「話す」などのメソッドを持つことになります。
オブジェクトとは
オブジェクトは、オブジェクト指向プログラミングにおける基本単位です。データと、そのデータを操作する関数(処理)が、ひとつのまとまりとして束ねられたものがオブジェクトです。
クラスとは
クラスを定義するということは、オブジェクトの設計図(ブループリント)を定義することです。クラスそのものは実際のデータを持ちませんが、そのクラス名が何を意味するのか――すなわち、そのクラスから生成されるオブジェクトがどのようなデータで構成され、どんな操作が可能になるのかを定めます。
OOPは、次の4つの基本概念の上に成り立っています。それぞれ順番に見ていきましょう。
- 抽象化(Abstraction): 外部に対しては必要な情報だけを提供し、内部的な詳細は隠すことを指します。たとえばWebサーバーは、受け取ったデータをどのように処理しているかをユーザーに見せず、エンドユーザーはエンドポイントへアクセスしてデータを受け取るだけで済みます。
- カプセル化(Encapsulation): データメンバー(変数やプロパティ)とメンバー関数(メソッド)をひとつの単位にまとめる仕組みです。同時に、特定のプロパティへのアクセスを制限する手段としても機能します。
- 継承(Inheritance): 既存のクラスをもとに新しいクラスを作り出す機能です。継承を使えば、親クラスから子クラスを生成でき、子クラスは親クラスの属性やメソッドを引き継ぎながら、独自の属性やメソッドを追加できます。たとえば、Color(色)やPrice(価格)などの属性を持つVehicle(乗り物)クラスがあれば、そこからBike(バイク)とCar(車)という2つのクラスを派生できます。両者は親の属性を共有しつつ、CarにはnumberOfWindows(窓の数)といった車固有の属性を持たせることが可能です(バイクには該当しません)。この考え方はメソッドについても同様に当てはまります。
- 多態性(Polymorphism): 「多くの形を持つ」という意味を持つ言葉です。一般に多態性は、クラス階層が存在し、それらが継承関係で結ばれているときに現れます。C++における多態性とは、メンバー関数の呼び出しが、その関数を呼び出したオブジェクトの型に応じて異なる処理を実行することを意味します。たとえばShape(図形)クラスにgetArea(面積の取得)メソッドがある場合、図形の種類に応じて面積の計算方法が切り替わります(円と正方形では計算式が異なる、といった具合です)。
C++のオブジェクト指向プログラミングについてさらに学びたい方は、Tutorialspointの充実したチュートリアル「C++ Object Oriented Programming」を参考にすると、OOPの学習をスムーズにスタートできます。
-
【JavaScript】オブジェクトがクラスのインスタンスかどうかを判定する方法
JavaScriptでは、instanceof 演算子を使うことで、あるオブジェクトが特定のクラス(コンストラクタ関数)のインスタンスであるかどうかを簡単に判定できます。instanceof 演算子とは?instanceof 演算子は、左辺のオブジェクトが右辺に指定したコンストラクタ関数のプロトタイプチェーン上に存在するかどうかを評価し、その結果を真偽値(true / false)として返します。この仕組みを利用することで、オブジェクトがどのクラスから生成されたものなのかを実行時に動的にチェックできます。コード例以下は、ボタンをクリックしたときに student1 オブジェクトが Studen
-
Pythonのオブジェクト指向プログラミング入門:クラス・インスタンス・カプセル化の基礎を解説
Pythonは、誕生当初からオブジェクト指向プログラミング言語として設計されてきました。クラスとオブジェクトは、オブジェクト指向プログラミングにおける2つの主要な構成要素です。クラスは新しい型のオブジェクトを作り出すための設計図であり、そのクラスから生成された個々の実体が「インスタンス(オブジェクト)」と呼ばれます。それでは、最もシンプルなクラスを作成してみましょう。Pythonでクラスを定義するまず、空のクラスを定義してみます。# クラスを定義する class Vehicle(): pass # 空のブロック # オブジェクトのインスタンス化 v = Vehicle() prin