「サブクラス」を含む日記 RSS

はてなキーワード: サブクラスとは

2020-11-06

コード共通化するな

プログラミングできる気になった自称中級者は、ソースコード共通パターンが現れると決まって、その処理を関数などに共通化したがる。

しかに、そうすることでソースコードは短くなるし、一見して保守性が上がったような気になるのだが、それは間違った作法から止めろ。

かいこと言っても伝わらない自称プログラマが読んでることを想定して、先に結論簡単に書いておく。

お前は絶対コード共通化するな。

共通化してはいけない理由

なぜコード共通化するのがいけないのか。理由簡単だ。要するに、コードが似ているのは単なる偶然であって、それらは別の処理だからだ。

別の処理だから共通化するのはおかしいし、もし共通化した処理の一方のみ仕様が変わった場合、その修正は他方にも影響してしまう。つまり保守性が下がっている。

たとえば、同じプロジェクトの中に、10%の消費税を加える処理と、10%の金利を加える処理があったとする。この2つの処理はともに元の金額を1.1倍する処理であり、全く同じ処理であるが、共通化してはいけない。

これらを共通化してしまうと、たとえば金利が8%に変更になったとき金利計算の処理だけではなく、消費税計算している箇所すべてを変更しなければならなくなる。

実際のアプリケーションでやりがちなのは複数の処理の「事前処理」「事後処理」などを1つの関数にして、呼び出し毎に細かい挙動引数制御するようなパターンだ。

これは結局、改修を重ねる度に「事前処理」「事後処理」の内容が使用箇所によって全く異なるものとなり、それに対応するために

といった悲惨設計に陥る。

他にも、GUIアプリユーザーの応答を待つDialogクラスなんてものを作って、使用箇所ごとにメッセージボタンに割り当てる処理などを切り替えることがある。

これも間違いなく、プログラムが成長するにつれて破綻する。たとえば、ある場所ダイアログは、表示するメッセージテキスト形式のみではなくなり、脇に画像を表示するかどうかのフラグコンストラクタに渡したり、Dialog継承させて表組みを表示するTableDialogサブクラスを作ったりすることになる。ボタンが「OK」と「キャンセル」の2種類の場合じゃなくなって、表示するボタンの数をコンストラクタに渡したり、ボタンに割り当てる処理をリスト形式で渡したりし出す。

こうして、最初は良い設計に見えたDialogクラスはどんどん複雑になる。こうなった原因は明らかで、本来は異なるもの共通化したからだ。おかしな色気を出さずに、素直に別々に実装しておけばよかったのである

処理に名前をつけろ

プログラミングをする上で「コード共通化する」なんてことは意識しなくていい。それよりもプログラマがすべきことは、処理に適切な名前をつけることだ。そのプログラムにおいて「単なる変数操作」を超えた意味のある処理には名前をつけろ。そして、同じ意味の処理なら同じ関数を使うし、違う処理なら違う関数を使う。それだけだ。コード共通化できるかどうかなんて全く関係ない。

変数関数クラス名前空間等が再利用のための機構だという先入観は一旦捨てろ。それらの真の意義は、「関心の分離」にある。つまり実装隠蔽し、その意図抽象するために存在する。たまに勘違いしてる奴がいるが、別に1回しか使われない関数とか、1行しかない関数はあってもいい。というか、この原則にしたがって設計すると、ほとんどの関数(or メソッド)は数行になる。

上の消費税の例で言えば、「消費税を加える」「金利を加える」処理は、明らかに単なる算術演算以上の意味のある操作から関数化する。そして、それぞれの実装は当初の仕様では奇しくも全く同じになる。消費税を加える箇所では前者の関数を呼ぶし、金利を加える箇所では後者関数を呼ぶ。

これはこう言い換えることもできる。消費税を加える関数を変更するのは、消費税計算処理が変わったときのみであり、金利を加える関数を変更するのは、金利計算処理が変わったときのみである。つまり、すべての関数は、それを変更する理由がただ1つになるように設計しろということだ。

こういうアプローチプログラムを書くと、ソースコードはあたかもそのアプリケーションドメイン特化言語で書かれたかのような見た目になる。

また、一つ一つの関数は小さく、理解やすく、テストデバッグも容易になる。そして、結果として再利用もしやすくなるし、プログラムの変更も容易になる。

2018-10-16

anond:20181016151058

