オブジェクト指向って自然な文法だな 3 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/04/02(日) 16:30:38.65ID:n7h/bBRg
前スレ
オブジェクト指向って自然な文法だな 2
http://echo.2ch.net/test/read.cgi/tech/1490506257/
2017/04/03(月) 21:57:20.04ID:LFQkDYJE
>>30
つまりオブジェクト指向は哲学と言うことだな。納得出来る
2017/04/03(月) 22:05:05.77ID:Vb9tETQW
抽象化()
2017/04/03(月) 22:05:09.73ID:MrxLrKt6
>>30
> どんな状況でもドアをドアと呼ぶに相応しい共通項を見つけるのは

取っ手のないドアがあるから、取っ手は共通項には含まれない
鍵のないドアもある。
材質も関係ない。
2017/04/03(月) 22:18:18.28ID:MrxLrKt6
なるほど、そうか。

オブジェクト指向を「現実世界を構成しているクラスを見つけ出す作業」と
捉えるからややこしいことになるんだ。

手続き型でも関数型言語でも、現実世界を表現する関数を見つけ出す作業
なんて考えるやつはいない。

見つけ出す作業ではなくて、作り出す作業なんだ。
現実世界ではなくターゲットとする要件を実現する
クラスや関数を自分たちで作り出す作業。

だから最初に要件が決まらないとクラスも関数も作れない

あたり前のことだが、混ぜっ返すやつは
「そのクラス・関数では世界のすべてを表現できない」と言ってるわけだな。
36デフォルトの名無しさん
垢版 |
2017/04/03(月) 22:25:42.68ID:VDwG6zpG
プログラミングが目的になっちゃうと
そういう思考になるのかしらん?
2017/04/03(月) 22:25:47.59ID:XYXk6jFX
どんな状況でもドアをドアと呼ぶに相応しい共通項を見つけるってのは
ドアという言葉を定義づけるのと同じこと

言葉を定義づけるには「ドアと窓は何が違うのか?」とか
「ふすまや障子はドアなのか?」みたいに隣接する概念と比較する以外有効な方法はない

で「ドアと窓は何が違うか?」みたいな問いを考えるゲームがしたけりゃ
どっか他でやりなよ
ここは板違い
2017/04/03(月) 22:42:21.43ID:MrxLrKt6
そう。我々がやってるのは、要件でドアと定義されたものを
クラスに落とし込む作業なのだ。

決しての中にあるドアがどういうクラスかを
解析する仕事ではないのだ。
2017/04/03(月) 22:42:49.69ID:MrxLrKt6
決して世の中にあるドアがどういうクラスかを
解析する仕事ではないのだ。
2017/04/03(月) 23:09:18.39ID:7vHtJU9B
>>31
同じドアを扱っているにもかかわらず
最初は小売りか設計かと思わせておいて
いきなり「猫に押される」っていうコンテキストも抽象度も異なるものが割り込んでくるのが
問題の肝

多少視点をゆさぶられても大丈夫なのを設計しろってことだろ
そこで状況がわかんないとか言ってたら降参してるようなもんじゃん
2017/04/03(月) 23:57:11.85ID:7vHtJU9B
なんかわからんけど急にしにたくなった
2017/04/04(火) 00:16:51.37ID:L1aPO2JG
俺も俺も
2017/04/04(火) 00:32:31.54ID:Y80clcxw
いいぞ。遠慮なく死ね
2017/04/04(火) 00:33:57.09ID:Tk79CS9z
現実世界をモデリングできているか、とかいう謎の評価基準

迷宮を進むゲームでドアとして表現されたドアがあったとして、そのモデリングの良し悪しを
・家の内装をVR体験させるソフトでも使えるか
・大型家電通販でドア付きの部屋に搬入できるかをチェックするプログラムでも使えるか
・エアコンの空調のシミュレーションでも使えるか
で判断したことがあるのかな。そうだったら何も言えない。
2017/04/04(火) 01:01:13.36ID:AiGPoot5
オブジェクト指向にむりやり難癖つけてるけど結局
「具体性を持たせることで取り回しが楽になった」に対して
「これには対応できるのか!」「こういう例外はどうだ!」って難癖てるだけだから
「で、おまえの棲んでるとこの方は取り回しどうなの?」って
隠れ家に光浴びせると黙って棲んでる泥に潜っていくというね…
2017/04/04(火) 01:32:16.54ID:QcgfrUUh
>>40
問題の肝でもなんでもないわw

そういうふうに設計が変わった時に
安全な方法で設計を変更するのが
リファクタリングだよ。

