「GoF」を含む日記 RSS

はてなキーワード: GoFとは

2021-06-05

ニューズウィークのお粗末に過ぎる陰謀論

「研究所流出説」を甦らせた素人ネット調査団、新型コロナの始祖ウイルスを「発見」!|ニューズウィーク日本版 オフィシャルサイト

武漢研究所は長年、危険なコロナウイルスの機能獲得実験を行っていた|ニューズウィーク日本版 オフィシャルサイト

ニューズウィークが新型コロナウィルス(SARS-CoV-2)の武漢ウィルス研究所(WIV)起源説をぶち上げているがひどくお粗末だ。

なぜお粗末かと言うと、ほぼデバンク済みの『コロナウィルス人工説』である上にその中でも完全に粉砕されている『RaTG13起源説』を提唱しているかである

RaTG13は新型コロナウィルス(SARS-CoV-2)と最も近縁だが、これをいじってSARS-CoV-2を作ったという主張は既に反証済みなのだ

詳しく説明しよう。

RaTG13では遠すぎる

SARS-CoV-2とRaTG13のゲノムの相同性は約96%。しかしそれでは遠すぎる。

SARS-CoV-2の最も近い親類は、武漢ウイルス学研究所に保管されていたRaTG13という名前コウモリウイルスです。このウイルスSARS-CoV-2の起源であるという根拠のない憶測がいくつかあります

ただし、

(i) RaTG13はCOVID-19が最初に発生した武漢(湖北省)とは別の省(雲南省)からサンプリングされました。

(ii) SARS-CoV-2とRaTG13の間のゲノム配列の相違のレベルは、平均50年(少なくとも20年)の進化距離に相当します。

したがって、SARS-CoV-2はRaTG13から派生したものではありません。

―――エドワード・ホームズ,シドニー大学教授

実際、Boni et al. (2020)推定ではSARS-CoV-2とRaTG13が共通祖先から分岐したのは約39~71年前であった。さらに言えばSARS-CoV-2とRaTG13は祖先と子孫ではなく同じ祖先もつ兄弟である

研究室でRaTG13を培養して進化させてもSARS-CoV-2にはならないし、仮になり得るとしてもそれにはうん十年かかる。

WIVがRaTG13を見つける前、何なら研究所設立から培養してなきゃいけないねえ。

RaTG13からは作れない

距離が遠いなら科学の力で乗り越えよう!

Gain-of-Function research (GOF機能獲得研究)には培養だけでなくゲノム切り貼りしたキメラウィルスを作製する方法がある。これだ!

しかしこれも問屋が卸さない。

ゲノムを組み替えてキメラウィルスを作った場合、組み替えた部分だけ違っていて他のゲノム領域はほぼ同一になる。仮に組み換え後に培養を経ても変異分布痕跡が残る。

しかし、RaTG13とSARS-CoV-2の相違(変異)はゲノム全域にわたりほぼ均等に分布している(Zhou et al., 2020)。これはRaTG13のゲノムを組み替えてSARS-CoV-2を作ったとする主張の決定的な反証である

その他

これはRaTG13に限った話じゃないが、SARS-CoV-2は近縁のコロナウィルス(CoV)が持っていない特徴をいくつも持っている。

つのスパイクたんぱくのRBD配列2019年時点では他に類似配列を持つものがいなかったし、フューリン塩基切断部位とO-結合型グリカンも近縁のCoVでは見られなかった。

仮にSARS-CoV-2を研究室で作製するなら、これらの当時未知だった特徴をどうやって組み込んだのか説明できない。

意図的に組み込んだのではなく、培養中に進化して偶然できたと答えようにも、2020年に野生動物(センザンコウ)から発見されたCoVもつRBD配列SARS-CoV-2とほぼ同じだったという事実が立ちふさがる。

研究室選択圧のもと進化した配列が、自然環境下で進化してできたそれと偶然一致するのはまずあり得ない。

