オブジェクト指向のデザインスキルをどのように評価しますか? [閉まっている
https://softwareengineering.stackexchange.com/questions/20801
-
22-10-2019 - |
質問
どのような洞察や質問が、人のOOADスキルを決定するように導くでしょう。
解決
単純な問題の半分のAOデザインを表示し、それが何をしているのか、それについて何が良いことと悪いか、それが十分に柔軟であり、何が改善されるか、どのように何をするのかを議論することができます。
ディスカッションを行う必要がある場合は、その人がコードの何らかの側面についてどう思うか尋ねますが、主要な質問ではありません。
重要なのは、事前に答えを知っていたことではなく、議論が重要であることを覚えておくことです。まともな開発者は、あなたが以前に考えさえしなかったコードについて何かを指摘できるはずです。
他のヒント
オープンエンドデザインの問題について、その人と話し合います。システムのモデルを構築する方法、どのような質問が尋ねられるか、新しい情報に応じて設計がどのように変化するかを確認してください。
彼のブログ投稿の1つでスティーブイェギージが言及した素晴らしい例は、その人にXMLのオブジェクトモデルを考え出すように頼むことです。
最も人気のあるすべての知識を持っています デザインパターン 候補者が実際に設計上の問題の解決策を検索したことを証明できます。
それらについて話し合い、いつそれらを適用するかを知ることができるかどうかは、彼がそれらを理解しているという良い兆候です。
たとえば、彼に過去の経験で使用することを尋ねることも役立つかもしれません。
しないでください 語彙クイズを与えます。 「継承の定義」または「OOデザインの名前3の機能」は、個人のスキルについて何も伝えない質問であり、彼/彼女が最後に教科書を読んでからどれくらいの期間です。私は毎日これらのスキルを使用しているが、正式な定義を与えるように求められた場合に窒息するいくつかの優れたプログラマーに会いました。
部屋またはその他の仮想エンティティのビジネスオブジェクト、クラス、インターフェイス/メソッドを書き留めるように頼みます
可能であれば、サンプルコードを求めてください。
それ以外の場合は、例として使用する手続きコード(または設計されていないOOコード)を見つけてから、それらがどのように再設計、一般化、改善するかを尋ねます。プログラムには追加のコンテキストがあることを確認してください。そうすれば、再設計が意味のあるものになるようにしてください。
最終的に、テストしているもの - デザイン - は主観的です。したがって、あなたの評価は、単一のものだけでなく、いくつかの可能な優れたソリューションを可能にするためにオープンエンドでなければなりません。次に、インターフェイスの変更を強制する要件の可能性のある変更について考えてください。それらはどのように処理しますか?
本の最初のデザインパターンを読んでください。本のすべての例は、オブジェクト指向の問題から始まり、デザインパターンになります。彼らはまた、特定のOOPの概念が制限された結果を達成する理由と、なぜ特定のものが他のものよりも優れているのかを伝えています。
デザインパターンの本は、この本はOOPの問題でいっぱいです:-)
シンプルから始めてください:OOPは何ですか?
OOPの基本的な前提について尋ねることから始めることができます:抽象化、多型、相続、およびカプセル化。彼らを暖かくするために思考のための良い食べ物。
彼らに問題を与えます
次に、パターンを伴う可能性が高い問題を提示します。パターンに名前を付けたり使用したりする必要はありませんが、そのアプローチは、その地域で経験がある場合、おそらく一部をもたらすでしょう。
おそらく動的なテキスト入力検証。 ISO8601形式の有効な日付、時刻、時刻と時刻であるかどうかを確認するために、文字ごとに入力文字を検証できます。キーが押されるたびに入力文字列のコピーを取得し、ブール値を返して、テキストが少なくとも1つの形式で良好なままであるかどうかを示すことができます。 OOデザインの原則を使用して、デザインを話し合い、スケッチするように依頼してください。
おしゃべりを終えた頃には
- コントローラー(変更イベントを発射し、応答を評価するもの)、
- オブザーバー(バリデーターは変更イベントに応答します)、
- 戦略(各バリデーターは、入力が有効かどうかを判断する異なる方法を表します)、
その後、彼らがoodを理解しているなら、あなたはかなり良い考えを持っています。
もう一度同じ問題を告げますが、今回は別のデザインを求めてください
ここで、オブザーバーパターンを使用せずにシステムを再設計するように依頼します(言及した場合) - 彼らは一連の責任アプローチまたはおそらくコマンドパターンに行くことを選択するかもしれません。あなたはどちらを本当に気にしません、あなたは彼らが関係する原則を合理的な把握を持っていることを知っています。
彼らがパターンベースのアプローチを求めていなくても、彼らがどのように聞いているかを聞くだけです 問題を関連する機能に分解しようとする あなたが望んでいる結果が得られます。
私は現実世界のシナリオを選ぶ傾向があります。誰にとってもよく知られているものは、エンティティを特定するように頼みます。関係する俳優。それらの間にどのような相互作用があります。一般的な機能を抽象化できる場合。どのプロパティを考慮する必要がありますか。
はい、あなたは彼らに座ってUMLを描くように頼むことができます、はい、あなたは彼らが「地面に走ることができる」かどうかを確認するために、いくつかのOOP実装の詳細に関する質問を検索するように尋ねることができます。
しかし、雇用主がチーム内で本当に必要としているのは、関係する概念を理解し、それらを何でも適用できる心です。概念が組み込まれている場合、詳細は迅速に学ぶことができます。
†深い親しみやすさとコードヘルプとの接続の欠如: 朝の家族のバスルームの使用。夕食を作る;職場のバスルート。車のアセンブリ。
かなりうまく機能しているように見えるもので、実際には数秒しかかかりません。オブジェクトモデルの設計を依頼してください。それは何のために重要ではありません。それは絶対に些細なことです。実際、テストを不必要にドラッグしないことは、おそらく些細なことです。
彼らが最初に書くものがオブジェクトである場合、彼らはすでにOOを理解している仲間の99%よりも先を行っています。彼らが最初に書いているのがクラスである場合、親切に彼らに外に出て次の候補者を送るように頼み、それがCOPではなくOOPと呼ばれる理由を考えてください。