私たちは、他の部門の人々がITスタッフからコーディングの方法を学ぶことができる私のコーディングで、新しいコーディングブートキャンプの支援に着手しようとしています。これは素晴らしいことですが、私は漬物になっています。継承、ポリモーフィズム、has-aおよびis-aの概念を物理的なデモと物理的に示す方法を考え出すように依頼されました。事実上、彼らは小道具を使ってこれらの概念をプログラミングとコンピュータサイエンスについて何も知らない人々に示すように求めています!
これらの原則を実証するために使用または見た良い類似点またはデモンストレーションはありますか?
ティーチングOO原則は、泳ぐことができない人々にスキューバダイビングを教えるようなものです。
それが言いました、ここにいくつかの可能性があります提案された小道具を教室に連れていくことができますとパススルー(または少なくとも表示)して、概念を説明します。
小道具:
説明:新しいiPhoneはそれぞれ、その前任者の段階的な改善であることを伝えます。ほとんどの内部は同じですが、一部は改善されています。機能についても同じです。それから、変更する理由がなかった最初のiPhoneの文字列と文字通り同じ部分がいくつかの部分にある可能性があることを教えてください。
小道具:
説明:すべてのアプライアンスは同じインターフェースに準拠しているため(すべてのプラグに壁のソケットの穴に適合する突起物が付いています)、すべてのアーティファクトが電力を供給しますそのようなプラグ。ソケットの観点からは、ソケットの「インターフェース」に準拠している限り、メインにプラグインするアプライアンスのタイプは問題ではありません。
小道具:前述のiPhone
説明:すべてのiPhone 7はiPhone、すべてのiPhoneはスマートフォン、すべてのスマートフォンは電話です。
小道具:前述のiPhoneに加えて、分離されたタッチスクリーンパネル。
説明:すべてのiPhoneにはタッチスクリーンパネルがあります(側面にフラットケーブルが接続された透明なもの)。 iPhoneから分離されたタッチスクリーンパネルはあまり役に立ちません。フラットケーブルがぶら下がっている状態で、タッチスクリーンパネルを取り外してポケットに入れている人は見えません。
小道具:キー、レーザーポインター、キャップオープナー、フラッシュドライブ、車のアラームコントロール、その他の装身具とフォブを備えたキーチェーン。
説明:キーチェーンは、多数のキーが接続された複合オブジェクトです。キー、レーザーポインター、缶切りは、接続せずに自分で操作できますキーチェーンに、キーチェーンもツール(キーなど)も不安定な状態のままではありません。このアイテムはキーチェーンに追加したり削除したりできますが、それ自体が機能ツールとして存在できます。キーチェーン自体は空っぽになる可能性があり、それが原因で壊れているとは言えません。
注:これらのクラスは Chineasy メソッドがマンダリンを教えないのと同じように、実際にOOPを教えません。それは、エイリアンの考え方の楽しい(うまくいけば)洞察になるでしょう。
基本から始めます。オブジェクト指向のシステムについて誤解を招くような方法であるため、物理オブジェクトを小道具として使用して、オブジェクトである可能性のあるものを提案しないでください。代わりに、 王立学校のクリスマス講義 から葉を取り、あなたのaudienceを小道具として使用します。それらのいくつかを志願してもらい、実際の現実的なオブジェクト指向システムでオブジェクトである役割を割り当てます。そのうちの1つがキューで、他のいくつかはプロデューサーとコンシューマー、またはそのようなものである可能性があります。オブジェクトについての重要なことは、それが他のオブジェクトとどのように関連しているか(== --- ==)の振る舞いであることを示し、それではないmodels(多くの場合、実際には具体的なものをモデル化しないため)。
私の個人的な経験は、インターネットで検索してプログラミングを学んだばかりのコンピューターサイエンスの学歴のないジュニア開発者でさえ、OOPの詳細を適切に理解できないことがあります。たとえば、プロパティに適切な名前を使用したり、短いメソッドを記述したりすると、リストは続きます。 OOPプログラミングに一度も触れたことのない人にコンセプトを教えることはやり過ぎであり、すぐに失望に変わるでしょう。
まず、選択した言語でのプログラミングの基本から始め、次に、たとえば、別のクラスから継承している理由や、ネストしたクラスを作成している理由を少しずつ理解し、最後に「わかりました、これはIs-Aです。関係とは、Has-A関係」などです。
OOの最も重要な機能に焦点を当てる必要があります。これらは、カプセル化、インターフェース/実装の区別、疎結合です。
してはいけないことは、継承階層を大いに活用し、分類法をメタファーとして使用します。第一に、継承はオブジェクト指向の概念としてそれほど重要ではありません。第二に、人気のある隠喩は実際には啓蒙よりも誤解を招きやすいものです。クラスは実際には動物や果物の種のようなものではありません。
キッチンは便利なメタファーになると思います。キッチンは、食品を調理するために多くの複雑な機能を必要とします。しかし、それは1つの大きな相互接続マシンとして構築されていません。むしろ、オーブン、冷蔵庫、シンクなどのコンポーネントで構築されています。各コンポーネントには、明確に定義された単一の目的があります。それらは交換可能です-オーブンを別のベンダーの別のオーブンに変更することができ、同じスペースに収まり、基本的に同じインターフェイスを持っています。それらはすべて同じパイプとコンセントに接続します。コンポーネントは疎結合です。オーブンを変更しても、冷蔵庫の動作は変わりません。冷蔵庫の設計上の欠陥は他のコンポーネントには影響しません。オーブン修理人はオーブンの専門家である必要があります。
ここで、キッチンがこのすべての機能(焼く、凍結する、かき混ぜる、冷やすなどの機能)を備えた1つの大きな「マシン」として構築されていて、コンポーネントに分割されていない場合を考えてみましょう。異なるベンダーのコンポーネントを交換または追加することはできません。おそらく、この特定のキッチンの機能のいくつかは標準以下ですが、あなたにできることは何もありません。修理工はすべてを理解する必要があります。オーブンの設計エラーにより、シンクが爆発する危険性が高くなります。等々。
ただし、これは誰もがコードを学ぶのに役立ちません。隠喩を通してコーディングを学ぶのではなく、問題を解決するためのコードを書くことによってコーディングを学ぶのです。
これは、これが深刻な「科学的なもの」であるという感覚とあいまいなアプローチ可能性の適切なバランスをとります。安価なぬいぐるみを小道具として使用したり、PowerPointプレゼンテーションで動物の写真を頻繁に使用したりすることができます。動物が好きな人が多く、動物の写真が良ければいつでも「元気になります」。
これは、生物学的分類システムが「本物」であり、ほとんどの高校の卒業生がそれを少し覚えていることを助けます。
[〜#〜]警告[〜#〜]:
1つの注意点は、進化に関連する主題について話し合うことによって世界観に挑戦する人に遭遇する場合があることです。 「動物について話しているだけ分類」であると個人に確信させることができます。
動物のメタファーは、生物学と動物分類システムについて少し知っている場合に最適です。高校の経歴を本当に覚えておらず、哺乳類の一般的な属性を忘れている場合は、信頼できる話ができる例を使用したほうがよいでしょう。
いずれの場合も、例ではハイテクテーマを使用しないでください。ほとんどの素人は本当にコンピュータモデルや周辺機器を気にしません。これらのモチーフは、聴衆がおそらくすでに持っているであろう、この主題全体が「技術者のみ」であるという概念を強化するだけです。
クラスとオブジェクト —犬の理想と個人の犬の比較。
メソッドと属性 —犬は毛皮です。犬は吠えることができます。
オーバーライド —すべての犬が髪を持っているわけではありません。
継承 —犬は哺乳類です。犬は一般に、哺乳類ができることを行うことができます(メソッド継承)には、哺乳類が持つ属性(属性継承)があります。
抽象クラス —実際の動物はほんの哺乳類ではありません。
具象クラスからの継承 —スコットランドのディアハウンドは、樹皮を持たない犬methodです。
構成 —犬または別の動物は首輪を持つことができますが、首輪は動物の一部ではありません。
上記は、私が最初の話でこれまで取り上げた限りですが、続行できます。
Association —犬または猫はhave首輪ができます。ただし、首輪も独立したオブジェクトです。犬をあげることはできますが、首輪はつけたままにしてください。
Aggregation —魚はschoolに属している可能性があります。 schoolがクジラに飲み込まれた場合、schoolがすべてのfishその中に。
継承チェーン —犬はa哺乳類はa垂直はan動物はa生命体です。 (そして、コンピューターシステムもこれほど複雑になる可能性があることを指摘してください。)
これらはすべて難しい概念であり、人々を積極的に関与させたり話し続けたりしないと、おそらく多くのガラスのような凝視を得るでしょう。
たとえば、犬の属性とメソッドを自分でリストするのではなく、グループからの入力を求めます。 (人々は動物に興味があるように固定されているので、それは助けになります。)