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

■ このスレッドは過去ログ倉庫に格納されています
2017/04/02(日) 16:30:38.65ID:n7h/bBRg
前スレ
オブジェクト指向って自然な文法だな 2
http://echo.2ch.net/test/read.cgi/tech/1490506257/
2017/04/21(金) 22:34:09.19ID:TFy/T03e
>>538
> なぜならば、テスト仕様書は実装からではなく、設計書から作られなけれいけないから。

設計書を書く → その設計書のテストを書く
何の問題もないじゃないか
540
垢版 |
2017/04/21(金) 22:34:35.69ID:AJ6tejAv
>>537
getter,setterとプロパティってシンタックスシュガー以上の違いある?Kotlinとか、getterとsetterを暗黙のプロパティに変換してくれるが。
541
垢版 |
2017/04/21(金) 22:35:44.20ID:AJ6tejAv
>>539
おまえふざけんなよw
542
垢版 |
2017/04/21(金) 22:37:04.70ID:AJ6tejAv
実装してからのテスト作成って何の意味があるのか意味がわからん。
2017/04/21(金) 22:42:23.85ID:TFy/T03e
>>542
確認作業だろ?

そもそも似たようなことは検収作業でやってるだろ
2017/04/21(金) 22:43:24.15ID:rPWpf+kQ
カプセル化は不要でおk?
2017/04/21(金) 22:44:14.67ID:YTf7CJ3G
>>544
カプセル化は必要でおk
546デフォルトの名無しさん
垢版 |
2017/04/21(金) 22:45:28.27ID:cmecYv9F
>>538
んなことはわかってるっつーの
だからなんだよ
getter setterなんていらねーよという話から始まってる議論になんの関係がある
2017/04/21(金) 22:49:35.08ID:rPWpf+kQ
>>545
じゃあどうして>>506からの流れでカプセル化必要派は壊れてしまうん?
2017/04/21(金) 22:51:43.93ID:YTf7CJ3G
>>547
そうか
理解できないから壊れた判定して逃げるんだな
549デフォルトの名無しさん
垢版 |
2017/04/21(金) 22:52:25.01ID:1EW2mi9U
おまえら相変わらず低レベルな会話してんなww
2017/04/21(金) 22:54:33.29ID:JwbSy4qm
アクセッサの記述性は、下に行くほど上品とする
すでに酒飲んでこれ書いてるから、異論の必要は無い

public string Name {get; set;} // C#
public string Name {private get; set;} // 多少制限
public string Name {get; private set;} // 多少制限
attr_accessor :name # Ruby
attr_reader :name # 多少制限
attr_reader :name # 多少制限
public int getName() {return name;} // Java
public please forgive me int getName() {return name;} // 仮想OOPL-A
puloccinaucinihilipilification int getName() {return name;} // 仮想OOPL-B
// ↑インテリセンス的なものも当然禁止、emacsのabbrevもなぜか効かない設定
2017/04/21(金) 22:56:49.22ID:YTf7CJ3G
>>549
ぜひ収拾つけてくれ
俺にはどーもできん
552デフォルトの名無しさん
垢版 |
2017/04/21(金) 22:57:14.58ID:cQz9sGMN
至高の言語はswiftだよ
swiftが全ての正解
2017/04/21(金) 23:05:20.32ID:IMFbV+tE
>>552
#ifdefのくせになまいきな
2017/04/21(金) 23:07:41.24ID:rPWpf+kQ
>>548
じゃあ、設計書をかく前提の開発でカプセル化が必要な理由を説明してよ
2017/04/21(金) 23:15:04.82ID:IMFbV+tE
実際に不正な操作がされていないということを保証できるから

設計書ベースだと、オブジェクト使うときは
規約をしっかり読んで、それに抵触しないよう用心してコーディングし、
変なことが起こった時
設計書の記述みて、コード上でオブジェクトの使用箇所全部洗って、
操作の規約が守られてるかどうか逐一人間がチェックして、
それではじめてprivateの一言と同じ成果となるのだ

