X



カプセル化は愚かな考え★3

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2020/09/17(木) 06:37:21.26ID:rdOa/6ar
■危険性

かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。

一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性(RFC 3439)」として「カプセル化は絶対にやめろ」としている。

大雑把にいうと、教科書の上では素晴らしく、開発を始めた最初のうちは良いが、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。

オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。

ソースコードが存在し改修が可能であればカプセル化しても問題ない。ソースコードがあってもライセンス的に改修できない場合や、そもそもバイナリのライブラリしかない場合などは絶望的である。

https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
0030デフォルトの名無しさん
垢版 |
2020/09/21(月) 16:53:08.49ID:tan4kSln
>>26
privateは何のためにあるの?
0031デフォルトの名無しさん
垢版 |
2020/09/21(月) 16:53:56.49ID:13UcesYH
>>30
ネームマングリングがあるPythonでは不要
publicのまま名前を変更するから呼び出しにくくなる!
0032デフォルトの名無しさん
垢版 |
2020/09/21(月) 16:54:44.02ID:za73uCrq
>>29
「カプセル化とはprivateではない」と書いてある教科書みたことないぞ。
ソース出せよ。
0034デフォルトの名無しさん
垢版 |
2020/09/21(月) 16:57:19.25ID:13UcesYH
>>29
Java Gold SE7対策問題 ? 問7
https://tech.pjin.jp/blog/2015/10/31/java-gold-se7%e5%af%be%e7%ad%96%e5%95%8f%e9%a1%8c-%e5%95%8f7/

Javaにおけるカプセル化について間違っているものを選んでください。
1. カプセル化とは、属性と操作を一体化させることである。
2. カプセル化されたクラスでは、インスタンス変数に対してむやみにアクセスされることを防ぐためにアクセス修飾子を「private」にすることが多い
3. カプセル化されたクラスでは、インスタンス変数の値を変更する手段としてメソッドが別途作成される事が多い
4. カプセル化されたクラスでは、インスタンス変数を操作するためのメソッドはアクセス修飾子を「public」にすることが多い
5. カプセル化を行うことで各オブジェクトの結びつきが弱くなり、プログラムの再利用性が高くなる
6. カプセル化を行うことで個々のオブジェクトの独立性が高まり、オブジェクト内部の変更が外部に影響しにくくなる。
7. カプセル化を行うことでソフトウェアの保守性や開発効率が高まり、プログラムの部分的な再利用も安易になる。

正解は「(5)」となります。

(5)以外の説明はカプセル化の説明としてどれも正しいものになります。特に抑えておいていただきたい選択肢は以下の2つでしょうか。
0035デフォルトの名無しさん
垢版 |
2020/09/21(月) 16:57:48.73ID:3ui/PrRI
世間でカプセル化と呼ばれてるものの99.9999%はprivateのことだな。
愚かなデファクトスタンダード
0036デフォルトの名無しさん
垢版 |
2020/09/21(月) 16:59:45.88ID:13UcesYH
https://qiita.com/tamekaji/items/6c19e3d05621741ee929

参考: 「徹底攻略 Java SE 11 Silver 問題集」から引用:

カプセル化は、ソフトウェアを分割する際に、関係するデータと
そのデータを必要する処理を1つにまとめ、無関係なものや関係性の低いものを
クラスから排除することで「何のためのクラスなのか?」というクラスの目的を
明確化するために行い、ほかのクラスに重複するデータや処理がない状態を目指すものです。
0037デフォルトの名無しさん
垢版 |
2020/09/21(月) 16:59:56.56ID:frM+OBSN
でも、privateが無い言語でもカプセル化ってあるけど?とかいう主張をしている人がいて衝突していた気がする。
0039デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:01:59.62ID:13UcesYH
>>37
衝突も何も「教科書」にはカプセル化はprivateにすることなんて書いてない
オブジェクト指向理解した気になってるなんちゃってが言ってるだけ
0040デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:04:39.17ID:13UcesYH
逆に必要なものを「publicにすること」と書いてあるなw
同じ意味のように見えて同じではない。
なぜなら全て必要なら全てpublicにしても「publicにすること」という
条件を守っているからカプセル化の定義とは矛盾しない