PSO2は少し遊んだけどサブクラスレベルも75になってないのに最高難易度くるの?とか煽られてやめちゃったな

他に上げたやつと比べて個人的知名度が1段階低いと思ってる

そもそも俺のアンテナプロデューサーうぜえ見たいな話がひっからない

2018-09-14

「開発現場で役立たせるための設計原則パターン」への反論

開発現場で役立たせるための設計原則パターン

https://nekogata.hatenablog.com/entry/2018/09/10/163206

この記事はてブで大絶賛されてるが、個人的にはセンス無いなーと感じたので言語化してみる。

Notificationクラスが不親切。

Notificationクラスそもそも単一責任原則に反してない

開放閉鎖原則勘違いしてる

Notificationクラスと何のクラスが密結合なのか説明されてない

  • 『それ以前の問題というか「本来バラバラに書かれるべきものが、すべてここに書かれてて密結合しちゃってる」とみることができるかと思います。』?
  • 密結合というのであれば、コメント通知を変更した時にNotificationクラスとCommentクラスの両方に変更が生じてしまうことを示すべき

オブザーバーパターンが出てくる意味が分からない

今回の仕様を図で書くと

コメント→→→コメント通知

スター→→→スター通知

あしあと→→→あしあと通知

みたいな感じになるとする。

すると、今回スライド問題視しているのは矢印の右側の通知の部分が1クラス共通化されている点。

しかし、オブザーバーパターンの出番は図の矢印の部分が絡まり合って処理が複雑になってしまった場合

今回は1つのイベントから複数リアクションが発生することは想定しないので

オブザーバー不要なのは当然。選択肢に出てくるほうがおかしい。

そもそも問題認識(通知部分が問題)と解決策(矢印部分を解決)がズレてるから話がおかしな方向にいってる。

Notificationクラスサブクラスを作ろう、ならまだ分かる。

人間の可読性が考慮されてない

まとめ。

かに設計言語化するのは大事だが、言語化というのは「それっぽいことは幾らでも言える」危険性がある。そもそもプログラミングというのは芸術であり文学なんだからセンス無いのに言語化を頑張っても「一見それっぽく聞こえるけど間違ってる説明しか出てこない。

2018-04-27

anond:20180427115121

ボイスロイドボーカロイドサブクラスではない。

一行目の前提条件が偽なので、それ以降についてノーコメント

2018-02-07

[]ディスガイア5 89h

親衛隊さくっとつくった

反転の呪いはどっかで入手した秘伝書が1個あったからラハールちゃんに使った

もういっこウサリアキャラ会まわしてつくってけんじゃに使った

ウサリアのマビキャパマックスにした

うーんきゃらかいアイテムサブクラスマックスで9999にしたら戦闘時にサイコロやすのはもう捨てていいかもなあ

最初すごろくめんどいとも思ってたけどまあこれはこれでいいのかもしれん掘っていくより早く終わるときもあるし

単純にマビ継承考えたらかなり楽だわ

3とか4はこれに比べたらやっぱわかりにくいよなあ・・・

3とかいまだにわかってないし

4はかろうじてわかったっけかな

2の前科とかなんだったか忘れたしすげーわかりにくかった

閑話休題

んで満を持して親衛隊効果確認

あとエキスでちょこっとドーピングしたら、ブレイブアップとマルチアタックなしのまちぇんからビッグバンで1ターンで終わるようになった

たまにかすりヒットで2ターンかかるけど、毎回マルチアタックブレイブアップする手間に比べたらたいしたことない

10分かそこからでATK200万くらいのエキスたまる

1時間で1000万ためられるな

でもまだ捕獲じゃなくてメガホンで投降に頼ってるだけだから捕獲できるようになったらもっと高速にできそう

んでふと思ったけどシーフをエキスの使うキャラに選んだの失敗だったなあ

盗賊の技があるからと思ったけど固有キャラにもセットできるし

あーあメタリカにしとけばよかった

まあ今更だな。。。

うーんでもあっというまに100h目前・・・やっぱディスガイアこわいわー

便利・効率的にできるようになってるはずなのにそれでもこんだけ時間かると・・・

1000万たまったらとりあえず賢者四天王で9999にしてキャラかい強化+プリに―大魔王たおしてトラペ堀の準備かなあ

2018-02-05

[]ディスガイア5 81h

ラハールちゃん、しーふ1、けんじゃ、キリア、ウサリアのサブクラスマックスにして、

エキスドーピングをはじめてやった