あり得たとしても、『自然環境にはSARS-CoV-2に類似した特徴を持つ未知のCoVが色々いる』可能性の方がはるかに高い。

以上から、RaTG13に限らず当時の地球においてSARS-CoV-2を人工的に生み出すためのバックボーンウィルス人類は持っておらず、このウィルス自然環境下で進化したものだと考えるのが妥当である(Andersen et al., 2020)、と言うわけだ。

結論として

『RaTG13起源説』は科学的に完膚なきまでに粉砕されている陰謀論である

証拠がない”ではなく“否定する証拠がある”レベルの仮説である。WIV起源説好意的研究者ですら肯定していない。

ニューズウィーク記事の前編のタイトルは『「研究所流出説」を甦らせた素人ネット調査団、新型コロナの始祖ウイルスを「発見」!』であるが、『RaTG13はSARS-CoV-2の始祖ウィルスではない』という科学事実の前には滑稽と言うしかない。

“「研究所流出説」を甦らせた”と言うのも嘘で、最近のWIVへの追及は『研究所経由説』とでも呼ぶべき新しい(本当は古いけど陰謀論に隠れて無視されてた)説による。

ニューズウィーク記事の前編も後編も、あれが怪しいこれが怪しいと疑惑てんこ盛りにしていたが、その怪しさを全部『RaTG13起源説』に紐づけしたせいで、台無し

過激陰謀論ピックアップされてしまえば、類似のしかし陰謀論とはとても言えない“あり得る仮説”でさえ、十把一絡げに陰謀論扱いされてしまうという危機感を持ってほしい。

『RaTG13起源説』みたいな糞陰謀論で『研究所経由説』をつぶそうとするのはやめてくれ。

研究所経由説』

Andersen et al. (2020)やLiu et al. (2020)Hakim (2021)など、SARS-CoV-2を研究室内で作り出すのは合理的に考えれば不可能であることがわかり、初期の雑い陰謀論(含『RaTG13起源説』)はだいたい駆逐された。

そのおかげで『ウィルス自然起源だが拡散にはWIVが関わっているかもしれない』という元々あった穏当な仮説が台頭してきた。

親愛なるブックマーカー諸氏のため詳しく説明いたしましょう。

研究所経由

SARS-CoV-2は野生動物起源もつが、WIVの研究員がそれを武漢に持って来たかもしれないと言う説です。厳密に言えば研究所起源の説ではありません。

最近の、WIVを追求する流れは主にこの説が念頭に置かれています

SARS-CoV-2の起源に関する現在の最有力な仮説は以下ですが、

宿主(起源):祖先ウィルス宿主。人との接触が少ない野生動物コウモリが有力。

中間宿主:人との接触が頻繁な動物ウィルス媒介するほか、感染中にウィルス進化する場合も。SARSの時はハクビシン(有力)、MERSの時はラクダ(確信)、COVID-19では……?

ヒト集団

中間宿主ポジションあるいは中間宿主とヒト集団の間のポジションに“研究員/研究所”を置いたのが研究所経由説です。

ウィルス探してフィールドワークコウモリひしめく洞窟で、SARS-CoV-2に感染して武漢に帰ってきました』と言うわけです。亜種として『サンプルをラボに持ち込んでから流出しちゃった』バージョンもありますが大意は変わりません。

この説の利点は『まったく無理がない』ことです。ウィルス学的なエビデンスと競合することもなければ未知のウィルスでっちあげる必要もない。

ウィルス感染しているかもしれない動物ウィルスを含んでいるかもしれないサンプルを採取する立場の人が、その途上でウィルス感染たかもしれないと言うのは非常に合理的な考えです。

もちろん、食卓に並ぶべく中国各地で採集された野生動物たちによって武漢の生鮮市場ウィルスが持ち込まれ可能性も当然あります

あるいはミンクなどの家畜の群れでウィルスがサーキュレートしていたかもしれません。

たまたま山歩きをしていた市民コウモリバッティング(激うまギャグ)して感染した可能性もあるでしょう。

