Aggressive Style 5

読者です 読者をやめる 読者になる 読者になる

Aggressive Style 5

昨今はコミケ関係を中心に書いています。同人やニコニコ動画方面で活躍される方の相互リンクをお待ちしています。

IT業界の就職で知っておいたほうが良かったと思った事(3):MVC,OOP(オブジェクト指向プログラミング)に関する面接の質問をまとめてみた

本記事のターゲット層

  1. 従業員数が数十人以上で、役割分業化されている企業を受験する人
  2. PHPJavaなどのサーバー側の言語を用い、SQLのクエリの結果を画面上に表示させることが出来る方
  3. 「Webを目指す全ての皆様に送るクリスマスプレゼント 〜PHPでタイムレコーダーを作る〜」と同等又はそれ以上のデータベースに関するアプリケーションを作成、及び作成方法を人に説明できる方

概要

「プログラムは組めるけど、細かい機能のまとまりに分けられなくて」とか「一人で開発は出来るんだけど役割分業を意識するのが苦手」と、複数人で開発する場合に必要となって来るのがMVCOOP(オブジェクト指向型開発)です。企業のプロジェクトに依っては、n(n>2)人で開発する場合があります。そのとき「○○担当」と言うように複数の役割分業がなされることとなる。まずは役割分業についての面接の質問をまとめてみました。

質問1.「MVCの概要をお答えください」

MVCとはソフトウェアの設計モデルの一つで、処理の中核を担う「Model」、表示・出力を司る「View」、入力を受け取ってその内容に応じてViewとModelを制御する「Controller」の3要素の組み合わせでシステムを実装する方式だ。尚MVCの概念は多くのフレームワークで採用されており、フレームワークに触れる事で取得が容易となります。MVCを採用している企業から「MVCの概要をお答え下さい」と面接で聞かれる事も多いので確認しておきましょう。

回答1

WebシステムをModel,View,Contorollerの3つの部分に分け、画面のデザインを担当する人と、データーベースのデータを呼び出す人とに作業を分業するための手段の事をいいます。具体的には、

  • Model:データーベースとのやり取りを格納した場所。
  • View:Modelの内容を、画面に直接表示するための場所。
  • Controller:Modelの内容をViewに反映させるための設定を記述する場所

と3つの部分に分け、システムを設計していくメリットがあります。

質問2:「MVCの利点と欠点はなんですか?」

技術面接を受験する上で事前に「●●(言語、フレームワーク)の利点と欠点はなんですか?(メイプルシステムズ等)」と聞かれる事があります。そのため自分が過去に使った言語の利点と欠点をまとめて置くと良いです。これは会社に入ってシステムの仕様決めをするときなどに、人に利点や欠点を説明する場合などに役に立ちます。早速自分の経験からMVCの利点と欠点をまとめてみました。

回答2


利点 欠点
デザイナー、プログラマーに分けて作業がしやすい フレームワーク(MVC)の習得に時間がかかる場合がある。
プログラムの役割が明確なため、全体の見通しがよくなる HTTPメソッドのGETやPOSTなど基本的な事が蔑ろにされやすい

この他利点や欠点の確認がしやすくなるように「利点欠点チェックシート」を用意しました。google driveから「言語やフレームワークの利点や欠点」をダウンロードしてください。

URLはこちら(google drive)



確認:オブジェクト指向プログラミング(OOP)とは?

次はオブジェクト指向型言語にまつわる質問をまとめてみます。役割分業化が当たり前の昨今このような質問をする会社が増えました。「●●君は修正」「△△君は新規開発」と言うようにプロジェクト毎の役割別に仕事
をしていく上で「みんながわかりやすい仕様」「会社のやり方に合わせた方法」で仕事をしていくことが必要とされます。まずe-wordsからオブジェクト指向プログラミング(OOP)の意味を引用してみます。