やってられんしそもそも間違えるし
2017/04/21(金) 23:16:10.52ID:YTf7CJ3G
利用者はちゃんと設計書を確認しながら使うとは限らないって何度も言えば、、、
2017/04/21(金) 23:16:16.72ID:fRfyQmKB
>>378
たとえば、インスタンス変数aに依存&結構コストのかかる計算で決まる値bがあったとき
bをインスタンス変数bにキャッシュしておくほうが得だよね?
publicにしたaの変更をどうやってフックするの?
2017/04/21(金) 23:22:50.81ID:rPWpf+kQ
>>555
バカなんだね
君はもうレスしなくていいよ
559デフォルトの名無しさん
垢版 |
2017/04/21(金) 23:24:54.21ID:1EW2mi9U
>>551
普通の人間には無理w
ID:rPWpf+kQは頭の出来が異次元すぎるwww
2017/04/21(金) 23:26:01.68ID:JwbSy4qm
バカじゃない人間なら
機械語とバイナリエディタでOS作れてもおかしくない
2017/04/21(金) 23:27:08.71ID:IMFbV+tE
ただの煽りかげんなり
ほんとに信じて言ってるのかと思ってた
2017/04/21(金) 23:28:45.45ID:YTf7CJ3G
>>559
そーだよなぁ
ただ喚くだけだしね
2017/04/21(金) 23:34:32.77ID:V+qA1SkC
>>393
dllやクラスファイルの形で、コードの無いクラスもあるんやで?
クラスやメソッドは紙やWebのみってのが。
2017/04/21(金) 23:38:07.22ID:rPWpf+kQ
>>563
それとカプセル化になんの関係があるの?
よく考えて発言してねバカなんだから
2017/04/21(金) 23:48:31.04ID:go/6WchZ
>>557
ずれたコメントさせてもらうが、俺ならそのbを計算した都度出力して、自らはキャッシュしない方策を考えるな。
2017/04/21(金) 23:52:18.75ID:YTf7CJ3G
>>564
よく考えて発言してね
まぁ自分がバカと認識してるだけマシだけど

dllで提供されたものが他のものに依存してて単体で動かないとか、動くけど他のdllで得るはずの値を利用すること前提だとしたらその前提を知らない奴はうまく使えない
内部の処理を隠蔽し独立した動きを提供すればいいだけなんだよ
2017/04/21(金) 23:53:01.61ID:V+qA1SkC
ん?
カプセル化でprivateしてないと勝手にフィールド書き込んでしまう恐れがある。
コード無いからprivateにする意味ある。
そんな例。

あ、publicなフィールドを紙やWebに書かなければいいと言うのはなしね。
ツールが抽出するんで。
手書きじゃ無いんで。
2017/04/21(金) 23:54:06.38ID:Ck7s6rRh
エンジニアガイジさあ…… 住処が荒廃したからってここに雑魚狩りに来るのやめなよ
2017/04/22(土) 00:12:26.79ID:EzjUI0a0
日を跨いだら突然おとなしくなったなぁ
2017/04/22(土) 00:28:58.48ID:OS/5Qg75
>>554
設計で呼び出し元に制限を規定するのであれば、試験仕様書には制限外の呼び出しはNGの試験が用意される
上記を満たす実装はカプセル化と呼ばれるのでは?
2017/04/22(土) 01:06:43.76ID:+5rvIbLJ
>>570
呼ばない
2017/04/22(土) 02:31:18.17ID:IBUJYaHp
>>569
なんかわからんけど、このバカも睡眠という概念がなさそうだな。
2017/04/22(土) 09:50:00.49ID:69jc9pki
>>565
ずれるにしてもほどがある
574
垢版 |
2017/04/22(土) 11:07:46.29ID:HbmQ/gQM
>>568
うーん、ノセられてしもたわ。そもそも論で焼け野原にするのは好ましくはないな。
気をつけよう
575デフォルトの名無しさん
垢版 |
2017/04/27(木) 12:52:25.26ID:FdhNErTM
部品として使う場合、知識が要求されるのが、ちと時代おくれかなー
576デフォルトの名無しさん
垢版 |
2017/05/02(火) 18:17:11.49ID:VYotzEOG
カプセル化、継承、オブジェクト指向設計論に熱が入るやつは
そろそろ自分が動的言語童貞だと熱弁していることに早く気がついたほうがいい
577デフォルトの名無しさん
垢版 |
2017/05/02(火) 18:21:39.30ID:Bg5rWx47
>>576
動的言語が得意な人は、オブジェクト指向にとって大事なことは何だと思うの?
2017/05/02(火) 19:36:25.52ID:S4n1GgbR
Objective-Cって動的言語だったのか
2017/05/02(火) 19:36:57.13ID:S4n1GgbR
てっきりオブジェクト指向言語かと思ってた...ん?
2017/05/06(土) 04:26:04.66ID:gDC1nU6T
それにしても(Javaの)クラスのインスタンス化の勉強がすごく楽しい。
2017/05/06(土) 09:08:09.40ID:QDs+whcb
はい
2017/05/06(土) 09:48:33.69ID:ZTeBEUxt
局所的すぎてわろ
583デフォルトの名無しさん
垢版 |
2017/05/18(木) 13:53:51.24ID:V9vRGfQu
マジでクラスの分け方教えてくれどう分ければいいんだよ
分けたとしてもどのクラスにどうデータ持たせて
クラス間の受け渡しとかどうすんだよ全部ゲットセットでpublicにしてええんか
2017/05/18(木) 15:26:21.38ID:F9Zp5ygI
>>583
データホルダー
計算役
データ管理役
UI仲介役

