物理的な小道具を使用して、非プログラマーにオブジェクト指向の原則を実演する[終了]


8

私たちは、他の部門の人々がITスタッフからコーディングする方法を学ぶことができる私のコーディングで、新しいコーディングブートキャンプの支援に着手しようとしています。これは素晴らしいことですが、私は漬物になっています。継承、ポリモーフィズム、has-a、is-aの概念を物理的なデモと物理的に実証する方法を考え出すように依頼されました。事実上、彼らは私にプロップを使用してこれらの概念をプログラミングとコンピュータサイエンスについて何も知らない人々に示すように求めています!

これらの原則を実証するために使用または見た良い類似点またはデモンストレーションはありますか?


1
Googleは多くの例を返すと思います。
qwerty_so 2016年

2
こんにちはアダム、誤解しないでください。しかし、これはこのサイトには広すぎる、またはトピック外のサードパーティリソースへの参照を必要とする典型的な種類の質問です。また、「教育上のアドバイスはトピックから外れている」カテゴリに分類されます。コミュニティから大量の反対投票を受ける前に、自己削除をお勧めします。
Doc Brown、

3
「is-an-instance-of」の意味での「is-a」と「inherits-from」の意味での「is-a」を混同しないように注意してください。クラスは物事の概念ですが、トレーニングルームであなたの周りのオブジェクトはクラスのインスタンスになります。
Simon B

1
他の部門がビジネスのコードを書き始めないようにしてください。
gardenhead 2016年

1
ちなみに、私はINTERFACEとは何かを誰も説明していないことに気付いたばかりです。正直なところ、継承をやめてインターフェイスについて話す方がいいと思います。インターフェースは機能に直接マッピングできるため、これはより簡単です。
Walfrat 2016年

回答:


11

プログラマーではない人にオブジェクト指向の原則を教えることは、泳げない人にスキューバダイビングを教えるようなものです。

とは言っても、概念を説明するために教室に持ち帰り(または少なくとも表示)できる小道具の候補を以下に示します。


継承:

小道具:

  • 異なるバージョンの一連のiPhone。最初のiPhone以降、iPhone 6、6以降など。

説明:新しいiPhoneはそれぞれ、その前任者の段階的な改善点であることを伝えてください。ほとんどの内部は同じですが、一部は改善されています。機能についても同じです。そして、一部のパーツが、変更する理由のない最初のiPhoneと文字通り同じパーツである可能性があることを伝えてください。

ここに画像の説明を入力してください


ポリポーフィズム:

小道具:

  • コーヒーメーカー、テレビ、ミキサー、ラジオ、電気スタンドなどの一連の家電製品。また、壁のコンセント。

説明:すべてのアプライアンスは同じインターフェースに準拠しているため(すべてのコンセントに壁のソケットの穴に適合するプロング付きのプラグがあります)、すべてのアーチファクトはこのようなプラグから電力を得ます。ソケットの観点から見ると、ソケットの「インターフェース」に準拠している限り、メインにプラグインするアプライアンスのタイプは問題ではありません。

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください


Is-a:

小道具:前述のiPhone

説明:すべてのiPhone 7はiPhone、すべてのiPhoneはスマートフォン、すべてのスマートフォンは電話です。


Has-a:構成

小道具:前述のiPhoneに加えて、分離されたタッチスクリーンパネル。

説明:すべてのiPhoneにはタッチスクリーンパネルがあります(側面にフラットケーブルが接続された透明なもの)。iPhoneから分離されたタッチスクリーンパネルはあまり役に立ちません。フラットケーブルがぶら下がった状態で、タッチスクリーンパネルを取り外してポケットに入れている人は見えません。

ここに画像の説明を入力してください

Has-a:集約

小道具:キー、レーザーポインター、キャップオープナー、フラッシュドライブ、車のアラームコントロール、その他の装身具とフォブを備えたキーチェーン。

説明:キーチェーンは、多数のキーが取り付けられた複合オブジェクトです。キー、レーザーポインター、缶切りは、キーチェーンに取り付けられていなくても単独で機能し、キーチェーンもツール(キーなど)も残っていません。不安定な状態。このアイテムはキーチェーンに追加したり削除したりできますが、それ自体が機能ツールとして存在できます。キーチェーン自体は空っぽになる可能性があり、それが原因で壊れているとは言えません。

ここに画像の説明を入力してください


注:Chineasyの方法がマンダリンを教えないのと同じように、これらのクラスは実際にOOPを教えません。それは、エイリアンの考え方に対する楽しい(うまくいけば)洞察になるでしょう。


3
継承については、別のスマートフォンの類推が好きです。純粋なAndroidフォンと、メーカーのものを上に置いたAndroidフォンです。後者は明らかに最初のものから継承します。一連のスマートフォンは、継承ではなく、製品のさまざまなリリースに似ています。
RemcoGerlich 2016年

