タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

AlgorithmとDesign Patternに関するagwのブックマーク (12)

  • 矢沢久雄の早わかりGoFデザインパターン(11)

    矢沢久雄の早わかりGoFデザインパターン(11) 第11回 Template Methodパターン/Visitorパターン 早いもので、私の著者歴は15年ぐらいになります。いろんな記事や書籍を書いてきました。そんな中で、特に連載記事の場合は、いつも同じ書き方では読者に飽きられてしまうので、意識的に様々なパターンを使い分けています。「教科書のように堅苦しく解説する」「きさくな言葉で読者に語りかける」「師匠と弟子の問答形式にする」「図を多用した絵解きにする」...あれあれ、たったの4パターンしかないですね。誠にお恥ずかしい。そこで、今回は「クイズ形式で興味を引き付ける」という新しいパターンに挑戦させていただきます。よろしくお付き合いください。 【お役立ち度】★★★★★ ●第1問:Template Methodパターンとは、どのようなものでしょう? まず、Template Method(雛形メソ

    矢沢久雄の早わかりGoFデザインパターン(11)
  • 矢沢久雄の早わかりGoFデザインパターン(10)

    OOPの概念を説明する際によく使われる、有名な例え話がいくつかあります。「クラスはクッキー型であり、生地からくり抜かれたクッキーがオブジェクトである」「多態性とは、犬に鳴けと命じると”ワン”と応え、に鳴けと命じると”ニャア”と応えることである」「自動車と船と飛行機は、乗り物に汎化できる」などです。きっと皆さんも、似たような例え話を聞いたことがあるでしょう。 「例え話は、概念を十分に理解している人だけにわかるジョークのようなものだ。はじめて学ぶ人には、例え話を使わない方がいい」と言う人がいます。確かに、突拍子もない例え話をしたら、かえって理解の妨げになるでしょう。しかし、適切な例え話を交えた説明の方が、イメージが広がって聞きやすいのも事実です。例え話を使うべきか、それとも使わない方がいいのか...結論が出ないまま、CommandパターンとStrategyパターンの説明をさせていただきます。

    矢沢久雄の早わかりGoFデザインパターン(10)
  • 矢沢久雄の早わかりGoFデザインパターン(9)

    プログラミングテクニックの中には、「かっこいい!」と感動しちゃうものがありますね。たとえば、再帰、インターフェイス、メッセージフックなどです。再帰は、メソッドの処理の中で同じメソッドを呼び出すテクニックです。繰り返し処理をスマートに記述できます。インターフェイスは、複数のクラスに同じ構文のメソッドを強制的に実装させるテクニックです。多態性(異なるオブジェクトを同じ方法で使うこと)を実現できます。メッセージフックは、メソッドの呼び出しを横取りするテクニックです。既存のクラスのメソッドに任意の処理を挿入できます。今回紹介する2つのパターンは、これらのテクニックを応用しています。 【お役立ち度】★★★★★ ●再帰とインターフェイスを応用したCompositeパターン 奇抜な例で恐縮ですが、町内会の連絡網を思い浮かべてください。Aさん~Dさんの4件の家庭があって、順番にお知らせを伝えるとします。こ

    矢沢久雄の早わかりGoFデザインパターン(9)
  • 矢沢久雄の早わかりGoFデザインパターン(8) | 日経 xTECH(クロステック)

    23種類のGoFデザインパターンには、それぞれ親しみやすい名前が付けられています。今回紹介する2つのパターンの名前を直訳すると、「橋(Bridge)」および「装飾者(Decorator)」となります。どちらも構造に関するパターンに分類されているので、構造として橋を架けたような工夫、そして構造に飾りを付ける工夫であることが予測できます。オブジェクト指向プログラミングにおける橋と飾りとは、いったい何なんだろう...興味が湧いてきたところで題に入りましょう。 【お役立ち度】★★★★★ ●拡張から実装に橋を架けるBridgeパターン 継承元のクラスをスーパークラスと呼び、継承先のクラスをサブクラスと呼びます。サブクラスの役割には、スーパークラスの抽象メソッドを適切に実装することと、スーパークラスの機能を拡張することがあります。 ここで、引数に与えられたデータを描画するdrawメソッド(抽象メソッ

    矢沢久雄の早わかりGoFデザインパターン(8) | 日経 xTECH(クロステック)
  • 矢沢久雄の早わかりGoFデザインパターン(7)

    親父の小言のように何度も同じ話をして恐縮ですが、とても大事なことなので聞いてください。GoFの23種類のデザインパターンは、生成に関するパターン、構造に関するパターン、振る舞いに関するパターンの3つに分類されています。このことから、オブジェクト指向プログラミングを上手に実践するには、生成、構造、振る舞いに関する工夫をすればよいことがわかります。GoFデザインパターンは、工夫のお手集なのです。 個々のデザインパターンの質(何が便利なのか)を見抜くコツは、どの分類に属しているかを確認することです。今回紹介するSingletonパターンは生成に関するパターンに分類され、Flyweightパターンは構造に関するパターンに分類されています。すなわち、オブジェクトの生成に関する工夫と、プログラムの構造に関する工夫です。 【お役立ち度】★★★☆☆ ●オブジェクトを1つだけしか生成させないSingle

    矢沢久雄の早わかりGoFデザインパターン(7)
  • 矢沢久雄の早わかりGoFデザインパターン(6)

    プログラムの動作を分析する際には、大きく分けて2つの視点があると思います。1つは「処理が流れて行く」という見方です。これを図に表すと、フローチャートになります。もう1つは「状態が変化して行く」という見方です。これを図に表すと、状態遷移図になります。これら2つの視点は、プログラムに置き換える対象に応じて自然と使い分けられるものです。 プログラムの状態と聞くと、ピンと来ないかもしれませんね。早い話が、データの値が様々に変化することです。オブジェクト指向プログラミングでは、フィールドの値がオブジェクトの状態です。オブジェクトは、現在の自分の状態に応じた振る舞いをします。場合によっては、状態が変化したことを、他のオブジェクトに通知することもあります。その際に、何か工夫をしたくてウズウズしてきませんか。 【お役立ち度】★★★★☆ ●if文を使わずに、状態に応じた処理を行えるStateパターン 3つの

    矢沢久雄の早わかりGoFデザインパターン(6)
  • 矢沢久雄の早わかりGoFデザインパターン(5)

    連載の第1回で一覧表に示したとおり、GoFの23種類のデザインパターンは、「生成に関するパターン」「構造に関するパターン」そして「振る舞いに関するパターン」の3つに大きく分けられます。このことから、OOPに関するとても重要なヒントが得られます。それは、OOPを上手に実践するには、生成(オブジェクトを生成する方法)、構造(クラスの関連付け方)、そして振る舞い(オブジェクト間のメッセージの渡し方)を工夫すればよいということです。これら3つを重要視することが、他の技法にはないOOPらしさなんだとも言えるでしょう。たったの3つだけだと思うと、ずいぶん気持ちが楽になりますね。今回紹介するBuilderパターンとPrototypeパターンは、どちらも生成に関するパターンに属するものです。どんな工夫なのか、順番に説明しましょう。 【お役立ち度】★★★★★ ●様々なオブジェクトを作ってくれるBuilder

    矢沢久雄の早わかりGoFデザインパターン(5)
  • 矢沢久雄の早わかりGoFデザインパターン(4)

    図1●複数のクラスを1つのクラスに見せかけるFacadeパターン。もともと三つのクラスを使う必要がある機能(a)を,Facadeクラスによって一つのクラスに見せかけることができる(b) IT Proに、アラン・ケイ氏が2003年1月に来日した際のインタビュー記事があります。それによると、氏は、生物の細胞が複雑な構造を作り上げる様子からヒントを得て、オブジェクト指向を考案したそうです。細胞から細胞へメッセージを送る(メッセージ・パッシングする)ことで、目的の機能が実現されると考えるのです。筆者のような凡人には、思いもよらない奇抜な発想ですね。細胞は、プログラムにおけるオブジェクトに相当します。メッセージを送るとは、他のオブジェクトが持つメソッドを呼び出すことです。こう言ってしまうと、実に味気ないのですが。 アラン・ケイ氏は、1972年にSmalltalkというオブジェクト指向プログラミング言

    矢沢久雄の早わかりGoFデザインパターン(4)
  • 矢沢久雄の早わかりGoFデザインパターン(3)

    矢沢久雄の早わかりGoFデザインパターン(3) 第3回 Factory Methodパターン/Abstract Factoryパターン 今回紹介する2つのパターンの名前には、どちらも「Factory(工場)」という言葉が入っています。何を作る工場なんでしょう?「オブジェクト」を生成する工場です。オブジェクトは、クラスのコピーをメモリにロードしたものであり「クラスのインスタンス」とも呼ばれます。Javaでは、MyClass m = new MyClass(); という構文でオブジェクトを生成します。newという命令を使っていることから、オブジェクトを生成することを「newする(ニューする)」とも言います。 複数のプログラマが1つのシステムを構築する場合には「私はクラスを作る人、貴方はクラスを使う人」という役割分担ができます。クラスを使う人は、他の人が作ったクラスをnewするわけですが、ちょっ

    矢沢久雄の早わかりGoFデザインパターン(3)
  • 矢沢久雄の早わかりGoFデザインパターン(2)

    プログラムの設計とは、システム全体を複数の小さなモジュールに分け、それらの関連を考えることだと言えます。その際に重要なのは、モジュール間の関連をいかにシンプルにするかです。1つのモジュールの改造が、できるだけ他のモジュールに影響を及ぼさないようにしなければなりません。これは、オブジェクト指向プログラミングに限らず、あらゆるプログラミング技法に共通したことでしょう。 オブジェクト指向プログラミングにおけるモジュールは、クラスまたはオブジェクトです。クラス間の関連は、プログラムの静的な構造を表し、オブジェクト間の関連は、プログラムの動的な機能を表します。今回は、GoFデザインパターンの中から、オブジェクト間の関連をシンプルにするIteratorパターンと、来つながらないクラスどうしを改造することなく関連付けてしまうAdapterパターンを紹介しましょう。どちらも★5つですから、そのアイディア

    矢沢久雄の早わかりGoFデザインパターン(2)
  • 矢沢久雄の早わかりGoFデザインパターン(1) | 日経 xTECH(クロステック)

    今回は、パターンを1つだけ紹介します。「Mediatorパターン」です。GoFでは、それぞれのパターンの「目的]「背景」「効果」などが明示されています。私も、ちょっと真似をしてみましょう。複数のオブジェクトを組み合わせてプログラムの機能を実現するという目的において、オブジェクト間の関連がゴチャゴチャになってしまうという背景(問題)があり、Mediatorパターンの採用によって関連をキレイに整理できるという効果があります。説明だけでは、何のことだかわからないと思いますので、具体例をお見せしましょう。 図1[拡大表示](1)をご覧ください。これは、UML(Unified Modeling Language、ユーエムエル)と呼ばれる表記法で記述されたプログラムの設計図です。UMLでは、四角形の中に下線付きで名前を書いてオブジェクトを表し、関連のあるオブジェクトを矢印で結んで示します。ここで関連

    矢沢久雄の早わかりGoFデザインパターン(1) | 日経 xTECH(クロステック)
  • 矢沢久雄の早わかりGoFデザインパターン 目次:ITpro

    Googleがインフォスティーラー対策DBSCの試用版を開始、多要素認証に続く次の一手 2025.05.08

    矢沢久雄の早わかりGoFデザインパターン 目次:ITpro
  • 1