オブジェクト指向とは 分かりやすく教えてくれ
レス数が1000を超えています。これ以上書き込みはできません。
PG、SE歴17年だが
いまだに良く分からん
もやっとしてる
教えてくれ 本が一杯出てるからそれ読めばいいだろ
読んで理解できないのならここで説明した所で無理だろ >>1
17年やってわからんとは、つける薬がないほどの馬鹿だ。
迷惑だからPG辞めたほうがいいな。 メリットの説明はできた者がいない
どや顔でやって来るやつは大抵意味不明なことをのたまって終わり
オブジェクト指向に脳をやられている >>11
脳がやられているのでOOP理解できなかった奴 >>12
脳がやられているのでメリットを説明できない奴? ところで「チンボがシコシコする」という日本語表現は、文法的に正しいのか?
チンボ「を」シコシコするのではなくて、チンボ「が」シコシコする。この場合、「チンボ」は主語となる。
オブジェクト指向で言う「集約」は2種類あって、全体(俺)と部分(チンボ)が繋がっている場合と、
全体(俺)と部分(チンボ)が別々になっている場合とが考えられる。けれども「チンボ」はそれ自体
が独立した生き物であり、所有者の意思とは無関係に、勃起して「シコシコする」。
例えば寝てる時にエロい夢みて朝起きてみたらチンコが勃起して射精してたとか。
違うか?
「頭がズキズキする」は良いが、「チンボがシコシコする」はダメな理由を、50字以内で述べろ! (第1章 はじめに 2頁)
たとえば、CycはFredという名前の男が朝にひげをそるという話が理解できなかった。
Cycの推論エンジンは、この話の中に矛盾を見つけた。Cycは人間には電気の部品がないことは知っているが、
Fredが電気カミソリを持っていたので、エンティティ「Fredがひげそり中(FredWhileShaving)」
には電気の部品が含まれていると考えた。したがって、CycはFredがひげをそっている間、
Fredはそれでも人間なのかと尋ねた。
『深層学習』
著者:
Ian Goodfellow, イアングッドフェロー,
Yoshua Bengio, ヨシュアベンジオ,
Aaron Courville, アーロンカービル >>16
「舌がピリピリする」みたいな
身体の受動的感覚なら文法的に可
「顔がニコニコする」みたいに
動作主体が人間なら不可 人類のスーパクラスは哺乳類
OOPが理解できない最大の理由 自然言語処理の知識はゼロなのでわからないです。面白いアイデアだと思うので、Twitterの自然言語処理が専門の方々に聞いてみては?
https://peing.net/ja/q/417c9e29-35de-4c95-8323-afd6a50fcbc7 >>23
extendsしてると本当に思ってるゔぁか マジレスすると、OOPが有用かどうかは分からないが、継承がフレームワーク作成側、利用側の両者で直感的なのは間違いない。
また、クラスに対してC#拡張メソッドより PHPtraitの方が色々問題もありそうだが直感的なmixinだ >>21
進化論がダーウィンのものだと勘違いしてる奴が此処にも。 >>27
進化論はダーウィンの物ではない、悪魔の物だ 人間にわからんものは神か悪魔のせいにしとけば間違いない >>27
どっから“ダーウィン”って言葉が出てきたんだよ。ヴァカなのか!? 人類はとっくに自ら進化を促せるだけの力はあるのに神だの悪魔だの呪縛で出来ないでいる
つまり、extendedじゃなくrevolutionというキーワードにすべきだった データをまとめた構造体に、そのデータを扱うメソッドも入れてしまおうというのは自然な流れだし
メソッドを入れたんなら、それで内部データにアクセスできるから、外部から勝手に変更されないようにアクセス制限を儲けようというのも自然な流れだし、
型を拡張したり、拡張した型によって呼ばれるメソッドを変えられるようにしたら便利だなという考えに行き着くのも自然な流れだった。
つまり、オブジェクト指向はプログラミング工学の進化の仮定で発生したごく必然的な考え方なのであーる。 >>39
鶴と亀を引数にとるメソッドは何処に書けばいいの? 鶴亀ソルバってクラスを作って、Animalクラスを引数にとるSetAnimal関数を作る
Animalクラスを継承したTsuruクラスとKameクラスを作る
鶴亀ソルバを作る人は、引数のクラスを気にせず実装出来る
Butaクラスを作る人やNekoクラスを作る人も、そのクラスがどう扱われるかを気にせず実装できる >>43
全部でいくつクラスできるんです?
ブレーメンの音楽隊以上にはなります 足の本数が整数でわかれば計算できるときに
なぜAnimalクラスが必要か!? 自然界はオブジェクト指向ではない。
生物の分類なんて完璧にはできない
だが、人間が理解しやすいように分類したものは
オブジェクト指向で表現することが可能
完璧な表現なんか誰も求めていない
目的が達成できれば良いのだよ class Human extended Ameba new 動物("鶴", 2)
new 動物("亀", 4) Tsurukame t = new Tsurukame();
t.setAnimal(0, new Tsuru());
t.setAnimal(1, new Kame());
Result r = t.calc(20, 60);
println(r.get(0))
println(r.get(1)) class 鶴 extends 鳥類{}
class 亀 extends 爬虫類{}
new 鶴();
new 亀(); 足の数はメンバ変数で定義されてるに決まってんじゃん。
なんで外から渡すんだよ。 LegCountable というインターフェスだけでいい
Animalクラスもいらん 頭の数も欲しいと言われたらHeadCountable作るの? LegCountableもいらん
このつくりなら
足の数以外なんもいらんのだから整数でいいだろ! 鶴亀算をオブジェクト指向で作る意味がないとは思うが、
オブジェクト指向のスレだからな と思ったけど要素と動物をふやして3元連立に拡張できるからあったほうがいいのか? このように考え過ぎるのがオブジェクト思考の特徴
とにかく無駄な拡張性だけ考えておくのです うん、やっぱりいらないな
業務的な切り口を考えたら鶴亀固定で計算を行うクラス
処理的な切り口を考えたら二元一次方程式クラスになる
動物クラスの出る幕がない 今いるところは神クラスはないがサービスクラスという手続き型だけだわ 足の数は属性なんでクラスじゃないな
インターフェースでもない 足はhas Aで実装でしょ
例えば手や足って将来的に機械で拡張される場合もあるし
ほかにも羽が生えてくるかもしれない(工学的な意味で)
そんなわけで親子関係をもった部位クラスとして実装すべき だからいらんちゅーに
もともとあるならまだしも鶴亀算したいだけだろうがw >>61
鶴亀算は足の数をもとに計算する仕様だから、頭の数も考慮するとなると前提条件の見直しになる。恐らくインターフェース名と前提条件の変更を余儀なくされるだろう
インターフェスーに抽象メソッドを追加し、クラスにもメソッドを追加しないといけない。しかしそれでも変更箇所は限定的で、コンパイルエラーによって実装漏れも教えてくれる。
しかし、そもそも頭が複数ある般的な生物なんているのか? >>76
なんか>>75が増やせるっていうから義頭拡張されたらもう、どうしようもないぞ。 >>78
実際頭が2つ有る人間だっているしね。
え?頭が2つある人を人間だって認めないっていうのかい?
まさかそんなことはないよねwww 自然界をオブジェクト指向で表現することができないのは
例外や突然変異があるから
だからといってオブジェクト指向は使えないのではなく
大半の要求を満たせるのだから問題ないのだ
100%の仕事なんか求められていないし不可能 >>81
俺のシステムはその時点でException投げるから、
そっから先は例外処理。 >>81 のシステム、クズ過ぎwwwwwwwwwwwww class 生き物{
head;
leg;
}
class 鶴 extends 生き物{
head = 1;
leg = 2;
}
class 亀 extends 生き物{
head = 1;
leg = 4;
}
class ケルベロス extends 生き物{
head = 3;
leg = 4;
}
class 案山子 extends 生き物{
head = 1;
leg = 1;
}
class 鶴亀ソルバ{
void SetAnimal(生き物 animal);
Result Solve();
生き物[] m_Animal;
}
でもこれだと、あんまりポリモーフィズムのメリットが活かせてないな
生き物クラスにメソッドを持たせないと 俺も理解するまで時間がかかったけど
RPGのゲームを考えると理解できた
例えば敵キャラのスライム10匹との戦闘をプログラミングで表現しようとした場合、
ライフやMPを配列で管理しようとすると大変だ
それよりも一つスライムというクラスを作りその中にライフやMPという変数をもたせたほうが、
何匹いようが個々のメソッドでライフやMPを減らすように作った方が楽になる
また、そのスライムというクラスを継承してメタルスライムやキングスライムといった派生クラスを作れば
それぞれのクラスをを1から作らなくても良い >>86
それ、スライムって構造体を作るのと何が違うの?
スライム10体なら、スライムって構造体の変数を10個作ればいいだけ
構造体ならクラスの概念のないC言語でも出来るよ オブジェクト指向ってのは設計が大事なんだよ
理解できてなくてもプログラムを書くことは出来るし要件を満たせるが
オブジェクト指向を理解することによって保守性とかプログラムの美しさに繋がる >>87
c言語でスライムは出来るだろうけど
メタルスライムとかキングスライムはどうする? >>88
プログラムなんて
車のシャーシどころか設計図みたいなもん
なんて美しい設計図なんだ!ってあほか
車が走らんとどうしょうもない
多少汚くたって困るのプログラマーだけじゃねえか
賃金やすいんだから工数倍になったってたかが知れてる 保守性がよくなるってのもうそっぱち
状態がある分、クラスのメンテは関数のメンテよりはるかに大変
処理自体も基本わかりづらくなる。
いっぺんイテレーター作ってみやがれ
標準ライブラリのように完膚なきまでにテストされ、作りこまれて安定したクラスを
使うとき
だけ、保守性や生産性が向上するんだ… そもそも>>88の言ってることが漠然としすぎてて発狂する
なんやねん >>90
こんな感じじゃね?
class Charactor {
int HP;
int MP;
render() { // 自キャラデザインを描画する }
action() { // 自ターンでの行動 }
damaged() { // ダメージを受けた時 }
}
class Slime extends Charactor {}
class SlimeBeth extends Slime { // デザインとステータスが違うだけで攻撃パターンなどは同じ }
class MetalSlime extends Charactor {}
class KingSlime extends Charactor {}
メタルスライムだからって必ずしもスライムを継承する必要はないしねw
キングスライムは、(キングスライム化可能な)スライムが
次ターンんで仲間を呼んで、8匹そろったら合体アニメーション表示
終わったらキングスライムに変化って感じだろうね
(内部的には新たなキングスライムを呼び出しして自分達はdeleteする) >>95
俺もいいことないと思うな
結局、中の状態を把握した上でないと使えないし
なんの説明もないくせにinitメソッド2回呼ぶとバグるし
initメソッド2回呼ぶとバグるのはソース見ないとわからんし
だったらC言語時代に戻ろうぜ データを変更するメソッドが、そのクラス内にしかないと分かっているの楽 >>99
そうなると鶴クラスと亀クラスが存在しないと人間クラスは存在できないクソ設計 >>101
人間クラスに鶴亀クラスが出てくるから
人間クラスだけ使う場合も
鶴亀クラスもってこないとエラー出るだろボケ >>91
綺麗な設計のプログラムは動かないという前提なら、そりゃ汚くても動く方がマシだけど、そうじゃないだろアホ 鶴亀算コントローラで鶴亀算に必要なクラス呼べばいいだけだし オブジェクト思考は人間の都合のいい解釈で抽象化なされた現実離れしたもの。
しかし、人間の都合のいい解釈によって、使い方の提案を含めたオブジェクトが作成できることは
その利用者の思考コストを減らすから、それがメリットみたいなこと書いてあった。
ttps://qiita.com/tutinoco/items/7f7568cc7dbf7e2276c8
個人的にしっくりきたんだけど、どうなん?
もしオブジェクト指向がいらないものだったら
ここまで使われてる理由がわからんし、やはり利用者のためのオブジェクト指向なのかなと。
実際使う時便利だし。モジュールのためのオブジェクト指向って感じなのかなぁ 今のsiは似たような部品とかを一から作って水増し工数をしてるんだな
だからオブジェクト指向は使われてない効率よくしようとはされてない
そもそも寄せ集めだからプログラマーのレベルもバラバラ 下級プログラマはオブジェクト指向のことは考えなくていい
そういうのは上級プログラマが考えるから、下級プログラマは提供されたフレームワークなりライブラリなりの
使い方だけ知っていればいい >>106
じゃ、メリットは?
〜な気がするとかおままごとは他所でやれよ 標準apiとかフレームワークこそがオブジェクト指向の良い教材
誰でも簡単に使えるやん >>110
周知されてるからでしょ?
お前が作るオナニークラスライブラリはノーサンキュー オブジェクト指向=再利用の認識の人ってまだいるんだ >>112
地球が真っ二つになったエピソードで見るのやめた >>87
ステータスの管理だけならば構造体でも良いけど、
実際には>>94のような攻撃や防御といった自分の動作まで記述するから
メインルーチンからはさらに手間がかからなくなる
スライムの攻撃や防御のロジックを別で書くと管理が面倒になる
ちなみにオブジェクト志向はデスクトップのアプリなど、
ユーザーが終了するまで常駐し続けるプログラムには有効だけど、
SI系のバッチプログラムなど一連の処理が順番に流れる手続き型にはあまり向いていない
という、そんな凝ったことをして意味がない 例え話の正しい使い方
○ A. 相手に説明する時に相手がすでに知ってる知識を利用してわかりやすく伝えるために使う
× B. 何かを馬鹿にしたい時に、悪いものと認識されているものに例えることで印象操作を行う
(カレーはウンコと似ている所があるとウンコに例えることでカレーを臭い排泄物だと思わせること)
例え話に対する反論方法
A. に対して例えが正確じゃないということ。もともと知らない人に対して
わかりやすく伝えることが目的であり、正確な例えをしているわけじゃない。
例えなのだから正確ではないのは当たり前で、それを承知の上で
相手への説明のために例えを使ってる人に対して
その例えは正確じゃないと反論するのは只のマヌケ
B. に対しては、その例えは正確じゃないと反論するのが正しい。
なぜなら印象操作は例えが正しいことを前提として意味があるので
その例えが間違いであると言うことは、反論として成り立つ
(カレーとウンコは違うので、いくらウンコが臭い排泄物だと言った所でカレーには関係ない話)
例えなのだから正確ではないのは当たり前でそこを指摘すると言い返せない
(カレーはウンコではないのは常識) その程度の中長文で理解できない人間はプログラミングに向いてないよな
拒絶反応から否定の逃げ台詞を吐いて逃亡するしかない なにやら変な話題で盛り上がってんのな
オブジェクト指向なんてのは、考え方の一つなんだから、
オブジェクト指向言語じゃなきゃ実現できないアプリなんて無い。
「オブジェクト指向じゃなくてもできる」
という指摘はオブジェクト指向を否定するものじゃ無い。 お前じゃなきゃ実現できない仕事なんて無い。
「お前じゃなくてもできる」
という指摘はお前を否定するものじゃ無い。 >>109
だからメリットは「使い方の提案を含めたオブジェクトは指向コストを減らす」じゃないの? >>124
うん。
その資料曰く根本的にデータは使い方には制限はないが、制限は明確さを与えるので利便性が生まれるとか書いてあったような..
冷蔵庫を収納に使う話とかわかりやすかった。 人間の認識に近いんよ
OOP指向言語なら逆引きができる。 >>122
そんなもので否定されたら
世の中の大半の人は存在意義無くなるよな 自分以外にできるやつがいなくなるまで
コミュニティを小さくすればいいんだ! >>127
いまスマホ。
リンク貼るのめんどいから辿ってちょ >>106
> オブジェクト思考は人間の都合のいい解釈で抽象化なされた現実離れしたもの。
その「現実」っていうのがずれてるんだろうねw
システム開発してる人にとってはシステム開発で必要なものも「現実」
だけど、人間の都合に良いように〜とか言ってる奴の「現実」って
現実世界のシミュレーション限定だろw オブジェクト思考は人間の都合のいい解釈で抽象化なされたもので
シミュレーションとして生物などを正確に表現することには適してない
と言いたいんだろうなw やりたいことを抽象化したデザインパターンを
常識として受け入れましょうってのがオブジェクト指向だろ 違う。人間が大雑把に考えてる考え方はオブジェクト指向に近いので、
コンピュータ寄りではなくより人間的な考え方をしましょう
っていうのがオブジェクト指向
オブジェクト指向は人間の考え方を表現できるように進化してきた ソースコードが長くなると、複数の関数に分けたくなる
↓
関数をバラバラにわけていると、どうしても引数の数が多くなる
↓
関数によって共通する引数があるので、それを構造体にまとめて引数の数を減らす
↓
どうせなら構造体の中に関数を入れてしまえばいいじゃない
↓
構造体の中の値を気にしないように実装したら、なんかソースコードが読みやすくなった気がする
↓
これに名前を付けたのが、カプセル化 グローバル変数は便利だが管理が面倒だからクラスに入れてその変数に対する処理をクラス関数にする程度にしか思ってない public変数の機能を禁止する法案を提出したい
マイクロソフトやオラクルがpublic変数禁止法で訴訟されるような世の中を作りたい
ひさびさにひっかかった・・・orz >>137
そりゃまともなコードが書けないわけだわ モノつくる時みたいに役割分担を明確にして設計しましょう
カプセル化とか継承とかはそのための手段
程度の認識だわ ALLシングルトンというか手続き型なクラスだらけで
staticと変わらない デザパタを批判するときは唯一わかるシングルトンを
持ち出すことしかできない >>144
俺はデザパタは嫌いだがシングルトンは大好きなんだ ウイングルトンとシングル、どっちもテニス用語なので
シングルトンもテニス関係の言葉だと思っていました。 OOPの本質は疎結合
まったく結合を無くしたいんだが良い方法は無いか DIが思い付くが型を特定しなくともインターフェースが固定されるから駄目だな
じゃあ呼び出しコードも含めて依存性を注入すりゃあ?って事になる >>153
え? どんなインターフェースでも使える
メソッドなんてあるの?
コンテナクラスならobjectの中身はとわないんで、
objectであれば十分だから作れるけど
渡すオブジェクトのメソッドを呼ぶなら
そのメソッドがあるインターフェースを持ってないとだめでしょ まさにそれさ!インターフェースに依存してるって事は依存性はゼロじゃないって事さ
それでは丸ごとすげ替えるって事は出来ない
更に依存を注入するための機構にも依存してしまう >>155
意味が分からん。
実装に依存すると問題が多いから
インタフェースに依存することが
いい方法ですって話なのに、
インタフェースに依存してるじゃんって言われても
だからその素晴らしい方法を目指してるんだがとしか
言えないんだが? あと丸ごとすげ替えしたいって言うけど、目的ないでしょ?w
例えば、ボタンオブジェクトを要求されてる場面で
セレクトボックスオブジェクトを渡した所で
正しく動くことはない
すげ替えたくなる対象は互換性がある型
その互換性っていうのがインターフェースそのもの 例えば「このオブジェクトはfooメソッドを持っていること」
というのもインターフェースだからね
明示的に書かない言語も有るけど、コードはfooメソッドを持っていること
というのはfooメソッドを使うからであって
明示的に書いてないだけでインターフェースは存在する そうだね、明示的になくてもインターフェースは存在するね
しかも実行時に実装が無ければ余計にタチが悪い
ではそもそも結合度をゼロにするなんて事は出来ないんじゃないか? ゼロにできないから何?
エアバッグ付けても交通事故はゼロにならないよな
で、ゼロにできないから何だって言いたいの? > しかも実行時に実装が無ければ余計にタチが悪い
それはタチが悪いんじゃなくて動きませんが?
動かすために実装作るんでしょ
なにが言いたいんですか? AとBの結合度がゼロってことは、AとBは無関係ってのと同じこと
結合度は低い方が良いと言ったって、ゼロにしろってことじゃないわな >>160
でもマシにもなってないんじゃない?
結局、こない未来を想像した時点で失敗なのよ そもそも結合度を気にしたい箇所ってお金がかかるとことお金がかからないところを明確にしないと正当性が主張できないよね
全部入れ替えたって大して金のかからない箇所を一生懸命疎結合とか言ってる奴は本当にアホにしか見えないじゃん
サーバー側をいじらずにクライアント側だけ新しくするってのも
俺には難しく見えるがな
っていうか経験上一見関係ないように見えるけど
データって見せるためのまとまりであるから実際は難しいんだよね
アプリ単位でこんなこと気にしてるなんて本当は無意味なんじゃねーの?
って思う >>163
マシになってるが?
なんでお前勝手に結論づけてるんだ
知らないならまず聞け、話もせずに結論を言うな インターフェイスのクラスを継承する場合はやっぱり結合度高いとおもうんだよな。
個人的に疎結合といえばC++のテンプレートだと思う >>166
なるほど。C++のテンプレートに疎結合を
意識して考えたことなかったから感心した。 まさか
呼び出し関係を結合
って思ってる人居ないよね
基礎からやり直したら? C++テンプレートなら特定のクラスに依存しない事も可能だぞ。
vectorやlistなんか管理方法を抽象化してる。
他にも走る事を仕様にすれば
template<typename T>
void obj_run(T obj){
obj.run();
}
これならオブジェクトはrun()という関数さえ持ってればいい。
※オブジェクト思考についてよく知らないのは認める >>169
俺もその認識
結局エラー出ちゃうんじゃ
修正するのと変わんないじゃん C++のテンプレートは的外れだなw
あれは極端な言い方をすればクラス定義を作るものなんだから
単体のクラスを作る範囲なら、他のクラスと依存しないという
当たり前のことを言ってるだけだよ
テンプレートで作ったクラスを実際に使う段階で
どちらにしろ依存してしまう
>>171がその例だね
他のクラスから呼び出すために、オブジェクトはrun()という
関数(インターフェース)が必要という事になってしまった。 静的言語のインターフェースは実体がありよるからな
どうがんばっても一方が一方を知ってないといけない
依存が拡大しがちだし
モジュールのすげ替えがやりにくい
きがする >>168
浅学ですまないのだが少し教えてもらえないだろうか?
モジュールXのクラスAのメソッドが、モジュールYのクラスBのメソッドを呼び出すなら、それは結合してるって言えるんじゃないの?
それとも、その呼び出し関係ってのはもっと別の話? >>178
モジュールXのインターフェースZを作成し
モジュールYのメソッドでZを使い
モジュールXの外でモジュールYをnewして
モジュールXのコンストラクタなどで
モジュールYを渡してれば(依存性注入)
モジュールYはインターフェースZに依存するので疎結合。
モジュールBの中でnewしたら完全に依存するってことだと思ってる。 >>178
わかりにくかったのでもっかい書く
ポイントは「インターフェースに対してプログラミングすること」が疎結合の前提であり、「どこでnewするか」の判断を誤ると一気に取り返しのつかない結合が起こるということ。
つまり、クラスBをクラスAの外でnewして依存性注入(コンストラクタなどでnewしたクラスBを渡す)してれば疎結合性は保たれるが
クラスBのメソッドでインターフェースのワンクッションを挟まずに直接プログラムしたり、クラスBのコンストラクタなどでクラスAを直接newしたりすると疎結合性が一気に崩壊する。
そして結合疎結合の本質は>>169が良いこと言ってて、コピペした時に芋ずる式に他モジュールが付いてくるか否かで測れる。
C++のテンプレートの疎結合性は的外れ的なコメントがあったけど、個人的にはコピペの原則に当てはめると立派な疎結合してるように感じた。 疎結合合戦をしたいわけじゃなくて
関連があるなら結合があるべきだし
関連がないならあるべきでないしって話であるべきだよね?
ネジでくっつけるところをマグネットで付けて喜んでるアホに見える >>182
ワロタww
その通りだよ
だからネジでいいところはネジで作らなければ、それはオーバーインプリメンツだおw
ハローワールドを画面に出力するのに、いろんなモジュール作ったりして遠回しに実現することは、イケてない。 >>179
XYZの使い方が下手で読みにくい
そういうところのセンスだよ、オブジェクト指向に大切なのって なんとなく思った事を、一言だけ言わせてくれ
マ板じゃなくて厶板でやれ >>184
だから書き直したんじゃん
。・゜・(ノД`)・゜・。 C++のテンプレートみたいにインターフェース以外で
疎結合を実現する方法って他に何があるの? 自然言語処理の知識はゼロなのでわからないです。面白いアイデアだと思うので、Twitterの自然言語処理が専門の方々に聞いてみては?
https://peing.net/ja/q/417c9e29-35de-4c95-8323-afd6a50fcbc7
コンピューターのための自然言語理解シミュレ
ーターというのは可能ですか?
例えば第二次大戦の推移について、言葉ではな
くて動画で理解する方法もあります。
言葉で説明するよりもマインクラフトのような
創作ゲーム表現に変えたほうが分かりやすいで
す。
けれども自分が読み漁った人工知能や自然言語
処理の本にはそうしたアプローチは見つからな
かったです。
言語はただの記号の羅列で機械は現実世界を全
く知らない。でもそういうことなら、
テレビゲームのような仮想世界をインプットし
て、自然言語で操作したらいいと思います。
というか自然言語入力でときめきメモリアルみ
たいなゲームをやってみたいてす。 >>191
pythonの関数の引数は型を明記しない(一応type hintはあるが・・・)
その為C++のtemplate関数みたいな使い方にできる。
ただ>>182-183のいう事もごもっともだとおもいます。 >>192
なるほど
ダックタイピングって言うんだっけ?pythonやJavaScriptみたいな言語は型に縛られないからC++のようなテンプレートを必要としないってことか。
うーんと、C++のテンプレートがただ型の異なるコードに対応できるものと考えると、C++のテンプレートって疎結合関係ないような気がしてきた。型専用のマクロみたいなものか クラスに依存しないで仕様に依存するのが疎結合じゃないの? >>193
> ダックタイピングって言うんだっけ?pythonやJavaScriptみたいな言語は型に縛られないからC++のようなテンプレートを必要としないってことか。
関数の引数は型に縛られないが、
関数の中身は型に縛られるんだよね
foo(obj) { ← 確かに型に縛られないよ
obj.hello(); ← でも結局ここでhelloメソッドがあること縛られてる。
}
んで、コードが長くなったら見通しが悪くなって、
objって一体何のメソッドを必要とするんだ?ってなる。
そこでコメントとしてて書くのさ
// objはhelloメソッドを持っていること ← 結局これがインターフェース
foo(obj) {
obj.hello();
} >>196
そういう初心者プログラマ向けの注釈が必要ってことは想定せずに会話したいね >>202
そりゃお前程度が設計にこだわったところで大したもんは出てこないし、そもそもしっかり設計されてないと構築できないほどの難度のものには縁がないだろうし 設計して実装して
実装が増えてくると設計がダメって気が付いて
コンバータ作って設計やり直して、
の繰り返し
いきなり完璧な設計できる人尊敬するわ >>204
そこで、設計のやり直しじゃなくて
リファクタリング "技術" を使って変化させるんやで?
リファクタリングはクソコードを直すものじゃなくて
設計を安全に変化させる技術だ >>205
全く意味わからん
改修作業ってことで見積り出していいですよね? >>206
当たり前だろ?
例えば家をリフォームすると言っても
既存の部分に手を入れずにリファームなんてできない
そこまで見積もりに含める
2階建ての家を3階に改築する時に、3階部分を
追加するだけの費用を見積もるやつはいない。
3階に改築できるかどうか調べて場合によっては基礎工事からやり直し
追加部分だけ請求すればいいわけじゃないんだよ?
もしそんな事してれば、それは馬鹿かマヌケのどちらかだ そうなるとリファクタリングって言葉が何で存在するのかわからん
ただの改修作業じゃん >>208
改修作業に用いるテクニックのことだけど?
リファクタリングは、新しい完成図に持っていくときに使うテクニック。
リファクタリングと仕様変更を交互に繰り返しながら修正を行う
リファクタリングを行うと仕様変更が楽になる(そのために行う)から
不具合率も低下するし、テスト済みの既存のコードを活かせる
リファクタリングを行わないで仕様変更しようとすると
構造的に無理な所が出てくるのですぐに破綻する リフォームするときに既存の部分に手を入れるのは
当たり前の話なんで「既存の部分修正代」して
別に見積もりを出すことはないだろう
リファクタリングも同じ。既存の部分を修正するのは
当たり前の話なんだから、わざわざ分離して見積もりを
する必要はない。改修作業の中に自動的に組み込まれるもの
それを組み込まないで、追加部分だけで考えるから
デスマになる >>209
え?何言ってるのかさっぱりわからない
改修作業の何のための工程なの?
やってもやらなくても実現できる要件は同じなんでしょ?
余計な工数使わないで >>211
改修作業の中の工程の一つだけど?
もしかして無計画に改修してる? > やってもやらなくても実現できる要件は同じなんでしょ?
リファクタリングすることで要件を楽に実現できる
全体の時間も短くなる >>212
普通に要件定義→設計→実装→テストだよ オブジェクトとはすなわち物質、本来形のないバーチャルなものまで、例えば仮想通貨やゲーム内で使われるコインなどの加熱した取引を戒める言葉 リファクタリングとは、ソフトウェアの外部的振る舞いを保ちつつ、理解や修正が簡単になるように、内部構造を改善することです。
改修作業のことではありません >>215
詳細設計は?
リファクタリングは詳細設計を行った後に
その詳細設計に向けて、既存のコードを
不具合なく修正していく作業 納品段階で要件定義書をこっそり修正する
Re-Fact
代替的事実、事実の再構成
それこそがリファクタ >>217
改修作業に含まれる工程の一つだよ
だから改修作業のことだなんて一言も言っていない >>217
じゃあ、基本設計ミスってるときにやる修正みたいなもんなんだ? もちろん新規作成でもリファクタリングは行う。
最初から無駄のないコードを書ける人なんていない
リファクタリングを行って(最後にやるという意味ではない)
それでコードは完成する。だからコードを書くときには
必然的にリファクタリングが含まれてる >>221
改修じゃないって言ってるのに、修正なんだって
お前日本語わかってないのか? 改修を仕様どおりに作らなかったっっものを
直すことだと思ってるんだろw ほらみてみw
またリファクタリングが仕事の一部だと理解してないやつが来たw
釣れる釣れる釣りまくれーw >>228
開発コストが下がる。バグが減る。
これがメリットだってわからないってこと? >>230
簡単に言えば、1000行のコード見てバグを探すのと
100行のコード見てバグを探すの
どちらが時間少なくて済むかって話。
また10000行のコードは、1000行の10倍の時間で足りると思う?
そう全然足りない。増えた行数以上に時間がかかる
同じことを実現するのでも少なくてわかりやすいほうが
コードをレビューする時間は減るし、
バグを入れ込むすきも減る。テストの時間も減る 一人で作っていて書いたコード全部覚えてますってなら
1万行のコードでも良いかもしれないが、
仕事だと、コードのレビューがあって自分以外の人が読むし
バグった時の修正だって、自分以外の人がやるかもしれない
その時に理解しやすいコードとそうでないコードでは
数倍の差がでる。コスト意識を持っていれば
リファクタリングしてようやく完成っていうのがわかるはず リファクタリングして完成だし、
仕様が変わって設計も変わったら、
新しい設計にそってコードを変更する必要がある
設計無視した(つまり旧設計の)コードのままではだめ 先輩がリファクタリングしたコード、僕には読みにくかったんで、僕にとって読みやすいようにリファクタリングしときました >>237
お前がリファクタリングしたコードも読みにくいから俺がリファクタリングしといてやったぞ >>238
お前らのコードはリファクタリングすべきだとコンサルに言われたから、外部の業者に入ってもらってリファクタリングするわ、 >>240
現場がわかってないコンサルのコードでは業務に支障をきたすので現場に則したコードにリファクタリングします >>238
アイツ気に入らなかったんでアイツのPCで動かないようにリファクタリングしておきました だから間違った使い方すんなって
"あるべき設計・コード" を考えることがリファクタリングなんじゃなくて
"あるべき設計・コード" に移行していくやり方がリファクタリング
お前らが言ってる読みにくかったんで〜は
リファクタリングじゃなくて、
あるべきコードの話になってるだろ >>246
僕が思うあるべき設計はそうじゃないのでリファクタリングしときますね^^ >>247
そこでわざわざリファクタリングっていう必要なくね?
僕が思うあるべき設計の問題でしょう? まじめにいってるのに
おそらく本当にそうだったんだ
政治的レッテルに使われるのを嫌がって単語がしょうもないIT用語として上書きされたんだ
もっと適切な言葉もあったろうに
胡散臭い呼び方がされてるのは
きっと本当にそのせいなんだ あの客ムカツクんで動かなくなるようにリファクタリングしておきました >>249
真面目に言ってないじゃん。
どこに「納品段階で」とか「こっそり」とか書いてあんのさ? >>255
客との話なんだから完全にお前の問題だね リファクタリングやるのでお金ちょーだいって?
通らないし必要があるとも思えない だいたい本当に効果あるなら
素直な改修より費用下がるはずだしな >>257
仕事だろ?なんで必要な仕事で金もらえないんだ?
それはお前が重要性を分かってないだけじゃねーか
客のせいにするな。お前の問題だ
> だいたい本当に効果あるなら
> 素直な改修より費用下がるはずだしな
ただで良いものが作れると思ってんの? コード無しで動くものが作れるというのなら
やってみると良い >>259
え?
「動きを変えない」のがリファクタだろ?
最終的な製品のよさに一切関係ないじゃん >>262
アホかw
動きを変える時に既存の部分に手を入れやすくするために
行うのがリファクタリングなんだよw
なんで既存の部分を拡張するときに、
既存の部分に一切手を入れずに拡張しないといかんのだ
そんなことをするとシステムが破綻するだろ
そんなの客は望んでない ま、客の心理としては、リファクタリングに金なんて出したくないよな
効果があるならちゃんと定量的に示さないと >>263
それは改修に必要な作業だろ
設計改善という意味でのリファクタリングとは違う >そんなことをするとシステムが破綻するだろ
おれの知る限り実態とはかけ離れてるが
いい脅し文句だな >>266
設計を改善しないで拡張ばかり繰り返して
手がつけられなくなったプロジェクトは山ほどあるぞ
リファクタリングの概念がなかったCOBOL時代のプロジェクトなんか
そんな感じで一行修正するだけでもその影響範囲が
どこまであるのかさっぱりわからない状態になってるぞ ってか不必要に改変してテスト工数が増えるだけ
そしてそれは既存コードの破壊の可能性を意味する
最も客の信頼を破壊する行為だ
リファクタリングで工数が増える要素はいくらでもあるが
お前が主張する工数が減る要素は欠片も見えない >>264
> ま、客の心理としては、リファクタリングに金なんて出したくないよな
> 効果があるならちゃんと定量的に示さないと
なんでそこに客が出てくるのか分からんのだが?
修正=リファクタリング+機能追加・変更だろ >>268
> ってか不必要に改変してテスト工数が増えるだけ
> そしてそれは既存コードの破壊の可能性を意味する
機能追加したら、どうせ全部テストするだろ?
なにを言ってるんだろうか。 実際問題普通に改修したほうが安い
既存部分に手を入れやすくなるっていうのが
具体的に何を示してるんかはわからんが
テスト工数が減るとか増えるとか具体的なリスクやメリットを説明しないといけないのはもちろん
思ったより工数がかさんだら客は受注そのものをしなくなる
へたなこと言ったら将来にわたって改修の割引を要求されるかもしらん >>269
おまいがリファクタ分の改修工数客からもらえって言いだしたんじゃないんかw ソースが汚いので綺麗にしておきました
動作は変わりません
とか勝手にやったらちゃんと管理してるようなとこは検収拒否もあり得るレベルだと言うことは認識したほうがいい >>273
お前はコード1行ごとに見積もりだしてんのか?
リファクタリングなんか機能の修正の一部でしかないだろうが
別々に費用を分けるという発想がおかしいんだよ
>>274
なんで修正しないのにリファクタリングしてんの?
修正の一部にリファクタリングが含まれてるってだけなのに っていうか、見積もりだす時に
既存のコードの状態に関係なく、
まったく同じ費用を出すのか?
デスマの未来しか見えないなw >>276
普段からこまめに片付けしてないから
部屋片付けるだけで土日潰れるんやで?w 派遣や請け負いだとコードが自分達の資産である意識が低いから読みやすさとかどーでもいい、動いて検収に通りさえすればいいという意識が働く
リファクタリングとかは時間が余った時の暇潰し 意識が低いというか実際自分のものじゃないじゃないか
そのうえコード所有者の客が工数くれないのになぜ勝手にやろうとするのか >>280
> そのうえコード所有者の客が工数くれないのになぜ勝手にやろうとするのか
え? お前、客がなにかしたいと言った時
工数くれなくても働くの?
タダ働きしてるの? じゃあ工数の中に、やるべきことを含めないで
ぎりぎりの見積もりを出すんだろうねw というか、下請け作業の発注元を「客」と表現するのやめとけ。
話が混乱してるぞ。 客のせいにしているけど、結局は自分がやるべきことを
やらなくてもいいと思ってるから、低い見積もりだして
どんどんシステムをダメにしていってるってのが
分かってないんだろうね やらないほうが安いからやるのがどうかって話してんのに
なんでいつの間にか「やるべきこと」になってんの? >>280
だから受け入れ側のコードレビューが大事
どんなコード書かれるかわかったもんじゃない >>287
まともなものを作るにはどちらにしろ金がかかる。
まともなものを作るという前提においては
リファクタリングしたほうが安くなる
それに対して、バグばかりでろくに動かない
品質が低いものをでいいだろ、どうせ検収に通ればOK
使うのは俺らじゃないし、で作れば金はかからないだろうが
できるのはゴミ。 >>287
リファクタしたら少なくともそれまでの手動テストはやりなおしじゃん
稼働実績も影響範囲内でリセットになるし
一般的にいってリファクタすると一時的にせよ品質は下がる
おまえのいってる品質向上の根拠ってどこにあんの? >>290
> リファクタしたら少なくともそれまでの手動テストはやりなおしじゃん
リファクタしなくても修正するんだろ?
じゃあその修正箇所はどちらにしろやり直しじゃん
なら修正箇所のリファクタリングしても同じなんだけど
> 一般的にいってリファクタすると一時的にせよ品質は下がる
用語の使い方が間違ってる。
お前はただ単に「修正」の意味で使ってる
定義からしてリファクタリングは品質を上げるものなので
下がることはない。(下がる時点でそれはリファクタリングになっていない)
> おまえのいってる品質向上の根拠ってどこにあんの?
客観的な計測ツールで計測できることをわざわざ質問しないでくれないかな?
コードの品質を調べるツールならいくらでもあるだろ
http://blog.y-yuki.net/entry/2017/05/13/000000 >>292
超長いけど全く中身がないなw
自分の言葉で説明しろよ >>292
おまえさっき改修のために既存部分にも手を入れるって言ってたやん!
つまりコードメトリクス上のスコアを上げるために改修部分に合わせて既存部分も修正するんだろ?
UTまでで図れる品質は多少上がるだろうが、結合試験以降の分は?
>定義からしてリファクタリングは品質を上げるものなので
>下がることはない。(下がる時点でそれはリファクタリングになっていない)
ちょっと背筋さむくなった
主張が変わってもこのヤバい思考は見覚えがある
…else… >>292
意味不明なこと言ってんなよ
客側でした試験もやり直しだし
検収もやり直しだし
今までの実績も無価値になっちゃうし
一体どこに品質を上げる要素があんだよ
寝ぼけてんのかよ
テメーみてーな単価50万じゃすまねーヤツの工数まで無価値にしてんだぞ
テメーだけで仕事やってんのかよ >>294
> おまえさっき改修のために既存部分にも手を入れるって言ってたやん!
> つまりコードメトリクス上のスコアを上げるために改修部分に合わせて既存部分も修正するんだろ?
え? 既存の部分と結合するのに、その部分のテストはしないつもり?
まさか自分が書いた部分だけをテストすればOKだと思ってる? シチュエーションに対する想像力なさすぎやしませんかね >>296
曲解し過ぎ
要点は変更する必要もない
コードを見通しが悪いとかいう意味不明な理由で
実績のあるコードを変更してしまうこと >>295
> 一体どこに品質を上げる要素があんだよ
素直に、品質を上げる要素がわかりませんって
いったほうが良いのでは?
何度も言ってる。コードをあるべき姿に修正すると
レビューする時間も減るしバグの見逃しも減る。
客からの要請でコードを修正するとき、
修正したコード(とそれに関連する部分)の
レビューとテストが大幅に減る。
コードが単純であればるほど、問題ないねと判断するのが速くなる
逆にコードが複雑だと、なにをやってるのか「解析」しなければいけない >>298
> 要点は変更する必要もない
客が機能等を追加変更する時の話をしてるのに
なんで変更する必要がないの?
なにかを変更する時、そこにリファクタリングは
必ず含まれるってだけなんだけど
リファクタリングせずに闇雲に修正していったら
すぐに破綻する >>299
全く根拠がねーだよ
お前が言ってるのは全部お前の主観でしかない
今まで本番環境で問題なく動いてた実績を
ゴミにしてまでやってしまっていいことではない >>300
お前は見通しが悪いってだけでコードを修正しちまうんだよな? >>298
> コードを見通しが悪いとかいう意味不明な理由で
> 実績のあるコードを変更してしまうこと
実績のあるコードをそのまま使えるなら修正しなくて良いのでは?(笑)
ブラックボックスとして使えばいいでしょ。
それでその「実績のあるそのコード」に関連する部分を修正する時に
その修正にブラックボックスが耐えられるかどうか、
どうやって判断するの?
実績があるのは修正が入らない状態で、
修正が入るなら実績は意味なくなるよ。 >>302
> お前は見通しが悪いってだけでコードを修正しちまうんだよな?
お前順番が逆w
コードを修正するときは、客の要請など理由がある時
修正するのは大前提で、理由は今の話と関係ない。
修正する時に、リファクタリングして修正するか
闇雲に修正するかの話だ。
お前は見通しが悪いものを修正するときに
見通しが悪いまま修正するんだな?
そして見通しが悪いまま他の人にレビューさせるわけだよな?
せっかくお前が時間かけて見通しが悪いものを理解しても
その理解は残さず、見通しが悪いまま残しておくと >>303
え?修正があるかもしれない?って状況であって修正があるわけじゃないんだよね?
何でその状態でいじっちゃうの? 正直既存部分でも
Eclipse機能でメソッド抽出するぐらい見逃してくれとおもわんでもない >>305
> え?修正があるかもしれない?って状況であって修正があるわけじゃないんだよね?
お前ひどいな。修正があるかもしれない?状況って
俺言ってないじゃん。
そうやってお前は、嘘つきまくるわけか
嘘つき
修正するのは大前提。客が修正したいって言ってるんだから
修正するのは決定事項で、修正するかどうかは今の話に関係ない >>306
どっちみちそのコードを通るテストをするなら
やっていいよ >>307
は?
マジで何言ってるのかわからない
頭大丈夫か? >>310
siriのがマシなレベルでびっくりしてる >>311
じゃあsiriと会話してれば良いのでは?w サイコパスもいいとこだな
結局リファクタリングのビジネス的なメリットを一切挙げることができてないことに気づいてるの?彼は >>313
それはリファクタリング本を書いている人に対して喧嘩を売ってるということでいいの? そうではないといいたいところだが実は喧嘩売りたい
マーチンファウラーは悪魔 >>315
本?急にどうしたの?
どっから本とか出てきた?
俺はお前が説明できてないよね
って言っただけだよ
急に本とか何?どっから出てきたの?
脳に障害でもあるの? 権威に根差してものを考えるタイプなんだろう
たぶん幼少時の教育が悪すぎた >>318
技術者にはなるべきではなかったんだろうなぁ
言ってること滅茶苦茶だったし ジャップ君もといelse不要ガイジのいなくなった上級雑談スレの惨状を見るにつけ
それはどうか微妙なところ
滅茶苦茶でも一応相手の言うこと聞いてきっちり答えてるから会話が成立する
茶化すだけならサルでもできるし 機能追加のために既存コードを改修することをリファクタリングと言ってる人と、設計改善をリファクタリングと言ってる人で平行線 https://medaka.5ch.net/test/read.cgi/prog/1523721765/
Javaじじいをこれ以上だませなくなったのでターゲット変えた模様
コードのにおいとか言われて
他人のコードを場当たり的にぐちゃぐちゃにする新人がまたどれだけ出ることやら http://www.atmarkit.co.jp/ait/articles/1403/25/news033_2.html
> Scenario: TDDのサイクルはRED、GREEN、REFACTORからなっています。
> GREENからREFACTORを飛ばすことはありますが、REDからGREENを飛ばしてREFACTORしないのが特徴です。
> これはテストなどによって保証されている範囲でのみ内部を変更することを「REFACTORING」と呼ぶという定義によるものです。
これはテストなどによって保証されている範囲でのみ内部を変更することを
「REFACTORING」と呼ぶという定義によるものです。
これはテストなどによって保証されている範囲でのみ内部を変更することを
「REFACTORING」と呼ぶという定義によるものです。
定義ぐらい知っておけよ ちゃんと定義しないと何議論してるか分かんないじゃん リファクタリングをしない工程とはどんな手順を想定していて
リファクタリングをする工程とはどんな手順をを想定しているのか?
工数が減るならそれのどの手順でどんな理由で工数が減るのか?
品質が上がるならそれのどの手順でどんな理由で品質が上がるのか?
また、その品質を判定する基準は何か?
おおよその目処となる数字を入れて説明して欲しい
リファクタリング
→無条件で品質は上がり工数は削減できる
って言われても
( ゚д゚)はぁ?
としか 仕様をねじ曲げる事ではない
リファクタするにはユニットテストが重要 >>329
そんなくだらんレスを付けると
ユニットテスト=リファクタリングでいいの?
とかくだらないレスに対応することになるわけよ コードを整理するには広くて先を見通す視野、ある程度の経験が必要 振る舞いが変わっていないことを担保するのがユニットテスト >>332
結合にも影響出るよね?
何で担保するん? だって求める品質によるもの
複雑さを品質に求める分野もあれば
動きゃよいんだよどうせ派遣だしもあるし
後者にリファクタリングもテストコードも要らんだろ
ところでOOPのスレじゃないのかココ >>334
OOPとリファクタリングはなんの関係もないという主張? 結合通った後はコードに触ってはいけないという思想はシステムの硬直化を招き定期的なリプレースが必要となる リファクタ推奨するメリケン人どもはどうやってそのへんクリアしてるのか知りたい
ほんとに >>335
おそれりました
そりゃ
リファクタリングしてテスト通ったコードが
現場で問題出したら
それテストコードのバグだから >>335
少しでも関係あればなんでもありっていう主張? オブジェクト指向とelseは無関係ではないからelseを使うことの是非について議論したい どうでもいいっていうのは、elseを使わないことでどれだけコードの見通しがよくなるかを知らない奴の意見 >>348
すまん意味不明なので整理してもっかいレスして ところで、オブジェクト指向ってなんですか?
わかりやすく教えてください。 COBOLをリファクタリングしてもオブジェクト指向にはならなくね? C言語でもオブジェクト指向な実装はできるんだから、COBOLでも頑張ってやれば出来んじゃね? なんとなく漠然とオブジェクトのほうを指さしているイメージ >>363
出来るのは当たり前。
使い物にならない、ってだけ。 調べられる事くらい調べといて貰わないと
時間とスレが無駄に消費されるだけで
百害あって一利無しだろ? たぶんお前と一緒にオブジェクト指向の意味を考察したいわけじゃなくて
知ってる人に教えてほしかっただけだとおもうが
知った気な顔しといた挙句横から人に指図するだけで
なんの役にも立ってないおまいはなんなんだ 宗教の一種だな
現実に追い詰められたプログラマの心の拠り所
OOP教FP教、DDD教、アジャイル教
経典に描かれた楽園を夢見ても、
クソ客クソPMクソ外注クソコード、現実の苦しみからは救ってくれないのが悲しいね まあC言語のファイル操作の関数を考えてみればいいんじゃね?
データ(ファイルポインタ)を内包出来ないから毎回持ち回らないといけない
データとその操作をワンセットで扱えるのが利点だと思うが 持ち回るというのは引数で指定する必要があるって意味ね 疎結合というのは倦怠期でセックスをしなくなった中年夫婦のようなもの 誰でもいいから早くオブジェクト指向が何か答えてくれない? >>383
「オブジェクト」と「指向」をそれぞれ辞書引けば解るだろ >>385
それを語るスレでそんなこと言っちゃうわけ?ww >>383
変数とそれを扱う関数をまとめたオブジェクト同士が情報をやりとりしながら動作するソフトを作る設計手法 関連するデータと手続きを一まとめにしたもの、こいつをオブジェクトと呼ぶことにします
オブジェクトを基本単位にプログラムを作ること、そいつをオブジェクト指向と呼ぶことにします オブジェクト指向に必須ではないものを取り除いた
最小限のたオブジェクト指向には
なにがあるのでしょうか? >>391
合ってる。
オブジェクトの性格(?)は、
出来るだけコミュ障(必要最小限)な方がいいと思う。 更に、オブジェクトを作るための型、これをクラスと呼ぶこととします(便宜上クラスから作られた実体をインスタンスと表現したりもします)
クラスの定義はまだ台本を書いただけで、インスタンス化されたときにはじめて役者がステージに上がり実際に演技をします オブジェクト指向って何?に対してよくある
バカな説明レベルに戻っとる 猫とかステージとか、例えが出てくるとバカっぽく見える事はあるな
解りやすければ、どんなにバカでもかまわないけど わかりやすく例えて説明する
↓
その例えでは完璧に表現できないといちゃもんをつける
例えは所詮例えであって、
わからない人にわかりやすく伝えるための手段なのに
オブジェクト指向の限界みたいな話に持って
いこうとするやつがいるんだよなあぁ
あれは本当に馬鹿 萌えキャラに擬人化するともっとお馬鹿っぽく出来るかも知れない やっぱりクラスを使わない場合の実装とかクラスライブラリの成長過程を体験しないと本当に理解は出来ないからな >>390
報告?
あれがよくまとまってるから推奨してるんだが、まさか読まずに言ってるとでも思ったのか? 別に有害じゃない。
動物がたくさん出てくるゲームを作ろうと思ったら
CatクラスDogクラスは普通に作る。 >>412
いや、有害。
オブジェクトと生命をごちゃ混ぜに考えるとわけわかんなくなる >>413
有害なのはお前。
わかりやすく説明するために例え話を使ってるのに、
そこに生命を表すにはどうするんだと言い出すから
お前が混ぜっ返してる >>412
今時、そんな拡張性のない方法使わんだろ。
振る舞いが動物に見えれば良いんだし。 >>413
俺は犬猫の説明でオブジェクト指向をふんわり理解して、その少しあとにはもう業務システムに適用してたよ
抽象と具象を行ったりきたりできない人には有害なのかな、、 ある程度の経験者なら余計なイメージを経由したくは無いだろうな >>415
だからお前の考える世界を実現するために
言ってるんじゃないんだよ
本当にアホだなぁw
初心者にわかりやすく説明するために使ってるの オブジェクト指向が主流になってもうどれだけ経つよ?
いまだに使いこなせてない意味がわかんないんだけど 使えるけど作れない人はいまだに五万といるよ
おまじない的にコピペで出来てしまうからね >>414
いいや、有害なのはあんただね!
オブジェクト指向で犬や猫を作ることなんてできたか?
俺はできなかったね!!俺が作ることができたのはボタンを押したら猫の声が出るおもちゃだ。
わかりやすい例え話をするんだったら、ホイールやハンドル、エンジンを使って車を作る例え話をするべきなんだ。 だって種分類とOOPは何の関係もないし
もし
人類のスーパクラスがあったら
それはネズミの祖先だわい
(ループ開始) >>420
人類は100万年経つのに
まだ戦争やってるだろ 犬猫とかのあまり実用的でない例を出さなくても
実用的な例で説明したらいいんじゃない?
例えばstringクラスとかなら、実用的だし理解しやすいだろ >>419
初心者に媚びて、結局嘘教えるんじゃあ有害なだけだが? 適当にいったつもりだったが
思いの外みんな賛同してくれてビビったww OOPを知っている人は犬猫をOOPで扱うことができるけど、
OOPを知らない人に犬猫をOOPとして考えた時の話をしても
正しい意味で理解できない。
OOPの犬猫の話はOOPを知っている前提の上で成立しているんだよ。 >>422
> オブジェクト指向で犬や猫を作ることなんてできたか?
できたぞ?
class Cat
class Dog >>429
みんな適当に言ってるお前に合わせてるだけだw 生きてる価値のないごみクズってホントやだね
せめて生きててごめんなさいって自害でもしてくれれば
少しは可愛げもうまれるんだろうけど お前が決めた生きてる価値とやらに合わなければ死ねとかw 死ねじゃなくて、死んでくださいってお願いだろ?
その願いが聞き届けられることはないけどw
かわいそうwwww
あ、100年後には聞き届けられてるかもなーwww >>430
> OOPを知らない人に犬猫をOOPとして考えた時の話をしても
> 正しい意味で理解できない。
正しい意味で理解できないからだめだっていう
考え方がそもそも間違いだからなぁw
中学生ぐらいのレベルでは、原子はそれ以上分解できないという
教えられるが、実際には分解できる。
電流はプラスからマイナスに流れると教えられるが
実際にプラスからマイナスに流れているものはない
例えというのは正しく理解させるためではなく
理解するのに必要な壁を低くするためにある
小さい壁を何度も登っていけば高いところまでいけるが
最初が高いと最初の壁すら登ることさえできない
例えで必要なのは正確さではなく、身近でよく知ってるものに例えることだ
車のパーツとか趣味で車をよく知っている人じゃないとピンとこない どこでもいいから高いところへ行ければいいと思ってる時点で馬鹿
そんな考えだと行きたいところから遠ざかることもある >>437
詭弁ではないと思うが?
反論の一つぐらい言うように >>439
途中で方向転換すればいいだけ
急がば回れって言葉知ってる?w >>441
急がば回れって知ってる?
どこへ進むのか、進み方もわからん奴にとにかく進めって言っといて急がば回れとか
デタラメにグルグル回っててどうやって目的地につくんですかね >>440
俺は詭弁だと言っているのだから反論する価値もないと判断したということ。 >>442
進み方が知らないのは初心者
初心者にわかりやすく押している俺は理解してる
普通に目的地につけるが?
え?なに?お前初心者が一人で
頑張ってることを想定してんの?
たとえ話を使って教えている人は誰だよw >>444
じゃあお前の発言はすべて詭弁だから
反論する価値=間違いってことですね? >>443
アジャイル良いよねw
最初から完璧なものを求めても
単に時間がかかるだけでなにも進まない >>446
そうですね、あなたがそう思うのならそうなんでしょうね。お好きにどうぞ。
別に俺は困りません。 > それは理解できない人間の詭弁だね
そうですね、あなたがそう思うのならそうなんでしょうね。お好きにどうぞ。
別に俺は困りません。
完 >>447
まあ実際には、禄に設計も出来てないのをアジャイルとか言い張ってる偽物が多いけど。 アジャイル界では、日本の企業で"正しく"アジャイルを導入できてるケースは皆無って言われてるからね
そもそも日本人にアジャイルは向いてないとオレは思う
だからといって、ウォーターフォールが糞であることに変わりはないけどな 元々はトヨタの看板方式のソフトウエア版なんだけどね >>462
トヨタのような一流企業が長い期間をかけて最適化してきたことを、そこらの派遣プログラマで再現するのは大変だろうな
彼らに出来ることはせいぜい本とかwebを読んでわかった気になるぐらい >>431
ほほう、その犬や猫は、ご主人に餌を求めたりおしっこ漏らしたりするんですかね? >>436
犬や猫はしってるけど、エンジンやタイヤを知らない人なんて見たことない >>466
すでにお前の発言は反論済み
414 自分:仕様書無しさん[sage] 投稿日:2018/04/28(土) 19:37:19.66
>>413
有害なのはお前。
わかりやすく説明するために例え話を使ってるのに、
そこに生命を表すにはどうするんだと言い出すから
お前が混ぜっ返してる >>468
えっ、犬とか猫って生物だよね??
違いましたか??ww
>>469
じゃあ、実物の猫とほとんど区別がつかない
猫シミュレータ作ってみ? >>470
それは機能が多すぎるし複雑すぎるし要件がわからんからできないけど
何が「じゃあ」なのかが一番わからない
それをもって何をいいたいのか オブジェクト指向スレにいつも現実世界の物を作ってみろー
というバカが出てくるのか不思議で仕方ない >>471
つまり、生物をプログラミングの例えに使うのは
アンチパターンだってこと。
クラスとかモジュールってのは
時計仕掛けとか人形仕掛けのようなものであって
生物を例に出すと混乱の元になる >>473
それって、課題の複雑さにお前がついていけなかっただけじゃないの?
誰も「猫を作れ」なんてことを要求はしていないだろう
猫を描いてくださいとか、猫という字を書いてくださいというののちょっと複雑版だっただけだ
おまえなりの切り口で、お前なりの単純化と抽象化をすればよかったんだ
オブジェクト指向にかぎらずプログラムというのは常にそうだ
おまえはプログラムを始めるには幼なすぎたんだ >>470
> えっ、犬とか猫って生物だよね??
お前馬鹿なのか?
今はソースコードの話をしてる
class Dogだからって、生き物の犬のことではない。
仮にclass 車の部品 だとしても、
このクラスを実際に車に取り付けられるわけではない。
ほんまにおまえはアホやなw >>473
> つまり、生物をプログラミングの例えに使うのは
> アンチパターンだってこと。
その理屈だと時計や人形仕掛けもアンチパターンになる。
ゼンマイはどこにあるんですか?w
オイルはどこに塗れば良いんですかw >>474
> オブジェクト指向にかぎらずプログラムというのは常にそうだ
> おまえはプログラムを始めるには幼なすぎたんだ
そういうことなんだよねw
例は例であって、本物ではない。
それは誰もが知っていることなんだけど、
そのレベルで分かってない >>475
バカなのはお前だ。
プログラミングやオブジェクト指向がわからない人に
わかりやすく説明する話をしてるんだよ?
犬とか猫って言われたら、犬とか猫をイメージして当然だろ!!
人工知能がどうとか言われる時代なら尚更混乱するわ!!
たしかにEngineクラスを作ったとしても
そのエンジンは実際の車には取り付けられないよ?
でも、ディスプレイの中では取り付けられるよね?
では猫は?ディスプレイの中で現実とそう大差ない猫が作れますか? >>477
もちろんそれは前提としてわかってる
例えるとするならどちらの方がわかりやすい?って話だよ >>478
お前、サイトの利用者を表すUserオブジェクトを作るときに、現実の人間とそう大差ないものを作ってんの? >>445をちゃんと読め
わかるようになるまでちゃんとフォローアップするって言ってる人に文句言うのはナンセンス >>480
バカじゃん
ユーザーとそう大差ないものを作るわけないだろ?
ユーザーは生物なんだから。人の話聞いてる?? たいていの業務だと、猫シミュレーターなんか作らんからな
猫の毛並みだの血統だの
振る舞いっていったら鳴いたりウンコ漏らしたりすることではなく、
猫クラスからデータを取得するとか、DBにデータを保存するとか、
あったとしても自分の値段を算出することぐらいだ
戸惑うのはわかる
でもそのつまづきポイントはそのはるか手前だろ… >>478
> では猫は?ディスプレイの中で現実とそう大差ない猫が作れますか?
作る必要がない。
誰でもそれが本物の猫のことではないことぐらいわかってるから もう一回かいておくか
414 自分:仕様書無しさん[sage] 投稿日:2018/04/28(土) 19:37:19.66
>>413
有害なのはお前。
わかりやすく説明するために例え話を使ってるのに、
そこに生命を表すにはどうするんだと言い出すから
お前が混ぜっ返してる 犬猫じゃわからんって言ってる人たちって、これならわかるって説明をいまだに見つけられてないんだよね?
犬猫で説明されてもわからん、かといって他の例で説明されてもわからん、って感じでしょ?
それって、犬猫が悪いんじゃなくて、頭が悪いんだと思う >>486
ぼくの過去れす、とか言われても知らねえよw
誰だよこの名無しw エンジンやハンドルだと、これがクラスなのか
インスタンスなのか分かりづらいという問題がある
犬や猫だと、これがクラスであり
ポチやタマが、インスタンスだと言って
すぐに理解してくれる >>487
> それって、犬猫が悪いんじゃなくて、頭が悪いんだと思う
他人は頭が悪いから、こう考えるんだという想像をしている
俺だったら、こういう勘違いをするという
自分の頭の悪さをかいている 犬や猫だと、鳴くという同じメソッドであっても
犬はワンワン、猫はニャーという風に
クラスによって別の処理ができることを説明できる
エンジンやハンドルだと説明できないに
仮にできたとしても、マニアにしか分からん話になる たとえ実態とかけはなれていても
オブジェクト指向の犬猫の説明には楽しそうで夢がある
プログラムに魅力を感じ、のめり込んでもらうにはもってこい
なにより大事なことだが、新人には夢をみせておくにかぎるんだ
いきなり現実の無機質なオブジェクト指向をつきつけたら現実に絶望してしまう… エンジンやハンドルなどのパーツは
同じ名前のメソッドを持ってないからダメなんだろうな
オブジェクト指向の例えとして使ってもすぐに行き詰まる >>493
ハンドルクラスやエンジンクラスがあって、実際のハンドルやエンジンはそのクラスを継承してると考える
ハンドルクラスには、右に回す、左に回す、真ん中を押すというメソッドが有る
で、車にハンドルを乗せる時に、B社のハンドルでもT社のハンドルでも海外製のハンドルでも、必ずハンドルクラスを継承してるので、右に回す、左に回すって事が可能だ
逆に、継承してないハンドルがあれば、それは規格外なので使わないほうが良いと言える
さらにハンドルに企業秘密な技術が使われてて、さらにその技術はハンドル内に隠されて外から見えなかったとしても、中身を気にせず右に回す左に回す事が出来る
で、この説明では>>489に陥る > ハンドルクラスやエンジンクラスがあって、実際のハンドルやエンジンはそのクラスを継承してると考える
「実際のハンドルやエンジン」はクラスを継承しているということは
これらはクラスということになる
つまり「実際のハンドルやエンジン」はインスタンスではない
だからこのような説明が必要。
・ハンドルやエンジンというのは共通規格というものがあって、その規格で作られている
・といってもまあメーカーごとに規格違うから互換性ないだろうけどな
・仮にあるとしてだ、ハンドルやエンジンの共通規格を継承して実際のハンドルやエンジンが存在する
・実際のハンドルやエンジンといっても、それは実際に車に取り付けられているものそのものではなく型番みたいなものだ
・同じ型番から作られた製品、実際に車に取り付けられてるやつがインスタンスだ
ややこしいわw ハンドルクラスやエンジンクラスを継承した、
実際のハンドルやエンジンを表すクラス。
全ての実際のハンドルやエンジンを表すクラスは
全て右に回す、左に回すというメソッドがあり
いかなる実際のハンドルやエンジンを表すクラスも同じ動作をする
継承したクラスは全て同じ動きをするものである
と勘違いするわけだよな
やっぱり例えとしてだめだわ。
分かりづらいし誤解される ハンドルやエンジンでオブジェクト指向を説明するのは無理だな
やっぱり犬や猫のほうが良い よりダメな例を出して
だから犬猫が良いのよ
という詭弁の典型例 そういう詭弁は、もっと良い例を挙げれば一発でひっくり返せる
さぁ、犬猫より良い例を出せよ 人間でやったら?
日本人と外国人とか
小学生と中学生とか 犬猫の方がわかりやすいというのを認めたとしても
クラスを作れるようになったら、犬猫よりも
エンジンと車の方がわかりやすいのは事実。
そうだろ? クラスを理解して自分で作れるようになったら、エンジンクラスなんて例にする必要ないじゃん >>502
バカなの?理解には理解レベルってのがあるんだよ それに、前に誰かが言ってくれたけど
生物を例に出したら、継承って先祖みたいで混乱するじゃん
犬とか猫を使って説明するのはやはりアンチパターン >>501
先に出てた説明はエンジンとハンドルだったと思うけど
自分で理解してクラス作れるようになった人向けにはわかりやすい(と主張する)説明とか本末転倒では? なんでエンジンクラスをそんなに推してんのw
自分が思いついた考えは特別に感じて捨てられないアレか? エンジンと車の関係と
犬と猫の関係が
同じように語られてるのは何故? >>504
> 生物を例に出したら、継承って先祖みたいで混乱するじゃん
哺乳類を先祖って勘違いする人はいないが? DNAをプログラムとするなら
OOPの継承とは進化だ!
という意見だよ。 加えて継承って訳が悪いと思う
Javaみたいに拡張の方良さげ コードそのものを書き換えてしまうDNAは適切な例えじゃ無いよ。 >>505
違う違う。
クラスには何があるのか把握するのは簡単でしょ。コンストラクタがあってーとか、パブリックやプライベートがあってーとか、extendsつかって継承するんだーとか。
そこまでは頭使わなくても、参考書通りに手を動かしていけば誰だってクラスの定義はできるようになるよね。
問題はそれらを応用してアプリケーションを作るときの話だ。その時に犬とか猫とか言われても訳がわからないだろう?
エンジンと車なら一発で理解できるし、クラスが他のクラスの機能を使うとき、ほとんどの場合継承は使わないことも理解できる。
犬とか猫で学んだ人は、何でもかんでも親クラスに共通する機能を定義した神クラスのアンチパターンを踏んでしまう。あんたも神クラス作ったことあるだろう?? 胎児のある時期エラがあったりするので中々味わい深い >>508
なんでそういうバカみたいな返信しかできないの?
継承が機能受け継ぎとか親クラスとか言われてて
遺伝を継いだ子供が作れるってことかな?って
間違えて考えてしまう人がいることもわからないわけ? >>514
> エンジンと車なら一発で理解できるし、
エンジンは例えばどんなメソッドを持ってんの? 自分が考えることはみんなもそう考えるはずだから仕方ないね ここで犬にエンジン搭載する方法学んでも仕事で使えないんだよねー...
手続きダラダラ書いちゃうし、ちょっと違う似た機能コピペで量産しちゃうし、小さな変更で何箇所も修正が要るし >>516
馬鹿はお前だな
知らない人への説明で継承という言葉だけを
教えて理解しろなんて言わない
継承の親クラスというのは具体的にいうと
哺乳類や動物のことです。
ニワトリクラスであれば鳥類です
重要なのは、これだけで誰でも
容易に理解できるということ
対してエンジンや車は何を継承しているか?
説明してみせよ 間違えて理解しそうなら、説明すればいいだけ。
わかりやすいものに例えてね
エンジンや車だとわかりやすい説明ができない スレの流れが長すぎて口出しにくいが…
エンジンという抽象クラスの派生クラスとしてロータリーエンジンだのディーゼルエンジンだのを考えれば良いんじゃないのかな
エンジンは自動車や発電機に搭載するためのメソッドを持ってて云々 バカの特徴
例え話が好きすぎる
というか例えでしか世界を理解できない な
哺乳類クラスって有害だろ
種とクラスを混同して
OOPが理解できなくなる >>522
外部仕様が変わる奴じゃ無いと教える為に分ける意味が薄いぞ?
>>525
何が有害なのか詳しく。
つか、お前さんがオブジェクト指向をまともに理解できないだけだろ? >>532
神クラス作ってオブジェクト指向やってるつもりになってろよバーカ おまえらみんな平等にバカですからケンカしないでねw >>527
生物種アナロジーでクラスを騙っている奴は
OOPを理解できてないよ 蛇足だが別案すれば
祖先の形態を継承しつつ
環境に合わせてパーツを変えていく
進化モデルがOOPの実際に近いとおもうのだが
あんまり賛同してくれる人は居ないみたい オブジェクト指向が理解できないというのが理解できない
少し学べばすぐ実用的なプログラムをオブジェクト指向で書けるようになるっしょ うむ、天才にしか理解できないオブジェクト指向は我々凡人とってはそこらにありふれた路傍の石にすぎんのだよ
それを理解しようなどと考える事がそもそもの間違いだという事に我々はもっと早く気がつくべきだった
オブジェクト指向などただ黙って右から左にうけ流せばよいのだ >>535
オブジェクト指向では
オブジェクトの何に注目するかは自由。
観点を否定するなら、それに足る理由が必要。 生物種アナロジーでクラスを騙っている奴はOOPを
理解できてないよっていってまさか理由を求められるとは思わなかった。
そんなの感覚的にわかるだろ?
感覚的にわかることなんだから理由はいらない
それぐらいのレベルの話なのに、理由を説明しろとかセンスが無いよ >>522
> エンジンという抽象クラスの派生クラスとしてロータリーエンジンだのディーゼルエンジンだのを考えれば良いんじゃないのかな
そうなるやろ?
ロータリーエンジンは継承元のエンジンからなにを引き継いでいるのか?
詳しい人ならわかるのかもしれないが、普通はさっぱりだな。
> エンジンは自動車や発電機に搭載するためのメソッドを持ってて云々
エンジンは自動車、発電機の他、船、航空機、芝刈り機、などなどに
搭載するためのメソッドを持っていて・・・
ほら、神クラスになっちゃったw
こっちの方だよ、神クラスになるのは
自然な流れで証明できたじゃないかw >>545
じゃああんたはエンジンと自動車の方をお願いね >>545
先に書いておくね
414 自分:仕様書無しさん[sage] 投稿日:2018/04/28(土) 19:37:19.66
>>413
有害なのはお前。
わかりやすく説明するために例え話を使ってるのに、
そこに生命を表すにはどうするんだと言い出すから
お前が混ぜっ返してる
class 哺乳類 {
哺乳類の一般的な特徴
}
class 猫 extends 哺乳類 {
猫特有の特徴
}
class アレ extends 哺乳類 {
哺乳類だけど、哺乳類の一般的な特徴に当てはまらないものはここでオーバーライドする
} >>542
理由を説明できないからって誤魔化し始めるのは関心しない。
「お前の考え得る範囲では思いつかない」
と言うことだけは解ったが、
それは他人の設計を否定するものでは無い。 >>549
生物種アナロジーでクラスを騙っている奴はOOPを
理解できてない
ここだけは認めろ
これは真理だ え?自動車を広くするの?俺もしたい
って勘違いされやすい。
やっぱりだめだなw バカどもへ
生物種アナロジーでクラスを騙っている奴はOOPを
理解できてない。これは真理だから理由を説明する必要はない >>551
> よくヤンキーが自動車を拡張してるな
自分だけのオリジナルアバターを作るような感じだと思うが
自動車の拡張は継承ではないな >>550
うん。
お前には理解できていない。
これだけは理解した。 >>543
要は動力を提供するインターフェースだけなのにどうして神クラスってことになるんだか
あー、いやいや口出して悪かった。
こりゃ議論にならなそうだ。 >>561
だからエンジンの例えがダメなんだってw
証拠あがってるじゃないか
エンジンはなんでも搭載できるわけじゃない
自動車に搭載するなら、自動車に登録するためのインターフェースが必要だし
船に搭載するなら、船に搭載するためのインターフェースがエンジンに必要
エンジンが全てのインターフェースを持っていたらそれは変なので
エンジンからは何も継承するものはない。継承なのになw エンジンに搭載インタフェース付けたらいいんじゃないの?
自動車や船にそれぞれの搭載の実装書いてエンジンはエンジンの仕事するだけ >>563
アダプターパターンの理解も深まっていいよね
やっぱりエンジンと車の方がわかりやすい 生物種アナロジーでクラスを騙っている奴はOOPを理解できてないってのは本当に真実で
ものづくりの世界に生物を持ってきてはならないのだよ。
生物は誰に作られたか考えれば答えは自ずとわかるだろう。 エンジンというクラスがあると、子はレシプロだのロータリーなど、
レシプロの子に直6だの水平対向だの、分類上は子ができるし、
意味的にメソッドの継承もできるけど、結局ハードとして別個体であって
独立したものだからソフトウェアとしてのOOPでは意味をなさないんだよね。
概念として継承できるけど実装としてそれは独立であり無価値。 ところが解析的な要因特性で親子構造を構成した場合、共通部と独自部という
形で概念的な継承が意味を持つ。エンジンだとDRBFM的なものの見方をしたときには概念的な階層構造は省力化に大いに役立つ。 >>567
同じ企画のネジが使えるのは、ネジの形が一緒だからだろ?
でもそれぞれのネジは別個体だ。
クラスってのはどこまでも企画であって、実態はインスタンスだろう?
何も問題ないじゃないか >>569
表現不能な個体差がある可能性のある物理的なものはOOPで表現できない >>569
問題はそこまでしか説明できないってこと
継承はどこに行ったね? >>570
何がいいたいのかよくわからなかった。
俺とお前のiPhoneは同じように見えて、お前のiPhoneは傷だらけだよ?
そんなことはプログラミングの世界では起こらないよね?だからてきかくではないよね?
って事がいいたいの?
どうぶつよりマシだと思うんだけど >>571
継承がどうした?流れが早くてわからん。何が知りたいの? >>569
厳密に同じにならない。
同じに見えるのは、同じに見える程度の薄っぺらい理解しかしていないから。 >>574
ごめん君は犬派なの?車派なの?それともまた別なアレなの? >>573
ネジを使ってオブジェクト指向を説明するのが難しいって話
どうしても専門的な話になって普通の人にはピンとこない
犬や猫のように文字化な例を使って説明する方がいい
という結論に持っていきましょうw >>572
お前の持っているiPhoneもエンジンもプログラミングの世界で表現可能なものならばそうなのだろうな。 本来は同じクラスでもインスタンスごとに属性が違ってる。
メソッドは同じだが属性は違うのが普通
同じ規格のネジの場合、全てのインスタンスの属性が同じに見えてしまう
どのネジでも同じように使えるから
メソッドが何に相当するのかもわからない
これでオブジェクト指向を説明するのは難しいな >>576
別に車とエンジンじゃなくても生物じゃなければいいんだ
>>567が、子クラスが別個体だとか意味わかんないこと言うから
クラスってのは全部設計書であって個体はインスタンスだよね?って主張したくて
ネジの話を持ってきたが、すまん、余計にややこしくなったのでネジの話は忘れてくれ >>577
表現可能じゃん
VRの世界に存在するスマホの中でAndroidが立ち上がればいいんでしょ? 哺乳類をどんなに拡張しても猫にはならない
なぜなら哺乳類は分類であってクラスじゃないから
DNAがクラス
生物はそのインスタンス
進化はDNAの継承
でOOPはスッキリ理解しましょうw。 >>580
だから、それがお前が認識している表現可能なすべてであるなら、
それでいいんじゃない?
他の人はそうは思わないというだけのことだよ。 >>581
クラスは分類であって拡張じゃないんだがw >>585
しかもAndroidが立ち上がるらしいぞ >>585
>>586
大切なのはそれが可能である事が明確であることだよ
だからわかりやすいんじゃん。
生物はソフトウェアの世界に作れない。
もちろん、物質もソフトウェアの世界には作れないが近いものは作れる。それは、ゲームやったことある人ならわかるだろう? >>587
生物も物質も作れないよ、現在の技術じゃ
できると思っているならそれは傲慢だ 俺のiPhoneをVRの中にdeep copyすると寸分たがわず同じものが再現できるの?
同じものじゃないけど近いものならできるって?
それはお前が勝手に近いと判断しただけのまがい物だろ?って話だよねw >>590
iPhoneはソースが公開されてないから
アンドロイドにしてくれ オブジェクト指向じゃなくて技術崇拝だなこりゃ
マジキチ 統失なんだろうな
自分と他者の境界が曖昧で「我思うすなわち真理」状態に入ってるんだよ 叩くことでしか反論できないバカどもめ
ファーーーwww 昼になったら変なのが増えたw
こんな日に出勤とは社畜の鏡だなw まとめるとこうかな。
@
システムを設計するのは難しい。だから、わかりやすい解釈(例え)が人間には必要だ。特に初心者にはね!
A
オブジェクト指向の例えとしてよく使われるのが動物や犬猫を使った話だ。これは一見わかりやすく思えるが、根っこに大きな罠があるため、アンチパターンとなる。
B
犬猫の例えがダメな理由は、それが生物を使った例えだからだ。生物とは神の手によって創造されたものであり、人間には作れないものだ。人間に作れるものはカラクリであり、命を創造することはできない。
C
よってオブジェクト指向の例え話は、生物を使わない例えを使用したほうが良い。その例えの候補は、エンジン、タイヤ、ハンドルを使った車の作成の例えである。(ほかにもっといい生物を使わない例があったら教えて)
というわけだ。
現実の猫と区別がつかない猫をVRの世界で作れたら、俺は負けを認める。 現実と区別がつかないものを作るための技法じゃないんだよなぁオブジェクト指向って @
システムを設計するのは難しい。だから、わかりやすい解釈(例え)が人間には必要だ。特に初心者にはね!
A
オブジェクト指向の例えとしてよく使われるのが動物や犬猫を使った話だ。これは一見わかりやすく思えるが、
根っこに大きな罠があるため、アンチパターンとなる主張しているが、その罠もアンチパターンも示されていない
B
犬猫の例えがダメな理由は、それが生物を使った例えだからだ。生物とは神の手によって創造されたものであり、
人間には作れないものだ。人間に作れるものは子供だけであり、セックス以外で命を創造することはできない。
同様に勇者、村人、モンスター、命あるものはソフトウェアで表現することはできない
最大の生物である惑星の地球シミュレータなんてもっての外だ。作れるのは神だけだ
C
よってオブジェクト指向の例え話は、生物を使わない例えを使用したほうが良い。その例えの候補は、
エンジン、タイヤ、ハンドルを使った車の作成の例えである。エンジン、タイヤ、ハンドルは
ソフトウェアで作ることができる。3Dプリンタを使えば良いのだ。 >>597
そうだよ、だから現実に存在する猫は作れないって話ししてんじゃん >>599
なんで現実に存在する猫を作らないといけないの? 3Dプリンタ作ってもいいけどさ、
エンジンを作ることができるクラス設計
というものを見せてほしいんだが。
クラスにあるメソッドとプロパティはなにか?
それがあるとエンジンが作れるんだろう?
エンジンが作れるほどのクラスがあるとするなら
それは形と材料のデータの集まりでしかなく
ソフトウェアのクラスとしては使いものにならないと思うが? × 3Dプリンタ作ってもいいけどさ、
○ 3Dプリンタ使ってもいいけどさ、 >>600
> おまいはどっちの味方なんだww
バカの見方ではないことは確実だなw >>601
それができたら「ソフトウェアの世界で生物を作れる」と考えてもいいことになり
オブジェクト指向の例えに犬猫を使ってもいいと思えるからだよ >>605
だからなんで、クラスの意味を教えるだけなのに、
生物を作らないといけないの?って話をしてるんだが
お前の理屈だとクラスの意味を教えるだけなのに
エンジンを作らないといけないってことになるんだが? ぶっちゃけ、オブジェクト指向だけで、
エンジンは作れないよ。
だってエンジンの材料は元をたどれば
全て神が作った物質だから >>606
???
何回も言ってるけど、おれが言ってるのはオブジェクト指向の例えで動物使うのって混乱の元だよね?って話だよ
車の例えは適当に言ったから、もっとわかりやすいのがあるかもしれないけど、有力なのが他に思いつかないから、生物を使わない例えの一例として言ってるのだよ。
実際、動物より車の例えのほうがいいでしょ。生物っていう作れないものを相手にしてないんだもん。諸悪の根源がなくなって明確だ 実装がすでにある生物やエンジンから、逆にOOPの設計を起こそうとしたって
意図を完全に掌握しなければ完全な設計はできないんだよ。
それが神であれ他人であれ。
エンジンならできる気になっているのは知識が薄っぺらいからに他ならない。
なので、いまあるものをOOPで表そうとしている時点で不可能なことに挑んでいる。
あくまで自分で設計し掌握しているものを記述するのがOOP。
ここをはき違えるとエンジンなら再現可能みたいな馬鹿なことを言い出す。 >>607
それは認めてるって。ソフトウェアの世界は全て実体がないんだから。 >>609
言ってる事がめちゃめちゃだよww
エンジンを設計したのは人間だ。
オブジェクト指向を使ってアプリを設計するのも人間だよ。
土俵は違うけど、これは設計できる(作れる)ってことじゃん。
おれが言ってるのは人間が作れないものを持ってくるなって話。 オブジェクト指向だけじゃネジすら作れない。
ネジのクラスか属性になるかは置いといてピッチ(ネジのギザギザ)の幅を
情報として持たせる必要があるだろう。でも単にM6(ネジ山の間隔が1.0mm)と
もたせた所で、ここから3Dプリンタでネジが作れるわけじゃない
3Dプリンタでネジを作ろうと思ったらCADデータが必要
そのデータはクラスの持ってる属性とはまったく別物になるだろう。
ピッチという情報もいらない。形情報があれば済むことだから
つまりオブジェクト指向でクラスに持たせるための情報というのは
現実のものを表現したものではなく、人が持ってる"概要"でしかない。
概要から実際のネジなどの物質が作れないの当然の話
だから動物の場合でも、DNAをクラスの中に持たせるっていうのは
CAD情報をクラスの中に持たせるのと同じで意味不明な理屈
動物の場合でも概要であれば、クラスに持たせられる。
クラスというのは、DNAやCADデータじゃないのだよ >>611
おまえエンジン自力で作れるつもりなの?
そこまで究極の馬鹿だったんか? >>613
「頑張れば作れる」と「頑張っても作れない」の違いは、大差がないとでも言いたいの? >>609
> 実際、動物より車の例えのほうがいいでしょ。生物っていう作れないものを相手にしてないんだもん。諸悪の根源がなくなって明確だ
なんで人間が作れるのかどうかが焦点になってるのか分からんのだが?
人間が作れようが作れまいが、それをソフトウェアで表現するのがクラスだよ。
あくまで表現。実際に作れって話じゃない。実際に作る話だとクラスからじゃ無生物も作れない
オブジェクト指向の設計というのは、すでにあるなにかをオブジェクト指向で表現すること
つまりオブジェクト指向よりも前に、表現したい何かはすでに存在しているということ
だから、人間が作るよりも前に存在している生物は「すでに存在している」ということを
満たしており、むしろ生物の種別をどのように分類するかという試行錯誤が
オブジェクト指向の設計の試行錯誤に近く、よりたとえとして適切
エンジンやネジなんかに例えると、お前がすでに勘違いしているように、このクラスから
実際にエンジンやネジを作れなければならないという話になって、すでにある物の表現ではなく
CADデータの作成の話になってしまう。クラスからエンジンやネジを作れないといけないという話になってしまう >>614
現時点で作れないだろ?
お前にとって、エンジンを完全に掌握した他人はエンジンに関しては神にも等しい存在だろ?
できる存在がいることと、お前がそれを設計できることを混同するなよ。
その意味で「大差はない」が答えだ。 あー馬鹿の相手は疲れるなぁ。
設計から生まれていないものを設計に帰することができるのは神だけだよ。 エンジンは経験から生まれたもので設計から生まれていない、ってのは常識。 あー馬鹿の相手は疲れるなぁ。
CADによる設計から生まれたものなら、CADによる設計に帰することができるんだよ
クラス設計ではなくCADの設計な こいつはCADの設計とクラスの設計をごっちゃにしてるってことでFAだなw まともに読んでないからこいつが誰なのかわからないけど、
喩え話が下手な奴に喩え話をさせてはいけない、ってのは
よくわかる。 >>616
プログラミングはものづくりだから、作りたいものがプログラミングによって作れるかどうかは大切だと思ってるんだけど違うの?
あと、実際に作れなんて話、俺してないからね!クソッタレが3Dプリンターとか言い出したせいで、流れがおかしくなったけど、今まで俺が話してきた「作る」って意味は「実体なき存在としてソフトウェアの世界に作る」って意味に決まってんじゃん。
クラスが表現って話は面白いので、もっと語ってくれ >現実の猫と区別がつかない猫をVRの世界で作れたら、
こんなことを言っている時点で何も理解していない感が。 >>627
なぜ何も理解していない感を感じるのか詳しく。
人を馬鹿にしたお前には答える義務がある。 >設計から生まれていないものを設計に帰することができるのは神だけだよ。
これが真理だろ >>624
> プログラミングはものづくりだから、作りたいものがプログラミングによって作れるかどうかは大切だと思ってるんだけど違うの?
その場合の「もの」とはソフトウェアであって、
現実にある物体ではありません。
> 「実体なき存在としてソフトウェアの世界に作る」って意味に決まってんじゃん。
え、なに? CADソフトを使ってエンジンやネジを設計するの?
それクラス設計じゃないよねw
クラス設計というのは、実体があろうがなかろうが人間が作ろうが神が作ろうかは関係なく
何かを人間が捉えている形に近い形で簡潔に表現しただけのものです。
人間が捉えられてるものなら、生き物だってクラス設計できます。 >>626
それは前提が間違ってるので的外れ。
クラス設計は、シミュレータではない
ネジのクラス設計は、CADでネジそのものを作ることではない >>627
VRなんて言ってんのCAD厨のお前だけじゃんw >>630
だからCADの話やめてくれない?言い出したの俺じゃないから な? 俺が最初にかいたとおりになったろ?
414 自分:仕様書無しさん[sage] 投稿日:2018/04/28(土) 19:37:19.66
>>413
有害なのはお前。
わかりやすく説明するために例え話を使ってるのに、
そこに生命を表すにはどうするんだと言い出すから
お前が混ぜっ返してる >>629
哲学的表現で煙に巻こうとしても逃げられないよ?w だからCADなんてひとこともいってねー!!!
もうおまえらばか!!ばか!!このわからずや!! >>634
じゃあお前はVRの話止めてくれない?
>>596の↓な
> 現実の猫と区別がつかない猫をVRの世界で作れたら、俺は負けを認める。 >>637
お前のレスの先頭から4文字目〜6文字目をよく見るといい。 >>638
いや、VRはいったよ。別に弁解もないよ >>637
CADの話になってるって自分で気づいてないのか?
現実のネジと区別がつかないネジをVRの世界で作るには
CADデータが無いと作れないだろ。
ネジという概念を表すだけのものを作るというのなら
それは犬や猫でもできることだ >>630しかまともな回答してくれないよ。
ちょっと疲れたから後で返信する >>641
一言も言っていないというから、そうではないことを示しただけだが?
謝れよ。 > 現実の猫と区別がつかない猫をVRの世界で作れたら、俺は負けを認める。
VRのサメとかあるけどなw >>644
> ネジはやめろといっただろ
なぜ? ネジは神が作ったものだからかい?w >>646
そのサメはどっちかっていうと遊園地のアトラクションとかのサメだろ。
本物のサメとは違う。人間が作ったものは全てカラクリなんだよ >>648
うるさいなww
ネジの話は、サブクラスが実体だみたいなこと言う奴がいたから、インスタンスが実体でしょ?っていうのをわかりやすく説明しようとして失敗しただけ。
もうネジの話はおしまい。 エンジンでも一緒だよな。現実の世界と区別がつかないエンジンを
VRの世界で作るなら、エンジンのCADデータと高度な物理演算機能を
搭載したシミュレータが必要
そこにVRゴーグルつけた俺がエンジンを手にして、
その重さと臭いを感じられるようにするには・・・
まだまだいろいろ足りないな。
で、クラス設計の話とはまったく違う話になったなw >>649
> そのサメはどっちかっていうと遊園地のアトラクションとかのサメだろ。
> 本物のサメとは違う。人間が作ったものは全てカラクリなんだよ
故に、人間が作ったエンジンはカラクリですね >>653
おや? だからクラスで生物もエンジンなどの人間が作ったものも
表現することはできないって話なんだが、
そうかやっと分かってくれたかw
そうだよな。生物だとDNAに相当するCADデータがないと
VRの世界で本物そっくりのものは作れないしな まとめ
生物を作るには生物の設計図であるDNA
機械を作るには機械の設計図であるCADデータ
が必要だが、
クラス設計というのは、それら実際にあるものを人間が
どう捉えているかを表現するものなので、
生物でも機械でもクラス設計を行うことはできる クラスを初心者にわかりやすく説明するなら、
身近な例である犬猫で表現したほうが良いってことだな >>651
もうつかれたよ。
現実世界にエンジンの生成マシンがあったら
ボタンを押せばエンジンは作れるよね?
これをプログラミングの世界に持ってくると
クラスはエンジン生成マシンと言えるし
実体を作るにはnewすればいい。
わかりやすいでしょ?
でも猫はどお?猫生成マシンなんて現実にはないし
newボタンを押して命を人間が創造するなんて聞いたこともない
だから猫を作ったときは、それは猫型ロボット、つまりドラえもんってことさ、うんこうんこ >>657
だから現実世界のシミュレータを作ろう!って
話なんかしてないんだって
仮想世界の猫は、仮想世界の猫生成ボタンで作れる
地面に魔法陣かいて、悪魔召喚することで悪魔を
newできる仮想世界で何を言ってるんだ? エンジン推しの言いたいことはわかる。共感はしないけど。
逆に、犬猫で理解できない奴は抽象化ができないってことで、オブジェクト指向に向いた考え方ができるかどうかのふるいになりそうだね。 >>658
その猫は猫型ロボットであり、猫ではない >>657
現実にはない猫生成マシンを
仮想世界には作ることができる。
現実に作れないものは仮想世界にも作れないという
思い込みをしてしまうから、その説明は害悪 >>661
なるほど、たしかに。
でも作れない動物を作れると思わせる例も同時に害悪だろう >>660
> その猫は猫型ロボットであり、猫ではない
当たり前でしょw
ソフトウェアで表現したものは猫でもネジでも
本物ではない。本物でなくていいんだよ?
本物でなければならないという思い込みを
してしまってるので、お前はすでに勘違いの
度合いが極限まで進んでしまってる >>662
> でも作れない動物を作れると思わせる例も同時に害悪だろう
テレビの中にいる人間は、本物だと思いこんでいる人?
変だな。誰もソフトウェアの中にいるネジが本物だと
思ってる人はいないはずだがw
お前、すでに頭がおかしくなってるよ
現実と想像の区別がつかなくなってるよ。 >>663
だって「オブジェクト指向は現実をそのままソフトウエアに表現する」とか意味わかんない解説よくされるし ツリーっていうデータ構造があるけど、図解するときは決まって頂点がルートで、リーフは下方向に広がっている
本物の木はそういう構造をしてないから、ツリーという名前もしくは図解の仕方は害悪
初心者の理解を妨げてる >>665
> だって「オブジェクト指向は現実をそのままソフトウエアに表現する」とか意味わかんない解説よくされるし
あ「表現」という言葉の意味がわかってないのね。
https://yuuma7.com/ラリベラの岩窟教会群を歩いて観光してみた感想/
> ゴルゴタ聖堂(ベテ・ゴルゴタ)
> ラリベラ王の墓所だったともいわれるのがゴルゴタ聖堂だ。その名の通り、
> イエス・キリストが処刑された地を想って造られた教会で、
> 角ばった建造物には形の違う窓が3つあり「三位一体」を、
> bュりぬかれたクャ鴻Xは「キリスャg」を表現してb「る。
はい、くりぬかれたクロスは「キリスト」を表現していますが、
くりぬかれたクロスは「キリスト」なのでしょうか?
違いますね。「表現」とは本物でも本物を再現することでもありません。
「表現」しているだけです。 >>670
ソフトウェア自体が実態の出さないものだから全て表現だわな >>667
作業の都合上の理由で上下が逆になってるだけで同じ構造では? >クラスは分類であって拡張じゃない
犬猫モデルの犠牲者がここにも クラスは類なんだよなぁ
インスタンスはクラスを拡張してるわけじゃないんだよなぁ >>676
文脈次第
ネコ型ロボットをプログラム中でどう扱いたいかによる
そういう質問が出てくるのはオブジェクト指向を理解できていない証拠 >>675
クラスはクラスやな
バカはホンマに例えが好きなんやなあw クラスがわからない人への説明で、クラスはクラスで終わってどうするw
前提が分かってない >>681
未知の概念は何かに例えて理解できるものではないんやなあw
バカは例えで曲解するけどw 頭で考えて理解出来るものでもないな
ある日突然悟るものだし > 未知の概念は何かに例えて理解できるものではないんやなあw
理解できるだろ?
何を言ってるんだろうか? >>680
それ以上説明できないってのは
内容を正しく理解できていないって事。 元彼がなんというかものの例えが
理解出来ない人だった。
具体的に言うと
福山雅治のスコールという歌が私は好きでよく聞いてたんだけど
その歌が
「汗をかいたアイスティーと
取りすぎたポラロイド写真」
って歌詞から始まるんだけど元彼が聞くたびに
「アイスティーが汗かくわけないじゃんwwwwww」と失笑する。
最初はスルーしてたけどあまりにも
何度も言うからくどいなと思って
いや、机に置いてあるアイスティーの氷が溶ける程長くその場にいたとか
夏の暑さの表現でしょ。と言っても
「でもアイスティーは無機物だから汗かかないから日本語おかしいじゃん?」
とこちらをバカにしたように言ってきたり、その他にも歌詞とか宣伝の
「まるで〇〇のような〜」とか「××みたいな〜」とかの例え話に
「いや、でもそれは〇〇とか××とは違うじゃん。俺現実主義者だから」
と真顔で言い始めたので
この人本当に例え話が理解出来てないんだ、と思ったら冷めた。
現実主義者とは全く意味が違うのにそれも理解してなかった。 >>684
そら例えは理解できるやろwそれを曲解と言うとるんやなあw >>686
よく見たらおまえ例えもわかっとらんやんw 自分にとってデメリットしか無いのに
なぜ素直に受け取らないで曲解するの?
もしかして「曲解」の意味もわかってない?
「表現」の意味も知らなかった人と同じかな
> きょっ‐かい〔キヨク‐〕【曲解】
>
> [名](スル)物事や相手の言動などを素直に受け取らないで、ねじまげて解釈すること。 >>690
なんやwあまりにもおまえらっぽすぎてガチやと思ったわw >>691
こんなものに引っかかったのか
マヌケだな >>692
でもおまえも例えすらわかっとらんのやろw >>694
なんでこのタイミングでいきなり命令口調やねんwそもそもがアホやんおまえw 例え話の効果はかなり高いからなぁ
多分うまいたとえ話に嫉妬してるんやろう クラスを犬や猫に例えるのは
わかりやすいし確かに良い例えだよね 犬やネコを見たことない人には不適切だな
やはり食い物がいいよ モデリングの意味も知らない奴が「例え話」とか言って誤魔化すから余計意味不明になる。 >>699
ある人が考えた設計が、生物学的に正しい必要はないわけで、
トカゲクラスが犬クラスの派生でも、別に構わないんだけどね。
納得させられるだけの理由があれば。
Personクラスを設計した時に、親クラスに猿人クラスを
設計しないだろ?設計で問われるのは主体がなんなのかということだ。 >>702
お前のモデリングセンスどうなってんの?
なんでPersonを抽象化したら猿人になんの? >>703
なんでPersonを抽象化したら猿人になんの?なんて言ったの? ほらね、こう言う事が起きるから生物は使うべきじゃないんだよ 自動車とか言いだしたから猿人が出てきたんだろう。。。 なんや結局おまえら形を変えた美少女うんこ問題をやりたいだけなんやろw
素直になれやw >>706
> ほらね、こう言う事が起きるから生物は使うべきじゃないんだよ
は? Personクラスを設計した時に、親クラスに猿人クラスを
設計しないだろ?
当たり前過ぎて、親クラスに猿人クラスを設計しないだろ?
このように間違った設計をしないから、
生物を使ったほうがわかりやすいって話なんだが。
なんでオマエは勘違いしたの?
それはオマエの頭の問題だよね?
そうかオマエは親クラスを猿人クラスにするんだーw でもこの恥ずかしい間違いのおかげで>>702は学ぶことができた
だが俺はなにも得ていない
もうこのスレで時間を無駄にするのはやめるわ
じゃあの >>自動車の基底クラスは馬車
これが正しい認識
>>自動車の基底クラスは車両
は間違った認識 自動車の基底クラスは馬車
自動車の基底クラスは車両
こういう間違った解釈をするから
自動車はたとえとして不適切なんだよな ここは底辺連中が程度の低いところでお互いにマウント取り合おうとしてるスレですね >>715
美少女とは違うが、
>アイドルの基底クラスは人間
これを誤りだと主張する奴は少なからず居る >>718
それはアイドルが人間かどうかじゃなくて
アイドルはクラスとすべきかって話だよ
ゲームのジョブみたいに一つしか選べないならクラスで良いかもしれないけど
現実には、アイドル 兼 農家 兼 ロリコン という職業もあるわけだし
まあ多重継承するって手もあるけどさ 自転車と自動車があるだろ、どっちもタイヤがあるだろそれならこれを抽象化して呼び出したときに画像だけ変えてコード量を減らそうとかな
共有できる処理は基本クラスにして継承してから独自のはここで書き足せば綺麗に楽にするということ >>720
ゲームならそれでいいが、俺達が住んでるのはゲームの世界じゃない
現実世界だ。現実世界で自転車と自動車で共通する処理なんて無いぞ。
自転車と自動車の違いは画像だけじゃないからな
現実世界と同じように表現できるのがオブジェクト指向だろう オブジェクト指向って現実世界を表現できるの?
すげー >>719
全然違う
うんこをしないのに排便メゾットを持つべきかって話だよ >>725
おれにはずっと美少女うんこ問題をあつかっとる様にしか見えんがw だから、キャットドア課題をなんとかしろよ、お前らは。 ほらな。他のたとえを使うと>>726-727のような意味不明な展開になる。
クラスは犬猫で例えたほうが判り易いやろ? >>728
いや全然。
プロセス指向からの切り替えだって事説明出来ないまま、犬猫とか出しても有害なだけ。 じゃー、説明すればいいだけじゃないですかねー、またわかりやすい例えでー オブジェクト指向の話をすると、なんで継承の話がメインなんの? 継承って密結合になるからフレームワーク使う側なら継承あんま使わなくね? オブジェクト指向の本質はオブジェクト同士が協調し合って事を成し遂げるところにあるのであって、継承って二の次三の次だろ 継承が話題になるのは、有効活用するのが難しいからでしょうね
データとそれに対する操作をオブジェクトとしてまとめるというのは、誰にでも理解できるから >>735
そうそう、もともとはオブジェクトがメッセージをやり取りし合うって概念だしね。
究極を求めるとErlangこそが真のオブジェクト指向であるという噂だし。 >>736
継承で注意が必要なのは、diamond継承などの矛盾解決や、継承のonoffコントロールの癖だね。
言語によっては、継承に似た別機構で問題を回避してるものもある(Rubyのmixinなど)。 >>737
実装はそのとおりだけど、更に何故オブジェクト指向が必要になったかと言うと、理由の一つは「システム稼働中の動的入替え」を出来るようにしたかったから。
Erlangは、連続運転の世界規模通信システムを想定していたので、動的入替えの仕掛けを標準で持っている。 最初の頃は、継承をどんどんしろ、
だったのが、今は、継承を使うな、
がセオリーだったか?
やれと言われたり、やるなと言われることが変わりすぎて
わけ分からなくなってるのがオブジェクト指向。 >>740
そんなセオリー有ったかな?
バズワードで購読数稼ごうとしてる孫引き解説記事ではそういう文言見たことあるけど。
継承がどの程度必要かが事前にわかるのは、ルーチンワークを機械化するときくらい。
今時のプロジェクトは大抵は、途中で構成の見直しが必要になる。
なので、継承の構造自体を変える訳だが、期待通りに変わったかどうかのチェックは自動テストで確認するってのが多い。 > 今時のプロジェクトは大抵は、途中で構成の見直しが必要になる。
> なので、継承の構造自体を変える訳だが、
意味不明 web業界が一番進んでるからね。
最新の手法が採用されるのはweb業界 >>742
ルーチンワークの機械化で済む仕事は減ってきてるからね。
ここ20年くらいのコンピュータ利用ってのは、OA化。
つまり過去数世紀に渡ってやってきた事務作業の機械化だった訳だが、それもほぼ一巡してしまった。
新しい事を試みようとすると、「やってみるまではよく分からない」部分が多いので、ある意味割り切って、途中で構成変更出来るように考えておく。 どんな仕事でもある程度はやってみなければわからない部分があるが、アホほど見通せる範囲が狭い
不確実性を言い訳にちんたらやってる奴は、少しでも遠くを見渡せるようにスキルアップしてほしい 見通せるって豪語してる連中はよくいるけど、見通した気になってるだけの奴が大半 不確実性うんぬん言ってる奴はよくいるけど、大して新規性もないのに応用力のなさゆえに
新しい問題に見えてしまってるだけの奴が大半 まあ俺は20年前にインターネット時代が来ることも
10年前にスマホ時代が来ることも予想していたし、
10年後がどうなっているかも確実に見通してる 見渡せる見渡せないは重要じゃなくて
見渡せない部分があることを素直に認めて対応する余地を確保することが重要
これができてない人は仮に全部見渡せていても論外 >>751
こういうカン違いが最悪
ビジネスは常に変化する
それはシステム開発中にでもだ >>745
継承の構造自体を変えるってのがわからんので具体例教えて >>753
聞くんなら、自分のコンテキスト教えたほうが良くね?
例えば趣味なのか、仕事なのか、計算モデルは何なのかとか。
俺はDDDに関心あるから、その前提で責務分担の見直し方法に関心がある。 >>752
ピープルウェアとかデッド・ラインに出てくる「プロジェクトをダメにする自称管理者の勘違い」だもんなあ・・・ エンジンと車の解説は、継承なんて使わないよ!コンポジションを使うんだよ!という隠れた意図がある。
だからエンジンと車の例えがイケてるってわけさ >>760
なるほど、先に継承はなにかが分かってないと
いけないってことだな まあ、処理なんかどこに書いたって見積りは変わんないけどね >>760
そういう喩えでは、
「コンポーネント分ければCで問題なく組めるけど?」
と言う疑問に対して優位性が解りづらい。 >>761
もちろんそうなるさ
だけど犬猫を使って継承を説明するとワナにかかるから
生物を使わないで継承を説明すればいいってこと。
いろんな種類のエンジンがあって、好きなのを車に搭載できる。スーパークラスってのはその様々なエンジンに共通するインターフェースなんだよ。
って説明するだけで良くない?たしかにマニアックかもしれないけど、もしそうならiPhoneケースでもいいし。
バッテリーを拡張できるスマホケースとか、裏にリングが付いてて持ちやすいケースとかいろいろあるでしょ?
でもiPhoneケースはAndroidスマホには搭載できない。
スーパークラスってのは、iPhoneケースのカメラ部分に穴が空いているといったiPhoneケースの共通点を抽出した規格のことを言うんだ。
もちろんソフトウェアの世界に形はないから、その共通点は機能や役割として抽象化されるんだ。
でわかるじゃん >>765
それだとインターフェースの説明にしかならないよな
継承そのものではなく、その利用のしかたのひとつ 何処で覚えなさったら知りませんが、
動的入れ替えはOOPとは関係ありません。 > いろんな種類のエンジンがあって、好きなのを車に搭載できる。
搭載できないよ。車ごとに搭載できるエンジンは決まってる 同じエンジンに交換した場合は問題ないけど
違うエンジンに変更した場合は、そのままでは車検が通らない
違うエンジンに変更することをエンジンスワップという
エンジンスワップした場合は構造変更申請が必要 横型エンジンには大きく分けて6V系と12V系に大別できます。
6V系はさらに分かれますが、これらの系統間では大きな変更があり、オイ
ルポンプ、クランクシャフト、ピストン、ミッション、キックギアなどが
異なっており、流用は困難か、加工が必要です。
また、同じベンリー(CD)の12Vでも、50ccと90ccではクランクシャフ
ト、ヘッド、ミッション、クラッチが異なっており、流用の際には注意が
必要です。
12V系の機種間の互換性も、モンキー・ゴリラのリターン式、ベンリー
(CD)のロータリーになりますので、この点でも問題になります。
エンジンまるごとの載せかえでは、12Vではモンキー、ゴリラ、カブ、ベ
ンリー(CD)間では可能ですが、マグナについてはできません。
また、その場合でも左クランクケースカバーが違いますので、モンキーに
ベンリー(CD)のエンジンを載せる場合は加工が必要です。 同じ駆動方式同士でのスワップは比較的簡単(!?)にエンジン換装は出来ますね。
数年前だとS13シルビアに13B搭載やR31タイプMにVG30搭載などは
エンジンスワップが得意なチューニングショップでは結構ありましたね。
1G搭載車には7Mも比較的加工も少なくスワップ出来ます。
データとノウハウを持ってるお店もいくつかありますしね。
大昔で言えばマツダシャンテ(360ccの軽自動車)に12Aターボぶち込みとか・・
(そんな事考えるのはひとりだけだけど・・・笑)
で 駆動方式の違う物同士でのスワップは無理に近いでしょう。
それこそ新しく作り変えるくらいの作業が必要でしょう。
エンジンのマウントはなんとかなったとしてもそこから先が
かなりな作業になるでしょうね。
それこそ車一台買える以上の金額が必要になるかと・・・。
と いう事で#3のおっしゃってる86系のスワップ以外は一般的な作業ではないですね。 OOPに限らず
ソフト業界って妙な例え用語が多くて
「そのプロセスをキルするんだよ」
とか傍で聴いている一般人はビックリするよね
妙な例えしないほうが解りやすいな エンジンや自動車に例えるのは
詳しい人でないとピンと来ないってところなんだよね >>772
例えじゃないし一般人もビックリしませんが オブジェクト指向は言語に制限されないんだから、ここでCがどうのC#がどうの言うのってスレ違いだよね? >>773
じゃあ今後はiPhoneとiPhoneケースでよろしく iPhone8を継承して作られたiPhoneXは
大きさも違って、iPhone8用ケースが使えなくなる
こんな感じかな プログラマって、たとえ話で説明すると必ずたとえ話の重箱隅を突き始めるバカが湧いてくるよな
会話のエッセンスを抽出して理解、発展させる事ができないのかね >>778
そうそう
大切なのはアイディアを出し合って
よりベターな例えを見つけることだ
車とエンジンが例えとしてイケてないのは事実だし
プログラミングの世界に想像できない生物を持ってくる事がイケてないのも事実。
じゃあ、生物を使わないでわかりやすい例えはなんだろう?
それを俺たちでみつければいいのさ >>778
> プログラマって、たとえ話で説明すると必ずたとえ話の重箱隅を突き始めるバカが湧いてくるよな
な?俺が最初に言ったとおりだろ
414 名前:仕様書無しさん[sage] 投稿日:2018/04/28(土) 19:37:19.66
>>413
有害なのはお前。
わかりやすく説明するために例え話を使ってるのに、
そこに生命を表すにはどうするんだと言い出すから
お前が混ぜっ返してる 例えなきゃならないのは、具体的な案件が諸事情で出せないからだけどな。
社内じゃ例えなんか使わないでダイレクトに案件固有の状況で話すから。 >>782
あのー、オブジェクト指向が分かってない人への
オブジェクト指向の説明の話なんですけど? >>781
お前そのコピペ大好きだなほんと
初心者にはイメージが大切なんだ。
で、プログラムの世界をイメージするのに最適な世界って
ゲームの世界だよな。
そしてプログラミングで大事なのはモジュールという概念だ。
んで、オブジェクト指向では、クラスでモジュールを作成する。
モジュールってのは初心者にわかりやすく説明するならパーツやマシンのことだろう?
そしてそのパーツやマシンを組み合わせて、プログラマが作りたいものを作れるのがプログラミングでありオブジェクト指向じゃないか。
レースゲームでタイヤ変えたりするのが、オブジェクト指向のイメージにぴったりだと思うのは何か間違ってんの?? >>783,784
ところでおまえら自身がわかってないのに
どうしてわかってない人への説明などという無謀な挑戦をするのや? >>784
お前なにか勘違いしてないか?
犬猫に例えるのが駄目だって言ってるんだよ。
レースゲームがどうとかいう話はしていない >>789
話を次のステップに進めたいんだよ俺は
犬猫がダメな理由は犬猫が生物だからだろう?
その次の話をしたいの。生物を使わないわかりやすい例えはなんだろうねって > 犬猫がダメな理由は犬猫が生物だからだろう?
理由になってない 犬猫が良い理由も犬猫が生物だからなんだけどね
生物であるがゆえに、最初に構造を自分で考える必要がない
なにも知らないで自分で考えるよりも
最初にあるものを例にしたほうがわかりやすいから 哺乳類という分類をどんなに拡張しても猫にならない
なので犬猫モデルはダメダメ >>793
> 哺乳類という分類をどんなに拡張しても猫にならない
なるぞ? エンジンという分類をどんなに拡張しても
ディーゼルエンジンにはならない >>784
スーパークラスは規格なんだよ。お家のコンセントが、家によってバラバラだったら家電使えないでしょ?
タイヤにもコンセントみたいな規格があって、その規格にあわせていろんなタイヤを作るから
タイヤが交換できるんだよ。
で、説明可能(ドヤッ OOPがモデリングの世界という事を理解してない奴が多いな
犬猫クラスは簡略化された犬猫のモデルであって厳密な犬猫の定義ではない
なので現実の犬猫はああだこうだと細かく指摘するのは無意味 >>797
でもコンセントの形は各国でバラバラだぞ >>795
哺乳類のダメなところは規格きよる分類として
プログラミングと相性が悪いところなんだよ
哺乳類の規格なんて答えられるやついるか??反面、乾電池の規格はわかりやすいし、
その規格に適応させることで連携稼働するという結果も見られる。 >>801
> 哺乳類の規格なんて答えられるやついるか??
哺乳類にあるのは規格じゃなくて性質ですが? >>800
そこで、アダプターパターンの説明すれば
オオッ!なるほどデザインパターン大事ですね!ってもっと良いじゃん >>803
だからダメなんじゃん。
プログラミングは性質なんて曖昧なもんで繋がってない。 「オブジェクト指向の説明に生物は不適切!だからUserクラスとか定義したらダメ!」 > 乾電池の規格はわかりやすいし、
あ、はい
http://www.geocities.jp/r_oda42/main_denti.html
電池系記号 電池の通称 公称電圧
なし マ ン ガ ン 乾 電 池 1.5V
B フッ化黒鉛 リチウム電池 3.0V
C 二酸化マンガンリチウム電池 3.0V
G 酸 化 銅 リチウム 電 池 1.5V
E 塩化チオニルリチウム電池 3.6V
L ア ル カ リ 乾 電 池 1.5V
P 空 気 亜 鉛 電 池 1.4V
S 酸 化 銀 電 池 1.55V
H ニッケル水素電池(二次) 1.2V
K ニ カ ド 電 池 (二次) 1.2V
Z ニ ッ ケ ル 系 電 池 1.5V
M , N 水 銀 電 池 1.35V
米国の通称 IEC/JIS 日本の通称 旧JIS 直径 o 高さ o
D R20 単1 UM-1 34.2 61.5
C R14 単2 UM-2 26.2 50.0
AA R6 単3 UM-3 14.5 50.5
AAA R03 単4 UM-4 10.5 44.5
N R1 単5 UM-5 12.0 30.2 >>805
> プログラミングは性質なんて曖昧なもんで繋がってない。
性質が駄目なら属性でもいいけど? >>807
おまえ乾電池使ってる人が全てその認識あるとおもってんの?
もしそうおもってないなら乾電池がわかりやすく使いやすい証明になるんだけど >>809
> おまえ乾電池使ってる人が全てその認識あるとおもってんの?
だからだめなんだよね。
身近な例じゃないから分かりづらい >>810
混乱する人にはまだ早いだけでしょ
アダプターパターンを理解するのにこれ以上わかりやすい説明あったら教えてよww
できるなら動物使って説明してみてよwww やっぱりわかりやすい
https://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak3/S3-3-1.html
分類概念の上下関係にもとづいてクラスの継承をきちんと作成していくと、「実際にはインスタンスを作成する必要のないクラス」が存在することになります。
例えば、ペットブリーダーを支援するアプリケーションを作成していたと考えてみましょう。様々な動物をプログラム上管理する必要があるため、
哺乳類
犬
柴犬
チワワ
コリー
猫
…
といった形でクラスを定義していたとします。
実際に、ペットブリーダーが育てるのは、「(芝犬の)ポチ」や「(コリーの)ラッシー」です。この場合に、「哺乳類」
「犬」「猫」といったクラスは、主として分類の適切な階層を形成するために存在し、実際のインスタンスは
作成しないことになります。(なんだかよくわからない「哺乳類のインスタンス」をペットブリーダーが対象にすることはありえません)。
こうしたクラスを抽象クラスと呼びます。抽象クラスの「抽象」とは、決して「具体的なインスタンスが作成されない」
という意味になります。(これに対し、実際にインスタンスが作成されるクラスを「具象クラス」とよぶ場合があります)。
ただし、抽象クラスの持つ「属性の定義」、「操作の定義」、「操作の実装」は依然としてサブクラスで継承され、利用されることになります。
例えば「哺乳類」には、「平均体温」といった属性の定義を行っておくことができ、「犬」には「お手
」「おすわり」といった操作の定義、実装をすることができます。
抽象クラスは分類の概念をきちんと整理するのに役立ち、また、継承によるコードの再利用も促進します。 >>812
> アダプターパターンを理解するのにこれ以上わかりやすい説明あったら教えてよww
だからそうじゃなくてい、今はオブジェクト指向が分かってない人向けの説明
小学生にいきなり高等数学お教えても理解できないんだよ そうだな。クラスとかインスタンスとか分かってないレベルの人には
犬猫で例えたほうがわかりやすいだろう。 >>806
大切なのはエンジニアがプログラムの世界に生物はいないって認識を持つこと。
そしたらUserクラスを作っても、これはUser自体を指すのではなく
アプリケーションがもつユーザに関するデータや機能がある装置(パーツ)なんだって正しい認識ができるじゃん > 大切なのはエンジニアがプログラムの世界に生物はいないって認識を持つこと。
な? いきなりプログラムの世界という馴染みのない世界での話をする
それじゃ、分かってない人は理解できないよ 重要なのは相手の立場になって考えること。
プログラムの世界にいない人はいるが
現実世界であれば誰でもいる
その現実世界で例えるから理解しやすい >>815
かもしれない。
けど、クラスを作れるようになったら犬猫の概念が邪魔になるから忘れろ!っていうのもおかしな話だ >>817
はいはい
ゲームの世界ならわかるでしょ 乾電池といっても場面によって様々だ
オンラインショップでは特別なクラスでは無く単に商品クラスの1インスタンスになるだろう
商品説明プロパティに通称や規格といった情報がドキュメントとして含まれるかもしれないがそれが振る舞いに影響することはない
中高生向け教材用の回路シミュレーターでは電圧など簡略化された物理特性が定義されていれば十分で規格や通称などは無視されるだろう
この場合の乾電池クラスは素子クラスを継承しているかもしれない
乾電池の現実的なあらゆる側面を考慮してクラス化しようとするから無理が生じる
乾電池クラスはあくまで簡略化されたモデルでしかないのでリアルな乾電池の全てを正確に表現する意味はどこにもない >>819
じゃまにはならんよw
>>820
> ゲームの世界ならわかるでしょ
ゲームの世界の犬や猫ってことですね! >>822
いや、なってるよ!
継承よりコンポジションやDIが大切なのに
それが行われずに何でもかんでも共通機能は
全部親クラスに定義して神クラスが出来上がるのは犬猫のせいだろ!
犬の臓器をコンストラクタで代入するなんて発想、初心者には意味不明すぎ。だから神クラスができる。 >>793
オブジェクト指向を理解してから発言したほうがいい >>823
ほんと理解できないやつだなw
分かってない人向けの説明だって言ってるだろ
まず犬猫で継承を理解してからだって
コンポジションやDIなんてオブジェクト指向に必須のものではない >>814
深掘りする質問されたらレベルが深くなるのは当たり前なんですけど。バカなの? >>825
コンポジションが必要じゃないわけないだろ
お前のクラスのフィールドは全部プリミティブ型なのか >>825
こいつはオブジェクト指向を理解したつもりになってます 初心者には継承より先にコンポジションを説明するべきだと思うほど重要だろう 継承を知らない人に継承は良くないですよって
言っても理解できない どんなことでも基本が大事
オブジェクト指向の機能はクラスと継承だ 継承は重要な概念だが重要な機能ではない
重要な概念かつ重要な機能であるインターフェースを学ばせるほうが有益 あ、先に言っておくとインターフェースって、スーパークラスとinterfaceの両方を含む意味のことね!
ポリモーフィズム的視点から見たらどっちもインターフェースだから 継承は基本だからオブジェクト指向しっていて知らないのは潜りだぞ 結局、犬猫がだめな理由が出てないんだよね。
生物だからだめだー。ただこれだけ >>841
それがどうかしたの?
構造体使えばいいのに何でも配列を使うのは
配列を教えたせいだ!って言ってるようにしか見えないなぁw >>833
インターフェースは、継承の概念に基づいた実装の一つ。
多分、抽象クラスの話題と混同してる。
というか、作ったインターフェースを継承しないの?何故気付かないのか。。。 >>844
インターフェースは契約の集合であって継承とは異なる概念だけどまあ言ってもわからんだろうね >>845
C++で多重継承してひどい目にあったことがある。
いろいろおもったことはあったけど、そこから学んだことは「多重継承はアンチパターン」ってことと「インターフェースであれば多重継承問題が起こらない」ということだった。
詳しいみたいなので聞きたいんだが、これ以外にツッコミどことか知っておくべきことってある? 多重継承は使うな、
ってのは今じゃなくても
オブジェクト指向が流行りだした
かなり初期の頃から言われてたじゃん。 >>847
多重継承がよく使われるっていうのは、インターフェースの多重継承ではなくて? インターフェースっていろんな意味で使うから、こういう議論では混乱する Objective-C等のプロトコル(Swiftにも受け継がれた)やその影響で作られたJava等のインターフェイスは
クラスの継承を安易にデータ型の派生に流用したことで生じた問題を
両者を分離することで解決しようとした試みの一つだよ ふむ、JavaのinterfaceやC++の実装を持たないクラスであれば
多重継承しても複雑化問題は起こらないという認識で間違っていなかったようだ。
そもそも継承自体ほとんど使わないからな。
既存のモジュールはそのまま使うことが多い。オーバーライドして拡張したことなんてほとんどの人が無いのでは?
また、その必要があるときは継承するのではなくコンポジションを使うしね。
ちょっと前にも話があったけど、画像が変わるだけで継承することもないし。
ゲームの場合はEnemyクラスを継承したいろんな敵を作ったりするかもだけど、その場合でさえ不要なことがありえる。
ほとんどの場合、継承が必要なのはロジックの差し替えだから、簡易的なスクリプトの利用が許されるなら、ロジックすらDI可能になるしね。
つまり、継承はオブジェクト指向の基本だが、その利用は分野によってほとんどの場合限られるというわけさ つまりまとめると、オブジェクト指向には色々な概念があるけれど
オブジェクト指向に踊らされないために心がけるべきことはDIとコンポジション、そしてインターフェースに対してプログラミングするという、この3点なのだよ。
もちろんデザインパターンとかMVCとかも重要だけど、継承に騙されて神クラス地獄に落ちることを回避することが大切で
その回避の第一歩となるのがコンポジションなのさ ごめん、DIと、コンポジションはほとんど同じ意味だった。
依存性注入(DI)と、疎結合(ポリモーフィズムなど)と、モデリングの3点に訂正させてくれ 例えば…
数値型の金額と、enumの通貨記号の二つの変数で「金額」を表現しているプログラムがあったとする。
・馬鹿な新人が、JPY+USDとかしてた
・お客に頭を下げたり休出してデータメンテしなければならない事が良くあった
これをイミュータブルな「金額クラス」にした
・加算減算メソッドは、同じ通貨記号を持つ金額インスタンスとだけ足し算可能
・乗算除算メソッドは、ただの数値(QTYとか税率とか利率とか)と掛け算が可能
これによって
・馬鹿な新人の、HKD+EURを止められるようになった(例外は出るけど、データの破壊は防げる)
・ソースコードに学習効果が生まれて、そのうち新人の知性がちょっとだけ増えた
・ムカつく客に頭下げずに済むし、休日のんびりシコれてハッピー
こんな感じで「目的」にフォーカスしてクラスという単位に切り出す事によって、複雑さを下げて物事を理解しやすくする。
…てのが、オブジェクト指向の一つの側面なのかなーと思ってる
DIとか多態性とかデザインパターンは、難しすぎて俺には手に負えない >>855
それはただ単に計算をカプセル化しただけで
オブジェクト指向でなくてもできるのでは?
DIとか多態性とかって聞くと拒否感あるかもしれないけど
DIは「そのクラスで使いたい機能はnewするときにコンストラクタに渡して使おうぜ!」って話だし
多態性は「抽象(インターフェース)に対してプログラミングしたら、そのコードは流用性あるよね」ってだけのことさ ウィキペにも(そうとはわかりにくく)書いてあるけど、オブジェクト指向には
あらゆる局面での遅延結合性を重要視する「メッセージング」のオブジェクト指向
http://metatoys.org/oxymoron/oxymoron.html
と、ユーザー定義のデータ型をクラス(あるいはインターフェイス等それに準ずる言語機能)で実現する
「抽象データ型」のオブジェクト指向がある
http://www.stroustrup.com/whatis.pdf
端的には前者は「オブジェクトにメッセージを送って…」、後者は「カプセル化、継承、多態性」がお題目のやつ
継承がどうこういうのは後者の問題で、前者ではデータ型自体を意識することがないので
(Smalltalkなどの前者寄りに作られた言語で後者を部分的に実践する場合を除き)
ほとんど問題にならない
両者の考え方を完全に分離できたなら現在のような混乱は生じていないのだけれども
本来後者で完結されるべきオブジェクト指向設計や分析の提唱者の多くが
Smalltalkなど前者に重きを置く言語のシンパでもあったりして前者の要素を含ませてしまったため
いろいろと面倒なことになって久しい まあ、何だかんだ言ってるが、まともに動かない設計して最後はいつもパッチワークして貫通トンネル工事するんだろ? で、下手に隠蔽しちまって、参照出来ねーとか完全に設計ミスな実装しやがる奴の多い事…。 >>856
> DIは「そのクラスで使いたい機能はnewするときにコンストラクタに渡して使おうぜ!」って話だし
AとBというクラスがあってAがBを使う
その時Bの内部実装について、Aはまったく知らないのがいいはずなんだが、
newするときコンストラクタに渡すってことは、Bが内部で使うクラス全てに依存するってことか
ひどい実装だなw
class A {
foo() {
b = new B(new File)
b.run()
}
}
Bが内部でファイル読み書きに加えとあるライブラリを使うようになったので
Aを修正してください。
class A {
foo() {
b = new B(new File, new Hoge)
b.run()
}
} コンストラクタの後に初期化じゃダメなん?
つうか、コンストラクタに色々詰め込んだらダメっしょ? >>862
そのとおり
君のような賢いプログラマはDIなんて使わなくていいぞ全くもって同意だ
結論がでたからこの話はここで終わりにしよう
バイバイ DIだと日付クラスを使いたい時、
中でnewしないで、外部から渡してもらう >>862
内部でnewしてどうすんねん
依存性注入してくれ >>866
それって当たり前じゃね?
中でnewって、今の日付けしか取得出来なくね?
値渡すのが目的なんだから、値設定して渡すんだろ? >>869
その当たり前が>>862のようにできない人が多いのさ
だからスーパークラスに共通機能を実装しだして
神クラスのスパゲティになる DIで粗結合にするのって、オブジェクト指向がどうこうじゃなくて、ユニットテストのために(仕方なく)やるのが
ほとんどなので、スレのテーマとはちょっと違うかなー >>871
それよく言われるけど絶対間違ってる
ユニットテストとはまた別の話 日付は値なので注入しない
注入するのはカレンダーとか現在時刻プロバイダー >>869
さあね。どう当たり前なんだろうね。
例えば言語によってはIntegerもクラスだったりする
関数もクラスだったりする >>871
solidについて調査してレポートして
弊社だと新人研修で叩き込むことだけど
業界を見渡すとsolidすら知らん素人が紛れ込んでるんだよな
あの会社は教育体制大丈夫なのかなと他人事ながら心配になる >>874
IntegerとかStringのような低レベルなクラスは
疎結合とか気にしなくていい >>872
じゃあ日付オブジェクトを外部から渡すことによるテスト容易性以外の実利ってなによ
日付オブジェクトをあとから同一インターフェースの別実装に変えたりしないっしょ >>876
いや気にしろ
注入する必要はないが必ずValueObjectでラップしろ >>879
じゃあ現在時刻プロバイダをDIするテスト容易性以外の実利でもいいよ >>857
メッセージングオブジェクト指向と
抽象データ型オブジェクト思考の違いがよくわからなかったんだけど
動的型付けか静的型付けかで分類されてるってこと? >>880
俺らが業務で扱うような文字列ってのは全て単純な文字列じゃない
例えばあるシステム上に注文番号という概念があるとして
この注文番号は文字列表現を持つかもしれないが文字列そのものではない
だから注文番号を扱うクライアントが注文番号ではなく文字列に直接依存してはならない
注文番号というValueObjectを通じて文字列との結合を排除しなければならない >>882
タイヤやエンジンの車の話じゃダメなん?
レースゲームでカスタマイズするときにタイヤやエンジンを依存性注入して車を作れば
いろんな組み合わせの車が作れるじゃん >>884
ああ、そういうことね
文字列をそのまま使うな、モデリングしてから使えと。 そう言う型のデータクラスを扱うって話と、データ自身を自ら生成するのかって話がごっちゃになってるだけ。 >>863
別にプロパティにインジェクションしたりしてもいいし
単にLazy使えばいい場合も >>882
・クライアントは現在時刻プロバイダが現在時刻を供給するということだけを知っていればいい
クライアントは現在時刻の定義などを気にしなくてよくなり本来の仕事に集中できる
・クライアントに現在時刻を供給したり自給自足する責任が無いことを依存性として明示することにより可読性・保守性が向上する
・クライアントと現在時刻を取得する具体的な実装を分離したことによって
現在時刻を取得する方法を容易に切り替えることができる >>877
サーバーの時刻とユーザーから見える(見たい)時刻の標準時が違う場合 >>863
DIを使うとむしろコンストラクタはシンプルになる
ほとんどの場合ヌルチェックとフィールドへの代入だけでよい
色々やる必要がある場合はFactoryが代行する
コンストラクタの後に初期化する方法もある
プロパティインジェクションやメソッドインジェクションと呼ばれる
ただしこれらの方法はオブジェクトが不完全な状態を一時的に許すことになる
なので神経質なプログラマはコンストラクタインジェクションを好むようだ >>889
1つめと2つめ
クライアントは使用するオブジェクトの実装に依存しないというオブジェクト指向一般の話であって
DIを説明してるわけじゃないっしょ
3つめ
実際にそれやるのって、現実的にはユニットテストのためだけであることがほとんど >>892
日本向けのアプリしか考えたことのない人 >>890
あるモジュールがそのロジックの中で使ってる現在時刻プロバイダが、サーバー時刻を提供するものであったり
ユーザー向けの時刻を提供するものであったりする状況って例えば? >>892
1つめ
クラスを直接参照する場合には暗黙に実装にも依存が発生してしまう
例えば現在時刻プロバイダがタイムサーバーにアクセスしている場合クライアントの開発者はタイムサーバーへアクセスできる環境を強いられることになる
またインターフェースに存在しないメソッドを知ってしまうというリスクがある
あなたの後任者がそのメソッドを呼びだしてクラス間の結合度を高めることを防ぐことは難しい
2つめ
返しとして不適切
3つめ
現在時刻プロバイダの実装が間に合っていない場合
現在時刻プロバイダが依存するインフラストラクチャが高価な場合
など実装を交換する理由はいくらでもある >>895
日本のサーバーで日本のユーザーという状況しか考えたことのない人 >>883
メッセージングのOOPは「システム内での決定をどう遅らせるか」
抽象データ型のOOPは「データ型をどう簡単かつ安全に定義、運用するか」 このように、オブジェクト指向というのは、理想的なモデルを追い求めればいいというものではなく、
開発者の都合に合わせてモデルの形が変わっていく泥臭い世界なのです >>901
人員も要件も予算も千差万別
たったひとつの理想を追及するよりも柔軟に様々な状況に対応可能なモデリングツールのほうが優れているね >>898
内部的にはUTCを使ってロケール依存の部分だけユーザーのロケールに従うので、
同じオブジェクトに対してサーバー時刻をインジェクトしたりユーザー時刻をインジェクトしたりはしませんね DIはオブジェクト指向によって不要なもの
なぜなら全てのオブジェクト指向言語に
DI用の機能が搭載されていない だって言語機能だけでできるもん
全部のクラスをmain関数でnewして、依存クラスはコンストラクタに突っ込んで
すべてmain関数で構築すればよい
パッケージを使わず依存の排除をつきつめていくと結局そうなって
これDIと一緒じゃねーかと気が付いた >>907
> 全部のクラスをmain関数でnewして、依存クラスはコンストラクタに突っ込んで
> すべてmain関数で構築すればよい
main関数が神クラスならぬ
神関数になってるわけかw >>906
依存インスタンスの生成を消費クラスの外部で行い渡して使わせる
依存インスタンスへのアクセスはインターフェースのみを通じて行う
DIとは極論するとこれだけ
これをサポートしてないオブジェクト指向の言語を探すのは難しいだろう
DIコンテナは便利だけど必須ではない
DIコンテナはDIと名前に付いてるがDIそのもではなく単なるFactoryのバリエーションでしかない >>912
やってることは割と単純だから長くてもそんなにスパゲッティにはならないはず >>907
君とは仲良くなれそうだ。
俺もそこに行き着いたぜ >>912
メインクラスってのは、そもそもアプリケーション(自分が作ろうとしてるもの)なわけだよ。
それが神クラスのようになって何が問題なんだい?
メインクラスはnewしまくれる唯一の場所なんだよ DIっていうのもうやめようぜ。
いつもこの話すると関係ないユニットテストやらDIコンテナの話がでてくる。
これからはコンストラクタインジェクションって言おう >>907
それも悪ではないが生成の責務はFactoryにもたせたほうが良い
規模が大きくなるとすぐにmainが破綻する >>913
> これをサポートしてないオブジェクト指向の言語を探すのは難しいだろう
カプセル化を実現する機能としてprivateというものがある。
privateを使うことで、どうやっても外部からアクセスできなくなる
これが言語のサポートという
> 依存インスタンスの生成を消費クラスの外部で行い渡して使わせる
> 依存インスタンスへのアクセスはインターフェースのみを通じて行う
これを制限する機能が搭載されている言語はない。
あくまでそういうルールにしたから守りましょうという紳士協定のみ
こういうのは言語のサポートとは言わない >>918
せやな。
newしまくれるmainの性質を、クラスに抽出したのがFactoryと言えるしな >>916
> メインクラスってのは、そもそもアプリケーション(自分が作ろうとしてるもの)なわけだよ。
> それが神クラスのようになって何が問題なんだい?
カプセル化が破壊されるから。
例えば、外部のライブラリを使おうと思っても、そのライブラリが
使用するもの全てをmainで作らなければいけなくなる 例えば、Windowsでメッセージボックスを表示しようと考える。
その時、簡単な関数だけでYES/NOが返ってくるAPIではなく
メッセージボックスが必要とするボタンまで、main関数で作って渡さなければいけなくなる。
メッセージボックス程度ならまだいいが、より複雑な
ファイル選択ダイアログボックスの場合、
main関数でリストビューまで作らなければいけなくなる >>919
つまりインターフェースがサポートされていればDI用の機能が搭載されていると言える >>924
それはジャンプ命令が搭載されていれば、
例外用の機能が搭載されていると言ってるのと同じ >>919
紳士協定は必要だろう?
それぞれのプログラマが言語の枠で自由にやられたらどの言語使っても困ることになる >>921
それの何が問題なの?そしてなんのカプセル化が破壊されてるの? >>927
private MyClass myClass;
というプライベート変数まで外からインジェクションしないといけなくなる
カプセル化の破壊 >>922
その通り
複数の工場を考えればよろしい
各工場はある程度関係性があるプロダクトをまとめて生産する
ある工場は別のある工場のプロダクトに依存して自分のプロダクトを生産する
工場間のプロダクトの流れを正しく決めてやればたとえなんでも生産する工場などではなくとも複雑で大きなプロダクトを生産することができるわけだ DIの目的がテストになってる時点で
オブジェクト指向はテストがし辛いってことを意味する
コンポジションがその一番の元凶
コンポジションをなくせばDIは必要なくなる
DIが言語に搭載されずDIコンテナというフレームワークが
必要になるのは、DIがオブジェクト指向にとって
ふさわしくないものであることを意味する
かと言ってその問題を解決する手段が見つかっていない
オブジェクト指向に根本的な問題があるからだ オブジェクト指向かどうかは関係ない
インフラを始めとして他の何かに依存するコードはテストしにくい
それはパラダイムのせいじゃない >>930
だから誰もユニットテストやDIコンテナの話なんかしてないから
コンストラクタインジェクションって解釈してくれる? >>933
> コンストラクタインジェクションって解釈してくれる?
コンストラクタ引数を潰すもの
>>934
> それはカプセル化の破壊とは言わない
いう >>928
これってC++でヘッダファイルをincludeするときの問題を言ってる?
としたらそれはC++言語がきちんとオブジェクト指向プログラミングに適合できてないって話であってOOP自体の問題じゃない
C++でもpimpl使って回避するのが定跡 ったく、コンストラクタインジェクションでカプセル化が崩壊するなら
コンストラクタでインスタンスを受取る全てのクラスがカプセル化崩壊してんじゃねぇか
なんでそんなに堂々と誤ったこと言えるのかね
その自信どこからくるのまじ。 このスレで話し合ってわかったことは
オブジェクト指向は素晴らしいけれど
混乱が多く、人類には早すぎたということだ コンストラクタインジェクションの問題は
手続きの中で関連を設定しないといけないことだ
DIフレームワークを使えば静的宣言的に依存関係を定義できる
でもJavaとかC#のxml使ったDIフレームワークって
設定ミスのエラーとか実際動かすまでわからんから
宣言的で何がうれしいのかいまいちよく分かってない >>940
> ったく、コンストラクタインジェクションでカプセル化が崩壊するなら
> コンストラクタでインスタンスを受取る全てのクラスがカプセル化崩壊してんじゃねぇか
何いってんだ?
もともとコンストラクタで渡す必要がないものを
渡すように変更したから破壊だって言ってるんだよ。
仕様としてインスタンスを渡すならそれは問題ない
DIのためだけにコンストラクタを改変したんだろうが コンストラクタはメソッドじゃないから壊しても破壊じゃないやい >>943
なるほどね
でも、渡す必要の無いものをコンストラクタインジェクションで渡す行為を「カプセル化破壊」と
名付けるのはセンスに欠けますな >>945
DIなんてものを使わない場合、
内部に閉じていて外から見えないものなのだから
破壊だろう え、だっていうこと急に逆転したから意味わかんなくて >>767
うーん、こういう知ったかが一番始末悪いんだよなあ。
否定だけして理由は言わない・・・ってまるで今の野盗。 >>950
ほんとそれ
ちゃんと議論すればみんなハッピーなのにさー
プログラマのくせに生産性にかけることしちゃうんだもん
笑えるよ 次スレは要らんだろ
teratailかstackoverflow jpに移動しよう 日本語じゃなくてソースコードで会話しろよ…
こういうことでいいのか?
最初から、コンストラクタの引数の変更なんて想定されないよな。
//ClientはBaseInterfaceを知ってるが派生クラスを知らない
class Client {
BaseInterface b_;
Client(BaseInterface b) {
b_ = b;
}
foo() {
b_.run()
}
}
//bFactoryはBaseInterfaceの派生クラスのインスタンスへの参照を返す
Client c = bFactory.CreateInstance(file , ...);
c.foo(); 何がしたいのかわからないな
もう少し具体的な例にしないか? >>940
俺はしてると思うな
インスタンス保持は禁じ手だと思うし >>956
いやごめん、コンストラクタインジェクション【すると】
カプセル化破壊されるって話だったよね?
内部で具象であるnew使ったら具象に依存して疎結合性が失われるのは理解しておるよ >>953
なんだかんだ楽しかったんだが
次スレは無しかー 非OOPではどう書くか
それをOOPではどう書くか
その結果、何が良くなるのか
そこらへんが良くわかんないんだよねー
よく分からないまま、客先のコーディング規約から外れないようにしつつ、既存ソースコピペしてるよ >>942
>C#のxml使ったDIフレームワークって設定ミスのエラーとか実際動かすまでわからん
StructureMapですらそんなのなくしたのに?ASP.NET CoreのデフォルトのDIでもそんなことしないし、いつの時代の話だよ… DIフレームワークはなくして
言語機能に取り入れるべき
どうせテストにためにしか利用しないんだから
そのためにアプリケーションの設計まで変更するのはおかしい >>964
DIがユニットテストのためにしか使われないとか言う謎の考え方はどこから生まれたんだろう 次スレでだいたい言いたいこと書けたから良かったわ。
次の住人にまで混乱が及んだら話が進まない >>966
テストコードと本番コードを入れ替えるのにしか使わないから
使えないんじゃなくて、使わない テストのために
アプリケーション設計は変えるもんよ テストのためにっていうか
もともとはSolidな設計を実践して美しいシステムを作るためのベストプラクティスだからなDIって
DIでSolidを実現した結果の付加価値としてテストも容易になるってだけ インスタンスを差し替える予定もないのにDIするアホ >>975
コンストラクタの引数の数が増える嫌悪感より
疎結合性が失われる嫌悪感の方が強いんですけど >>975
変更されると困るオブジェクトコンポジションはDIしないほうがいいけど、大抵の場合
内部定義すると疎結合性が失われるから大体DIする感じにならん? 泣きながら人のバグ治すよりも
切り分けできる設計にしといた方が
後々楽よ。 ジェンガみたいなプログラムはゴメンだね
ダルマ落としぐらいシンプルにしてくれないとやってらんないよ >>975
> DIでSolidを実現した結果の付加価値としてテストも容易になるってだけ
それはおかしいSolidを実現すれば、DIコンテナなんてものは不要になるはず
言語仕様の範囲では実現できないから、DIなんてのが必要になってる >>976
> コンストラクタの引数の数が増える嫌悪感より
> 疎結合性が失われる嫌悪感の方が強いんですけど
既存のライブラリで、コンストラクタでDIできるライブラリがないのはなぜ? しらばっくれるても意味ないよ
既存のライブラリ、ソースコード見れるのも多いだろ
内部でクラスをたくさん使っているはずだが、
それをコンストラクタで入れ替えられるようになっているものはまず無い >>977
DIにするべき箇所が切り分けられない奴の特徴
DIにできそうな箇所はすべてDIw >>984
結局内部ではコンストラクタインジェクションしてるライブラリも多いけどこいつの頭の中が理解できん >>987-989
あのー、クラス名で言ってくれませんかね? >>985
それだけの情報で極端な診断されても困るんですけど newしたら疎結合性が失われるものは大体メインクラスかファクトリでDIでしょ >>996
何故か理由を説明しないで叩くだけっていう このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 44日 8時間 6分 27秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。