オブジェクト指向システムの設計 174 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/09/26(火) 07:20:38.98ID:qu+DPehL
前スレ
オブジェクト指向システムの設計 172
http://mevius.2ch.net/test/read.cgi/tech/1467992113
オブジェクト指向システムの設計 173
http://mevius.2ch.net/test/read.cgi/tech/1502182334/

類似スレ
手続き型システムの設計 1
http://mevius.2ch.net/test/read.cgi/tech/1500282714
2017/10/17(火) 21:02:26.86ID:y2IFefmv
依存しあってんじゃねーよ
640デフォルトの名無しさん
垢版 |
2017/10/17(火) 21:19:29.37ID:EyAJ3Syg
>>638
senderを自分で生成する方法
http://bbs.wankuma.com/index.cgi?mode=al2&;namber=85371
2017/10/17(火) 21:56:16.29ID:G9wCIPXR
>>640
お、おう。。それもJittaさんか…

面白い捉え方だと思うけど
Object Orientedという言葉が出てきた歴史を調べれば
「目的指向」が誤訳なのが分かるよ
https://en.wikipedia.org/wiki/Object-oriented_programming#History
642デフォルトの名無しさん
垢版 |
2017/10/17(火) 22:34:25.19ID:EyAJ3Syg
>>641
Jittaさんが言ってることの方がガセネタですね
じゃあそれを根拠にわんくまに怒鳴り込もうと思います
ありがとうございます
643
垢版 |
2017/10/17(火) 22:41:00.56ID:GZgPL7cm
まあ英語でObject orientedだと、大体は対象志向みたいな意味合いだけどな。
Objectって単語は、モノと言うよりも「認識できる何か」「動作や感情の対象」を指す。
動詞になると顕著で、「俺はこれに文句があるんだが」ぐらいキツい意味。
「I object to waiting」みたいな。

Ob + ject 。前に向かって投げたやつ。客観的に見ることができる物、が語源。
逆に、中に投げ入れるモノがinject。下に投げたものがsubject(自我、主観)。
644
垢版 |
2017/10/17(火) 22:46:44.09ID:GZgPL7cm
>>636
単なる「モノ」はだいたいbody、matter、substance。
physical bodyとか使う。
天体の「体」もbody。heavenly-body。
2017/10/17(火) 22:54:02.93ID:0cEpFleP
>>644
素晴らしい「モノ」
優れている「モノ」
高品質な「モノ」
高機能な「モノ」

のモノはどれになるの?
2017/10/17(火) 22:55:17.94ID:0cEpFleP
食べモノ、飲みモノ
も追加しよう
2017/10/17(火) 22:55:26.36ID:xucK+Hbm
thingは?
648デフォルトの名無しさん
垢版 |
2017/10/17(火) 22:55:57.78ID:EyAJ3Syg
>>643
つまりJittaさんが大正解ってこと?
2017/10/17(火) 22:59:32.89ID:xucK+Hbm
目的を指向するってメチャクチャ当たり前だなw 殊更言葉にするのが恥ずかしいくらい
2017/10/17(火) 23:08:10.96ID:O+BDW8Aj
責務指向でいいじゃん?
2017/10/17(火) 23:20:41.75ID:A1W0Ufl3
役割って感じ?
objectではないけどしっくり来る
652デフォルトの名無しさん
垢版 |
2017/10/17(火) 23:31:17.25ID:EyAJ3Syg
責務駆動設計とか言うよね
2017/10/17(火) 23:35:58.51ID:0cEpFleP
せやかて駆動設計
2017/10/17(火) 23:36:27.01ID:O+BDW8Aj
責務はいつも一つ!
655デフォルトの名無しさん
垢版 |
2017/10/17(火) 23:38:24.92ID:EyAJ3Syg
>>654
いいね!
2017/10/17(火) 23:47:01.89ID:G9wCIPXR
Functional ProgrammingのFunctionにだって責務あるし
POAのProcessやDOAのDataにだって責務は有る

