Software Worldの外部の人々にデザインパターンをどのように説明すべきですか


10

姪にデザインのパターンを説明したいのですが、いつも苦労しています。それは主に、デザインパターンを明確に理解していないためです。MVC、シングルトン、ファクトリー、リポジトリなどのパターンを、10歳の子供でも理解できるような簡単な言葉で説明するにはどうすればよいですか。

パターンの理解を助けるのに役立つ例を探しています。おもちゃ、映画、音楽などの例


2
設計パターンは、ソフトウェア開発に対するものであり、カテゴリー理論は数学に対するものです。。。少なくとも私はそれを数学者に説明する方法です。
Eric Wilson、

パズルの本の解答セクションを読むようなものです。すべてのパズルの答えはわかりませんが、ほとんどの場合、答えを見たことのないパズルをどこから始めればよいかがわかります。
StuperUser

回答:


7

ウィキペディアの記事の冒頭は、おそらく良いスタートだと思います。

A design pattern is a general reusable solution to a commonly occurring problem.

それとも、それらの特定のパターンの詳細を説明したいですか?


詳細を探しています
ギズゴック

1
シンプルなウィキペディア、secure.wikimedia.org
Jeff Welling

2
@gizgok:「仕様」?それはばかげています。詳細-必要に応じて、さらに詳しく指定してください。「仕様」を求めるのは曖昧です。
S.Lott、2011年

5

なぜそれを説明したいかによります。パターンのアイデアを説明したいだけなら、A Pattern Languageのアーキテクチャーの例を利用します。これらの研究者たちは、建物や部屋の特定の側面が人々にその建物や部屋での生活や仕事を楽しんでいることを発見しました-世界中の異なる文化、異なる建築材料、異なる種類の地域で。たとえば「両面の光」のように。2つの壁に窓がある部屋は、1つしかない部屋(または何もない部屋)よりもはるかに優れています。ソフトウェアにもそのようなパターンがあります。異なるプログラミング言語を使用しても、いくつかのパターンが繰り返されます。さらに、ゲーム、財務計算用の何か、Facebook内のエンジンなど、非常に異なるソフトウェアでもです。

次に、特定のパターンについて話したい場合(理由は不明ですが、10歳まで)、それがどのように機能するかを説明する前に、そのパターンの使用例を示すことから始めます。したがって、コンポジットを使用すると、コンテナの重量とすべてのコンテナの合計およびコンテナの緩みを合計することにより、スーツケースの重量を計算するときに明示的な再帰を回避できますが、企業の給与負担の計算にも役立ちますまたは製造コンプレックスの能力。それが10歳児にとって少しでも興味深い場合は、それがどのように機能するかを説明してみてください。


1
coz 10歳児はハッカーになりたい
gizgok

2

一部の人々は、ソフトウェアの断片をうまく連携させる方法があることに気づき、彼らの洞察を共有したいと考えたため、デザインパターンが存在します。

人々のグループと同じようにデザインパターンを考えることができます。たとえば、すべての会議を促進する1人の人物がいる場合があります。これは、オブジェクト間の相互作用を容易にするコントローラーパターンのようなものです。

または、部屋の前の誰かが手を挙げている人を監視している観客を想像して、質問を繰り返して、他の全員が聞けるようにするか、多分それに答えて反応するようにします。これは、Subject / Observerパターンに似ています。

トランスレーターのように動作するパターン(アダプターパターン)、セキュリティガードのように(プロキシ)、フィールドの専門家(シングルトン)のように、または車が機能していることを確認する人々(バリデーター)のように動作するパターンがあります。

オブジェクトと人の違いは、必要な数のオブジェクトをほぼ作成でき、それらの複数の異なるコピーを持つことができることです。そのため、ソフトウェアが複雑になりすぎないように、オブジェクトが持つべき責任を理解し、その責任を小さく保ち、オブジェクトの役割を複製しないようにすることが重要です。専門家はこれについて多くの経験を持っています。そして彼らは私たちに私たちがしようとしている仕事のためにどのような役割が最良の比喩であるかを決定し、得ることができるように効果的なソフトウェアがどのように相互作用するかのこれらのパターンを与えました最も適切な方法でコラボレーションするソフトウェア。


1

それらはシステムの個々のコンポーネントを構築するために使用されていることを彼女に伝えます。たとえば、調理技術は食事/料理を構築するために使用されます。ジャガイモ、肉、野菜を使って夕食を作っているところを想像してみてください。じゃがいもを茹でてつぶしたり、肉を焼いたり、野菜を蒸したりしたい。グリルのデザインパターンを使用して、ジャガイモの肉、ゆで、マッシュのパターンを調理し、野菜のスチームパターンを調理します。


1

これらの設計パターンのほとんどは、オブジェクト指向設計の一部です。OODを理解していない人に実際に説明することはできません。特定のパターンで達成する目標を説明することはできますが、それがどのように機能するのか、なぜそれが必要なのかは説明できません。もちろん、OOD全体を説明する場合を除きます。


1
ほとんどの設計パターンは、特定の問題を解決するために適切な抽象化を使用する方法に関する指示です。言うまでもなく、これらはオブジェクト指向設計の一部ではありません。
Pemdas 2011年

@Pemdas:工場を例にとってみましょう。OOP以外ではどのような意味がありますか?
vartec 2011年