http://e-words.jp/w/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96.html

カプセル化とは、オブジェクト指向プログラミングにおいて、互いに関連するデータの集合と
それらに対する操作をオブジェクトとして一つの単位にまとめ、
外部に対して必要な情報や手続きのみを提供すること。
外から直に参照や操作をする必要のない内部の状態や構造は秘匿される。
0041デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:04:54.88ID:frM+OBSN
>>32

> >>29
> 「カプセル化とはprivateではない」と書いてある教科書みたことないぞ。

もしかして、じゃなくて、「カプセル化とはprivateにすることである」のソースを求めてる?

だいぶ前に試験を受けたときの記憶だから...ちょっと教科書探すよ。
0043デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:08:09.08ID:13UcesYH
>>42
> そもそもpublicなら「遮蔽」にならんじゃん?

カプセル化はprivateにすることではない
カプセル化は(必要なものを)publicにすることだ

必要ないものをどうするかなんて決まっていない
0044デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:08:59.13ID:apXLM6YN
> カプセル化されたクラスでは、 … アクセス修飾子を「private」にすることが多い

前スレの人ってのは、これを カプセル化=アクセス修飾子を「private」にすること と解釈したんだろうか?
0046デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:10:21.60ID:13UcesYH
カプセル化において、必要ないものを
publicにしてコメントで内部用と書こうが、_プリフィックスをつけようが
Pythonのようにネームマングリングで呼び出しにくくしようが
どれでもいいのだ

必要なものをpublicにする。
必要ないものはどうでもいい。
0047デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:11:53.07ID:13UcesYH
>>45
プログラミングにおいては「触るな危険」でも「隠された真実」でもなくて
「内部実装」(だから仕様は固定されておらず予告なく変更することがあります。)という程度の意味だな
0049デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:16:21.58ID:13UcesYH
>>48
真実ってなんですか?
publicだと隠されてない真実なんですか?
プログラミングに置いて真実ってどういう意味ですか?
0050デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:22:09.73ID:SfcYXUEp
>>49
不都合な真実
publicにできたらノーベル賞級の偉業だぞ
0052デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:23:13.30ID:G3yMm26e
>>49
プチエンジェル事件
0053デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:23:47.73ID:13UcesYH
>>50
たとえで言うんじゃなくて、プログラミング用語で言ってくださいという意味です。
プログラミングで「真実」なんて言葉は使いません。
0054デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:32:42.55ID:frM+OBSN
うーん、だめだ...見つからん。
記憶ソースですまん。
でも、黒本じゃない本(黒本と同じ会社が出版)の問題にもあったのは覚えている。

カプセル化の選択肢はこれでいいの?って感じたのは覚えているんだよ,,,。他の選択肢がありえないものだったから、消去法で一択だったけど。

まぁ、Oracle Javaにおけるカプセル化はフィールドをprivateにしてメソッドをpublicにすることなんだなって無理矢理納得したけど。
0055デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:33:56.90ID:BKUa/6+Z
カプセル化を考えるとき
隠す隠さないという発想に出るのは
あくまで実装ありきの考えだから

先にインタフェースを考え
再利用性や直交性のために先にデザインされ
あとからそれに実装を与えるのがカプセル化

publicにするものはそれがインタフェースだから
publicにしないものはそれが実装だから
0056デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:34:41.41ID:13UcesYH
>>54
お前の記憶のものは見つからなくても、

「カプセル化とは」の質問と答えは書いてあるやろ?
それ書けばいいんやで?

Oracle Javaにおいてカプセル化は
なんて言ってるか書いてみ
0057デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:43:28.75ID:frM+OBSN
黒本から抜粋すると、
オブジェクト指向におけるカプセル化の特徴

・データがオブジェクト外に漏れることを防止できる
・オブジェクト内で保持する不変な値を保護できる
・クラスの実装を変更する際、呼び出し側への影響を軽減できる