他と違って「オブジェクト」という抽象概念を中心に物事を考えるからオブジェクト指向という名前
んでオブジェクトってのは↓
a data structure that can contain functions as well as data, variables, and other data structures
https://www.merriam-webster.com/dictionary/object
657デフォルトの名無しさん
垢版 |
2017/10/17(火) 23:58:04.35ID:EyAJ3Syg
Object oriented languageは
・カプセル化、継承、多態性をサポートするもの
・JavaやC++、Rubyなど

Object based languageは
・継承・多態性をサポートしないもの
・VBなど

orientedはbasedと似たような意味で、basedよりも多くの条件を規定する。

Object based languageを「オブジェクトを基本にした言語」と解釈するならば
Object oriented languageは「オブジェクトを本位にした言語」と解釈するのが妥当な気がする。

「本位」は中心にして基本にするという意味なので「基本」を強めてる感じ。
658デフォルトの名無しさん
垢版 |
2017/10/17(火) 23:58:36.63ID:EyAJ3Syg
>>656
やっぱそうだよね、オブジェクトを中心にするっていうのがオブジェクト指向だよね
2017/10/18(水) 00:03:46.63ID:YCPgdWPh
>>657
オブジェクトじゃわからない
Objectはなんて訳すのが適切なのか
660デフォルトの名無しさん
垢版 |
2017/10/18(水) 00:22:48.20ID:kh//WtC6
>>659
>>641の歴史を見てほしい、翻訳してほしい、よろしくお願いします
2017/10/18(水) 00:36:43.88ID:GswCLlj6
ピッタリの訳語がないから
新しく作るか (例 経済)
既存の言葉に新しい意味を持たせるか (例 自由)

ちなみに中国語訳では「対象」らしい
662
垢版 |
2017/10/18(水) 00:58:52.74ID:a2+TOoEN
>>645
good one,
better one,
high-quality one,
とかでは?モノと言うよりは、何か指しとるでしょ、その言い回しで言うときには、モノは。

>>647
事象、作品、道具、衣服などなど、それだけでは存在に意味が存在しない類のやつ。転じて、流行りとか、大事な事を指したりする。
2017/10/18(水) 07:54:38.23ID:/RGzz2zm
抽象的な部分は合ってるな
2017/10/18(水) 07:56:46.88ID:/RGzz2zm
orientedも指向より主導の方がいいと何かの本で書いてたな
2017/10/18(水) 08:07:11.64ID:/RGzz2zm
主体とか本位とかでもいいかもね
役割主体、役割本位
2017/10/18(水) 08:13:24.82ID:lHCL+31V
>>659
「モノ」「箱」「塊」とかなんでもいいような気がしてきた
どうせ実際に使う時は「社員」とか「敵機」とかになるんだし
2017/10/18(水) 14:09:11.49ID:hmGkDgR5
人間の方の理解のために「”もの“になにかやらせる」
「”もの“を複製して別な”もの“のパーツとして使う」
これわかりやすいっしょ?
どんどん再利用パーツ増えて複雑になってったらこうじゃないとキツイっしょ。
で提唱されたってのに、すぐにベテランプログラマーさんは
「この名前さあ、タイプすんのめんどくさいから「あ」「い」「う」でよくね?」と他人にわからない暗号にしたがったり
「オブジェクト指向ってさぁ、オブジェクト単位に分けるんっしょ?この再利用しない中身もさぁ
ぜんぶ用途別に名前つけてパーツに分類整理しなきゃ!」とかやりなさる…
668
垢版 |
2017/10/18(水) 19:20:47.11ID:a2+TOoEN
そうなると、クラスって何だ、インスタンスって何だ、コピーなら、コピー元も何かの役割を果たしてたんだろ?みたいな明後日の事言われるからな。

プレスの金型と、それで作り出した製品くらいの言い方の方が伝わる。
たまに金型に便利な治具ついてることもあるし、付けることもできて、それはプレスせずに金型から直接使えますが、
その治具にメモとかつけると皆から見えたり、誰かに剥がされたりするので、必要がなければ製品に付けたほうがいいですよ、
何回プレスしたかのカウンタとかは治具につけたら良いですね。みたいに説明した事ある。