重要なのは、これが“あり得る仮説”であり、検証可能であることです。

そう、検証可能なのです。中国側が研究所職員学生血液サンプルや、武漢血液銀行のサンプル(19年12月より古いやつ)を提供してくれれば、非常に多くのことがわかるはずです。

WIVの職員が皆陰性であれば、選択肢が一つ消え、他の仮説がより確からしくなります

陽性であれば、その陽性者の行動を追跡することでわかることが多々あります。野外採集には行かず生鮮市場を訪れていれば、感染源は市場かも知れません。野外採集に行っていれば、その行先に祖先ウィルスいるかもしれません。

あるいはWIVとは関係なく12月よりずっと前からCOVID-19が蔓延していたことが明るみに出るかもしれません。

しかし、中国データ資料の提出を拒否しています

WHOは19年12月よりずっと前に武漢COVID-19のような症状を出した人を見つけました。それも90人以上。

アメリカはWIVの職員3人が11月COVID-19のような症状で入院したのを明らかにしました。バイデン大統領継続調査を求めました。

しかし、中国データ資料の提出を拒否しています

今、中国やWIVに対しての批判とはつまり検証への非協力への非難であるともいえましょう。

何故データを出さないのか?出しさえすれば否定できる仮説に対して、何故データを出さずに否定しようとするのか?何を隠しているんだ?HEY!!

研究所経由説を選択から外しはしない』という各国の研究者やWHO声明は、ほっかむりは許さんぞという宣言なのです。

野生動物起源一本やり(WIVの関与は無視)にすると、どうしたって武漢血液データへの追及は弱まりますからね。

親愛なるブックマーカー諸氏におきましては、同じラベルでも中身は違いますので糞(『RaTG13起源説』等)も味噌も一緒くたにししまわないようお願いいたします。

2021-03-10

anond:20210310110216

お前「GoFデザインパターン重要であるかのように言うやつムカつく!」って、もう一年ぐらい怒ってるんだな

https://anond.hatelabo.jp/20200521094135

もっとからかな

プログラミング界は「自分馬鹿だと自覚できてない奴」が多すぎてうんざりする

レベルから努力してやっと平均かその一段下くらいになっただけの雑魚が「自分上級者」だと勘違いして偉そうにしているケースが多くて、嫌になる。

たとえば、C言語ポインタが難しいとよく言われる。まあ、中学生高校生がはじめて学ぶならともかく、あんもの別に難しくはない(実際のソフトウェアポインタを適切に使うことは難しい)。

実際、ポインタに躓かなかった人なんかたくさんいて、そういう人の一部はより高度なことをどんどんやっている。一方、ポインタに躓いて努力してやっと最低限のレベルに達したような人が、声を大にして「プログラマになるなら、ポインタくらい理解しないとな」とか言ってる。

GoFデザインパターンもそうだ。

プログラミングセンスのある奴はすぐ見抜けることだが、アレには何の重要性も無い。だが、頭の悪い奴は、あの程度でも苦労しないと覚えられないから、重要だと思ってしまうらしい。これはギャンブル宗教にハマる心理と同じである。つまり時間や労力をかけたのだから、その対象にそれに見合う価値があって欲しいと思うわけだ。

頭が悪いと、こういう意味物事客観的に見られなくなる。学歴コンプレックスになると、一生そのことを引き摺って、何に関しても学歴と絡めて論じたくなるようなものだ。

2020-12-03

anond:20201203131305

デザインパターン普通意味GoFデザインパターン)以外の意味で使っているのだろうか

こういう人(俺の言うデザインパターンはこういう意味から、的なこと言う人)がいると、まとまる話もまとまらなくなりとても面倒くさい…

2020-10-23

anond:20201022005749

難しく考えなくても、クラスAに毛が生えたクラスA'を作る以外に使っちゃダメでいいよ。

GoFにもそう書いてある。

2020-05-21

GoFデザインパターンを推薦している人は、頭の悪い人が多い

今更、こんな本を読む必要はないです。いや、出版された当時でも実質的価値はなかったと思います