というのはあるな。
まぁ、そりゃそうだわな。
0058デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:49:42.33ID:frM+OBSN
すまん、黒本じゃなかった。同じ会社の出している試験問題アプリの回答内容だったわ。

ていうか、いい加減に1のテンプレ変えようぜ。
定期的にこのスレくるけど、1の言うカプセル化の意味が本気でわからん。
0059デフォルトの名無しさん
垢版 |
2020/09/21(月) 17:54:04.06ID:+MA8+KhA
>>29
なるほどね
オブジェクト指向に対して執拗に文句いってる人は
だいだいJavaの人なので納得

>>34
めちゃくちゃな問題だね
こんなの勉強して”正解”を覚えちゃうから
自分で考えなくなるんだろうね
0060デフォルトの名無しさん
垢版 |
2020/09/21(月) 18:16:13.76ID:fI5zzMAW
> めちゃくちゃな問題だね
> こんなの勉強して”正解”を覚えちゃうから
> 自分で考えなくなるんだろうね

↑理由が一切書いてないことに注目(笑)
こういうの多いね。難癖だけ付ける人。
0061デフォルトの名無しさん
垢版 |
2020/09/21(月) 18:26:45.54ID:frM+OBSN
>>59
Java Goldをとる人がオブジェクト指向に文句を言うことは無いと思う。
基本的に試験内容自体はJavaの実務経験(他言語の実務経験では無理)がないと解けない問題が多い。私が例(記憶)として挙げたのが珍例なだけで...。

何でもかんでもsetter,getterメソッドを用意して貧血ドメインなプログラムを平気で書くプログラマーは多いかもしれんが(根拠のない偏見)、少なくともJava Gold持つ奴がそんなクソコードを書くことはないと思う。思いたい。 
0062デフォルトの名無しさん
垢版 |
2020/09/21(月) 19:16:33.69ID:isBduuhS
書くプログラムによるけどな。
データマイニングツール実装するならほぼフルアクセス必要なレコードが絶対に必要になる。
なぜならそれがドメインが求める機能だから。
0066デフォルトの名無しさん
垢版 |
2020/09/21(月) 21:40:09.54ID:wwTdiRfD
>>61
その珍問はさておいて
じゃあJava Goldを取るような人は
カプセル化とな何か、どう定義しているの?
0068デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:13:46.62ID:bItwwpmo
> じゃあJava Goldを取るような人は
> カプセル化とな何か、どう定義しているの?

Java Goldを取る人が定義するのか?
Java Goldを取るような人はどういう定義をカプセル化と思ってるかだろ?

答えは>>34に書いてあるな。間違いを除いた以下がカプセル化の定義としてよく知られている。

1. カプセル化とは、属性と操作を一体化させることである。
2. カプセル化されたクラスでは、インスタンス変数に対してむやみにアクセスされることを防ぐためにアクセス修飾子を「private」にすることが多い
3. カプセル化されたクラスでは、インスタンス変数の値を変更する手段としてメソッドが別途作成される事が多い
4. カプセル化されたクラスでは、インスタンス変数を操作するためのメソッドはアクセス修飾子を「public」にすることが多い
6. カプセル化を行うことで個々のオブジェクトの独立性が高まり、オブジェクト内部の変更が外部に影響しにくくなる。
7. カプセル化を行うことでソフトウェアの保守性や開発効率が高まり、プログラムの部分的な再利用も安易になる。
0069デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:16:09.36ID:bItwwpmo
ところでPythonやってる人は、カプセル化はprivateではない
ネームマングリング(__プリフィックスつけたメソッド名を内部名へ変更すること)のことだ
って思ってるのか?
0072デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:29:13.61ID:Ab752W48
>>70
> 1,5,6は蛇足。

蛇足である理由は?
そして蛇足であっても書いてあることは正しいよね

> 2,3,4は多いってww
全てじゃないんだから多いという言い方をするしか無い
全てって言ってほしいんだろ?
そしてお前が「全てなわけがない!」って言いたいんだろ?w
先手取られたから、何も言えないね
0073デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:30:09.90ID:Ab752W48
>>71
この程度かどうかは論点じゃないよね