データとそれを操作する手続きをオブジェクトと呼ばれるひとまとまりの単位として一体化し、オブジェクトの組み合わせとしてプログラムを記述するプログラミング技法。プログラムの部分的な再利用がしやすくなるなどのメリットがある。代表的なオブジェクト指向言語としては、C言語オブジェクト指向的な拡張を施したC++言語や、Sun Microsystems社のJavaXerox社のSmalltalk、NeXT社(現Apple社)が自社のOSであるNeXT STEP向けアプリケーションソフト開発用に開発したC言語ベースのObjective-Cなどがある。

質問3:「オブジェクト指向のクラスとインスタンスについて説明しなさい」(株式会社オルトプラス)

上記は筆記試験で聞かれたものですが、口頭で聞かれることもあります。クラスは特定の変数や手続きをまとめたひな形で、インスタンスはそのひな形の実体を表します。具体的には、

回答3

  • クラス:オブジェクト指向プログラミングにおいて、データとその操作手順であるメソッドをまとめたオブジェクトの雛型を定義したもの。
  • インスタンス:オブジェクト指向プログラミングで、クラスを基にした実際の値としてのデータのこと。クラスと対比して用いられることが多く、クラスを「型」、インスタンスを「実体」として説明されることもある。

確認:オブジェクト指向型言語の三大要素について

面接ではオブジェクト指向型言語の特徴についての話題が登場することもしばしばあります。以下はオブジェクト指向型言語の三大要素と言う、オブジェクト指向型言語の利点をまとめたものです。

  • 継承:既存のクラスに追加する形で、サブクラスを定義する事。
  • カプセル化:クラスの変数に修飾子を付ける事により、変数をクラス内に隠蔽でき、外部から操作されにくいようにする事
  • ポリモーフィズム:インターフェースを用いたプログラムを設計。物の価格に置ける仕入れ値、売値の計算を違うクラスに新たに定義することで、既存のクラスに変更を加える事無く追加が可能になります。(デザインパターンにおける、Decoratorパターン)

質問4-1:修飾子public,protected,privateの違いについてご説明ください(カプセル化についての基本問題)

回答4-1

  • private修飾子:自分自身が含まれるクラス内からしかアクセスできない
  • protected修飾子:同じパッケージ及び継承するサブクラスからしかアクセスできない。
  • public修飾子:全ての場所からアクセス可能。

質問4-2:修飾子static,finalの違いについてご説明ください(「プログラマー面接時の技術的な質問事項(アプレッソ版)」より)

回答4-2:

  • static修飾子:そのクラスのオブジェクトすべてに共通して利用するための修飾子(他のクラスでも流用が可能)
  • final修飾子 :変数やメソッド、クラスの今後の変更を認めないための修飾子。

問題5:次のJavaプログラムの誤りの箇所を答えよ



解答5

A.javaのコメントにある通り、privateの変数をサブクラスで参照しようとするとコンパイルエラーになります。PHPの場合だと空の「num5=」といった具合に出力される場合があります。同じような言語でも動きが違う場合があるのでご確認ください。本問のようなJavaの基本的な挙動を確認したいと言う方は、「独習Java」など基本的な書籍で確認しましょう。


独習Java 第4版

独習Java 第4版

おすすめ書籍など

最後におすすめの書籍について話そうと思います。面接では人と話す上での共通の話題をどれだけ知っているかを試すために、「デザインパターン(→wikipedia)」について聞かれることもあります。本記事では筆者が無知なもので、紹介こそありません。万一デザインパターンについて確認したい場合は、以下の様な書籍を読むと良いかもしれません。


増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

又「Javaで●●を実装しなさい」と面接で試されるかもしれません。こういった場合の練習問題が収録された本を紹介します。以下の書籍の「オブジェクト指向設計」では数問このような問題が収録されています。


世界で闘うプログラミング力を鍛える150問 ~トップIT企業のプログラマになるための本~

世界で闘うプログラミング力を鍛える150問 ~トップIT企業のプログラマになるための本~

過去記事

参考にした記事