スーパークラスとかサブクラスも、同じように、互換品の金型と互換品とかそういう説明できるから、物理な型で説明すると割とわかってくれる。
2017/10/18(水) 22:26:09.70ID:FgeE42WT
適切な訳語、的確なメタファって大事やね
670
垢版 |
2017/10/18(水) 23:14:36.30ID:a2+TOoEN
プロトタイプベースな言語だと、コピーのメタファの方が的確になったり、まぁ難しいわ、もう自分が知ってる物を、1から人に教える順番を考えるのは。
2017/10/19(木) 00:15:22.98ID:ycrHDnwP
自分がちゃんと理解してないものは人に説明できないって言うしね
2017/10/19(木) 07:18:30.10ID:mnQ3FyhH
ガウディ本読んでから議論して欲しいね。
673
垢版 |
2017/10/19(木) 08:25:03.58ID:Qitn7VqG
>>671
わかるわ。耳が痛い。教育することになって逆に知る事も多かったしな。
若手の新アイディアは、素直に教えてもらってる。
たまに俺が相槌しか話してないうちに「出直します」って言うから、どうやらテディベアとしても活用されてる模様。
2017/10/19(木) 08:44:29.39ID:CxX652pT
>>673
気持ち悪い
2017/10/19(木) 08:45:50.14ID:CxX652pT
自分の行動を素直にと修飾するところが完全に淫乱テディベア
2017/10/19(木) 20:46:11.30ID:SO5YirTn
オブジェクト指向を理解させたければ
まずはオブジェクトを理解させることからはじめないと

クラスやプロトタイプは二の次でいいし
責務や役割は別レイヤーの話
677デフォルトの名無しさん
垢版 |
2017/10/20(金) 06:47:53.32ID:2DRMxDJ6
DDDって結構やってるもん?
678デフォルトの名無しさん
垢版 |
2017/10/20(金) 07:15:39.98ID:VprmOZRL
ディスプレーディスパッチドライバ。
2017/10/20(金) 07:46:42.44ID:l3SzA2hH
>>677
IT後進国の日本ではまだほとんど導入されてないね
非正規化DB 、非レイヤー化、貧血ドメイン、トランザクションスクリプトが主流
680デフォルトの名無しさん
垢版 |
2017/10/20(金) 08:25:54.77ID:VprmOZRL
韓国に学べ!
2017/10/20(金) 08:30:05.48ID:E/kZ39qH
>>677
3Dゲームはよくやる
2017/10/20(金) 08:43:33.27ID:cXXy/ND2
>>677
結構やってるでしょ
エヴァンス本から何年経ったやら…
683デフォルトの名無しさん
垢版 |
2017/10/20(金) 08:54:44.62ID:2DRMxDJ6
>>679
>>682
完全に対立してるな。

個人的には比較的昔からある企業は前者で、若くて成功してる部類の企業は後者かな?と思うけど。

実際DDDやってるぜー、て現場はどういう特性なんだろ。
2017/10/20(金) 18:29:33.31ID:yLtxI7rs
要件定義や設計時にDDDの考え方を(一部)導入してるのと
実装含めて厳格にDDD導入してるのとで違うよね

前者は多いけど後者は少ない
>>679は実装者の視点
>>682は要件定義・設計者の視点
おそらく
2017/10/20(金) 20:39:31.31ID:QLYblo8q
たとえば>>26をDDDでやるとどんな感じになるの?
DCIでやったときとの違いも知りたい
2017/10/20(金) 22:19:22.96ID:tVzPx1a9
>>685
まず本人を召還して質問攻めにする
2017/10/21(土) 01:13:21.31ID:Uy6nGuGD
アンドロイドアプリ開発って稼げるんかな?
2017/10/21(土) 01:50:48.55ID:7iF7m8RQ
レッドオーシャン
2017/10/21(土) 11:03:31.78ID:hrRqQerQ
>>687
業務アプリを受託で開発するのが主戦場
iOSと同時開発必須