カプセル化の定義として正しいかどうかだよね
論点のすり替えは見逃さないよw
0074デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:41:57.34ID:jDcMk3G3
なにがカプセル化か人によって言うことが違う
基準が無いのに合っているって
0076デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:43:31.65ID:Ab752W48
じゃあ変なことを言ってるやつが間違ってるだけだろw
Java Goldの定義が正しい
だからJavaやってる人はカプセル化の定義を知ってる

知らんやつがオレオレ定義で喚いているだけ
0079デフォルトの名無しさん
垢版 |
2020/09/22(火) 03:50:12.39ID:jDcMk3G3
>2. カプセル化されたクラスでは、インスタンス変数に対してむやみにアクセスされることを防ぐためにアクセス修飾子を「private」にすることが多い
>3. カプセル化されたクラスでは、インスタンス変数の値を変更する手段としてメソッドが別途作成される事が多い
>4. カプセル化されたクラスでは、インスタンス変数を操作するためのメソッドはアクセス修飾子を「public」にすることが多い

なぜか5がないがそれは見なかったことにして…

カプセル化ってこういうことだったの?
オブジェクト指向って…
0080デフォルトの名無しさん
垢版 |
2020/09/22(火) 07:40:52.29ID:EwzeVKsQ
>>34が正しいんだとすればカプセル化の定義はこれ一択じゃん

>1. カプセル化とは、属性と操作を一体化させることである。
0081デフォルトの名無しさん
垢版 |
2020/09/22(火) 09:03:20.04ID:zPrOjjs3
Java Gold SE8の黒本1ページに書いてあったぞ

1. Javaにおけるカプセル化の実装に関する説明として正しいものを選びなさい。

a すべてのフィールドをprivate宣言する
b すべてのメソッドをprivate宣言する
c クラスをfinal宣言する
d クラスをstatic宣言する

Java Goldのボーナス問題だな。Bronze受けたこと無いけど、Bronzeでもあった気がする。

そして、記憶で語っているから勘違いしているかもしれないけど、わざわざJavaにおけるって書かれている。

時々、オブジェクト指向におけるカプセル化とJava(またはその他特定言語の)実装におけるカプセル化のルールを混在させる馬鹿がいる。
それも、1のテンプレがクソだから。
0082デフォルトの名無しさん
垢版 |
2020/09/22(火) 09:34:53.81ID:+e+FbMSY
そりゃこのスレは「Javaでのカプセル化は何かがおかしい」ってのが趣旨でしょ
0083デフォルトの名無しさん
垢版 |
2020/09/22(火) 09:37:22.31ID:u7FipdQU
>>1
どういった具体例があるか考えてみた。

A社が例えばユーザーの個人情報を格納するPersonクラス(を含むパッケージ)を作ってバイナリのライブラリをB社に売った。

ageフィールドをpriveteにして、セッターのsetAgeではあり得ない年齢が入力されたら0才が返る様に作られていた。

A社が潰れた。

数年後、医療技術の進歩で当時ではあり得ない年齢があり得る年齢になったのでB社は改修しようとした。


setAgeではあり得ない年齢が入力されたら0才が返る仕様だと、実際に0才なのか、あり得ない年齢が入力された結果なのか判別出来ず、
結果としてPersonクラス部分全体を作り直した。

みたいな事が起こってるのかな?
それでも入力時の年齢を一時保管してゲッターと比較するとか、やりようはありそうだからもっと絶望的な具体例があった方が良いだろうけど。
こう言う例だけでもコスパ的にはprivateよりpublicにして、コード規約で縛る程度が良いんだろうけど。