抽象的だがこんな分け方だろう
2017/05/18(木) 18:10:53.86ID:zzewDZCb
小人さんだと思え。「おまえはこれをやる小人さんだ!」って決めろ。
2017/05/18(木) 18:14:11.48ID:pcJKb7uP
>>583
ゲットもセットも要らない
全部パブリックフィールドでダイジョブです
カプセル化はオブジェクト指向に不要な概念と言っていいでしょう
2017/05/18(木) 19:11:55.79ID:me+sOo3Z
>>583
クラス分けで悩むならグローバル変数なくしてやりすぎなくらいメソッドを細分化してみたらいいよ
2017/05/18(木) 19:53:26.01ID:F9Zp5ygI
>>587
なるほど
2017/05/18(木) 23:04:55.06ID:yt/el+BP
>>583
世の中の仕組みと一緒だ。
社長が部下に指示を出す。
部下は結果を返す。
社長は、別の会社と連携してサービスを広げていく。

全ては機能を有していて、機能同士が連携してより大きな機能を作っていくだけだ。
2017/05/19(金) 02:05:14.71ID:879cm/wV
>>583
日本語的な表現でクラス分けをやるとしたら
「いくつも仕事をしていないこと」というのが目安だろうか

例: 「入力値のバリデーションやる」「設定ファイル読んでパラメータ保持」
怪しい例: 「ユーザー設定をDBから読んでパラメータに基づきUIをイジくって表示する」

数値的な目安が欲しいなら、パブリックメソッドが7以上あったら
そのクラスは複数の仕事を抱えている可能性があるんで、分割を検討する
まあ共通で使うクラスが太ってしまうことはよくあるけど
7ってのは平均的な人間がチラ見でパっと暗記できる事柄のリミット値
591デフォルトの名無しさん
垢版 |
2017/05/19(金) 19:43:17.99ID:7xgwPeWo
>>583
MVCモデルとかアーキテクチャで調べる
依存性の注入で調べる
完全コンストラクタで調べる

この辺り守ってれば自ずと決まる
592デフォルトの名無しさん
垢版 |
2017/05/19(金) 20:11:31.04ID:LqS/uk9i
オブジェクト指向って「学び」がないんだよな
文法が全て同じになって処理のパターンみたいなのが
すべて「名前」で隠蔽されて見えてこない。
処理の委託元のコード追ってもたらい回しにされてる感じで
「実際の処理」がどこにあるのか埋もれてしまってる状態になる。
2017/05/19(金) 21:11:32.92ID:A6bTtmgj
どうやって隠すか
ライブラリ作成側になると学びは多いよ
2017/05/19(金) 22:24:14.23ID:2Tw6P143
>>592
スタックトレースを見るんだ
2017/05/20(土) 06:03:34.30ID:5T5O2UEX
大きなシステムとか組んだ事ないんだろ
596デフォルトの名無しさん
垢版 |
2017/05/20(土) 18:54:10.07ID:urI3JAo7
まあ実際の処理を隠蔽するのがまさに1つの目的だし
たらい回しというか参照辿って芋づるで引っ張れる設計じゃないし、むしろそこがオブジェクト指向のキモだからな
2017/05/20(土) 19:17:55.25ID:mYqGvY+G
実際の処理が見れないと困るケースがもしあれば
設計が既に破綻してるって話だわな
2017/05/20(土) 20:09:39.79ID:1WQ4/ic9
役員が下っ端社員の細かい作業手順を知る必要ないからな。
ちゃんと結果報告が上がってくれば作業手順は他の人間に影響を与えてなければ関係無い。
599デフォルトの名無しさん
垢版 |
2017/05/20(土) 20:38:10.12ID:POVmnKPN
オブジェクト指向は総活躍社会
2017/05/21(日) 01:27:28.98ID:Fqssqcja
>>597
図面的な意味で設計どうこうじゃなくて「なんかバグ出てるのはわかるんだけど
誰が調べても原因がわからん」系の状況じゃね?

