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

■ このスレッドは過去ログ倉庫に格納されています
2017/04/02(日) 16:30:38.65ID:n7h/bBRg
前スレ
オブジェクト指向って自然な文法だな 2
http://echo.2ch.net/test/read.cgi/tech/1490506257/
2017/04/20(木) 22:48:28.32ID:1ly+xIep
>>339
なんで?

秘密にしたいデータは、暗号化ロジックじゃないよね?
公開する理由がない。
2017/04/20(木) 22:49:40.47ID:Rk6y34sG
>>340
暗号化ロジックは式という形式のデータです
343デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:49:49.13ID:NBs+Bll8
password.txtに書いてgithubにコミットやろjk
2017/04/20(木) 22:51:10.30ID:1ly+xIep
>>342

暗号化ロジック = 式という形式のデータ

故に

式という形式のデータ = 暗号化ロジック

と言ってる?
それは明らかに間違いだよ。
2017/04/20(木) 22:53:29.90ID:1ly+xIep
式という形式のデータ、
そこにはいろんなロジックがある。
その沢山の種類のロジックの中で
暗号化ロジックだけは公開しろ
346デフォルトの名無しさん
垢版 |
2017/04/20(木) 22:54:17.23ID:x1mUV01b
>>333
べき論はよくわからんが、そこまで言うなら個人として伝える

カプセル化は絶対必要である
なんならオブジェクト指向のキモだとも考える
目的に特化させ再利用できるようにデザインすること
きちんとネーミングすること
多様性を持たせるならばインターフェースを用いて処理を実装し移譲すればよい

以上
2017/04/20(木) 22:55:25.78ID:zhxiAG0o
ID:rIlDsUIc = ID:Rk6y34sG だよね?
昨日はシラフで今日は酔っ払っているのかな?
2017/04/20(木) 22:56:30.20ID:Rk6y34sG
>>343
冗談じゃなくそういうのあるらしいね
awsのなんかあれ
2017/04/20(木) 23:07:28.95ID:nIwh3CMn
OOPに必要かどうかしらんけど
カプセル化は単に便利だよね
スコープ的な意味で
2017/04/20(木) 23:23:01.66ID:16AwdhdC
横からカプセル化の話題を眺めていたが、素晴らしいカプセル化のアイデアが湧いてきた!
2017/04/20(木) 23:29:07.88ID:jeWo4Dft
>>325
最初はクラスの下にでも書いたらいいよ
少なくとも中に書くよりは読みやすいし
後は必要に応じて慣れやね
2017/04/20(木) 23:49:33.09ID:hTP3eC2C
インターフェースこそオブジェクト指向だという意見に全面的に同意。
継承自体はクラス目線でモジュール化を進めた結果で得られる構造なだけであって、
インターフェースのように型を意識させることはない。
結果的にはインターフェース+基底クラスパターンが最強だと思うわ
2017/04/20(木) 23:59:45.86ID:zhxiAG0o
アルゴリズムを試行錯誤している時はグローバルな構造体の方が楽。
デバッグや保守の時はカプセル化されたオブジェクトの方が楽。
これはmutableとimmutableにも同じことが言える。