ATK+300万くらい

バフと3回攻撃修羅練武の★20が倒せるようになった

でもまだまだエキス集めには効率悪いなあ・・・

気晴らしに倉庫整理がてらアイテム界いったり

うーんランデマ特化ブログみたら親衛隊がいいとかかいてあるな・・・

親衛隊の秘伝書19個・・・キャラかい19週・・・

20ターンまわしてトテモスメール量産してからキャラ界いったほうがいいな

それにしてもめちゃくちゃやりこんでる人のブログ楽しそうにディスガイアしてるのみるとほんとすごいわ~

2018-01-31

[]ディスガイア5 67h

うーん効率化のためにあーしようこーしようって調べてるとき楽しいけどいざやるとめんどくさすぎてすぐいやんなっちゃうな・・・

とりあえず修羅ぷりにー大魔王倒してラハールちゃんのまびを3にしてマスブラスターやったらバフつきで★12くらいまで修羅練武4いけることは確認した(ステータスで2000万超えた)けど、

サブクラスマスターがタワーでも効率悪くてがっかりした

10人で修羅練武4★5だと一人あたりサブクラス★2つくらいしかまらなかった

結局これだと何回か必要だし、★5から6までの間が結局たくさんいるから、特定キャラに絞ってジオブラストのほうが効率よさげ

閑話休題

★12捕獲できたかスペシャルで絞ろうとしたけどまったく絞れなかった

メガネカレーしてるからHPで削らないといけなかったらしいなるほど

あとサルトーレが絞る効率20%UPのマビもってるらしいから育てるかなあ

めんどいけど

と思って調べたらそのマビ汎用だから継承できるじゃん!

キャラかいで秘伝書化したら別に育てなくてもいんだな

とゆーことはジオブラでのフルフル強化はしなくてもいいか

キャラかいで勝てる程度だけどアサルトアタックダブルアタックがあればとりあえずよし

それでエキス要員つくって・・・賢者もサブクラあげたい・・・

同時にイノセントもやりたい・・・

ジオブラ要因以外はハンターチームにいれれば★20でもイノセントだけなら一撃しできるしな

ハンターチームが撃破すれば強くなるし一挙両得

服従イノセントふえてきてうざかったところだしやるかな

まあのんびりやろう

やっぱキャラ好きだから育てたいもんな

2018-01-30

[]ディスガイア5 60h

マスブラスターをラハールちゃんに継承させようとしたら固有まびは継承できなかった・・・はずかちー

うーんアイテム界もぐることも考えたらいずれにせよどっかでランデマ要員のけんじゃを育てないといけないんだな

めんどいけどサブクラス稼ぎすっかなー

汎用キャラにもサブクラ設定できるようになったぶん最初よりかはだいぶらくになってるはずだし

しーふは9999にしてサブクラ稼ごうとしたらなんか修羅エクのジオブラ1発でMAXになりにくくなってて、あれレベル低い方がクラス熟練度たくさん入るんだったっけって思って転生させた

つーか転生時の有料での自動レベルアップするのと1から育てるのとだったら後者のほうが成長率いいのな

あとキャラかいでラハールちゃんのまび数マックスにした

邪悪ちゃんもすぐ倒せる

でもキャラ会でめんどいのはメニューないにキャラ一覧がないか邪悪ちゃんがどこにいるのかわからんことだな

とりあえずけんじゃのサブクラMAXかなー

一度に複数マックスにできればいいんだけどなあ・・・

最低でも30回以上アイテムかいにもぐらないといかんのはめんどすぎる

しかし昨日80hくらいでトロコンしたってひとのブログみかけたけどとてもいけるきがしないわ

まだしゅらとらぺすらないのに

しかし据え置きだとしんどい・・・

vitaでやりたい・・・

でもリモプだと通信速度足りないって言われる・・・はあ・・・

閑話休題

今調べたらいろいろ目からうろこだった

固有マビスロット修羅プリにー倒したら拡張できるんだって

これでマスブラスターアサルトアタックもラハールちゃん使えるかも!

あとサブクラスあげのめんどくささ、ジオブラスト方法最初だけで、もう一人でもサブクラマスターしたようなやつがい修羅練武4いけるやついるなら、それを使ったタワーでいけるんだって

これなら複数人どうじにいけるなー

一人ひとりジオブラってのはめんどすぎだと思ってたからほんと助かる