継承四連打キメてて3段目で特定のタイミングのみ変数上書きワロスみたいな……
2017/05/21(日) 04:39:36.10ID:bMGEt1tu
>>597
無茶いうな
602デフォルトの名無しさん
垢版 |
2017/05/21(日) 10:57:27.44ID:8IHB32RP
>>600
597じゃないけどそういうのは設計が破綻していると言うと思う
図面の設計て意味じゃなくて作成者のプログラミング設計って意味で
2017/05/21(日) 12:54:25.54ID:W3P4J6B5
世の中のソースコードの90%の多段継承は既に破綻してる、もしくは今後するけどな
つまり仕組みが糞
2017/05/21(日) 17:51:03.66ID:/ema5D/U
>>600
結局、オブジェクト指向ってただ作るだけなら得意なんだけど
正しく作っているか確認することは苦手なんだよね

そりゃあ設計はあるだろうし、設計通りに作られていれば問題ない。
でも設計通りに作られているのかの検証は、より困難になっている。
2017/05/22(月) 12:24:20.53ID:D5FtIlcH
なんか"経理部に領収書出して「清算お願いします」ってシステム"に
延々「経理部が不正やってないとも限らないよね!検証できないよね!」って
無根拠にただ喚いてる奴がいるみたいになってて相手のしようがないんだが、おまえ。
2017/05/22(月) 12:36:09.78ID:396ysVMZ
>>605
アホ
2017/05/22(月) 19:27:44.11ID:VfSiR++X
>>586
カプセル化が一番重要と思ってたんですが違うんですか?
2017/05/22(月) 19:30:22.25ID:+aWzImQa
ソース付のライブラリ使えば?
2017/05/22(月) 20:40:23.17ID:OXuVg63m
>>607
カプセル化が修正の閉鎖をもたらし
インターフェースが拡張の開放をもたらす
両方いる
610デフォルトの名無しさん
垢版 |
2017/05/22(月) 22:48:06.26ID:rXkCxzW6
やっぱりどっちもいらない
611デフォルトの名無しさん
垢版 |
2017/05/24(水) 19:52:46.15ID:E7SQQ2ii
>>607
ゲッタセッタが生えてるプライベートフィールドはパブリックと変わらないってことだろう
要するにそれはカプセル化とは言わない
それやるぐらいならむしろパブリックの方がゲッタセッタの裏で余計なことしてない保証になる
2017/05/24(水) 20:02:53.29ID:MizSfTrk
>>607
俺も重要だと思ってるけどその話題は荒れるので出さないようにしてる
2017/05/24(水) 20:51:58.45ID:0TwgkzQZ
カプセル化の話だとデータの隠蔽のことばかりになってしまうのは残念じゃのう
2017/05/24(水) 22:22:46.76ID:mgEFkV8x
メソッドオーバーライドやインターフェース実装(具体例はJavaのinterface)も一応カプセル化の範疇だろうが
どっちかってと「継承」とか「クラス図」とか「デザパタ」の文脈で話す場合が多いかも
2017/05/24(水) 23:27:44.78ID:krzOkTvb
>>614←こいつわかってなさそう
2017/05/25(木) 00:11:42.62ID:W6ilo8po
詳細を隠し、結合度を弱め、変更に強くする、だっけか?
ただ、まあ面倒い

C#の新しいプロパティ構文がJavaでも使えればいいのにな
2017/05/25(木) 07:20:20.62ID:06hv3Ht1
哲学やると頭腐る
2017/05/25(木) 07:29:05.76ID:iVz5yu8w
最初から?
2017/05/25(木) 14:20:37.34ID:R5hiuhFH
>>611
データの整形はいずれにしても必要なわけで問題はどこで整形するか
クラス外で何カ所も整形の処理書くよりプロパティ内に書いた方がいいよね
2017/05/25(木) 21:00:55.82ID:a5WTl5cb
>>619
ゲッタセッタで公開されたプライベートフィールドと、書式化された文字列を返すプロパティって全然別物じゃんアホなの
2017/05/25(木) 22:16:33.15ID:06hv3Ht1
>>611
SetterGetterの殻に閉じこもってプログラミングする安心感は異常

そんな保障してなんの役に立つ
どのみちオブジェクトを関数の引数にしたら、どこで何されるかわかったもんじゃない