カプセル化しないmutableオブジェクトの方が考えやすいなら
プロトタイプ開発ではそうすればよい。
設計が決まったらできるだけカプセル化したimmutableオブジェクトに変えよう。
354デフォルトの名無しさん
垢版 |
2017/04/21(金) 00:06:49.24ID:T1EM2She
>>351
関数の名前に構造体の名前を入れるん? 面倒じゃない?
355デフォルトの名無しさん
垢版 |
2017/04/21(金) 00:08:09.71ID:T1EM2She
>>353
不変のものをカプセル化する意味あるのか?
フルオープンでよくね?
2017/04/21(金) 00:11:37.99ID:YTf7CJ3G
>>355
不変だからこそカプセル化するんだよ
2017/04/21(金) 00:14:32.72ID:TFy/T03e
不変というのはコンパイル時に決まるってわけじゃないからな。
初期状態から変わらないってだけで、
初期状態というものは存在する。
当然それを隠したい場合も存在する。
2017/04/21(金) 00:26:21.96ID:Ck7s6rRh
>>354
そうか? 俺は元々Lisperだし、全く面倒とは思わん
でももし面倒と思うんなら、特にC++とかならオーバーロードがあるんだから構造体名入れなくてもなんとかなるでしょ
この先UFCSも導入される予定みたいだし
359デフォルトの名無しさん
垢版 |
2017/04/21(金) 00:27:55.81ID:1EW2mi9U
びっくりするくらい低レベルな会話しててわろた
ホリデープログラマーが語りだすとこうなる
360デフォルトの名無しさん
垢版 |
2017/04/21(金) 00:48:08.26ID:T1EM2She
>>356
どうして不変だからカプセル化するんだよ?
361デフォルトの名無しさん
垢版 |
2017/04/21(金) 00:48:50.43ID:T1EM2She
>>357
なぜ隠すのか?
なぜ? どうして?
362デフォルトの名無しさん
垢版 |
2017/04/21(金) 00:49:23.31ID:T1EM2She
>>358
LisperにとってJavaのクラスはどう?
2017/04/21(金) 01:04:07.46ID:YTf7CJ3G
自分で考えてみな
2017/04/21(金) 01:18:33.36ID:Ck7s6rRh
>>362
個人的には作業効率が落ちる感じがして好きじゃない
でも低産階級労働者を縛る鎖としてはいいんじゃない?
365デフォルトの名無しさん
垢版 |
2017/04/21(金) 01:19:22.96ID:T1EM2She
>>363
説明できないのな、じゃあいいわ
366デフォルトの名無しさん
垢版 |
2017/04/21(金) 01:20:01.11ID:T1EM2She
>>364
バイアスがすごいな
Lisperはやっぱ屑だな
2017/04/21(金) 01:34:09.78ID:YTf7CJ3G
>>365
聞く耳持たないヤツに対して説明できるほど理解は深くないんでね
何度も同じことを繰り返しても仕方ない
368デフォルトの名無しさん
垢版 |
2017/04/21(金) 01:43:34.54ID:T1EM2She
とどのつまりカプセル化は理解できないものなんだな?
2017/04/21(金) 02:00:31.00ID:Ck7s6rRh
>>366
もしかして低産階級労働者だった? これは申し訳ないことを書いた。失礼
370デフォルトの名無しさん
垢版 |
2017/04/21(金) 02:04:34.66ID:T1EM2She
>>369
ホントだよ!失礼極まりないよ!
371デフォルトの名無しさん
垢版 |
2017/04/21(金) 02:05:08.14ID:T1EM2She
低産階級労働者は傷ついているのです
372デフォルトの名無しさん
垢版 |
2017/04/21(金) 02:05:31.65ID:T1EM2She
私は被害者です
373デフォルトの名無しさん
垢版 |
2017/04/21(金) 02:06:19.45ID:T1EM2She
どうしてLispにはクラスがないんだろうか
みんなで考えてみよう
2017/04/21(金) 02:12:55.16ID:TFy/T03e
>>373
クラスを使わないという発想で作られたから
別にいい悪いじゃなくて、ただ単にモットーの問題
375デフォルトの名無しさん
垢版 |
2017/04/21(金) 02:18:17.50ID:T1EM2She
>>374
でもクラスは便利ですよ
376デフォルトの名無しさん
垢版 |
2017/04/21(金) 02:18:56.37ID:T1EM2She
クラスがない、つまりカプセル化もできない?
2017/04/21(金) 04:34:49.48ID:H6APCPmE
手続き型言語でも定数はグローバル変数でも問題無いんだし、関数型言語の変数はほぼ定数みたいなもんだし。
カプセル化の恩恵そのものがあんまり無い希ガス。
2017/04/21(金) 05:07:53.93ID:rPWpf+kQ
そもそも仕様書に書くべき問題をソースなんかに記述しようとするからこうなる

