今日知っておくべき21のよくあるOOPインタビューの質問と回答

公開: 2022-09-20

オブジェクト指向プログラミングの面接の質問は、プログラマーと開発者がプロ​​グラミングの世界の主要な概念に関する知識を高めるのに役立ちます。

OOP は、手続きや関数ではなくオブジェクトやクラスに焦点を当てた、最も必要かつ必要なプログラミング パラダイムの 1 つです。

OOP ベースのプログラミング言語には、Objective-C、Java、Ada、Perl、Python、C++ などがあります。

大企業は、オブジェクト指向のアプローチとパターンに精通した開発者を求めています。

したがって、このような面接プロセスに参加する予定がある場合は、OOP の概念を深く理解している必要があります。

よくある OOP 面接の質問と回答のいくつかを見て、面接とテストの準備に役立ててください。

オブジェクト指向プログラミング (OOP): 概要

おっとっと

OOP は、オブジェクトを中心に展開するプログラミング パラダイムです。 ここで、オブジェクトは、クラス テンプレートで指定されたいくつかの動作と特性を含むクラスのように、実世界のインスタンスと見なされます。

たとえば、車を考えてみましょう。 OOP モデルによると:

  • オブジェクト: 車。 所有している車など、任意のタイプまたはモデルにすることができます。
  • Class : 車のモデルまたはタイプ (BMW、Chevrolet、Kia、Audi など)。
  • 特徴: 車の色、車台番号、エンジンの種類、ギアの種類など。
  • 振る舞い: ギアの入れ方、車の発進の仕方など。

ここで、特性はプロパティ、属性、またはデータとしても知られていますが、動作はプログラミング言語でプロシージャ、メソッド、または関数として知られています。

それでは、よくある OOP インタビューの質問から始めましょう。

OOP という用語は何を意味しますか?

回答:オブジェクト指向プログラミング (OOP) は、プロシージャと関数ではなく、オブジェクトとクラスに基づくプログラミング モデルです。 個々のオブジェクトはクラスに配置されます。 OOP は、ポリモーフィズム、隠蔽、継承などの概念とプログラミング パラダイムを使用して実世界のエンティティを記述します。

OOP はコードとデータを結合します。 オブジェクトは、特定の特性と動作を持つクラスを介して定義される現実世界のエンティティですが、クラスは特定のオブジェクトのパターンとして定義されます。 ユーザー定義データ型とも呼ばれます。

これには、モバイル アプリケーションとともに、設計および製造用のプログラムが含まれます。 たとえば、システム シミュレーション ソフトウェアの製造に OOP を使用できます。

OOP 以外のプログラミング パラダイムにはどのようなものがありますか?

プログラミングパラダイム

回答:プログラミング パラダイムは、各言語の機能に基づいてプログラミング言語を分類する方法です。 プログラミング パラダイムには、次の 2 種類があります。

  • 命令型プログラミング パラダイム:ロジックの実行方法に焦点を当て、制御フローを定義します。 これには、手続き型プログラミング パラダイム、オブジェクト指向プログラミング (OOP)、および並列プログラミングが含まれます。
  • 宣言型プログラミング パラダイム: プログラムで何を実行するかに焦点を当て、制御フローではなくロジックを定義します。 これには、論理プログラミング パラダイム、関数型プログラミング パラダイム、およびデータベース プログラミング パラダイムが含まれます。

OOPとSOPの違いは何ですか?

回答: 次の表を使用して、OOP と SOP の違いを理解しましょう。

オブジェクト指向プログラミング構造指向プログラミング
これは、プロシージャーや関数ではなく、オブジェクトに基づくプログラミング モデルです。 これは、プログラムが関数に分割される論理構造をプログラムに提供します。
ボトムアップアプローチに従うトップダウンのアプローチに従う
データの隠蔽またはカプセル化を提供データの隠蔽は提供しません
複雑な問題を解決できます。 中程度の問題を解決できます。
コードを再利用できるため冗長性が低いコードの再利用性はサポートされていません。
より柔軟柔軟性が低い
その主な関心事はデータです。 その主な関心事は、プログラムの論理構造です。

