- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
549 :デフォルトの名無しさん[sage]:2016/06/05(日) 00:58:02.73 ID:PAgdOZpu - なおオブジェクト指向を採用しているフレームワークには
Railsだけでなく、様々なものが有る。 使いこなせない人は、落ちこぼれw
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
559 :デフォルトの名無しさん[sage]:2016/06/05(日) 09:33:04.83 ID:PAgdOZpu - >>556
いやさ、デザインパターンと共に歩んできてないの?って思ったんだが デザインパターンといえば、有名なのはこの本だよね。 https://en.wikipedia.org/wiki/Design_Patterns 出版は1994年。もちろん研究レベルではもっと前からあるのだろうけど、 それを言ったらオブジェクト指向ももっと前からある。 で、この本自体に書いてあったと思うけど、デザインパターンというのは 巷にあふれる(当時主流となりつつあるオブジェクト指向言語の)設計のパターンをカタログ化したもの。 サンプルコードはこれまた当時主流で勢いもあったJava言語で記述されていた。 (ちなみにRubyは1995年生まれ) 今から勉強しているような人は、デザインパターンがすでにあって、 それを勉強してオブジェクト指向を理解するんだろうけど、 俺とかは逆。オブジェクト指向言語を使っていて、こういう場合は実装しよう? こうやればうまくいいんじゃね?と考えていたことを、体系化したものがデザインパターン。 デザインパターンは書籍化された当時(1994年ごろ)の問題、つまりオブジェクト指向の問題を 解決するものであり、それよりも前からオブジェクト指向はあったのだから、別々の考えだし、 設計をカタログ化すると言うアイデアは、オブジェクト指向にかぎらないものと、 他の分野にも広がっていったのは、常識なんだが。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
560 :デフォルトの名無しさん[sage]:2016/06/05(日) 09:35:22.10 ID:PAgdOZpu - >>558
> デザインパターンなんて「実際に作ってる時によく使ってたパターンに名前付けてまとめた、 > 名前付けたおかげで(それを知っている者同士なら)説明が省けて楽」ぐらいの意味しかないだろ 知ってる者にとってはその通り。俺とかデザパタ本を、 やっぱりこんな感じで実装するんだねとか、 こんな抜け道が有るなとか、こうやって解決すればいいのか などと自分の経験と重ねながら読んでた。 でもそういった経験がない人にとっては「よく使っていたパターン」が無いわけだから、 新しい技術を勉強するといった扱いだよ。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
561 :デフォルトの名無しさん[sage]:2016/06/05(日) 09:37:21.20 ID:PAgdOZpu - >>545
> オブジェクト指向にデザインパターン持ち出すのは何でなの? > いつから設計思想とプログラム構造がゴッチャになっちゃったの? 今でこそデザインパターンはオブジェクト指向に限らない概念になったが、 そもそもデザインパターンは当時の問題である 「オブジェクト指向における設計手法」をまとめた本。 だからオブジェクト指向にデザインパターンを持ち出すのは当たり前の話。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
562 :デフォルトの名無しさん[sage]:2016/06/05(日) 09:40:19.17 ID:PAgdOZpu - ちなみに、オブジェクト指向が普及する前の技術を
カタログ化したものは、アルゴリズムと呼ばれていた。 昔は構造と呼ばれるようなレベルに発展しておらず、 処理レベルの話で終わっていたからだ。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
563 :デフォルトの名無しさん[sage]:2016/06/05(日) 09:45:01.70 ID:PAgdOZpu - >>555
> ところが運の悪いことにオブジェクト指向の誤った解釈のせいかやたら隠蔽だのといって同じコードをみんなが他人に公開せず自前で用意する事態に陥る始末だった。 おまえ、オープンソースが正しいオブジェクト指向だとかいいそうだなw 隠蔽と言ったって、それはあくまでオブジェクトから見た時の話で、 ソースコードは(オープンソースじゃないだけで) 関係者なら誰でも見れるって、たとえプライベートメソッドであったとしても。 自前で用意するとかいうのは、隠蔽されてるからじゃねーよ。 アホかw
|
- 【node.js】サーバサイドjavascript 4【io.js】 [無断転載禁止]©2ch.net
201 :デフォルトの名無しさん[sage]:2016/06/05(日) 16:39:11.51 ID:PAgdOZpu - ヘイト爆買いとかいう用語がすらすら出てくる
人生が、キモいw
|
- Git 14©2ch.net
99 :デフォルトの名無しさん[sage]:2016/06/05(日) 16:39:50.99 ID:PAgdOZpu - 同じ内容は読まないよう
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
645 :デフォルトの名無しさん[sage]:2016/06/05(日) 19:16:03.53 ID:PAgdOZpu - > Cはメモリリークがないと言っちゃうところとかからも。
動的にメモリ割り当てた経験がないんだろうなw 組み込み業界に新卒で入ってそのやり方しか知らんとかかな。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
647 :デフォルトの名無しさん[sage]:2016/06/05(日) 19:38:45.17 ID:PAgdOZpu - >>590
> Javaはオブジェクトを基本にしているからこそ、わざわざモックオブジェクトを定義してやって > 食わせてやらないと、簡単に構文エラーをはくだろ コンパイル言語で構文エラー?
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
649 :デフォルトの名無しさん[sage]:2016/06/05(日) 19:45:31.80 ID:PAgdOZpu - C言語でも、ネットワーク通信が含まれた関数をテストしたいときに
ネットワークを使わないでできるようにしたいならモック関数が必要になるし、 別にネットワーク通信してもいいっていうのなら、Javaでも モックオブジェクト使わずに、本物のオブジェクトを 使えばいいはずだけど? なんか、なんのためにやるのか?を理解してない気がするね。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
651 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:00:28.93 ID:PAgdOZpu - >>590
> これがもしFightという関数になったとき > Dog.Fight(Cat); > Cat.Fight(Dog); > Fight(Dog,Cat); > これでいいたいことはうっすらわかりましたかね? 何も言いたいことがわかんねぇwww 例えば、「戦士.戦う(スライム)」 だったら普通に武器で攻撃するだろうけど 「戦士.戦う(メタルスライム)」 だったら、聖水を使うかもしれない。 「魔法使い.戦う(フレイム)」なら弱点のヒャド系魔法使うかもしれないし、 「フレイム.戦う(魔法使い)」なら火炎の息を吐くかも知れないし。 自分が今どんな攻撃ができるかは、自分しか知らないだろ。 「戦う(魔法使い, フレイム)」 とか言われたって、 戦う関数は何すればいいか分かんねーよw
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
653 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:05:43.86 ID:PAgdOZpu - >>650
> Cでグローバル変数(が増える)が嫌な理由は、 > 1.大域的にその変数にアクセスできることが嫌であること それ間違ってるから。アクセスと言っちゃうと読み書きの両方になってしまう。 グローバル変数がだめな理由は、大域的にその変数に「書き込み」ができるから。 読み込みだけならグローバルで構わん。っていうかOSから得られる様々な情報、 例えばプロセスIDとか空きメモリ量とかファイルとかC言語でも大域情報だらけだからなw ということで、Javaのクラス定義がグローバルにいくら増えようが、 クラス定義は読み込みなので、問題ないんだよ。 もちろん「どこからでもクラス変数が書き換えられる」のであれば それは(書込み可能な)グローバル変数と言っていいけど。
|
- 【JavaScript】スクリプト バトルロワイヤル54【php,py,pl,rb】 [無断転載禁止]©2ch.net
208 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:11:21.34 ID:PAgdOZpu - 言語そのものに楽しさを感じる人なんて居ない。
例:「COBOLが楽しい」 →COBOLでプログラミングの幅が広がる(?)のにワクワクする(?) →COBOLという新しい(?)ことを覚えることに期待感を感じる(?)
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
657 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:20:00.92 ID:PAgdOZpu - > まずこんな動作させたら、このメソッドを使うユーザープログラマが混乱するよね
え?なんで?wwww 相手に最適な攻撃をするのは、当たり前の話だけど もちろん、相手(引数)の情報を知らないならば 有効そうな攻撃をするしか無いけどね。 同じ戦うでも、知性によってどういう攻撃をするかは変わる。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
658 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:22:15.49 ID:PAgdOZpu - >>655
> この動作をオブジェクト指向で実現するなら、 > FighterクラスのFightメソッドの中にif文をずらずらと並べて > if(slime) {"slash"}else if (metalSlime) {"use holywalter"});とするしかない。 あれ? でも、Fight(Fighter, Slime)とかだったら、 Fightメソッドにif文をずらずら並べないといけないだけだよね?w
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
660 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:26:32.30 ID:PAgdOZpu - >>655
> なぜならばオブジェクト指向言語はマルチメソッドという概念をサポートしていないからだ ほとんどの手続き型もマルチメソッドという概念をサポートしていませんが? https://ja.wikipedia.org/wiki/%E5%A4%9A%E9%87%8D%E3%83%87%E3%82%A3%E3%82%B9%E3%83%91%E3%83%83%E3%83%81#Common_Lisp > 汎用のマルチメソッド機能をサポートするプログラミング言語は次のとおりである。 > Common Lisp (Common Lisp Object System) > Dylan > Nice > Slate > Cecil > Perl6 > > 何らかの拡張でマルチメソッドをサポートする言語として、次のものがある。 > Scheme (TinyCLOS) > Python (gnosis.magic.multimethods) > Perl (Class:Multimethods) > Java (MultiJava) > Ruby (The Multiple Dispatch Library, Multimethod Package) この中で手続き型なのはどれだろう?w
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
662 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:33:28.30 ID:PAgdOZpu - >>661
> オブジェクト指向に従うと、Fighterに対して一次元のハッシュテーブル、というふうにしないといけない > さらには継承を使わないといけない ↑ 言い方を変えるだけでこんなにネガティブな印象に! ↓正しい言い方はこれ オブジェクト指向に従うと、Fighterに対して一次元のハッシュテーブルで十分である。 そして継承を使えばいいだけである。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
663 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:37:34.37 ID:PAgdOZpu - 結局のところC言語で手動でオレオレマルチメソッドを実装するって話なら
オブジェクト指向言語でも、手動でオレオレマルチメソッドを実装すればいいし、 言語仕様に組み込まれた、本物のマルチメソッドが使いたいならば C言語では不可能で、本物のマルチメソッドが組み込まれた言語 (もちろんオブジェクト指向言語にもそれは存在する)を使えばいいだけ。 ID:fuiY39en の話を読めばわかるが、結局こいつは Javaだけが唯一のオブジェクト指向言語だと勘違いしているのだ。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
668 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:44:16.06 ID:PAgdOZpu - >>590で
> WalkのコンテクストではDogを主語として扱うことに意味はあるのかもしれない。 > しかしFightのコンテクストではDogあるいはCatを主語として扱うことに対する深い意味はないだろう。 こんなこと言ったのに、↓主語として扱う意味を見つけてしまったなぁw > もっとも、Fighterがwizのように何人も生成できて、キャラクター生成の度に、monsterknowledgeを初期化して生成する > っていうのはいかにもオブジェクトらしいけどな 結局オブジェクト指向としての設計の話をするならば、これのほうが正しいんだよ。 > Dog.Fight(Cat); > Cat.Fight(Dog); ただし設計とは別の観点、つまり「メンテナンス性のために戦うアルゴリズムだけを分離したい」となれば、 それは、アルゴリズムだけを収録したクラスを作って(あれ?将棋でも同じ話しなかったっけ?w) それを入れ替えられるようにすればいい。それは上記の設計を変えずにできる。 設計は正しいままで、アルゴリズムを呼び出すようにする。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
671 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:46:25.11 ID:PAgdOZpu - >>666
> こういうちょっとでも問題が複雑になるとJavaはあまりにも無力だろ 無力って言う割に、自力で解決できる簡単な方法を あなた自身が提示しましたが?w
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
673 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:47:40.30 ID:PAgdOZpu - >>672
反論を無視して同じことを繰り返し言っても無駄w
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
674 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:48:46.91 ID:PAgdOZpu - >>672
えとな、オブジェクト指向言語っていうのは 手続き型を踏まえてできたものなので、 手続き型でやれることは、オブジェクト指向言語でもできるんだよ。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
677 :デフォルトの名無しさん[sage]:2016/06/05(日) 20:51:06.18 ID:PAgdOZpu - マルチメソッドをサポートしたオブジェクト指向言語を使えば
問題解決ってことだよなぁ(笑)
|
- Git 14©2ch.net
102 :デフォルトの名無しさん[sage]:2016/06/05(日) 21:27:47.01 ID:PAgdOZpu - だから俺は聞かない。匿名で相手をバカにするために2ちゃんねるを使っている。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
703 :デフォルトの名無しさん[sage]:2016/06/05(日) 21:36:18.20 ID:PAgdOZpu - >>697
> キミはpackageAからpackage Bの Class bが見えなくなれば、複雑性は解消されたと考えるのか? > bの中にClassが50個ほど並んでいても同じことが言えるのかな? 誰にとっての複雑性か?を考える必要がある。 package Aからpackage BのClass bが見えなくなれば、 package Aの複雑性は解消されたといえる。 一方package Bの複雑性は解消されていない。 これじゃ複雑性は解消されなてない。 見えない所まで全部見て考えるんだ!というならば、 関数の中、そしてOSのAPIまで見て考えるのか?という話。 複雑性を解消するための方法は、モジュールを小さく分けて 内部を見なくていい状態を作り上げていくことだ。 お前だって普通に開発してるときに汎用関数の中のコードまで読まないだろ? そこにどんなに複雑なソート処理が実装されていたとしてもだ。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
710 :デフォルトの名無しさん[sage]:2016/06/05(日) 21:56:10.82 ID:PAgdOZpu - >>707
> つまり純粋関数であるということが、真の意味でのカプセル化だということだ C言語などの手続き型言語ではだめだって話に持っていくんだね わかったよw
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
711 :デフォルトの名無しさん[sage]:2016/06/05(日) 21:57:10.61 ID:PAgdOZpu - >>708
> データ構造を隠蔽してメソッドだけを公開するということが > どれだけオブジェクト内の動きをプログラマが把握することに手を焼かせられることなのか理解してからきてくださいね データ構造を公開するメソッドを作ればいいだけでは???
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
713 :デフォルトの名無しさん[sage]:2016/06/05(日) 21:58:51.73 ID:PAgdOZpu - さっきも言わなかったっけ?
> だってどこをprivateにしてどこをpublicにして、どんなインターフェースを定義してというふうに > それこそまともなスコープ制御を持った言語や、動的言語なら一切気にすることがない部分を Javaだけがオブジェクト指向言語だって思ってるでしょ? Rubyは動的言語かつオブジェクト指向だ。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
715 :デフォルトの名無しさん[sage]:2016/06/05(日) 22:06:12.78 ID:PAgdOZpu - オブジェクト指向を否定して関数型言語がいいと言って、
関数型言語なら俺はもっと素晴らしい物を開発できる!って 考えている人が滑稽なのは、 言語によって生産性に差が生まれるって考えてることなんだよね。 たしかに言語によってある程度の差はある。 だけど、それは些細な差でしか無い。 重要なのは、ライブラリの多さやフレームワークの機能なんだよ。 Railsは大きな生産性向上を果たすことに成功したが、Rubyだけでは不可能だった。 Railsというフレームワークによって生産性は大きく向上した。 残念ながら、言語による差なんて些細な事でしか無いんだよ。 フレームワークを自作するっていうのなら、また話は変わってくるが、 今は他人が作ったものを利用して開発をする時代。 MITがSICPを教えなくなった理由 http://cpplover.blogspot.jp/2016/05/mitsicp.html > > 今日では、状況が変わっている。 > > ソフトウェアでも状況は同じだ。プログラミング環境は、多大な機能を提供する > 巨大なライブラリ群の集合として存在している。 > > Sussmanの今日の生徒は、その時間の大半を、ライブラリのマニュアルを読み、 > どのように組み合わせれば目的が達成できるのかを把握することに費やしている。
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
717 :デフォルトの名無しさん[sage]:2016/06/05(日) 22:09:00.85 ID:PAgdOZpu - >>716
オブジェクト指向に決まってるだろ。 何言ってんだ? Railsでモデルを作るときとか 継承しまくりだ
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
721 :デフォルトの名無しさん[sage]:2016/06/05(日) 22:15:11.70 ID:PAgdOZpu - Ruby ・・・ Rails
Python ・・・ Django JS ・・・ React、Express Scala ・・・ Play Framework ここらへんがよく使われている有名なフレームワークだな これらがオブジェクト指向ではないというのなら、 その根拠を提示せよ
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
722 :デフォルトの名無しさん[sage]:2016/06/05(日) 22:15:59.00 ID:PAgdOZpu - >>718
> ライブラリが自分が想定している挙動と異なった場合、自分で手直しすることが不可能 > 俺はそこまでハッカーじゃないからね なんでだよw ソースコード修正すればいいだけだろ。 Rubyとかならモンキーパッチとかもできるし。 なんで不可能なんだ?
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
723 :デフォルトの名無しさん[sage]:2016/06/05(日) 22:18:11.36 ID:PAgdOZpu - >>720
> え?rubyはlispのパクリだって聞いてるけど? lispはオブジェクト指向だよw
|
- オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
724 :デフォルトの名無しさん[sage]:2016/06/05(日) 22:20:42.82 ID:PAgdOZpu - >>718
> rubyがrailsの助けを受けたとあるが、railsがrubyを選択したのは楽にかけるからということだろう この理屈から言えば、 railsがオブジェクト指向を採用したのは、楽に書けるからということだろうw
|