なんだよカプセル化って
ガキの使いでソースに手を入れようとしてるキチガイでもサポートしたいの?
ほらほらボクチンここprivateだから他のクラスから触れないからね!

チンカス過ぎる
2017/04/21(金) 05:56:50.07ID:67Y5mbs0
カプセル化はそもそも代入禁止じゃなくて隠蔽なんだが理解して書いてるのか?

SRP原則に則るならカプセル化のほうがいいに決まってる
2017/04/21(金) 06:07:38.30ID:H6APCPmE
なぜ隠蔽するかって言うと、不用意な変数の書き換えをさせない為。
関数型言語の場合は必ず変数の書き換え(と言うか再生産だが)を行うには関数を経由する。
変数を隠蔽したい場合は、パッケージで変数や関数単位で公開非公開を指定する。
2017/04/21(金) 06:09:25.78ID:rPWpf+kQ
>>379
誰から何を隠蔽するためのものなのか明確になってないんだよ
2017/04/21(金) 06:13:30.88ID:rPWpf+kQ
例えばライブラリ提供者と使用者
使用者はライブラリ側のソースを一切触ることがなく
提供者は使用者側からの問い合わせや変更依頼を断れない
ここまで立場が明確なときに隠蔽は意味を持つが

すべての人間がどのソースもすべて変更する可能性がある環境で隠蔽は意味を成さない

と俺は思う
2017/04/21(金) 06:25:22.14ID:uAFMuOM4
>>380
それだと参照するだけならいいってことになっちゃうよ?
隠蔽するなら不用意な参照もダメだよね。
2017/04/21(金) 06:33:08.40ID:67Y5mbs0
>>380
隠蔽はその変数の操作をそのクラス内に限定するためにある
プロパティを介してprivate変数に代入や参照ができるようにしてるのもそのため
変数の書換禁止ならそれこそfinalつければ済む

>>382
>すべての人間がどのソースもすべて変更する可能性がある環境で隠蔽は意味を成さない
誰がいじろうとも修正箇所をクラス内に限定する意味はあるだろ
2017/04/21(金) 06:36:29.75ID:rPWpf+kQ
>>384
だからそんなものはアプリケーションの仕様の前には意味を成さないんだよ
386デフォルトの名無しさん
垢版 |
2017/04/21(金) 07:13:56.06ID:zhvS/nL7
車とタイヤをオブジェクト指向で表現する場合、車クラスにタイヤ属性を持つのが良いでしょうか

それぞれクラスを持ってる方が良いでしょうか
2017/04/21(金) 07:21:08.83ID:7DnA3IDC
>>383
マルチスレッドでも言われるが、参照だけなら基本問題無い。
上でも書かれている通り、隠蔽したければカプセル化じゃ無くても方法はある。

カプセル化と言うか、クラスと言う型に関数(メソッド)や変数(フィールド)を押し込めるのと、関数プログラミング的な考えはメリット/デメリットがそれぞれある。

クラスは依存関係が出来やすいが、GUIなどの多くの状態を保持するのに向く。
一方の関数プログラミングはデータと関数が分かれるので依存関係を少なく出来るが、状態を関数の引数として引き回すのでGUIに向かない。

