オブジェクト指向を分かりやすく例えて教えてくれ 2
レス数が950を超えています。1000を超えると書き込みができなくなります。
わかり易い例
class Dog extends Animal
class Cat extends Animal
オブジェクト指向とは 分かりやすく教えてくれ
https://medaka.5ch.net/test/read.cgi/prog/1521869966/ >>892
ユーザの同値性はドメインにおいて固有の振る舞いを持ち得るから、>>886でIndexOfはドメイン固有の振る舞いをするね
はい、全然反論出来てない。やり直し >>871のDIの定義はわりと一般的だと思うけど、それに反対して、代わりにドメイン固有の振る舞いが〜とかのオレオレ定義をDIに追加しようとするの笑うわ (宗教的な理由などで)地動説を認めていない人がいるから間違いになるとでも? 正しいかどうかに、「皆が認めてる」かどうかは関係ないわなw >>894
いやそこは俺も正しいと思う
Listの大半の振る舞いは何にも依存していないが一部の振る舞いはObjectの持つ契約に依存している
そしてその実装は外部から注入される
しかし>879で述べたような理由では依存性の注入とは言えない
リストに追加したりリストの長さを得るなどといった基本的な振る舞いはUserのいかなる契約にも依存しないからだ >>899
根本的に明確な定義ができないために最も普及している認識を正として採用せざるをえないという物はよくある さらに重要なのはこの定義
https://web.archive.org/web/20170707082300/http://kakutani.com/trans/fowler/injection.html
> Dependency Injection の形式
> Dependency Injection の基本的な考え方は、独立したオブジェクトを
> Assembler(組み立て係)として用意し、 MovieFinder インタフェースの実装を
> MovieLister クラスのフィールドへ適切に設定させるというものだ。
> 依存関係は図2のようになる。
DIは「独立したオブジェクトをAssembler(組み立て係)として用意し〜設定させるというもの」
なのだから、それが存在しない以上DIじゃない >>901
なるほど。だからDIといったらDIコンテナが内包されたフレームワークが
最も普及している認識として採用されるわけだ 勝手にオレオレDIを提唱したいやつは、自分で新しいデザインパターンとして提唱したら? >>167
今さらだけど分解と集約!
class Drivers {
Engine engine;
Wheel wheel;
}
class Controllers {
Handle handle;
Brake brake;
}
class PartsSet {
Drivers driver;
Controllers controllers;
}
class PartsSetA extends PartsSet {
class DriversTypeA extends Drivers {
this.engine = new JetEngine();
this.wheel = new StudlessWheel();
}
class DriversTypeA extends Drivers {
this.handle = new QuickHandle();
this.brake = new AntilockBrake();
}
this.drivers = new DriversTypeA();
this.controller = new ControllersTypeA();
}
main() {
Car car = new Car(new PartsSetA());
} Car car = CarFactory.create(); >>910
どのようにたどり着いたのかの解説が欲しい >>910
> Proffitt氏がたどり着いた先は、DIはユニットテストにのみ有効という主張である。
とか言われてもわからないんだけど >>912
DIは依存関係をひとまとめに定義して
DIコンテナにオブジェクトを生成してもらうものだけど
結局の所、それユニットテスト目的でしか使ってないよね
って話だろう
その他の目的に使ってるかもしれないけど、
よくよく考えるとそれ、依存関係をひとまとめに
する必要性はないでしょう?
胸に手を当てて考えてみなよ
って言ってるんだよ コンポジションが好まれるとか言っておいて、
実際に分解と集約をやって見せられると、
グロとか言って中身のない評価しかないのな。
DIも1000個くらいのnewがmainに書いてあったらグロと言われるだけで終わりそう。 いやDIにおいてnewするのはDIコンテナの仕事なんだから
mainにnewが来る時点でおかしいよ >>918
DIコンテナなんて使ったらもっとグロくなりそう。
1000行じゃ済まないんだろう?
そもそもこのスレでDIが好まれるとか言い出した奴は、
DIコンテナなんて使わないって言っているし > そもそもこのスレでDIが好まれるとか言い出した奴は、
> DIコンテナなんて使わないって言っているし
そこが矛盾だったんだよ。んで問い詰めたらそいつが言ってるのは
DIじゃありませんでしたっていうオチ
DIはとあるオブジェクトに「ひとまとめに」依存関係の定義して
そのオブジェクトから生成してもらうっていうパターンだから >>920
じゃあ言い方変えるわ。
mainでnewするのが好まれるとか言っているけど、
1000個くらいになったらグロと言われるだけで終わりそう。
(そもそもDIじゃない。)
DIコンテナも1000オブジェクト分くらい書いたらグロと言われるだけで終わりそう。 >>921
だから最初の方からその話をしてるんだが?
53 自分:仕様書無しさん[sage] 投稿日:2018/05/08(火) 01:31:46.28
もちろんアルゴリズムを入れ替え可能にしたいのであれば、
ストラテジーパターンを使えばいい。
DIじゃない、ストラテジーパターン
DIはテストのために全てのクラスに
ストラテジーパターンを適用するとかいう
愚かな行為
本来は不要な過剰な設計 粗結合である必要もない箇所をDIで粗結合にするのはどうでもいい
インスタンスのライフサイクル管理に便利だからDIコンテナを使ってる >>923
なんでインスタンスのライフサイクルの管理なんかを
自分でやらないといけないのか?
そんなもんフレームワークが最適な形で
勝手にやってくれてるぞ?
DI使ってるせいで逆に仕事増やしてないか? ライフサイクル管理はDIフレームワークの一部だろ
>>924は自己矛盾してるぞ >>929
いや、DI使わないフレームワークでも行われてるでしょ?
しかも、それをフレームワークの利用者に意識させない 煽って答え引き出そうとする奴たまにいるけど自分の理解力引き上げの方が先決だと思う 炎上学習法って最初に言いだしたのは俺だと思うが他人が普通に使うくらい浸透してるのを見ると感慨深い >>932
ライフサイクル管理を意識する必要がなく
フレームワークが勝手にやってくれるものは
各言語のDIを使ってないフレームワークすべてそうだと思うぞ
例えばRailsとか >>940
参考までに教えてほしいんだけど、DIでできるライフサイクル管理をそれらのFrameworkではどう実現してるの? >>942
雑魚だと思う理由を述べて反論してみたら?
こう言うと尻尾を巻いて逃げ出すんだろうけど
雑魚はどっちなんだか >>940
それはフレームワークがDIコンテナになってるだけだろうな そもそもライフサイクルという概念がなあ。
末端のコーダーにとってフレンドリーじゃない。 ライフサイクルもそうだけどそういうめんどくさいことを意識しなくてもコードをかけるようにDIがあるんだよ なにを勘違いしてるんだ?
ライフサイクルなんてのが必要になるのがDIの欠点
DIを使わなければ、ライフサイクルそのものを無くせる DIを否定したいって結論が先にあって
無理してそこに向けて進もうとするから
もう自分でも何言ってるかわからなくなってるんだろうな >>949
ライフサイクルなんて面倒なものが
出てくるのはDIだけなんだよ
過剰な設計が過剰なものを作り出してる >>951
ではなぜDIをつかわないフレームワークが
ライフサイクル管理なしで
アプリ開発を実現し続けられると思う? 遊んでないよ?
普通に質問しても答えられないじゃん
なんでいつまでもライフサイクルの存在に
振り回されてるの? >>965
反論はしないの?
まだあんたのターンなんだけど >>967
>>948
なにを勘違いしてるんだ?
ライフサイクルなんてのが必要になるのがDIの欠点
DIを使わなければ、ライフサイクルそのものを無くせる 952 自分:仕様書無しさん[sage] 投稿日:2018/05/19(土) 17:42:30.28
>>949
ライフサイクルなんて面倒なものが
出てくるのはDIだけなんだよ
過剰な設計が過剰なものを作り出してる
953 自分:仕様書無しさん[sage] 投稿日:2018/05/19(土) 17:43:12.55
>>951
ではなぜDIをつかわないフレームワークが
ライフサイクル管理なしで
アプリ開発を実現し続けられると思う? >>970
その質問の答は用意しているが、
少しは考えさせよう。
DIは素晴らしいもののはずなんだと
思考停止しているようだからね todoアプリだと、どうライフサイクルが無くなるんだ? DIが便利すぎてDI無しで開発するのが辛い
DI使うと超お手軽にSOLIDを実現できて、テストもスラスラ書けるんだもの
人間はダメな生き物だから一回楽な方法を覚えると他のやり方が億劫になる ライフサイクルがなくなるというバカ特有の亜空間思考w 自分の理解できないものをクソだと認定する癖やめたほうがいいぞ >>972
ライフサイクルがなくなるんじゃなくて
ライフサイクルを管理する必要がなくなる >>974
なんで反論?
反論待ち状態なんだけど?
そしてこちらの答はすでに用意済み とりあえずこのレスに対する
反論待ちなので、レスよろしくね
なにを勘違いしてるんだ?
ライフサイクルなんてのが必要になるのがDIの欠点
DIを使わなければ、ライフサイクルそのものを無くせる
952 自分:仕様書無しさん[sage] 投稿日:2018/05/19(土) 17:42:30.28
>>949
ライフサイクルなんて面倒なものが
出てくるのはDIだけなんだよ
過剰な設計が過剰なものを作り出してる
>>951
ではなぜDIをつかわないフレームワークが
ライフサイクル管理なしで
アプリ開発を実現し続けられると思う? こいつら定期的に今の状態を書き込んで
やらないとすぐ忘れるからなw スーパークラスやインターフェースなんて必要になるのがOOPの欠点
OOPを使わなければスーパークラスやインターフェースそのものを無くせる
コールバック関数で充分だった >>977
todoをいつ作っていつ削除するかをプログラミングする必要ないの? >>981
無くして
class BarRepository implements FooRepository {
private dbConnection;
public Hoge findBy(int id){
return dbConnection.findBy(id)
}
public void insert (Hoge hoge){
dbConnection.insert(hoge)
}
public void update (Hoge hoge){
dbConnection.update(hoge)
}
public void delete (Hoge hoge);
dbConnection.delete(hoge)
}
} >>982
DIのライフサイクルの管理の話だよね?
むしろ逆になんでtodo(TODOクラスのインスタンス)を
プログラミングしてるのかわからないんだが
なんでDIではそんな事が必要なの?w >>984
>>952でDI以外にライフサイクルは出てこないと言っているので聞いている 明示化されてないだけでどんなシステムでもオブジェクトのライフサイクルは存在する
例外があるとしたらすべての機能がstaticメソッドで書かれたシステムかな >>985
なにを必死になってるのかわからないけど
DIはライフサイクルを意識しないといけないが、
DIをつかわないフレームワークでは、ライフサイクルを
意識しなくてもいいって話なんだがわかってる?
あんた言葉遊びに持っていきたいだけじゃないの? 違う
DIを使わないと実行フローの中にライフサイクルが埋め込まれてわけがわからなくなる
そうやって管理不能になる前にDIを使って構造的に体系的にライフサイクルを整理し制御下に置こうってことな >>988
わかったから、先にこの質問に答えてくれ
とりあえずこのレスに対する
反論待ちなので、レスよろしくね
なにを勘違いしてるんだ?
ライフサイクルなんてのが必要になるのがDIの欠点
DIを使わなければ、ライフサイクルそのものを無くせる
952 自分:仕様書無しさん[sage] 投稿日:2018/05/19(土) 17:42:30.28
>>949
ライフサイクルなんて面倒なものが
出てくるのはDIだけなんだよ
過剰な設計が過剰なものを作り出してる
>>951
ではなぜDIをつかわないフレームワークが
ライフサイクル管理なしで
アプリ開発を実現し続けられると思う? >>989
ライフサイクルの管理を放棄して目をそらしてるだけ
なぜ開発ができているかというとたまたま動いてるだけというのが正解 ライフサイクルの管理をしてないという勘違いをまず改めたまえ 例えばAndroidのアクティビティ
Android開発にはDIは必須ではないがアクティビティには明確にライフサイクルが定義されていてドキュメントにも明記されている
WindowsのFormsにもライフサイクルはあるし
MVCフレームワークもリスナーやコンテキストなど様々なインスタンスのライフサイクルを管理している
DBのセッションやトランザクションの管理もライフサイクル管理の例だが別にDIは必須ではない
インスタンスを生成してコントロールするすべての処理にライフサイクルの管理が必要なんだよ
DIを使わない場合はフレームワークが内部で管理しているライフサイクルと処理フローの中で野放しになっているライフサイクルが存在する
野放しになっている方をDIを使って完全に制御下に置こう >>983
定義側のコードだけで利用側のコードがないから、
正直、具体的な置き換え例は出せないんだけど、
C言語でも同機能のコードが書けるでしょ?
その時使うのはポインタを利用したコールバック関数くらいで、
スーパークラスやインターフェースは要らないよね? レス数が950を超えています。1000を超えると書き込みができなくなります。