publicにしたら処理をフックすることもできない
へんな値が設定されたときに例外をだすこともできないし
Audio.volumeでボリューム設定なんてこともできないだろう
2017/05/26(金) 12:49:01.87ID:nbqvOpds
セッタゲッタ作って役に立ったこともあるだろうが、無駄にコードが増えただけのこともあるだろう
無条件にやるのはただのバカ。フックいれることが予想される場合にするのはいい
2017/05/26(金) 14:05:46.16ID:tID9m1OJ
>>622
Yes
2017/05/26(金) 15:13:04.21ID:FvwfjnU+
そのクラスのユーザが自分だけじゃない場合は、とりあえず全部privateにして、getter/setter作っといた方がいいね
2017/05/26(金) 16:21:29.95ID:Heb9aC5z
getter,setterを通じて変数に触れるのであればそれはもはやprivateとは言えないと思ってる
2017/05/26(金) 16:22:11.52ID:Heb9aC5z
getterはまだ良いけどsetterは要らないなぁ
2017/05/26(金) 16:37:50.24ID:FvwfjnU+
>>625
> getter,setterを通じて変数に触れるのであればそれはもはやprivateとは言えないと思ってる
言いたいことはわからなくもないが、クライアントコードとそのクラスの接点がsetter/getterであると
保証されていれば、内部構造の変更は自由になるというのが異なる。
2017/05/26(金) 18:31:35.52ID:Heb9aC5z
確かにね
言ってることはよくわかる
だとしてもsetterは用途が限られるように感じてる

それならインスタンス生成時に必要な情報を全部ぶち込んじゃえばいいんじゃね?と最近考えてる
629デフォルトの名無しさん
垢版 |
2017/05/26(金) 19:19:04.64ID:grHVRT/B
class1
{
public int setInt;
public string setStr;
}

class2
{
public int setInt { set; get; }
public string setStr { set; get; }
}

この2つの違い教えて
外のクラスから参照・変更するだけなら同じ扱い?
2017/05/27(土) 10:49:30.96ID:ieplBCy2
>>626
後でconfigの類を入れるとか、setLoggerだとかで
必要になる場面がたまにあるかも

なおPythonでそれやろうとしてプロパティデコレータ使おうとしたら「setだけのデコレータはない」というので
またPythonの俺様仕様か……って閉口した
2017/05/27(土) 10:59:35.13ID:u9alIOxt
setterだけってことは

obj.x = 1 #=> これは出来る
obj.x #=> 例外

になって欲しいってことか?イラネ
2017/05/27(土) 11:03:59.72ID:HaHIN1I5
メンバを個別にセットゲットする需要ってそんなにないだろう?
2017/05/27(土) 11:16:48.16ID:ieplBCy2
>>631
obj.config = user_config

みたいなのだ
setconfig(user_config)でもよろしかろうが、readwriteとreadは機能としてあるけどwriteはない
なんて片手落ちはあんまり想像してなかった
「正しいやり方はwriteイラね」とかマニュアルに書けってよ
2017/05/27(土) 11:58:55.24ID:0+MwcC+M
getter,setterはメソッドなのでクラス中で処理してクラスとして必要な形で出し入れできる
直接さわることとは別物だよ
2017/05/27(土) 12:19:45.90ID:HaHIN1I5
>>634
それはみんな分かってるんじゃないかな
>>583あたりからの流れで、全部のフィールドにゲットセット持たせることの是非を言ってるんだと思う。

フィールド(メンバ変数)が複数あったとして、ゲットセットする需要というか意味があるのは
ごく一部なんじゃないか。
2017/05/27(土) 12:38:09.02ID:ieplBCy2
理想: getter/setterはメソッドとすべき
setterで引数のチェック、getterでoutはコレであってるかのチェックはもれなくやるべし

現実: やらなくてもだいたい例外が飛ぶか動かないかするからわかる
637デフォルトの名無しさん
垢版 |
2017/05/27(土) 12:45:31.51ID:5/vhXFvj
ないとバカが騒ぐから作っておけばいい
こんなつまらん事でわざわざバカにエサを与える必要はない
638デフォルトの名無しさん
垢版 |
2017/05/27(土) 17:30:05.68ID:N4GV+Pp+
ゲッタセッタにフックさせる「かもしれない」をどう受け取るかによるから不毛と言えば不毛
柔軟に拡張できると受け取れば良しとなるし、不要な可能性を残すと受け取れば悪しとなる

個人的には単純にゲッタセッタで命名しといてくれるとインテリセンスでプロパティ探す時楽だからあった方がいい
ただゲッタセッタで命名しときながら裏で全然関係なかったり重い処理してる糞コード書く奴が一定数いるのも現実
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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