まずジオブラ覚えさせるところからーとか考えてたし・・・

いや、タワーでいけるよな?

早速ためしてみよう

2018-01-26

[]ディスガイア5 47h

うーん目に見えて数字が増えないからつまらない状態

修羅クエ進めるためには強化しないといけないけどめんどい

とりあえずやれたことは勝利の味と不安定な力習得

勝利の味はすごろく道中で習得できたけど、不安定な力がなっかなか出てこなくて苦労した

マナつきてもう一回ためなおしたし

でもマナ屋300を2つ作ったら1,2回 通常練武4をやるだけで30万くらいたまったからよかった

キャラ界の消費マナ魔王級では最大10万だったし

すごろく有利に進めるためにアイテムかっときたいな

ススメール系買えればなあと思ってたらすごろくの中ですごろくアイテムショップ見つけたし

今後の進め方としては、

1 まず修羅練武4の★0を1ターンでクリアできることを目指す

2 その次に修羅練武4のクマ捕獲できることを目指す

3 捕獲したクマ四天王部隊MAXにする

4 ラハールちゃんのサブクラス修羅エクレアジオブレイクで全部マックスにする(1の状態普通に倒せるならジオじゃなくてもいいネ

5 ラハールちゃん転生

6 四天王所属させ、練武4で9999にする

7 修羅クエ進める

って感じかな

ウサリアブレイブハート一発使えればいいや精神でもうちょい強化するか

2014-07-12

http://anond.hatelabo.jp/20140711214356














 

7/12 17:26 ブコメよりマスダーを追加。マスダーのサブクラス「サイタマノオッサンラー」を追加するか迷ったが省略。詳しく解説できる増田もしくは本人がいればトラバにお願いします。

2012-04-27

情報処理技術者試験

現場で役にたたない情報処理技術者試験

先日、DBを受けてきた。もちろん、無勉。

午後2の途中にスーパークラスサブクラス意味が解った。

これが午後1で解っていれば...

何かの間違いで受かってないかなー。

2011-09-05

テレビ局MMORPGクラスにしてみるテスト

偏見と浅知恵でできています

※一般的な番組スキルアニメ等のオタ向け番組は特殊性が強いので回復スキル韓流PKスキルとしています

 

CX フジテレビ (副作用などを用いる攻撃を得意とするアサシンアタッカー)

実装直後から現在に至るまで、華やかで攻撃的なスキルを揃え続け、その殲滅力の高さから最強厨に人気なクラス

反面、非常に打たれ弱くちょっとした反撃ですら瀕死に陥ってしまう為、他クラスから見て「なんでそんなに必死になるのか」という行動をよく取る。

このゲームの人気に陰りが出始めた頃異動してきた新たな責任統括が、それまで狩り中心だったゲームを「金が搾り取れるから」という理由で、PK推奨ゲームに転換する方針に。攻撃が売りで最強厨御用達のこのクラスガンガンPKスキルを増やして行き、PKの代表格というクラスに。しかPKアレルギーのある多くのユーザーから猛反発を食らい、匿名掲示板等で集中して叩かれる存在になった。ただし、このクラスを選んでいるユーザーは最強厨が多い為、叩かれたら倍にして叩き返すという行動を取る者がほとんどで、ゲーム混沌とした状態になっていった。

また、規約違反や重度な迷惑行為垢BANされたのが多いのもこのクラスの特徴。

 

NTV 日本テレビ (タンカー)

基礎体力が高く、めったな事ではバテないクラス

覚えるスキルは良くも悪くも安定感のあるものほとんど。スキル実装直後にすぐテコ入れが入り、最終的には全く別物のスキルになっている事も少なくない。

クラスと決定的に違うのがクラス固有クエストであり、感動を誘うのが狙いとするお涙頂戴シナリオが特徴。尚、クエストを進めるにあたり、ハンパなく長い移動を必要とする為にユーザーからは「マラソンクエ」と呼ばれている。

PKスキルはそこそこあるものの、CXほどの量があるわけでもなく内容も無難な為、叩かれる事はあまりない。というかCXが目立ちすぎて他クラスPKスキルがあまり注目されてないのが現状である

とにかく全てにおいて無難クラス。ただし回復スキルは性能はそこそこだがMPコスパが悪い。

 

TBS (バッファー、デバッファー)

実装直後は強力なスキルを所持し、全クラス最強の能力だったが、アップデートが進む度他クラスが強化されるのに対し、過去スキルと似たり寄ったりなスキルや、他クラスの劣化二番煎じスキルばかりが増え、現在は最弱と称されるようになった仕様に泣かされたクラス。このクラス同士が会話すると、大抵は「あの頃はよかった」話になってしまう。所謂懐古厨が多い。

しかし、過去、重大な不具合を起こしたスキルに対し、急遽用意したやっつけ程度だった新たなバフスキルが、主婦プレイヤーの間で大ブレイク、以後このクラスの代表的スキルとして現在も愛され続けている。

PKスキルはそこそこ所持。だがやはり二番煎じ

最近、回復スキルの量を増やし、第2のヒーラーとしての役割を担わせるんじゃないだろうかというアップデートが多い。

 

EX(ANB) テレビ朝日 (バックパッカー名義だが実質サモナー)

戦闘スキルよりもそれ以外のスキルを得意とするバックパッカークラス特にギルド運営に役立つスキル豊富に持つ事から政治ゲーを楽しみたい人に選ばれやすい。

しか時代の波には逆らえず、戦闘スキルがどんどん増え、それと同時に回復や非戦闘スキルは徐々に減っていった。

ある時期から戦闘力を上げる為に召喚スキルを増やし始める。この召喚スキルがなかなか強力で評判が良く、徐々に人気クラスへと変貌していく。しかしあまりにもサモンが強い為に「サモンが本体」「サモンのサモンによるサモンの為のクラス」と揶揄される事も。

PK押し付けの時代に突入しても、サモンが強力すぎた為にPKスキルはあまり実装されなかった。今でもサモンに頼り切った戦い方が中心である

ただ、あくまでバックパッカーとしての役割にこだわり、戦闘以外のことに集中するユーザーもまだまだ少なくは無い。

 

TX テレビ東京 (ヒーラー)

とにかく回復スキル豊富クラス。他クラスとは一線を画している。

しかしヒーラーとしての悲しき性か、戦闘スキルは貧弱で、尚且つ狩場を限定しているものだらけであり扱いづらく、このクラスを選んでるユーザーは少ない。

実装されてから全くコンセプトが変わらないのが特徴。ただひたすらにマイペースを突き進む。たとえどんな酷い状況でもヒールし続けるその姿は「それでこそ俺らのTX」と賞賛を浴びる。しかマイペースというのは自己中心的という事でもあり、規約違反行為をする者も意外と多い。

PKの時もやる事は変わらない為、「PKなにそれおいしいの?」状態である

最近元アイドルがこのクラスをやり始めた。

 

NHK (魔法剣士のようなソロ向け万能型)

総合「教育」BS」と切り替えができるサブクラスシステムが導入されており、一人で何でもできてしまう為、ソロユーザーに好かれている。

実力はあるものの実装当初のスキル独りよがりな上、とにかく地味で人気はイマイチだった。しかアップデートが進むたびに、ユニークさを押し出しスキルが増え、一部のプレイヤーから熱狂的な人気を集めるクラスになった。戦闘、支援、回復スキル全てにクセがあって個性が強く、初見で「これはNHKだな」と一発でバレるくらいである。

実はPK押し付けブームの前からPKスキルを所持してたりする事は有名。現在PKスキルサブクラス押し付けている。

ソロ向けクラスのはずなのに、何故か戦争クラスの集団対人戦にはめっぽう強いスキルを多数所持している。実は戦争好き。

 

 

 

このゲームは、超大型アップデート画像が綺麗になったものの、過疎化が進み売り上げが落ちているのが、現在の運営の悩みである

2011-08-06

プログラムを理解させるには?

K&RのCで書かれたプログラムを渡された(もう少し正確に言えば、VisualStudioのWizardで作られたものにK&RのCでコーディングしてある(C++ですら無い)ので純粋なCでは無いが果てしなくK&RのCだ)。あと、これを作った人はどうにも「ポインタ」の概念が無いらしく、無駄に多次元配列だったり、配列アドレス渡しとかが多用されている。

作業指示は、これを流用して、C++/CLIかつ.netFramework3.5使用かつ新規案件対応せよ、との事。

個人的にはどう見積もっても3人で4ヶ月かかる量なんだが、予算が1人で1ヶ月、と言って来た。理由は「Cからの流用だから」。

参ったな。自分としては、C++/CLIはもはや別言語だと思っているんだが。

どうにも上司顧客に説明出来ない。説明出来ないのは、自分が理解していないせいだ、と言われればそれまでなのだが、自分感覚で言うと、高段者がうっている将棋囲碁の一手を初心者に教える、とでも言うか、小学生微分積分を教えるというか、そんな感覚がある。

いや、相手が、K&RやANSIC++C++/CLIを分かっている人間になら、説明は出来るのだが、相手のレベルに合わせて、説明が出来ない。

今回のこれに限らず、見積もりとかすると、「なんでこんなに時間かかるの?」とか「高い」とかよく言われるのだが、やっぱり説明が出来ない。デスマってるプロジェクトには、よくさらなる人員投入がされる事が多々あるのだが、デスマってる時点で負け戦だし、「混乱したプロジェクトに人を投入すれば、さらに混乱するだけ」と自分は思っているので、やめてもらいたいと思っている。

「あんたの小学生なる子供が、100人いたら、東大合格するくらいの学力が発揮されるんですか?」と問いたい。

あれは、VisualBasic4が出た頃か。それまでWindowsプログラムというものをCまたはC++で書いていた自分には、驚異的な言語に思えた。そしてみんな言う。「VBで作れば簡単ですよ」

自分にはVBという言語はとてつもなく難しい言語に思えた(MFCは論外)。なぜなら「かゆいところに手が届かない」言語だったから。だから、皆が言う「VBなら簡単」の理由がさっぱり分からなかった。ちょっとした使い捨てツールや、極々Windows標準的な事しかやらないのであれば、VBは簡単な言語であったのは分かる。実際自分もそういう使い方をしていたから。

そして、うちの職場ではそんな製品を作る所では無く、仕様を満たすためにはサブクラス化とかWin32APIを使うとかしないと実現出来なかった。もちろん「VBで作れば簡単ですよ」と言っていた連中にサブクラス化など理解出来ようも無く、ただただ右往左往してデスマーチ突入していった。

その時も、お偉方や顧客に説明が出来なかった。「VBなら簡単」と言っていただろう、と言われるだけ。

まぁ、VB.net時代になってから、だいぶマシになってきたと思うけどね。少なくとも、スレッドセーフになってくれただけでもありがたい。

まぁ、その辺はともかく、もしかしてデスマIT土方とかなるのは「説明が出来ないから」なのではなかろうか?と思えてきた。必要な時間予算を説明出来ないから、泥沼になるのではなかろうか、と。

説明が出来ない限り、プログラマー永遠にIT土方であり、地位向上は望めないと思う。人月神話じゃなく、ファンクションポイント法とか、なにか定量的に説明出来ればいいのだけど。ファンクションポイント法だって、それが分からない人には通じないわけで。「小学校入学した児童にも分かるような」説明が出来ないとダメなんだろうなぁ。どうすればいいんだろ?

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();	//真ん中のボタンを押すだけ
 	}
 }

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

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

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