自分で直接販売するのはバクチだね
アプリ数多いといってもニッチはまだまだ足りてない
2017/10/22(日) 16:21:52.81ID:cbaZLKfH
>>592
別に複数あっていいと思うが
社員給与を振り込む
給与の分類か属性かで
2017/10/22(日) 19:45:01.88ID:+ZCERvep
>>592
給与は社員に与えられるものだから
「社員に対して」は要らなくね?
2017/10/22(日) 20:06:35.35ID:rLFHcAK9
役員やパート・アルバイト等、社員以外のケースがあるんじゃね?
2017/10/22(日) 22:16:25.60ID:ACc+t4fi
>>592
お金を移動させる
694デフォルトの名無しさん
垢版 |
2017/10/22(日) 22:16:28.27ID:guBNBPv4
>>592
目的語でひとくくりにするとわかりにくいけど
日本語では名詞が述語をどう修飾するかは格で区別されるから
格を考えればよいかと

1.「振り込む」が述語ならば振込先は口座なので「社員の口座に」としたほうが良いかと
振り込む(社員の口座に:与格, 給料を:対格)

2.「社員に」を使うなら述語は「支払う」かな
支払う(社員に:与格, 給料を:対格)

3. 対格しか使いたくないんですということならば「社員の」という属格で対格を修飾するしかないんじゃないかな
振り込む(社員の給料を:対格)
2017/10/22(日) 22:33:46.62ID:NNQ/H7Ih
文章だけで表現しなけりゃいいだろw
696デフォルトの名無しさん
垢版 |
2017/10/22(日) 22:52:37.75ID:6ZVx9hPm
すっごい不評な法令検索つくって賞もらっている大学教授
法令データベース「e-Gov法令検索」リニューアルにあたり、同法情報研究センターの協力教員である名古屋大学情報基盤センター(センター長:森健策)の外山勝彦(とやまかつひこ)
2017/10/24(火) 06:59:53.59ID:lnfs4xW4
DDDと言えば20項目の責務単位でドメインクラス作ったら一つのグラフ作るのに20個のクラスがデータベースに問い合わせちゃってパフォーマンスやばい

有識者のみなさんはどうやってるの?
2017/10/24(火) 07:10:47.55ID:vrotHuwu
DDDならドメイン層とインフラ層のレイヤーは分けろ

つまりドメインのクラスが個々に
直接SQL文でDB叩いたりしない
2017/10/24(火) 07:28:15.97ID:lnfs4xW4
>>698
例えばドメインクラス「作業時間」にhogeプロジェクトの作業時間を問い合わせた時、作業時間クラスがDBクラス使って作業時間を教えてくれるんじゃないの?

この辺解らないとパフォーマンスの問題でアクティブレコードに走っちゃいそうです
2017/10/24(火) 07:38:44.12ID:vrotHuwu
>>699
たとえばソシャゲみたいなWebアプリをイメージしてみよう
一個アイテムを見るたびにDBアクセスしてたら重いから
画面を遷移するときにまとめてローディングするよな?

だからそういう風にインフラ層で
ある程度まとめてデータ取ってきて
ドメイン層の内部ではDBに直接触らないようにする
2017/10/24(火) 08:58:46.53ID:UVHXr0A6
>>700
それはレイヤ分けるメリットでなくて
レイヤ分けるデメリットをカバーする方法じゃないの
2017/10/24(火) 12:12:03.52ID:lnfs4xW4
>>700
あらかじめオブジェクトにぶち込むのかな
油断するとメモリ食いそう
2017/10/24(火) 12:12:39.91ID:1mA0bXuL
>>697
集約の単位が間違ってんじゃないの
2017/10/24(火) 12:15:40.46ID:lnfs4xW4
>>703
昔は画面単位にデータ取ってたけどトランザクションスクリプトアンチパターンになるから作業時間とか予算とかドメインでクラス分けたんだ