この本に載っているパターンは、以下の4つのどれかです。

また、挙げられている23個のパターンには特に根拠はなく、著者が思いついたものを挙げただけです。

Code Completeにも書かれているように、GoFデザインパターンは使える状況で使えば保守性が上がるというものでありません。たいていの場合無駄に複雑になるだけです。必要のない場面では使うべきではなく、使って良さそうに見える場面でも、ドメインモデルを再検討した方が良いです。優れたソフトウェア開発者であれば必ずそうします。

GoFを推薦している人というのは、以下の特徴があるように見えます

実際は、GoFデザインパターンほとんど有用ではなく、またまともなプログラマなら仕事の片手間にぺらぺらと読んでいれば、内容も底の浅さも理解できる程度のものしかないのですが。

これと非常に似たものに、麻雀の点数計算があります麻雀の点数計算は、普通の知能のある人から無意味に複雑なものに見えますが、麻雀プレイヤーの多くは合理的ものだと思っているようです。この理由は単純で、大多数の麻雀プレイヤー頭が悪いからです。だから、点数計算無意味に複雑なシステムであることが理解できず、また普通の人なら1日で覚えられる点数計算を苦労して覚えたか価値あるものだと思いたがるわけです。

誤解しないでいただきたいのは、「デザインパターン」という概念自体重要であるということです。しかし、GoF別にデザインパターン」の原点とか典型とかでは全くないのです。理解力が低いとそういう勘違いをしてしまうようですが。

2019-02-19

"美しいコード"はよく見るけど、"美しい設計"について書いたものって目にしたことがない。

クリーンコードリーダブルコードなど、"美しいコード"を書くための本は知ってるけど、

例えば要件定義UML図があってその解説をするような、"美しい設計"について書いた本/記事ってよく考えると知らない。

GoFとかのデザインパターン設計だけど、「どう活用するか?」がメインで、

MVCDDD設計ではあるけどあくま手法

ある定義の中に埋め込まれた一部としてその姿を解説付きで見たことがない。

整理されたコードを書くことは設計かつ実装だけど、それが全てだったら上流/下流って世間工程が分かれてる意味って?

「こんな一見勘違いしそうなややこしい要件を、こんな風に設計しました!」っていう例をたくさん見てみたい。

優しく博識な増田さんや、どうぞ教えてくださいな。

2018-11-13

anond:20181113154458

GoF「つまり俺たちのうち誰か一人はC++が書けない! 誰が書けないか…分かるかな?」

2015-11-06

90年代オブジェクト指向ってオカルトじみてたな

gofデザパタみたいにコーディングのイデオム程度ならいいけど、オブジェクト指向分析とかオブジェクト指向設計とか、あそこまでいくと完全にオカルト

でもいまだにああいうのを、科学的とか工学的だとおもってるオッサンいるし。

2013-03-27

プログラミングの初級になるためにの目次

http://anond.hatelabo.jp/20130325172822 の続き

言語Java7を想定。(Java8が迫っていますが、Lambdaなど関数型は、まだ早いと言うことで)

定理由は、C++比較して学べるところが大きく、安全シンプル言語から

※いきなりJavascriptはやめとけ、PHPは論外。

RubyScalaでないのは、筆者が初心者には適切には教えられないから。

おもちゃToyとしてjQueryで遊ぶのは、悪くは無いと思う。

0.はじめに

これ以降は名著の紹介や学習方法の紹介が主体となります。名著のコンポジションという形が時間限界ですね。

量については「初級になるなら、専門書を計3,000ページは修得することは覚悟してね」なんて言ったりしています

Javaで初級のわかりやすい指標ですと、[amazon:Effective Java]とGoFまでの修得。

初級になるまでに登竜門への挑戦期間を含めて、3~4年はかかっても仕方が無いとも思います

※逆に「一山いくらのコーダー」というのは、Effctive JavaGoFが達成している技術も知らずに「自分Javaプログラマー」だと誤解してしまっているような人達です。