関数型言語ではa = 1はそのプログラムではずっと1で、2が欲しければinc a とか、succ aとか関数の結果として2を受け取る。
2017/04/21(金) 07:23:34.62ID:fRfyQmKB
>>385
納品したら終わりってアプリを組むときにはカプセル化なんて確かに無用だけど
そもそもカプセル化とかその先のデータ抽象(抽象データ型)とかは、アプリが動いたり大規模化したあと
それをメンテしつつ運用(ちょっとしたバグ修正だけでなく、拡張や機能改変を含め)し続けるときに
それをやりやすくする技術だからなぁ…
2017/04/21(金) 07:24:52.21ID:YTf7CJ3G
>>385
個人開発ならばまぁわからんでもないが発想が危険すぎる
頼むからめんどくさいバグを作り込む前にプログラムから手を引いてくれ
2017/04/21(金) 07:30:28.22ID:rPWpf+kQ
>>389
何を言ってるんだよ
誰から何を隠蔽するのか明確にしろよ
2017/04/21(金) 07:38:01.69ID:rPWpf+kQ
>>389
お前のソースって読み手が完全な傍観者である場合は意味があるけど
ハイじゃあソースに手を入れなきゃねってなったときには超絶読みにくいんだろ
privateにした変数がクラス内グローバル変数みたいな動作してる典型だよね
2017/04/21(金) 07:40:08.56ID:uAFMuOM4
>>387
だからいくつかある方法のひとつがカプセル化なんだよね?

>>390実装依存しようとしている人間から実装を隠蔽するんじゃね?
2017/04/21(金) 07:43:06.82ID:rPWpf+kQ
>>392
全然意味がわからない
対象のクラスに手を入れようとしてる人間に対して隠蔽したいの?
2017/04/21(金) 07:48:52.81ID:uAFMuOM4
「実装依存しようとしている人間から実装を隠蔽する」

これ以上どう簡単に言えるのか?
2017/04/21(金) 07:59:35.17ID:YTf7CJ3G
>>391
ハイじゃあソースに手を入れなきゃねってなったときには超絶読みにくいだろ
publicにした変数がクラス外にも波及するグローバル変数みたいな動作してる典型だよね

どこまで影響すると思ってるんだ
調査、設計、対応、試験にかかる工数がとんでもない数値になる
2017/04/21(金) 08:21:01.29ID:rPWpf+kQ
>>394
全く意味がわからない
外部設計書とか内部設計書とか
以外の仕様書があってそれに基づいて作成してるの?
2017/04/21(金) 08:30:29.31ID:YTf7CJ3G
>>396
ところで全然わかってない自覚があるのになぜ不要と言い張れるの?
不要である理由を明確にしろよ
2017/04/21(金) 08:30:52.58ID:rPWpf+kQ
ていうか読み込んだデータに基づいて処理するも
ソースに記述した定数で処理するも仕様書次第じゃないの?
実装依存が何を指して実装依存って言ってるのかわからない
2017/04/21(金) 08:31:42.41ID:rPWpf+kQ
>>397
どのレスの不要?
引用して欲しい
2017/04/21(金) 08:39:43.24ID:YTf7CJ3G
>>399
カプセル化不要についてだよ

まさかひとつひとつ違うことに対して不要だと言いまくってたの?
2017/04/21(金) 08:46:39.65ID:TFy/T03e
知らなくてもなくても作れるのだから不要。
極論すればアセンブルでも作れる。
2017/04/21(金) 08:54:22.04ID:rPWpf+kQ
>>400
カプセル化の不要についてだね
おk

まず処理の動作は設計書に書くものだろう
ソースでprivateやpublicになってるからどうだってんだよ

ここで反論ある?
2017/04/21(金) 08:54:46.12ID:uAFMuOM4
実装がpublicだと他人がその実装に依存して良くないことがありそうだ。参照だけでもマズい。
だからprivateにして実装を隠蔽する。

これのどこに分かりにくい点があるというのか?
設計書とか仕様書とか関係なかろう
2017/04/21(金) 09:00:18.64ID:YTf7CJ3G
>>402
ある
利用者は仕様書を確認することなく意図しない方法で利用する