どっかのバカ共は、汚いコードを修正するものだと
勘違いしているようだがね。

オブジェクト指向に限らず、変更はあるのだから
その変化についていく技術が重要
2017/04/04(火) 01:37:41.67ID:TSsDdMVB
>>17
Swiftが入ってない
やり直し
2017/04/04(火) 05:34:43.80ID:ld6GL0Sw
キャットドア問題解決したのか?
49デフォルトの名無しさん
垢版 |
2017/04/04(火) 07:33:17.45ID:gTa0RwdG
素材まで網羅した完璧なドアの設計を最初からしなくて良いのがオブジェクト指向の強みなんじゃね

難癖野郎の要望にも応えられる
50デフォルトの名無しさん
垢版 |
2017/04/04(火) 07:34:20.63ID:gTa0RwdG
>>17
C#最高なだけじゃねえか
2017/04/04(火) 15:08:10.80ID:AeH3x9f/
今後も使い続けたいと思うかどうかの割合が低いもの

嫌われている

さすがマイナビ
堂々とすり替えw
52デフォルトの名無しさん
垢版 |
2017/04/04(火) 18:42:21.83ID:PnaBNYoq
データベース操作クラスって
アンチパターンらしいですけど
世間ではどうやって操作をまとめてるんですか?
2017/04/04(火) 18:44:12.01ID:pyoNKlrC
>>52
まず、アンチパターンだと言ってる人に聞いてみてください。
54デフォルトの名無しさん
垢版 |
2017/04/04(火) 19:01:23.29ID:12S8JRG0
オブジェクト指向って、
プログラミングを自動化=部品化してくれるものというイメージしかない。
プログラマはプラモデルを組み立てているような感覚。
2017/04/04(火) 19:22:07.15ID:6xG2515u
>>52
レコードセットとかフィールドとかトランザクションを抽象化することの話?
2017/04/04(火) 19:48:05.98ID:XraiJtPm
DAOみたいなのがクソなだけで、アクセスを抽象化したクラスは必要。
2017/04/04(火) 19:54:26.70ID:bhbbdSm0
>>54
これがオブジェクト指向の一つの存在パターンやしな
スマホアプリとかの画面パーツはこれで配布してるし
5852
垢版 |
2017/04/04(火) 20:11:51.69ID:PnaBNYoq
操作がクラス名としておかしいと、
何かの読み物で読みました

名詞じゃないクラスは
オブジェクト指向が出来ていないと
疑えと

じゃあデータベースなら良いのかなと
思いましたが、屁理屈かなとも思い
2017/04/04(火) 20:18:23.65ID:y0lCbigz
それってUpdateHogeクラスみたいなのがあるってことなの?
Commandパターンとかなら理解できるが
データベース操作用にそういうクラスは普通作らないわな
60デフォルトの名無しさん
垢版 |
2017/04/04(火) 20:57:28.90ID:pJiiTfw5
>>56
その抽象化がDAOやろ?
2017/04/04(火) 21:01:19.65ID:eKQOUvI0
DAOクラスの設計までごちゃごちゃ言い出すのがオブジェクト指向

お前らの話聞いてたらデータベースにつなぐのに何年かかんだよ
2017/04/04(火) 21:08:11.49ID:QcgfrUUh
>>61
説明だけなら数分もあれば終わるだろうから
それ聞いて接続できるまでの時間はお前次第だと思う。
2017/04/04(火) 21:08:42.56ID:8WGG2cnP
extensionがすべて解決してくれる…!
64デフォルトの名無しさん
垢版 |
2017/04/04(火) 21:09:58.53ID:pJiiTfw5
でもDAOが糞面倒なのは同意だが
2017/04/04(火) 21:26:31.39ID:y0lCbigz
>>60
リポジトリ
2017/04/04(火) 21:38:41.73ID:bhbbdSm0
db操作クラスっていかんのか
名前の通りdbから変数やデータ取り出して入れる専用クラスって意味でいいんだよな?

オブジェクトで使い易いんじゃないのか??
2017/04/04(火) 21:57:16.59ID:ld6GL0Sw
db操作クラスにキャットドアつけよーぜ!
2017/04/04(火) 23:04:38.14ID:eKQOUvI0
>>62
絶対に数分じゃ説明できない

途中で猫の生態みたいな解説をいれるのがオブジェクト指向だから