@RemcoGerlich OPは物理的な例を求めました。あなたはソフトウェア(Android OS)について話している。その上、LG電話とHTC電話は無関係で、生物学者が収束進化と呼んでいるものの異なる実装です。彼らは同じOS(ここでもソフトウェア)のフレーバーを使用しています。iPhoneの例は、毎回最初からすべてを発明するのではなく、前の世代の設計図に基づいて段階的に構築された物理的なものに関するものです。
TulainsCórdova16年

2
これは素晴らしいです。私が持っている、私はそれ:)を説明する必要がこの投稿を次の時間を覚えておくこと
クエンティン・

電話はまったく役に立たないと思います。それらは何よりもバージョン/世代を表します。そして、そもそも彼らはこの目的にはオタクすぎる。
マーティンマート

@TulainsCórdova:収束進化は別々に発生しますが、HTCとLGはお互いが何をしているか、そして彼らのプロセスに影響を与えていることを非常に認識しています。次に、ネイティブOS /メーカーのOSの例は物理的なものではありませんが、継承のより良い例です。あなたのiPhoneの例は、各電話がその前任者から継承することを暗示しているようですが、それはこの動作をモデル化する良い方法ではありません。OSの例を使用しない場合は、より優れた継承の例を見つけることをお勧めします。たとえば、3人の異なる人(マネージャー、管理人、教師)がすべて同じ基礎となる人物であるなどです。
フラット

3

基本から始めます。オブジェクト指向のシステムについて誤解を招く方法であるため、物理オブジェクトを小道具として使用して、オブジェクトである可能性のあるものを提案しないでください。代わりに、王立研究所のクリスマスレクチャーから一枚の葉を取り、観客を小道具として使用します。それらのいくつかを志願してもらい、実際の現実的なオブジェクト指向システムでオブジェクトである役割を割り当てます。そのうちの1つがキューで、他のいくつかはプロデューサーとコンシューマー、またはそのようなものである可能性があります。オブジェクトについての重要なことは、オブジェクトがモデル化するものではなく、他のオブジェクトとの関係におけるその動作あることを示します(多くの場合、具体的なものは実際にはモデル化されないため)。


良いアイデアで、XtremeプログラミングCRCカード「ゲーム」によく似ています。
TulainsCórdova16年

1

私の個人的な経験は、インターネットで検索してプログラミングを学んだばかりのコンピューターサイエンスの学歴のないジュニア開発者でさえ、OOPの詳細を適切に理解できないことがあります。たとえば、プロパティに適切な名前を使用したり、短いメソッドを記述したりすると、リストは続きます。プログラミングに触れたことのない人にOOPの概念を教えることはやり過ぎであり、すぐに失望するでしょう。

まず、選択した言語でのプログラミングの基本から始め、次に、たとえば別のクラスから継承している理由や、ネストしたクラスを作成している理由を少しずつ理解し、最後に「わかりました、これはIs-Aです。関係とは、Has-A関係」などです。


1

OOの最も重要な機能に焦点を当てる必要があります。これらは、カプセル化、インターフェース/実装の区別、疎結合です。

すべきではないことは、継承階層を大いに活用し、分類法をメタファーとして使用することです。第一に、継承はオブジェクト指向の概念としてそれほど重要ではありません。第二に、人気のあるメタファーは実際には啓蒙よりも誤解を招きやすいものです。クラスは実際には動物や果物の種のようなものではありません。

キッチンは便利なメタファーになると思います。キッチンは、食品を調理するために多くの複雑な機能を必要とします。しかし、それは1つの大きな相互接続マシンとして構築されていません。むしろ、オーブン、冷蔵庫、シンクなどのコンポーネントで構築されています。各コンポーネントには、明確に定義された単一の目的があります。それらは交換可能です-オーブンを別のベンダーの別のオーブンに変更でき、同じスペースに収まり、基本的に同じインターフェイスを備えています。それらはすべて同じパイプとコンセントに接続します。コンポーネントは疎結合です。オーブンを変更しても、冷蔵庫の動作は変わりません。冷蔵庫の設計上の欠陥は他のコンポーネントには影響しません。オーブン修理人はオーブンの専門家である必要があるだけです。

ここで、キッチンがこのすべての機能(焼く、凍結する、かき混ぜる、冷やすなどの機能)を備えた1つの大きな「機械」として構築されていて、コンポーネントに分割されていない場合を考えてみましょう。異なるベンダーのコンポーネントを交換または追加することはできません。おそらく、この特定のキッチンの機能の一部は標準以下ですが、あなたにできることは何もありません。それは1つの大きな機械であるため、修理工はすべてを理解する必要があります。オーブンの設計エラーにより、シンクが爆発する危険性が高くなります。等々。


ただし、これは誰もがコードを学ぶのに役立ちません。隠喩を通してコーディングすることを学ぶのではなく、問題を解決するためのコードを書くことによってコーディングすることを学びます。