OOP の主な機能は何ですか?

機能フープ

回答: OOP の主な機能は次のとおりです。

  • 継承
  • カプセル化
  • 抽象化
  • ポリモーフィズム
  • メソッドのオーバーライド
  • メソッドのオーバーロード
  • オブジェクト
  • クラス
  • コンストラクタとデストラクタ

継承、ポリモーフィズム、およびカプセル化は、これらの機能を非 OOP 言語と区別する OOP の基本要素です。

カプセル化とは?

回答:カプセル化とは、クラス、変数、メソッドなどをカプセル内に配置する方法であり、作業を実行して同じカプセルをユーザーに提示するために必要です。 簡単に言えば、必要なすべてのメソッドとデータがまとめられており、不要な詳細はユーザーから隠されています。

他の方法で定義することもできます:

  • データ バインディング:カプセル化は、データ メンバーとメソッドをクラスとして、または全体としてバインドするプロセスです。
  • データの隠蔽:カプセル化は、オブジェクトのメンバーへのアクセス制限など、不要な情報を隠すプロセスです。

ポリモーフィズムとは

ポリモーフィズム

回答:用語をそれを形成する 2 つの単語に分けて、ポリモーフィズムを理解しましょう。

「ポリ」は「たくさん」という意味

「モーフ」とは「形」を意味します

したがって、ポリモーフィズムは、さまざまな形状を持つオブジェクトとして説明できます。

OOP では、データ、オブジェクト、メソッド、またはコードが複数のコンテキストまたは状況下で異なる動作をするプロセスと呼ばれます。 OOP モデルには 2 種類のポリモーフィズムがあります。

  • 実行時ポリモーフィズム
  • コンパイル時のポリモーフィズム

つまり、1 つのインターフェイスの複数の定義です。 たとえば、'vehicle' という名前のクラスがあり、これはメソッド'speed' で構成されています。 車両によって速度が異なるため、速度を定義することはできません。 したがって、これは、さまざまな車両のさまざまな定義のサブクラスで定義できます。

静的ポリモーフィズムとは

回答:静的ポリモーフィズムは、コンパイル時ポリモーフィズムとも呼ばれます。 これは、値に基づいてオブジェクトをそれぞれの演算子または関数にリンクできる機能です。 これは、演算子のオーバーロードまたはメソッドのオーバーロードによって実現できます。

ここでは、メソッドは似たような名前を使用していますが、各名前のパラメーターは異なります。 オブジェクトは、同様のトリガーに対して異なる動作をします。 したがって、複数のメソッドが同じクラスに実装されます。

動的ポリモーフィズムとは

動的多形性

回答:動的ポリモーフィズムは、ランタイム ポリモーフィズムとも呼ばれます。 これは、実行中または実行時に機能の実際の組み込みが解決される OOP のポリモーフィズムのタイプを指します。 メソッドのオーバーライドによって実現できます。

たとえば、bike と Yamaha の 2 つのクラスが作成され、Yamaha クラスは bike クラスを拡張してその run() メソッドをオーバーライドします。 サブクラス メソッドは親クラス メソッドをオーバーライドするため、実行時に呼び出されます。

クラスとは何ですか?

回答:クラスは、メンバー データと呼ばれる値を含むブループリントまたはテンプレートとして定義できます。 また、関数または動作と呼ばれるいくつかの規則も含まれます。 オブジェクトを作成すると、クラスで定義された関数とデータが自動的に取得されます。

ただし、クラスはオブジェクトの設計図またはテンプレートです。 クラスに基づいて、要件に応じていくつでもオブジェクトを設計できます。 たとえば、最初に車のテンプレートが作成されます。 その後、車のテンプレートに基づいてさまざまな車のユニットが設計されます。

オブジェクトとは

オブジェクト

回答:オブジェクトは、テンプレートで定義された動作とメンバーのインスタンスを含むクラスのインスタンスとして定義できます。 オブジェクトはユーザーが操作する実際のエンティティですが、クラスはそのオブジェクトの青写真にすぎません。

したがって、オブジェクトにはいくつかの特性または動作があり、スペースを消費します (たとえば、特定の自動車モデル)。