SQL叩きますの他の言語とは一味違う
2017/04/05(水) 00:16:02.14ID:Zf7glq/Z
>>68
猫の生態とは例えばどんなことを
お前は説明するの?
2017/04/05(水) 00:38:08.73ID:yRUZ/Ldq
オブジェクト指向ってこういうやつやろ!?が酷すぎて
田舎の中学生が「ぼくのかんがえたアメリカ人」の作り話を大人にしてるみたいになっとるな。
2017/04/05(水) 00:38:34.63ID:hA0nFIPv
>>60
ちゃう。抽象化を間違っちゃったのが、DAO
2017/04/05(水) 00:56:26.96ID:T1xSqOuQ
クラス名が名詞じゃないDB操作クラスってマジどういうの?
73デフォルトの名無しさん
垢版 |
2017/04/05(水) 08:19:13.48ID:RcS41rYJ
>>71
どう間違ってるの?
2017/04/05(水) 09:38:42.71ID:Zf7glq/Z
俺がDAOの存在理由が理解できないから、間違い
2017/04/05(水) 10:59:33.50ID:1lx41BrP
>>74
【が】が多い
2017/04/05(水) 15:50:39.12ID:UwNB2dkT
>>74
存在が間違ってる奴本人が自己紹介

>>73
DAO 想像力が足りない 辺りでググれば出たくるんじゃなかったかな

あの記事はPHPerのものにしてはとても良く書けているから必読だ。
近くにActiveRecordとDataMapperの実装解説もあるから、まだDAOとか言うゴミを使ってるバカは是非読んだ方がいい。
最終的な実装はあれでもダメダメだけどな。
77デフォルトの名無しさん
垢版 |
2017/04/05(水) 21:47:59.72ID:ABzSOhTe
オブジェクト指向は命名が重要だけど、DTOにはなんて名前付けてますか?

自分はHogeDTOとか付けてるけど
我流なんで自信が無いです
2017/04/05(水) 22:31:27.34ID:T1xSqOuQ
個人的にはHogeDaoとかHogeDtoみたいなのがたくさんあるとやる気なくす
HogeQueryとかHogeCommandとかHogeJsonみたいなもう少し意味のある名前がいい
2017/04/05(水) 22:56:14.24ID:YCJsuu6b
>>78
お前の個人的なやる気なんか知らないが、
何でもかんでもDTO作りまくる設計は、確かにアホ
80デフォルトの名無しさん
垢版 |
2017/04/05(水) 23:31:52.52ID:ABzSOhTe
ほぼストアドでシステム開発してる人が
最近の連中は技術が無くてストアド書けないと嘆いていたのですが
ストアドでオブジェクト指向は出来るんですか?

C#+EFでほとんどSQLを書いたことが無いので
データベース事情に明るくないもので
2017/04/06(木) 00:05:36.90ID:F4y9oj5j
SQL serverならSQL clrが使えるはず
2017/04/06(木) 01:57:21.96ID:FGV9lFi+
なぜにストアドでオブジェクト指向!?
2017/04/06(木) 04:16:30.36ID:2G8EDGPv
>>80
一応Ora限定で出来たと思うけど、Web方面だと
エッジサーバ側であれこれするからストアドいらん気もするよ
業務系だとストアド一本で職になるようだが
2017/04/06(木) 04:54:01.44ID:2G8EDGPv
1クラスについて、最低1in/1out(interface)を作るよう指示されたことあったな
全てのクラスについて

ヘキサゴナルなんだと、それが……
2017/04/06(木) 05:56:27.93ID:8G48c3ze
なんでもストアドでやるのはバッドノウハウだが使うべき所では使わないとくっそ遅いシステムが出来上がるぞ

某大手ITが作ったくっそ高いシステムみたいに

オブジェクト指向も拗らせ過ぎるとこうなるって典型例
86デフォルトの名無しさん
垢版 |
2017/04/06(木) 09:05:31.52ID:sp2ENUYJ
>>76
最終的な正解が書いてあるサイトはどこですか
2017/04/06(木) 09:40:42.68ID:rNIgAdOn
>>85
その話のどこにオブジェクト指向が関係するのか?
2017/04/06(木) 10:32:51.49ID:bi7gIbpv
第 (N+1) 次オブジェクト指向問答
https://togetter.com/li/1097950
89デフォルトの名無しさん
垢版 |
2017/04/06(木) 12:29:44.71ID:GOr1AWzR
>>82
オブジェクト指向と言わず
共通の開発手法があるのかなと