+1動物の類似が悪い例であることを指摘するため。
TulainsCórdova16年

1

動物分類を使用し、必要に応じて動物のぬいぐるみを使用します

これは、これが深刻な「科学的なもの」であるという感覚とあいまいなアプローチ可能性の適切なバランスをとります。安価なぬいぐるみを小道具として使用したり、PowerPointプレゼンテーションで動物の写真を頻繁に使用したりすることができます。動物が好きな人が多く、動物の写真が良ければいつでも「元気になります」。

これは、生物学的分類システムが「本物」であり、ほとんどの高校卒業生がそれを少し覚えていることを助けます。

警告

  1. 1つの注意点は、進化に関連する主題について話し合うことによって世界観に挑戦する人に遭遇する場合があることです。「動物の分類について話しているだけだ」と個人に確信してもらうことができます。

  2. 動物のメタファーは、生物学と動物分類システムについて少し知っている場合に最適です。高校の経歴を本当に覚えておらず、哺乳類の一般的な属性を忘れている場合は、信頼できる話ができる例を使用したほうがよいでしょう。

    いずれの場合も、例ではハイテクテーマを避けてください。ほとんどの素人は、実際にはコンピュータモデルや周辺機器を気にしません。これらのモチーフは、この主題全体が「技術者のみ」であるという、聴衆がおそらくすでに持っているであろう概念を強調するだけです。

説明する概念:

クラスとオブジェクト —犬の理想と個人の犬の比較。

メソッドと属性 —犬は毛皮です。犬は吠えることができます。

オーバーライド —すべての犬が髪を持っているわけではありません。

遺伝 —犬哺乳類です。犬は通常、哺乳類ができることを行うことができます(メソッドの継承)には、哺乳類が持つ属性(属性の継承)があります。

抽象クラス —実際の動物は単なる哺乳類ではありません。

具象クラスからの継承 —スコットランドのディアハウンドは、樹皮メソッドを持たない犬です。

構成 —犬や他の動物は首輪を持つことできますが、首輪は動物の一部ではありません。

もう少し高度な概念

上記は、私がこれまでに最初の話をした限りではありますが、次に進むことができます。

協会 —犬または猫は首輪を持つことできます。ただし、首輪も独立したオブジェクトです。犬をあげることはできますが、首輪はつけたままにしてください。

集合 —魚は学校に属している場合があります。場合は、学校がクジラに飲み込まれ、学校はすべて一緒に、破壊された魚、それインチ

継承チェーン —犬哺乳類であり、脊椎動物動物あり、動物生命体です。(そして、コンピュータシステムもこれほど複雑になる可能性があることを指摘してください。)

視聴者を巻き込む

これらはすべて難しい概念であり、人々を積極的に関与させたり話し続けたりしないと、おそらく多くのガラスのような凝視を得るでしょう。

たとえば、自分で犬の属性とメソッドをリストするのではなく、グループからの入力を求めます。(人々は動物に興味があるように固定されているので、それは役立ちます。)


構成については注意してください。コンピュータがCPUで構成されているようなものにした方がいいでしょう。……ところで、強い(構成)と弱い集約を区別するのを忘れていました。私が死んだら、私の手も死んでしまいますが、私のコンピュータは死にません。オーバーライド:他の何か:犬は同じように攻撃しません。
Walfrat 2016年

1
OOの概念を説明する動物の例は、最良の選択の1つではありません。もれと若さ。また、OPは教材として物理的な小道具を使用したいと考えています。
TulainsCórdova16年

1
@TulainsCórdova、あなた自身の答えは、技術者以外の人々にOOの基本を教えるのにどれほどうまくいかなかったかを示唆しています。動物は人々をより魅了し続けます、そして生物学について「漏れやすい」または幼いものは何もありません。また、私の答えはタイトルの
Tim Grant、

@TimGrantプログラマー以外にOOPを教えたり説明したことはありませんが、他の人が動物の例を使用して失敗するのを見てきました。生物学の科学分野は漏れやすいものではありません。動物の例でOOPを説明することについて話していました。それはとてもばかげています。意図された攻撃はありません。
TulainsCórdova16年

@TulainsCórdova、あなたは漏らしていて、若く、そして今、「儀礼」と言いますか?真実性は、聴衆がそれを以前に聞いたことがあることを要求し、この聴衆はそうではありません。実際に提供する洞察はありますか、それとも競合する答えに陰を投げていますか?
Tim Grant

-3

レゴ

レゴを入手して車を作る(基本クラス)

次に、ライト付きの同じ車を使用します(追加機能)

次に、大きなホイールを備えた同じ車(オーバーライド)

次に、モーターバイクを入手します(異なる基本クラス)

次に、2つのホイールと1つのライトからタイヤを外して車を入手します。ひどく見えるようにします。(モーターバイクの機能を既存のシステムに活用しようとしています)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.