とりま、どっちの陣営もこう言う場合にこう言う問題が起こり得る。みたいな具体例からの議論したら建設的では。
0084デフォルトの名無しさん
垢版 |
2020/09/22(火) 09:52:40.57ID:zPrOjjs3
>>83
カプセル化しても、ソースコードは別に編集できるぞ。
private、publicは関係ないと思うけど。
0085デフォルトの名無しさん
垢版 |
2020/09/22(火) 10:42:17.09ID:C50Ev79m
>>84
そのモジュールを配布しているところと使っているところの開発が一緒ならな。
結局インターフェイスをどうするかって話になる。
で、それはセンスとしか言いようがないわけで変な技術論にこだわるからクソみたいな議論に繋がっている。
もう何度も行われた議論だ。
0086デフォルトの名無しさん
垢版 |
2020/09/22(火) 10:47:01.51ID:u7FipdQU
>>84
だからわざわざバイナリって書いたのに・・・。
ソースが無い状態。dllとかの形でしか持ってない状態だよ。
0087デフォルトの名無しさん
垢版 |
2020/09/22(火) 10:58:27.31ID:J3IrN4Ey
>>80
それな
他は「〜が多い」という表現で定義について述べてるわけじゃないからな

tech.pjinとかいうサイトが考えた例題だから正しいかどうかもわかりゃしない
少なくとも5の主張は間違ってるのに6と7は正しいというのは矛盾してて意味不明
0088デフォルトの名無しさん
垢版 |
2020/09/22(火) 11:34:32.81ID:J3IrN4Ey
Oracleの資料や試験範囲の「Apply encapsulation principles to a class」って項目を見ると
privateにしてgetter/setter用意するのがOracleの言う「カプセル化の原則」で
Javaな人はそれを「カプセル化の定義」だと思っちゃってるってことで間違いなさそうだね

[Java SE 8 Programming Student Guide]
• The term encapsulation means to enclose in a capsule, or to wrap something around an object to cover it.
• Encapsulation covers, or wraps, the internal workings of a Java object.
 – Data variables, or fields, are hidden from the user of the object.
 – Methods, the functions in Java, provide an explicit service to the user of the object but hide the implementation.
 – As long as the services do not change, the implementation can be modified without impacting the user.

↓この辺にもカプセル化の説明あるがそれぞれ言ってることが違う
https://docs.oracle.com/javase/tutorial/java/concepts/object.html
https://www.oracle.com/topics/technologies/newtojava/javaterminology-glossary.html
0089デフォルトの名無しさん
垢版 |
2020/09/22(火) 11:37:56.47ID:UY6+hZuP
>>79
> なぜか5がないがそれは見なかったことにして…

ちゃん>>34読んでるか?
「以下の問の中で間違ってるのはどれか?」・・・5が間違ってる
のだから無いのは当たり前だろ
0090デフォルトの名無しさん
垢版 |
2020/09/22(火) 11:40:38.91ID:bNTArSP2
あまり原理主義に走らない方が

自然の摂理でもあるまいし
都合よく美味しい所を取って要領よく使えば良いのでは
0092デフォルトの名無しさん
垢版 |
2020/09/22(火) 13:54:00.38ID:C50Ev79m
世の中には俺様ルール押し付けたほうが楽できると思ってる輩がいるのよ。
実際は逆に本人、周り含めてみんな苦労するだけなんだが。
0094デフォルトの名無しさん
垢版 |
2020/09/22(火) 16:30:45.03ID:GZMXPtYq
>>83
バイナリ部分が壮大な作りだと大事件になる。
壮大だからこそライブラリ単品でも売れる。
0095デフォルトの名無しさん
垢版 |
2020/09/22(火) 16:32:56.07ID:GZMXPtYq
>>83
struts1のメンテナンス終了事件がまさにそれ。
オープンソースであったにも関わらず壮大すぎて中小零細は誰も独自フォーク、独自メンテナンスができなかった。
0096デフォルトの名無しさん
垢版 |
2020/09/22(火) 16:43:24.11ID:rSmj9iHf
自分達でソースをメンテナンスしない場合、カプセル化で詰むことが極々稀にあるってだけだろ
最初から開発を他社まかせにするなら、詰んだ時に別の会社の製品に乗り換えればいいだけ
カプセル化のデメリットとしては、あまりにも弱いな
0098デフォルトの名無しさん
垢版 |
2020/09/22(火) 17:21:01.61ID:J3IrN4Ey
>>83
現実では「あり得ない年齢」や「0才を返す」という部分を
拡張不可能な形でハードコーディングしたりしないよね?