モデリングがそれに当たるのかな
2017/04/06(木) 12:47:05.55ID:fGciOGwI
>>86
I'll tell you nothing.
The answer is where it's present will not be indicate even by Google.
That must find out by an effort and a deliberation of yourself own.
2017/04/06(木) 12:49:59.24ID:fGciOGwI
be
92デフォルトの名無しさん
垢版 |
2017/04/06(木) 13:35:28.83ID:fKQHZKUE
>>90
Oh, dont say that!Dont say that.Im a stupid man.You should be kind to me!
2017/04/06(木) 13:41:15.62ID:fGciOGwI
>>92
ね ぼ け る な!
94デフォルトの名無しさん
垢版 |
2017/04/06(木) 18:06:11.40ID:7ga4e71i
オブ農って何ですか?
2017/04/06(木) 18:24:59.98ID:FGV9lFi+
>>92
気持ちの伝わるいい返しだな
2017/04/06(木) 18:36:07.83ID:FGV9lFi+
>>89
ストアドは基本SQLだからDB設計出来る程度のリレーショナルモデルの知識あれば十分
技術うんぬん言うほと難しい話じゃない DBが違えば中身はいろいろと違ってくるけどね

ストアドで条件分岐やループやカーソルを多用してる場合
本当にDBレイヤーでやるべき仕事なのか考えたほうがいいと思う
ビジネスロジックのあるべき場所や柔軟性と最適化のバランス次第
2017/04/06(木) 22:21:27.75ID:OOQlb81T
制御文減らすための文法じゃないの?
2017/04/06(木) 23:19:03.66ID:fGciOGwI
>>95
伝わるか! ボケナス!
99デフォルトの名無しさん
垢版 |
2017/04/07(金) 07:14:09.24ID:mWTY/96m
データベースのモデリングした後
オブジェクト指向のために
クラス設計すると、エンティティの
抽出とか同じ事をしている気に
なってくるんですが

モデリングは実はクラス設計だけで
OKとかありますか?
2017/04/07(金) 09:46:16.48ID:xCtKbZyH
>>99
そのためにO/Rマッパーがある。
O/Rマッパーを使うとデータベースのモデリングを
クラスで表現できるから、そのまま移植すれば良い
101デフォルトの名無しさん
垢版 |
2017/04/07(金) 10:24:46.37ID:IERj5jiz
ORマッピングすればDaoなんていらんね
2017/04/07(金) 11:00:36.56ID:Bku+sAks
>>97
意識して減らそうとしないと無理かな
ストアドは、テーブルや索引、マテリアらいずビューとかの整理に使う物かな
要は、あるタイミングでデータベースを単一の主体が加工する場合に使うと便利
複数クライアントが平行して操作するときに共通化を求めてやるもんじゃない。
それは、ビューなりストアドトリガーや制約で共通化するべきもの。
条件分岐があるなら、BLに溶け込ませろってのはそういう意味かと
2017/04/07(金) 11:05:00.66ID:Bku+sAks
ストアドプロシージャは、共有メモリや通信を目的に設計されていない。
なんかの結果を通信用に設けたテーブルに書いて、そのテーブルを別の主体が参照して連動させるとかオーバヘッドが多く、排他が冗長になり、パフォーマンスがでない。
2017/04/07(金) 12:51:44.94ID:l4Q0lLSH
>>95
気持ちのわるいいい返しだな

と読んでしまった
2017/04/07(金) 14:06:58.01ID:IIlb/TvM
>>102,103
基本的に何言ってるかよくわからない。

例えば集約関数実装することを考えれば、元となるデータの通信を行わなくて良い分、
ストアドの方が速い可能性が高い。

また、複雑なデータ処理や文字列操作が多くてストアド自身のコードの実行が遅い場合もあるが、
ストアドに別言語を使えるRDBMSもある。

さらに言えば、ストアドがimmutableであるなどの宣言ができるRDBMSがあり、その場合は
実行結果をキャッシュしてくれたりする(同じ引数の場合はコードを実行しない)。

ビジネスロジックをRDBMS内部におくべきかどうかというのは、また別の話。
2017/04/07(金) 18:38:30.82ID:Er4jaX4h
最初はデータ中心アプローチでいいよ

カージナリティーとかに抜けが発生するからね
それからモデル層の設計すればいい
2017/04/07(金) 19:36:14.64ID:vUIUfIKH
思ったよりスレッド周りで手こずったけど>>8をPHPで書いてみた

http://ideone.com/lcnAEj
108デフォルトの名無しさん
垢版 |
2017/04/08(土) 12:10:05.09ID:gBZ8NF+o
>>105
集約関数、つまりある複雑な条件、複数のテーブルを結合せずに参照し、なんらかの判定を行う。
これは一般的なバッチ処理と言われるもので、データベースインスタンスに閉じて実行すればよい。
何らかのパラメータが伴い、レコードのサブセットのみを対象にする場合、ストアドにしても処理遂行を基準に、倉実行してもパフォーマンスは劇的には変わらない。