そういったコーダーは何年経とうとも初級プログラマーにすら敵いません。

初級を目指して、プログラミングを楽しんでください。

ただ、学ぶべきことはべらぼうですが、「各分野毎に、エレガントな方法がある。だから探して修得する」ということが大切です。

※「一を聞いて十を知る」ような優秀な人に、50冊くらいドーンと本を置いてあげて、各本の目次を読ませるだけで、

底の見え無さを悟ってくれたりすると、嬉しくなってしまます

※余談ですが、その底の見え無さは数学という学問のものですね。例えば、関数型言語の底流に「圏論」というここ100年の最新の数学があります

また中級くらいで、Liskovの置換原則などが載っている本を紹介しますが、

そのLiskovの置換原則の周辺で出てくるcovariant(共変)って、圏論という数学概念だったりします。

数学出身としては、数学現実に活かされている嬉しい事例です。

閑話休題

1.目次

1)エディター・コマンドライン正規表現友達

「速く正確に大量の出力」という能力は、プログラミングをする上でも、ドキュメントを書く上でも、何より「つまら仕事」の時間圧縮ができるようになるため、重要です。

スローガンとしては「思考のスピードで出力することを目指そう」です。

紹介するエディターはemacsvimExcelです。ついでにIMEとしてATOKを使用しているため、ATOK操作Emacsライクにする話も紹介します。

ExcelWindows環境Meadowすら入れさせてくれない場合最後の砦という扱いです。

コマンドラインは、「コマンドラインというものがある」「時として非常に強力である」程度の紹介です。

※筆者はzsh全然使えません。使いこなしている方々と接する度に「勉強しなきゃな~、でも、あっちの方を先にやりたい・・・」とグズグズして、はや何年・・・

正規表現は置換を用いて、テキストの一括編集重要です。後、遭遇したくない事態ですが、スパゲッティコードの解析をする上での最後の砦です。

※遭遇したくない例

ん?何か変なところで副作用のある処理があるようだなぁ(消沈)、SQLのInsertかUpdateか一応Mergeも使っているところから逆算して原因箇所を探すか・・・(諦念)

この糞コードがっ!!こんなところに書くんじゃねぇ!!(憤怒激高)

(ここで、他にやらかしていそうな似たようなコード正規表現grep検索。改行コード込みにすれば複数文検索も可能)

わはは、予想通り共通化すべきロジックメソッドがそこら中にある・・・

2)アルゴリズムに始まりアルゴリズムに終わる(データ構造アルゴリズムの一部という認識言葉を使っています)

入門編で一つLinkedListというアルゴリズムを学びました。

少なくとも一つ本を読みながら自力でアルゴリズムを学べる人なら、大成できる可能性があります

前に紹介した[amazon:C++実践プログラミング]には、LikedListやStackなど基本的なアルゴリズムが載っておりますが、

これに加えて、初級になるためにはこれくらいは知っておいて欲しいというものを紹介します。

※後、最初から必ずしも手を出さなくても良い上限も紹介いたします。

3)正・不正の定式化・自動テスト・ロギング・アサーション・例外・契約プログラミング

プログラムは、データ入力して、加工して出力・保存する処理の繰り返しです。

まり、各一連の繰り返し毎に、「正しい入力」「正しい出力」を定式化する必要があります

それを人間の手では無くコンピューターやらせられるように、つまり自動テストできるようにテストプログラミングします。

そこで処理の進捗を確認するためにロギングし、処理が想定通りであるかをアサーションでチェックし、

不正入力不正な出力=例外が起きたら、対処策をプログラミングします。

(ex 途中で処理を中断して、入力者に適切な入力メッセージを伝えてあげる。入力自動補正などもあり得る)

で、ここら辺をまとめてどうあるべきかとして「契約プログラミング」があります

※余談。定式化・テストに際して、数学畑の人間としては、Javaだとequalsのオーバーライドでも必要になるし、同値関係同値分割だけでなく、集合論群論から学んで欲しい・・・(ここいらは数学科学部1~2年の学習内容)