OOPはパターンが最も話題になる場所ですが、他の言語には独自のパターンのセットがあります。たとえば、モナド(関数型言語でよく見られ、OOPで実行できることもあります)はそれ自体のパターンであり、他のパターンを有効にします。さらに、ここで述べたように、設計パターンはアーキテクチャからプログラミングに移りました。
チャーリー

デザインパターンはOOPとは関係ありません。デザインパターンとは、繰り返し発生する問題と、問題を処理するために開発された戦略に関するものです。戦略が繰り返し開発される場合は、パターンがあります。戦略が繰り返し機能する場合は、それをデザインパターンと呼び、繰り返し失敗する場合は、アンチパターンと呼びます。デザインパターンについて学ぶことは、過去に繰り返し働いてきた戦略を学ぶことを意味します。私がプログラミングについてまったく言及しなかった方法を見てください。
gnasher729 2015年

0

設計パターンは、最初にアーキテクチャーについて説明されました。広場の場所、建物、その他の一般的に繰り返されるレイアウトなど。あなたはそこから始めるかもしれません。正面玄関のようなものは通りに面している、部屋の隅に向かっているドア、その他何でも考えられる。元の作者のパターンは広く使用されていませんでした。彼は今パターン自体は十分ではないと述べていると報告されています。

部屋の中で動くものについて話し合う。ドアの前に椅子を置いてください。窓やドアを他の場所に移動するのは理にかなっていますか。なぜですか、なぜそうではありませんか?

テーブルに場所を置くようなものを試してください。あなたから離れて行くサイズで物事を配置してみてください。通常のパターンではなく、扱いにくい。通常通り設定してください。これは、ジュースの簡単なグラスに適したレイアウトですか?パターンは常に適切であるとは限りません。

私たちはいつもパターンを持って生きています。3〜4冊の本を取り、ページをめくってください。レイアウトには明らかなパターンがあります。タイトルページ、目次、コンテンツ、および索引。すべてのコンポーネントが必要なわけではありませんが、それらを所定の場所に配置しないと混乱を招きます。


0

設計パターンは、ジグと木工のソフトウェア開発です。これは、大規模なプロジェクトで使用するためのよく知られた「カット」を作成できるツールです。

カットを行うためにジグは必要ないことに注意してください。状況によっては簡単な場合もあります。


0

私の他の答えは一般的なケースを表すと思いますが、OPは詳細を要求するようコメントしました(そのため、別の答えに値すると感じました)。悲しいことに、私はリポジトリパターンに精通していませんが、他のものを試してみるつもりです。原則として、これらを説明する最良の方法は、どのような問題を解決したいのか、なぜそれを解決したいのか、そして問題がどのようにしてそれを達成するのかということです。

シングルトン

このパターンは、何かが1つだけであることを保証したい場合に使用されます。パターンは、他のユーザーがオブジェクトを作成できないようにすることで実現されます。

ウィキペディア

MVC

このパターンは、物事をモジュール化し、それに伴うすべての利点を維持するために使用されます。ビューは「ユーザーインターフェース」、モデルはデータ(ビジネスロジックを含む)、コントローラはユーザーアクションがモデルを操作する方法です。このモジュール性により、同じモデルで複数のビュー/コントローラーを使用することを妨げるものは何もありません。非常に単純化した例として、私はWebサイト、デスクトップアプリケーション、およびiPhone(「ビュー+コントローラ」)を介してメール(「モデル」)とやり取りできます。共有グループメールボックスがある場合、メールを送信しないコントローラーを作成し、同じアプリケーションビューとメールを再利用できます。(はい、過度に単純化していますが、うまくいけば理解できます:))

さらに、この明確に定義された関心の分離により、ある(理想的には)変更は別の変更を必要としません。具体的な例として、OracleデータベースではなくMySQLデータベースへの読み取り/書き込みをサポートする必要がある場合、モデルを変更するだけで済み、ビュー/コントローラーは変更されません。

ウィキペディア

工場

Factoryと呼ばれる類似のパターンがたくさんあるので、ここで注意する必要があります... Abstract Factoryについて説明しますが、Factoryメソッドパターンもあることを知っておく必要があります。

基本的に、実行する手順がわかっている場合は、抽象ファクトリを使用しますが、これらの個別の手順を実行する方法の手順は異なる場合があります。たとえば、ボタンを備えたダイアログボックスを作成する必要があるアプリケーションを構築しているとします。コードで架空のUIファクトリを使用することで、WindowsではなくMacまたはLinuxでコードが必要な場合は、別のファクトリを提供するだけで、残りのコードは変更されません。よりワイルドな例として、私はWebファクトリーを使用することができ、デスクトップアプリケーションを裏付けるコードのほとんどがリッチなWebサイトにも電力を供給している:)(他の理由で実用的ではないが、理論的には:))


0

ハッカーになりたい10歳のユーザーに-と言います。

あなたがハッキングしていたときにあなたの隣に世界最高のハッカーがあなたの隣に座っていたとしたら、想像してみてください。そして、時々彼らは言うでしょう。 ...コードは[より速く/より安全/より保守可能/など]になります。

彼女がそのアイデアに熱心であると仮定したので、私は時間を無駄にしないで、「ハッキングタスク」を設定する各パターンを説明します。次に、デザインパターンをポスト適用し、値を説明します。良いリソースとそれがどこに行くか見てください。

しかし、ほとんどの場合、彼女はメンタリングを通じてそれらを学ぶ必要があります。

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