他は?
と言うか一度に全部言ってくれ
2017/04/21(金) 09:05:15.16ID:rPWpf+kQ
>>404
利用者って誰?
ソースを改変するソイツ(?)は設計書を記述せずに対象のクラスを変更しようとしてる?
ソイツのことを利用者と呼んでいてお前の環境では存在しうるの?
406デフォルトの名無しさん
垢版 |
2017/04/21(金) 09:10:26.57ID:n31cY2TM
あぼーん
2017/04/21(金) 09:27:52.36ID:Ck7s6rRh
個人製作の観点からはカプセル化はいらんな
テンプレートか抽象タイプと多重ディスパッチあれば継承もいらんしミックスインもいらん
2017/04/21(金) 09:38:24.71ID:9S9WRWBb
>>405
実装する人が複数いる時、自分が作ったクラスのメンバ変数やメンバ関数を利用して
その人の担当クラスを実装する他人が自分のクラスの利用者だろう。
自分が作ったクラスも他人が作ったクラスも変更するのは作った人だけだ。

実装を一人で行える規模ではカプセル化の必要を感じないという話なら分かる。
でも前提なしでカプセル化は不要と主張したら大規模ソフトウェアも含まれる。
もしかして大規模ソフトウェアで必要かどうか全然考えてなかったの?
409デフォルトの名無しさん
垢版 |
2017/04/21(金) 09:46:56.85ID:cmecYv9F
だからホリデープログラマーと話しても無駄やて
2017/04/21(金) 09:59:20.07ID:WJo/zINx
むしろここで仕事の話をする方がおかしいけどな
2017/04/21(金) 10:01:25.18ID:WJo/zINx
>>408
担当のチェンジは無しなの?
2017/04/21(金) 10:22:27.45ID:YTf7CJ3G
>>405
話が止まるからまずは全量を語ってくれ
2017/04/21(金) 10:43:25.71ID:+U39WrXp
カプセル化されていると、メンバ変数とアクセサは分離され、外部のクラス利用者(ユーザコード)はもっぱらアクセサを呼ぶことになる。
仮にメンバ変数の実装の詳細を変更することになっても、アクセサを変更しない限り、ユーザコードは変更する必要はない。
間接層の導入による変更の局所化やね。

メリットと煩わしさの比較は人により異なりうるが、少なくとも必要なケースは少なからずあると思うが。
2017/04/21(金) 10:54:13.27ID:uAFMuOM4
せっかくカプセル化してもアクセッサなんか作ったら不自由になる。
変数を廃止したり形式の変更をしたりしにくくなる。
2017/04/21(金) 11:10:28.55ID:rPWpf+kQ
>>408
じゃあ利用者ってのはクラス使用者(そのクラスには絶対に手を加えない)のことでいいの?
2017/04/21(金) 12:01:38.24ID:YTf7CJ3G
>>415
そうだよ
javaで言うならStringクラスの利用者はStringクラスの内容を変更しないだろ

いちいち立ち止まらずまずは全量を語ってくれ
417デフォルトの名無しさん
垢版 |
2017/04/21(金) 12:12:59.55ID:T1EM2She
【全量】全体の重量。全体の容積。
2017/04/21(金) 12:20:09.36ID:YTf7CJ3G
>>417
ありがとう
2017/04/21(金) 12:41:44.49ID:rPWpf+kQ
>>416
ほうほう
だったら仮にそのクラス自体に手を入れることになった場合は
隠蔽対象者ではないということでおk?
2017/04/21(金) 12:49:54.80ID:YTf7CJ3G
>>419
うだうだ言ってねーで早く語れ
2017/04/21(金) 12:52:42.74ID:3x8HXz+G
相手にしない方がいいよ時間と労力の無駄
ID:YTf7CJ3Gが楽しんでやっているならとめないけど
422
垢版 |
2017/04/21(金) 13:05:41.49ID:KFYgHFHL
何十年前の話なのかわからなくなるな
423デフォルトの名無しさん
垢版 |
2017/04/21(金) 13:27:43.71ID:T1EM2She
>>422
いつ何度でも話していいことだと思うが
会話ってそういうものだと思う

人の色恋沙汰なんて4000年前に語りつくされているが
今なお人の心をとらえて離さないだろ

オブジェクト指向にとってカプセル化とは
それくらいの魅力があるものだってこと

会話っていうのは昔々誰々がすでにいったことだから
言っちゃいけない、話しちゃいけないなんてもんじゃない