データベースは、純粋に取り扱うレコード数に比してパフォーマンスが確定する。

あと、結合できるなら、ストアドはいらない。
ビューなりマテリアルズどビューのがまし
2017/04/08(土) 12:16:30.94ID:AqrMKRmZ
ここ、何のスレだっけ?
2017/04/08(土) 13:06:18.31ID:MgZOgx+n
マルチスレッドわろw
2017/04/08(土) 13:31:56.58ID:D50K8DvF
よくわからないことを喚き散らすやつの隔離スレだよ
2017/04/08(土) 13:51:19.98ID:MmqHTY99
まともにキャットドアもデータベース接続もできないゴミが、僕が使ってる言語のライブラリをだしにしてホルホルするスレだよ
2017/04/08(土) 14:06:38.04ID:FmwPLc4P
お疲れ様でした!
2017/04/08(土) 17:16:52.66ID:6tEdYN6j
>>112
やはりキャットドア問題を解決することなく次にはいけんな
2017/04/08(土) 18:27:20.39ID:ZmPKT6lF
>>108
集約関数もバッチ処理も理解できないやつは
いちからやり直すかプログラミングから足を洗うかしてくれ
2017/04/08(土) 19:54:52.03ID:FmwPLc4P
>>114
あんただけだよいつまでもキャットドア問題とか言ってんの
2017/04/09(日) 01:56:39.35ID:+d/g4xuk
要件の一つに「Oraにロックインされるの勘弁」があるとマッパー必須

……いやなのは「もうOracleにカネ献上するのは嫌なんや!」って奴
既存のストアド見て置き換えなきゃいかんでしょ

最高にクソだったのは1関数5000行if12段のストアド
あれはサジ投げてとりあえずおっつけの改修だけやることにした
2017/04/09(日) 02:27:20.83ID:S92Irkmv
>>117
設計書なかったんだ、ははワロス
2017/04/09(日) 02:34:17.14ID:+d/g4xuk
>>118
設計書がどうこうとかじゃなくて、「おにぎりスタッバー」程度余裕で超えるド畜生
丸尾末広とか風船クラブ級の理解不能レベル

だから俺のところに来たんだろうが、さすがに当座のおっつけ以上の対応はムリだったな
2017/04/09(日) 02:39:11.61ID:+d/g4xuk
むしろ1関数5000行if12段の脅威を感覚でわからんとかヤバいな

最低でも2048くらい分岐が発生する
平均的な人間は7くらいしかわからん(Code Completeを参照のこと)
2017/04/09(日) 02:50:02.23ID:+d/g4xuk
一応言っておくが、俺はWAISテストで引っかかってるんで3か4しかわかんねぇようだ
まぁそのくらいあればシノギはできるようだがね

WAISでググるこたぁなかろうし、ググったらヘイトするんだろうけどな
2017/04/09(日) 08:12:06.51ID:MBRFLDgA
if12段が*最低*でも2048*くらい*分岐って計算の方がヤバい
2017/04/09(日) 08:18:43.92ID:BIX5wjPO
分岐を志向するか統合を志向するかで無能か有能か分かれそう
2017/04/09(日) 08:49:12.98ID:Zg/bzUyC
と言いますと?
2017/04/09(日) 09:36:40.13ID:Ch2od0MN
無理なクラスタリングはハンマー釘病になる
その場その場に応じた最適解を選べばいいだけ
2017/04/09(日) 11:52:37.41ID:cTj84sSr
釘宮病ってなんだ?
2017/04/09(日) 23:56:30.49ID:dNHxTouX
12段ifに於ける1つの分岐
if(a){ if(b){ if(c){ if(d){ if(e){ if(f){ if(g){ if(h){ if(i){ if(j){ if(k){ if(l){
....x;
} else {
....y;
}}}}}}}}}}}}
2017/04/10(月) 00:17:53.55ID:f5bfXI8/
改良版

if(a && b && c && d && e && f && g && h && i && j && k && l) {
....x;
} else {
....y;
}

ここから言いたいことがわかるかね?
2017/04/10(月) 02:17:00.84ID:ogTJ3oaz
>>128
先に言えハゲ
2017/04/10(月) 02:17:56.14ID:f5bfXI8/
はげてねーよはげ
2017/04/10(月) 07:53:31.28ID:1VtPDmxC
>>130
ハゲろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況