仮にあったとしてもそういうバイナリに依存したツケなので
仕様変更が必要なら自分で尻拭いするのは当然に感じる
0099デフォルトの名無しさん
垢版 |
2020/09/22(火) 17:37:40.71ID:EwEFShMQ
どんな思想だろうとバカが運用すれば失敗する
そうでなければそれなりにうまく行く
0100デフォルトの名無しさん
垢版 |
2020/09/22(火) 18:28:55.51ID:upDpA/6g
>>98
分かり易い例として上げただけで、実際にこんな馬鹿は居ないと信じたい。

尻拭いも当然なんだけど、そしたらカプセル化反対派は「そら見ろ」ってなるよね。
どう対処すべきかを具体的に議論して行くのが建設的では無いかと。

例えば医療技術の進歩を見越してsetAgeMaxメソッドを用意しておくとか。
0101デフォルトの名無しさん
垢版 |
2020/09/22(火) 18:45:44.82ID:zPrOjjs3
んー、じゃあ、カプセル化を1ミリも否定しない俺から例題を出すけど

class parameter{
private int value;
public getValue(){
return this.value;
}
public setValue(int value){
this.value = value;
}
}

Javaのカプセル化の原則に従うと、わざわざフィールドを用意する度にこんなSetter、Getterを書くんだよね?
面倒くさくね?

という事例を考えてみた。
カプセル化を初めて学んだ時の俺の心の声だな。

...まぁ、上記コードに限っては面倒くさいだけでメリットが感じられないというのも間違いではない。
0102デフォルトの名無しさん
垢版 |
2020/09/22(火) 18:55:06.72ID:1XqBBY/l
>>101
SetGetは要らない
代わりにフィールドをパブリックかつ不変にしてコンストラクタでバリデーションしよう

JavaやC#でアクセサ(プロパティ)が必要な本当の理由は実は「メタプログラミングのための規約」でしかない
メタプログラミングなんてものは純粋なオブジェクト指向から言わせて貰えば邪道もいいとこ
0103デフォルトの名無しさん
垢版 |
2020/09/22(火) 19:41:22.16ID:aoFeMTcw
アクセサはメタプログラミングとは全く関係ないぞ
メタの意味わかってるか?
0104デフォルトの名無しさん
垢版 |
2020/09/22(火) 19:55:58.36ID:1XqBBY/l
関係あるぞ
メタプログラミングを応用したライブラリ、フレームワークの多くはプロパティを前提として実装されている
バインディング、マッパー、シリアライザ、コード生成、、、
我々は、これらを利用したいがために、あまりにも多くの無意味なプロパティを書いてきた
それが、本来なら全く必要がないものにも関わらず、メタプログラミングで使うから、というだけでだ
0105デフォルトの名無しさん
垢版 |
2020/09/22(火) 19:59:10.63ID:aoFeMTcw
> メタプログラミングを応用したライブラリ、フレームワークの多くはプロパティを前提として実装されている

いえ、
メタプログラミングを応用したライブラリ、フレームワークの多くは
パブリックメソッドやクラスをを前提として実装されています。
プログラミングにおけるあらゆるものを前提として実装されてるので
アクセサに限りません。
0107デフォルトの名無しさん
垢版 |
2020/09/22(火) 20:17:39.19ID:aoFeMTcw
>>106
だから、プログラミングでは必ずとプロパティを使うだけだろ
メタプログラミングとは関係ない証拠
0108デフォルトの名無しさん
垢版 |
2020/09/22(火) 20:18:50.22ID:aoFeMTcw
普通は全く使わないものなのにメタプログラミングのときだけ使う
そういうものであれば「メタプログラミングのための規約」と言えるが、
普段から使ってるんだから、メタプログラミングとは全く関係ない
0109デフォルトの名無しさん
垢版 |
2020/09/22(火) 21:39:00.76ID:+zcbGttj
だから普段は使わないんだよ
メタプログラミングに毒されてるから要らないのにプロパティにしてしまっている
0110デフォルトの名無しさん
垢版 |
2020/09/22(火) 21:48:21.67ID:J3IrN4Ey
>>100
ソースを提供しない汎用的なライブラリとして作るなら
許容可能な年齢みたいなバリデーションルールは外部から読み込むようにして
許容範囲外なら例外を返すようにする