それぞれのクラスがデータベースに問い合わせるからウッホという状態に
2017/10/24(火) 17:47:57.40ID:cjHIRFnx
>>697
基本は集約一つにリポジトリ一つ
レポーティング用途の場合はドメインモデルやリポジトリを経由せずに
DBレイヤーに直接問い合わせるのも有り

ドメインモデルを経由しなければ
ドメインロジックが分散する可能性があるのでトレードオフを判断したり
それを避ける工夫が必要だったりする

Patterns, Principles, and Practices of Domain-Driven Designって本で
一つの章使ってレポーティングの実装パターンを紹介してるので読むといいと思う
2017/10/24(火) 19:37:04.66ID:zYnBGUyD
ドメイン駆動とORMって相性悪くない?

class Foo : ValueObject<Foo> { 〜 }
class Bar : ValueObject<Bar> { 〜 }
class Baz : ValueObject<Baz> { 〜 }

class Hoge : Entity<Hoge> {
private final Foo _foo;
private final Bar _bar;
public Hoge(Foo foo, Bar bar) {
Assert.notNull(foo);
Assert.notNull(bar);
_foo = foo;
_bar = bar;
}
public Baz queryBaz() {
// なんか計算する
return new Baz(...);
}
public Hoge doSomething() {
// なんか計算する
return new Hoge(..., _bar); // なんか計算した結果fooが変化する。_barはそのまま
}
}

ORMってこういうガチンコDDD的なオブジェクトってうまくマッピングしてくれないじゃん?
だからORM使おうとするとpublicプロパティに汚染されてゲロ吐きそうになる
かといってORMはDTOまでに留めてDTOとドメインオブジェクトのマッピングを手書きするってのはそれはそれでめんどくさい
2017/10/24(火) 19:50:43.93ID:bxrjOehA
>>706
AutoMapper
2017/10/24(火) 20:00:23.46ID:zYnBGUyD
>>707
AutoMapperってやつそんな賢いの?
2017/10/24(火) 20:44:30.93ID:1mA0bXuL
逆にDDDこそORMだろ
集約をそのまま永続化したいんだから
2017/10/24(火) 21:35:54.97ID:bxrjOehA
>>708
使わないなんて考えられない
2017/10/24(火) 21:36:46.21ID:zYnBGUyD
>>709
どうかな
さっきも書いたようにDDDに忠実にドメインモデルを構築するとpublicプロパティが無くなって完全コンストラクタでインスタンスを構築しなければならない
DTOのようにフラットな構造にならない点でもORMで扱いにくい
2017/10/24(火) 21:46:26.94ID:zYnBGUyD
そもそもDBが単にオブジェクトの置き場所になるってのも疑問だよ
RDBは個々のオブジェクトではなく集合としてのビジネスルールを表現するのに適している
単なるデータストアではない
1ヶ月の間に正当な休暇を間に挟まず3営業日連続で欠勤した従業員にはペナルティを与えるといった業務ルールがあったらSQLで解決するほうがスマート
2017/10/24(火) 21:50:42.54ID:8vhM38kM
どのORM使ってるの?
いまどきORMのために可視性を変えたりしないでしょ
2017/10/24(火) 21:58:23.29ID:8vhM38kM
>>712
> そもそもDBが単にオブジェクトの置き場所になるってのも疑問だよ

DDDだろうとトランザクションスクリプトだろうとDBの役割は変わらないよ
ドメインモデルから見てあたかも単なるオブジェクトの置き場であるかのように振る舞うっていうのは、
そう振る舞うように作ってるからそうなるのであって、DBから見たら、アプリがDDDで作られてるかどうかなんてわからない
2017/10/24(火) 22:02:14.66ID:vrotHuwu
>>712
じつはそういう考え方もアリだと思う
SQLやPrologでビジネスルール書くのもアリ

でも現実的にはDDDの
インフラ層にDBを隔離するやり方が無難だと思う

SQLでビジネスロジックを表現すると
シンプルな例だと分かりやすく感じても
実務レベルの複雑なルールでは非常に難解になる