他のパターン

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

ではでは。

2007-02-17

rimo.tv.screensaver

>http://www.geocities.co.jp/SiliconValley/8916/Macintosh/rimo.tv.screensaver.html>

rimo.tv.screensaverは、YouTube に掲載されている人気の動画から約1日おきに新しい番組プログラムを生成・配信する はてなサービスである http://rimo.tvを表示するMacOSXスクリーンセーバです。

<<

勝手class-dumpとstringsとotoolで調べたよ。概ね間違っていないと思う。

  • 単一のクラスrimo_tv_screensaverViewで構成され、それをPrincipalClassとするバンドル
  • rimo_tv_screensaverViewはScreenSaverView(/System/Library/Frameworks/ScreenSaver.framework/Headers/ScreenSaverView.h)のサブクラス
  • rimo_tv_screensaverViewは一つのWebView(/System/Library/Frameworks/WebKit.framework/Headers/WebView.h)オブジェクトインスタンス変数に(そしておそらくsubviewとしても)持つ。
  • ページの読み込みはWebFrameクラスの-loadHTMLString:baseURL:で実行。URLは固定(http://rimo.tv/)
  • rimo_tv_screensaverViewは上のWebViewオブジェクトのframeLoadDelegateになっていて、ロード時に-webView:didFinishLoadForFrame:が呼ばれるようになっている(おそらくscale設定をおこなうため)
  • -awakefromNibって何やってるんだろう。

URLとかチャンネルオプション設定で変えられると便利そうだけど、今の超シンプルの方がカッコイイかも。

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