継承してクラスを拡張させる方向とかもあるが
継承の手間をかけるメリットがあるような例ではない気がする

現実のユーザーの個人情報を格納するクラスなら
年齢は生年月日で管理、コンストラクタ渡しでSetterは無し
生年月日の変更を許容するなら”生年月日変更リクエスト”を別途モデル化する
0111デフォルトの名無しさん
垢版 |
2020/09/22(火) 21:50:50.28ID:0j+aLKWi
だから、ラストの手紙を日本語で書いてしまってるからな
あの世界線の公用語は文字も日本語
0114デフォルトの名無しさん
垢版 |
2020/09/23(水) 07:01:43.37ID:vyT7LDfs
>>110
全くその通りで、そこを新人がいきなり出来る?とか、会社的(A社)には
そう言うシステム改修の度にお金発生するので敢えてそうしないと言うこともあり得る。

その場合、関数型言語でも関数内変数にしちゃう輩が多いだろうけど・・・。
0116デフォルトの名無しさん
垢版 |
2020/09/23(水) 09:18:51.25ID:irsqaiS+
>>113
プロパティの意味がわかってないのかw

プロパティっていうのは直接アクセスするのと同じ書き方で
名前(インターフェース)を変えることなく読み書き時に
任意の処理(設定値を制限するなど)を加えることができる仕組み

プロパティは実質直接アクセスするのと同じもの

なぜメタプログラミングのときだけ
任意の処理を加えるのか言ってみ
0118デフォルトの名無しさん
垢版 |
2020/09/23(水) 13:01:47.82ID:/5+6arBn
>>117
カプセル化の話なんかしてません

プロパティはメタプログラミングに使うものだという
アホ間抜けがいるから、バカにしてやってるだけです
0121115
垢版 |
2020/09/23(水) 13:16:38.01ID:EcLAlZaL
>>117
あと、勝手に俺になりすますな紛らわしい。
0124デフォルトの名無しさん
垢版 |
2020/09/24(木) 11:38:58.35ID:q5yIFuI6
正攻法ではMACアドレスを取得できないネットワーク関連のライブラリも多い。
カプセル化の弊害だ。

これ、オブジェクト指向は関係なんだけど、オブジェクト指向ではやりがちなこと。
0125デフォルトの名無しさん
垢版 |
2020/09/24(木) 12:06:19.37ID:27/WCIy4
>>124
> 正攻法ではMACアドレスを取得できないネットワーク関連のライブラリも多い。
> カプセル化の弊害だ。

カプセル化をしないことで、MACアドレスを取得できるという
ネットワーク関連のライブラリを1つでいいから言ってください

カプセル化でMACアドレスが取得できなくなるのが
嘘か本当かはそれを見ないと判断できません。
0126デフォルトの名無しさん
垢版 |
2020/09/24(木) 15:01:38.50ID:eJ60na0U
>>124
カプセル化の意味理解してる?
それ、カプセル化されたネットワーク系ライブラリからカプセル化を排除したところで、MACアドレスは取得できないと思うのだが。

まず、議論する前にカプセル化の意味からググれ。
さっきからプロパティやらメタプログラミングやら関係のない話を持ち出して何がいいたいのかわからん。
0127デフォルトの名無しさん
垢版 |
2020/09/24(木) 15:06:54.07ID:eJ60na0U
いや、プロパティは関係あるのか?
メタプログラミングとか言ってる時点で俺の知らない用語と化していそうだが。
0128デフォルトの名無しさん
垢版 |
2020/09/27(日) 07:06:20.94ID:0lir37kZ
カプセル化にも困ることはある
だからJavaではリフレクションがあるわけだしな
最初見たときはこんなの許していいのかとビックリしたが
0129デフォルトの名無しさん
垢版 |
2020/09/28(月) 08:59:39.48ID:y1yHDvjF
>>125
旧.NETは取れるよ。
新.NETはサポートOSが増えた代償で取れなくなった。
■ このスレッドは過去ログ倉庫に格納されています

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