4)名著を読め、新たな名著を探せるようになれ・素晴らしい人を見つけたら、縁を大切に

名著は英語で読みましょう。名著が名著たる由縁は、度々引用されることにあります

まり最新の技術書を読むときに、引用された名著のフレーズが、新旧のリンクをなし、理解の助けになります

対話は学問をする上で非常に重要です。

壁打ちといって、独り言で思考補助をするよりも遙かに有益です。

※素晴らしい師匠を探すなら、大学行くのが一番ですが、見聞を広げていく中で出会いを待つしかないとも思います

5)オブジェクト指向とはなんぞやとGoFデザインパターン + マルチスレッドプログラミング

マルチスレッドが難しいのは「バグを起こしにくいプログラミング」を求められるから

まりTry and Errorからの決別が求められ、今後の仕様変更拡張も踏まえて慎重に慎重にデザインする必要があります

できる限りステータス変数を持たずに安全に、でもマルチスレッドにするのだから効率を追求しなければ本末転倒

でも効率のためにはメモ化に代表されるキャッシング必須と、アンビバレンツな要素のバランス取りが難しい。

このために、リエントラントな実装・抽象と実装の分離など様々なエッセンスを駆使することが必要です。

床屋哲学者問題

6)日々コツコツと

というよりも孔子曰く、知っているよりも好きであること。好きであることよりも楽しめることのほうが強く、

気づいたら日々時間が許す限りプログラミングをしてしまうのが理想です。

仕事として嫌々スキルを磨かなきゃということが、これほど不幸な職業も無いですね。

余談 FizzBuzz写経について

FizzBuzz」は、本来の目的通り、協力会社の選定の際の足切りには便利ですが、

学習の達成度を測るには、簡単すぎる不適切な問題ですね。

写経

数学畑の人間として言わしてもらうと、

写経数学証明問題を、教科書テンプレ通りに、数値や名称だけ変えて記述することしか出来ない人の発想。

まり矛盾無く一貫した論理モデル」の構築が自由に出来ず、テンプレの微修正しか出来ない人の発想。

また、外部の「矛盾無く一貫した論理モデル」の吸収が不自由で、アルゴリズムを「手順」としてしか捉えられないように見受けられる。

プログラマーとしての大成は見込めないと思う。

数学畑として提供できる試金石

連続であること確かめるための「ε-Δ論法」(数学科学部1年の学習内容)

事前知識無く、このモデルを理解できる人は、十分に「矛盾無く一貫した論理モデル」を構築できる人。

1.まず「連続」とは何ぞやと考えて概念を膨らませてください。

2.十分思考できたと思えたら、Wikiあたりでイプシロン デルタ論法を見てください。

2011-03-19

ドラゴンボールで学ぶオブジェクト指向Z

これは http://anond.hatelabo.jp/20110316202255 の続編です

GTをやる前に改を書いてくれている人がいてとてもしっかりした内容なのでちゃんと勉強したい人はそっちを見てね!

d:id:ryoasai:20110317 - ドラゴンボールで学ぶオブジェクト指向 改 | 達人プログラマーを目指して

またオブジェクト指向については

d:id:m-hiyama:20080109 いまさらながらだけど、オブジェクトクラスの関係を究めてみようよ | 檜山正幸のキマイラ飼育

がとても詳しいです。合わせて読むとかなりしっかりと理解出来ると思います。

変な書籍を買うよりこちらがオススメです