会話に入りたいって素直に言うべき、カプセル化やめるべきって
ちゃんというべき
2017/04/21(金) 13:46:02.03ID:YTf7CJ3G
>>421
ありがとう
うんこタイムの暇潰しなので大丈夫だよ

>>423
べき論はよくわからん
そんなことよりも不要である理由を早く『明確』にしてくれ
425デフォルトの名無しさん
垢版 |
2017/04/21(金) 13:51:29.39ID:cmecYv9F
>>410
仕事の話ではなくオブジェクト指向の話だろ?
おれは1人で好きに作ってるからカプセル化なんていらねー!といわれても会話にならないよ
2017/04/21(金) 14:26:24.80ID:uAFMuOM4
>>425
それはそうだが、誰とどういうレベルで会話するのかってことだろう。
その前にホリデープログラマがどうたらってレスあるから。
427デフォルトの名無しさん
垢版 |
2017/04/21(金) 14:50:09.12ID:T1EM2She
>>424
お前が明確にするんだよ、カプセル化やめるべきだって言うんだよ
お前の仕事だよ
428デフォルトの名無しさん
垢版 |
2017/04/21(金) 14:51:20.94ID:T1EM2She
この業界趣味でやってる人の方が技術力高かったりするからね
サンデープログラマを馬鹿にしちゃいけない
2017/04/21(金) 15:30:29.00ID:YTf7CJ3G
>>427
俺は必要だと思ってるから無理だな
不要である理由を明確にするのはおまえだ
2017/04/21(金) 15:33:45.46ID:I/U40a25
データのカプセル化なんてプログラム上どこまで触って(参照/代入)いいかの線引きを決まりごとからシステム的に制限したかの違いなだけでしょ
c言語のFILE構造体の中身を参照する事はないでしょ。stdio.hに定義されていても
それは暗黙的な決まりごとだからだし、それをアクセス修飾子で明示したのがカプセル化って言葉なだけで昔からの決まりごととしては変わらない
431デフォルトの名無しさん
垢版 |
2017/04/21(金) 15:42:27.29ID:T1EM2She
>>429
どうして必要だと思ってるのか全量を言えよ、じゃないと理解できない
432デフォルトの名無しさん
垢版 |
2017/04/21(金) 15:46:08.76ID:T1EM2She
>>430
その決まりが要らないものだったんじゃないかっていうのが
カプセル化害悪論の骨子なんだよ

暗黙的なものは暗黙的なままでよかったんじゃないか?
なぜ明示する必要があったのか、それによってプログラムが
複雑になることを受け入れるのか、プログラムがブラックボックス化することに
歯止めをかけてクリーンなオブジェクト指向を取り戻そうというのが
カプセル化害悪論のモチベーション
2017/04/21(金) 15:49:33.07ID:YTf7CJ3G
>>431
聞いてるのはこっちだ
はぐらかすな
434デフォルトの名無しさん
垢版 |
2017/04/21(金) 15:51:44.08ID:T1EM2She
>>433
聞き返したのは俺だ、ちゃんと全量を示せ、逃げるな
2017/04/21(金) 15:55:05.36ID:YTf7CJ3G
質問に対する答えが質問になる程度の考えしか持たぬならもういいわ
436デフォルトの名無しさん
垢版 |
2017/04/21(金) 15:55:47.07ID:T1EM2She
>>435
捨て台詞まで吐いて逃げるのな?
437デフォルトの名無しさん
垢版 |
2017/04/21(金) 15:56:28.58ID:T1EM2She
もういいわて、お前は漫才師か!
2017/04/21(金) 15:57:50.64ID:YTf7CJ3G
そだね
439デフォルトの名無しさん
垢版 |
2017/04/21(金) 15:59:01.00ID:T1EM2She
はい逃げた、結局カプセル化を支持するやつって中身のないその場限りの
見栄を張って問い詰められたら逃げるだけの俄かなんだよな
2017/04/21(金) 16:01:17.62ID:YTf7CJ3G
そだね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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