クラスと構造体の違いは何ですか?

答え:表を使ってこれを理解しましょう:

クラス構造
クラスは参照型です。 構造体は値型です。
ヒープメモリに割り当てられます。 スタック メモリに割り当てられます。
大きい参照型の方が割り当てが安い割り当ては、参照型よりも値型の方が安価です
無限の機能があります。 機能が制限されています。
クラスは大規模なプログラムで使用されます。 構造体は小さなプログラムで使用されます。
コンストラクタとデストラクタが含まれています。 パラメーター化されたコンストラクターまたは静的コンストラクターが含まれています。
インスタンスを作成するたびに new() キーワードを使用します。 キーワードの有無にかかわらず、インスタンスを簡単に作成できます。
クラスは別のクラスから継承できます。 構造体は継承できません。
クラスのデータ メンバーは保護できます。 構造体のデータ メンバーは保護できません。
関数メンバーは抽象または仮想にすることができます関数メンバーを抽象または仮想にすることはできません
クラスの 2 つの異なる変数には、類似したオブジェクトの参照を含めることができます。 各変数には独自のコピーが含まれます。

継承とは

継承

回答:継承は、クラスが別のクラスの主要なプロパティを継承できるようにする OOP の機能の 1 つです。 たとえば、「vehicle」がクラスの場合、「car」、「bike」などは、クラス「vehicle」から主要なプロパティを継承できる他のクラスです。

この機能は、冗長なコードを取り除くのに役立ちます。 したがって、コードのサイズを縮小します。 簡単に言えば、継承は、親クラスから子クラスへのプロパティの受信者として定義されます。 ここで、'vehicle' は親クラスで、'car' または 'bike' は上の例の子クラスです。

このようにして、同じコードを再度記述したり、プロセスで時間を浪費したりすることなく、あるクラスのプログラミング コードを別のクラスで再利用できます。

さまざまな種類の継承とは何ですか?

回答: OOP モデルで使用される継承には、次のようなさまざまなタイプがあります。

  • 単一継承:単一のクラスが単一の基底クラスの共通機能を継承する継承として定義されます。
  • 多重継承:単一のクラスが複数のクラスを継承する場合に問題になります。
  • マルチレベル継承:これは、あるクラスが、他のクラスのサブクラスである他のクラスから継承することを意味します。
  • 階層的継承: 1 つのクラスが複数のサブクラスを持つ継承を指します。
  • ハイブリッド継承:マルチレベル継承と多重継承の組み合わせです。

継承の制限は何ですか?

継承の制限

回答:継承の制限の一部は次のとおりです。

  • プログラムの実行に必要な労力と時間が増加します。 これは、あるクラスから別のクラスに頻繁にジャンプする必要があり、時間がかかるためです。
  • 親クラスは、子クラスとともに非常に緊密に結合されているため、柔軟性が低くなります。
  • 慎重に組み込む必要があります。そうしないと、不十分または不正確な結果につながります。
  • プログラムを 1 回変更すると、親クラスと子クラスの両方のコードが変更される可能性があります。

抽象化とは

回答:抽象化は、OOP の要素の 1 つです。 抽象化の重要な役割は、複雑さを処理することです。 これは、不要な詳細をユーザーから隠すことによって行われます。 これにより、ユーザーは隠れた複雑さについて考えることなく、抽象化の上に複雑なロジックを実装できます。

たとえば、あなたがコーヒー愛好家なら、コーヒー マシンを使ってコーヒーを淹れるには、牛乳、コーヒー豆、角砂糖をどれだけ加えればよいかを知る必要があります。 その機械の動作原理について考えても意味がありません。 コーヒーマシンはあなたが知る必要のない隠れた複雑さですが、コーヒーを淹れるプロセスは必要不可欠です。

抽象化には次の 2 種類があります。

  • データの抽象化
  • プロセスの抽象化

コンストラクタとは

コンストラクタ

回答:コンストラクターは、名前がクラス名に似ているクラスまたは構造体の特別なメソッドです。 オブジェクトを初期化するという必要な目的を果たします。 また、クラスにオブジェクトを割り当てるメソッドだけでなく、メンバー データのインスタンス化にも役立ちます。