はじめに(いいわけ

ホットエントリに行くとは思っておらず、皆様ありがとうございます

ドラゴンボールオブジェクト指向にする」というコンセプトではなく、「オブジェクト指向を(無理矢理)ドラゴンボールで説明する」という遊びだったので

プログラマーの方々にはツッコミを受けてしまいましたがここは遊びだと思って楽しんで下さい…。

ドラゴンボールは小さい頃から大好きでしたが流石にうるおぼえ過ぎました

専門家の方々からも厳しいツッコミを受けました

それはさておき「説明する題材を決める→好きな漫画から無理矢理当てはまりそうな例を考える」という思考実験なので、気が向いた方は色々考えてみると楽しいと思います。僕は楽しかったです

ジョジョの奇妙な冒険で学ぶオブジェクト指向

 スタンドとか波紋法とか色々面白そうです

ジャニーズで学ぶオブジェクト指向

 これは難易度が高そうです

BLで学ぶオブジェクト指向

 継承誘い受け、移譲=ヘタレ攻めだと思います。

結論

やっぱりドラゴンボールで例えると分かりやすいな!

無理がある!


ドラゴンボールで学ぶオブエジェクト思考Z ドラゴンボールで学ぶデザインパターン

デザインパターンとはドクターゲロが考えた「こうやって設計すれば色々捗るぞ」という例のことです。実際はGoFという人たちが考えたもので23個のよくあるパターン名前を付けて整理してくれたわけですね。

23個の中にはブルマさんですらわからいものが多いので(さすがドクターゲロですね)良く使う、代表的な物をいくつか紹介しま

Singletonパターン

Singleton世界に一つだけしか存在出来ないようにする方法です

balls = new DragonBalls(); //これでは誰でもドラゴンボールを作れてしまう!
balls.callShenron();

クラスの中にはいくつかのメソッドがありますが、簡単に言うと外から呼べるもの、外からでは呼べないもの

二種類があります。そうやってメソッド保護することで世界崩壊を防ぐわけですね。

基本的な戦闘力をアップさせるには本人の努力が必要になり、外から簡単に挙げられてしまうとジャンプ三本柱が外れてしまいます。

(某漫画などは努力しなくともあがったりしますが)

ただナメック星の最長老界王神などはかなり偉いので、本人の才能を引き出すことが可能した

現実には思いつきのような仕様を後から言われることが多々あります。困ります

//地球上にひとつだけ存在するドラゴンボールをつくろう
class DragonBalls{
	private DragonBalls(){
	      //ドラゴンボールを作れないように生成メソッド保護します。
	}
	static function sagasouze(){
		static singleton_dragonball;
		//ドラゴンボールを生成。
		//DragonBallsクラスの中なので、保護してある「new DragonBalls()」を呼べます。
		if(!singleton_dragonball)singleton_dragonball = new DragonBalls();
		return singleton_dragonball;
	}
}

これで界王神から怒られることもありませんね。

プログラマーは神なのでドラゴンボールを作れます


Proxyパターン

何かの処理を行うためにProxy、代理人を立てる設計です

地球のみんなは地球しか話せませんが、ナメック星にいるクリリンを通して願いを叶える必要があります

クリリンももちろん地球しか話せませんが、ナメック語を話せるデンデがいるため、地球のみんなは願いを叶えることが出来ます

class Kuririn{
     private dende = new Dende();
     
     function request( wish1, wish2, wisth3){
		this.dende.request(wish1);
		this.dende.request(wish2);
		this.dende.request(wish3);
     }
}

kuririn.request(
	"ピッコロを生き返らせてくれ",
	"ピッコロナメック星へとワープさせてくれ",
	"ナメック星にいる孫悟空フリーザ以外を全員地球へとワープさせる"
);

この場合メリットはデンデが何をやっているかクリリンプログラミングした人が知る必要が無いということです

デンデを通して願いと伝える実装だけ行えば大丈夫です

地球の人はナメック星にいるナメック星人が「デンデ」であることを知る必要もありません。

それでも願いは叶うんです

本来であればデンデやクリリンは願いが叶うのを待つ必要がありましたが、地球の人は一気に伝えることが可能なように設計しました

それでないと不便ですからね。

//デンデクラスナメック星人英語でNamekianらしいですclass Dende extends Namekian{
	function translate(word){
		namekian = *****//ナメック語に翻訳します。
		return namekian;
	}
	function request(wish){
		static polunga;
		if(!polunga){
			polunga = DragonBalls.spell("タッカラプト ポッポルンガ プリピット パロ");
		}
		polunga.ask(this.trasnlate(wish));
	}
}