OOでチマチマ差分を書いていく方が分かりやすい
これはなんでOOが主流なのかの理由でもあると思う
2017/10/24(火) 23:18:27.01ID:7kpfYeDE
>>712

ひっかけっぽい例だな
SQLかじったレベルじゃそれは書けない

普通にアプリでやったほうが柔軟性高そうだ
2017/10/25(水) 01:20:58.43ID:vWNNDC2i
>>712
RDBMS主体でやるプロジェクトもあるだろ
ただ古臭くて不便なことが多いからか
アプリケーション側でやるのがほとんど

技術者の数も違うからかな
2017/10/25(水) 07:21:56.95ID:xH/9oE/2
期待のデータベーススペシャリスト持ちが開発してくれたプログラム
1クラス1メソッドにSQLをぎっちり書いていてくれた
流石データベーススペシャリストだと思った
2017/10/25(水) 14:49:56.93ID:0GYD+24d
そんなんアーキテクチャ検討時に認識合わせしとけよ
単なる指示ミス
2017/10/25(水) 18:41:28.64ID:xH/9oE/2
>>719
チームリーダーは電気寄りのC使い
JAVAの実装にはノータッチ
2017/10/25(水) 19:15:55.71ID:xH/9oE/2
データベーススペシャリストがSQLしか知らんのは仕方ない

ソフ開持ってなきゃね
2017/10/25(水) 19:21:45.35ID:aatZ8FSF
オブジェクト指向のスペシャリストとは言ってないからな
2017/10/25(水) 19:39:46.07ID:Pb7+sINR
メンバー集める時はくだらん資格のことより影響を受けた本とか聞いた方がいい
2017/10/25(水) 19:51:28.91ID:U0g+4+bj
オブジェクトにメソッドでリクエスト飛ばすと答が返ってくるならそれはそれでいいような…
2017/10/25(水) 22:27:46.82ID:Iwa5PdiW
>>719
>>718みたいな奴が指示する立場なわけないだろw
2017/10/25(水) 22:52:11.24ID:Pb7+sINR
DBスキルつけても負の遺産と有害な社内規約のせいで役に立たないことが多いね
データアクセス層でオブジェクトにマップしたらもう二度と中は見たくない
2017/10/25(水) 23:16:26.90ID:0GYD+24d
>>720
javaはともかくJAVAって書かれると
あっ・・・(察し)ってなるから気をつけて
2017/10/25(水) 23:17:51.80ID:Pb7+sINR
J(AvA)し
729デフォルトの名無しさん
垢版 |
2017/10/26(木) 00:00:20.94ID:g5KvQD5L
>>727
アスペすぎるだろ
お前が気をつけろ
2017/10/26(木) 01:11:04.35ID:dPE1fcQ6
スクリプトの方はjava表記多いけど
Javaの方は書籍とかもJAVA表記多いよねぇ
2017/10/26(木) 01:17:09.43ID:1jsCLZfy
ネット校正員多いけど
そんな表記は本質に全然関係ない
2017/10/26(木) 02:05:07.05ID:1RkkpTof
JAVAが得意とかJAVASCRIPT経験5年とか書いてるの見て
まともなコード書けるやつだと思えるの?
2017/10/26(木) 03:24:25.76ID:6866r+hk
そんなことで何か判断してる気になってるオマ、恥ずかしいぜw
734デフォルトの名無しさん
垢版 |
2017/10/26(木) 04:59:02.77ID:tVSriKDm
java - コマンド。
Java - 言語。
JAVA - 茶。
2017/10/26(木) 07:20:00.13ID:mjDXX7Bg
>>723
VBの絵本でプログラムを覚えました
非常に解りやすく良書だと思います
御社のお役に立ちたいです
2017/10/26(木) 07:44:35.72ID:Mi26Cf7P
>>735
不採用
2017/10/26(木) 08:27:35.90ID:GZLf9rra
>>734
わろちんこ
2017/10/26(木) 12:13:23.62ID:Tj52Vsp9
憂鬱なCプログラマのためのオブジェクト指向入門かなー
■ このスレッドは過去ログ倉庫に格納されています