コンストラクターを作成するときは、次の点に注意する必要があります。

  • クラス名と同じ名前が付けられます。
  • 抽象的、最終的、または静的にすることはできません。
  • 戻り型変数はありません。

C++ のさまざまなタイプのコンストラクターは何ですか?

回答: C++ には、主に次の 3 種類のコンストラクターがあります。

  • デフォルトのコンストラクター:定義にパラメーターまたは引数がないコンストラクター。 このタイプのコンストラクターは、データ メンバーまたは変数を実際の値で初期化するために使用されます。
  • パラメーター化されたコンストラクター:宣言と定義に引数またはパラメーターが含まれています。 パラメーター化されたコンストラクターを介して複数のパラメーターを渡すことができます。 複数のコンストラクターの違いを知るためのオーバーロードに使用されます。
  • コピー コンストラクター:同様のクラスの別のオブジェクトを使用してオブジェクトを初期化するメンバー関数です。 さらに、単一のオブジェクトから別のオブジェクトにデータをコピーするのにも役立ちます。

デストラクタとは

デストラクタ

回答:デストラクタは、オブジェクトを破棄するときに自動的に呼び出されるメソッドです。 特定のアクションを実装します。

  • オブジェクトの初期化中に以前に割り当てられたヒープ領域を回復する
  • データベース接続とファイルを閉じる
  • ネットワーク リソースとリソース ロックの解放
  • さまざまなハウスキーピング タスクの実行

つまり、デストラクタは、コンストラクタによって初期化されたオブジェクトを破棄します。 これは、クラス名と同じ名前の特別なメンバー関数ですが、前に (~) 記号が付きます。 デストラクタは一方向関数であるため、オーバーロードできます。

ガベージ コレクション (GC) とは何ですか?

回答:ガベージ コレクション (GC) は、Java や C# などのプログラミング言語に組み込まれているメモリ回復要素です。 GC 対応のプログラミング言語には、プログラム内で不要になったメモリ領域を自動的に解放するガベージ コレクタが少なくとも 1 つ含まれています。

ガベージ コレクションは、プログラムがまだメモリ クォータ内にあることを確認します。 開発者がプロ​​グラムのメモリを手動で管理することを防ぎ、メモリ関連のバグを最小限に抑えます。

例外処理とは

例外処理

回答:例外処理は、コンピューター プログラムの実行中に予期しないイベントに対応する方法です。 プログラマーは、システムまたはプログラムがクラッシュするのを防ぐために、不要なイベント (例外) を「処理」する必要があります。 この方法を使用しないと、例外によってプログラムの一般的な操作が中断され、非効率またはリスクが生じる可能性があります。

try/catch ブロックとは

回答: tryまたはcatchは、プログラム実行中のコーディング エラーまたはデータ エラーによる例外処理を表すキーワードです。

  • tryブロックは、例外が発生するコード ブロックです。
  • catchブロックは try ブロックの例外を処理してキャッチします

tryおよびcatchステートメントは、C++ を含むさまざまなプログラミング言語で頻繁に使用されます。 C#、Java、SQL、および JavaScript。 すべてのtryステートメントは、実行を処理するためにcatchステートメントと一致します。 以下は、 tryおよびcatchステートメントで覚えておくべきいくつかの事項です。

  • try ブロックの後には catch ブロックが続きます。
  • try ブロックの後には、少なくとも 1 つの catch ブロックが続きます。
  • try ブロックの後に別の try ブロックが続き、さらに catch ブロックが続きます。

結論

OOP は、プログラマーが知っておくべき重要な概念です。 それを徹底的に学ぶことは、OOP の概念を使用する言語でうまくプログラミングするのにも役立ちます。

面接または試験の準備をしている場合、上記の面接の質問と回答は、クラス、オブジェクト、カプセル化、ポリモーフィズム、継承、抽象化などの OOP の概念の理解を新たにするのに役立ちます。 このようにして、自信を持って面接に臨み、面接を成功させてキャリアを築くことができます。

また、これらの SQL 面接の質問のいくつかを参照することもできます。