Template Method

大まかなアルゴリズムだけ決めておいて、実装はサブクラスに任せる設計がTemplate Methodです

ナメック星に行く方法を考えた時いくつかの方法がありました。古い宇宙船を探してきて直して載せて…っていちいち書くより同じメソッドナメック星に行けたほうが便利ですね。

abstract class WayToNamek{
	abstract function prepareSpaceShip();
	abstract function launchSpaceShip( ship ) ; 
	function gotoSU839045YX( people ){
		ship = prepareSpaceShip( );			//船を修理しまship.load(people);					//人を載せます
		this.launchSpaceShip(ship);	//船を出発します。
	}
}

ナメック星に行く方法を定義したので「ブルマクリリン悟飯」組と「悟空」をそれぞれナメック星に連れて行きましょう。

way = new WayWithKamisamaShip();
way.gotoSU839045YX( buruma, kuririn, gohan );

way = new WayWithSaiyajinShip();
way.gotoSU839045YX( goku );

と簡単に方位SU83、距離9045YXまで乗員を連れて行くことが出来ます

つの方法を実装します。神様の船を修理して行く方法と、サイヤ人の船(悟空が乗ってきた船)で行く方法の二つです

//神様の船で行きますclass WayWithKamisamaShip extends WayToNamek{
 	function prepareSpaceShip(){
 		return new KamisamaShip(); //船を準備します。神様の船を使います。
 	}
 	function launchSpaceShip(ship){
 		ship.inputByVoice("ナメック星に出発");	//
 	}
 }
 class WayWithSaiyajinShip extends WayToNamek{
 	function prepareSpaceShip(){
 		return new SaiyajinShip();      //船を準備します。サイヤ人の船(フリーザの船?)を使います。
 	}
 	function launchSpaceShip(ship){
		//audio = new HighSpecAudio();
 		//ship.setAudio(audio);
 		ship.turnOnCenterButton();	//真ん中のボタンを押すだけ
 	}
 }

元になる船も違いますし、発射の仕方も違いますが同じ呼び出し方が出来ます

オーディオの位置が決まりませんでしたが、今回の運用では不要とのクライアントからのご意見したのでだったので

せっかく用意したオーディオ無駄になりましたが、コメントアウトしてあります


他のパターン

他にもまだまだあります。のんびり紹介していこうと思います。

ではでは。

2010-11-07

プログラムを書けない奴は馬鹿

手順を考えて、その手順を書くだけ。

言語もあらかじめ決められた手順に沿って解析されて実行されるから、オートマトンBNF記法構文木などの仕組みを一通り覚えてどういう機構チューリングマシン原理的に実行可能なコードへと落とされるかを理解すれば言語自体も覚えるのなんてそんなに難しくない。

手順を考えるなんて、人間が生活する上でいつもやっていること。

プログラムを走らせるためのデータ構造を考えるのに苦労するという話も聞くけど、プリミティブな要素が数値、型へのリファレンス値しかないんだから大体は離散数学で使うグラフの初歩的な知識があれば事足りる。GoFデザインパターンなんてまさにそう。

これらは、専門用語の知識は知らなくても概念としては理解できて当たり前の事だから書けることもそれほどすごい事ではない。

もう大分前から普通大学でもC言語を上手く教えてるし、プログラミングは特別なスキルではない事が証明されている。

2009-01-02

http://anond.hatelabo.jp/20090102145542

釣りだとわかっても苛つく

リストにその分野の第一人者が一人もいない時点で

日本のIT業界の底の浅さが見えるよな

GOFやBjarneクラスはおろか

リーナスクラスすら一人もいない

せいぜいGuido程度しかいな

2008-09-03

Youラッパークラスつくりなよ。

せめてGoFデザインパターン本を読むといいと思うよ

 
ログイン ユーザー登録
ようこそ ゲスト さん