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

レス数が1000を超えています。これ以上書き込みはできません。
2017/04/02(日) 16:30:38.65ID:n7h/bBRg
前スレ
オブジェクト指向って自然な文法だな 2
http://echo.2ch.net/test/read.cgi/tech/1490506257/
904デフォルトの名無しさん
垢版 |
2017/06/21(水) 09:11:42.85ID:mDRh5T94
C++の例

Base *base_pointer = new Base();
Base base();
905デフォルトの名無しさん
垢版 |
2017/06/21(水) 09:19:49.52ID:mDRh5T94
pikeという言語は、newをつかわない

bird tweety = bird("Tweety", 0.13);
tweety->eat("corn");
tweety->fly();
tweety->max_altitude = 180.0;

fish b = fish("Bubbles", 1.13);
b->eat("fish food");
b->swim();

animal w = fish("Willy", 4000.0);
w->eat("tourists");
w->swim();

Inheritance | Object-Oriented Programming | Beginner’s Tutorial - Pike Programming Language
https://pike.lysator.liu.se/docs/tut/oop/inheritance.md
2017/06/21(水) 10:28:20.88ID:bqAd0GFb
new要らないな
2017/06/21(水) 10:47:23.25ID:eLmte6hp
コンパイラが進化すればいらなくなるんじゃね
2017/06/21(水) 11:13:54.44ID:+MSTc8BP
>>902
コンストラクタはクラス名と同じって制約があるんだから、コンパイラの気持ちになったらnewなんて別にあってもなくてもいいでしょ
人にわかりやすいようにしてあるだけ
なにがコンパイラの気持ちだアホ
2017/06/21(水) 11:19:25.58ID:ooAgeRH5
パラメーターがないとややこしいからある場合で考えると
(new Foo)(p1,p2,p3) ととらえるか、new (Foo(p1,p2,p3)) と捉えるかの感覚の違いじゃない?
前者なら宣言的に「新しくFooのインスタンスを作って(初期化パラメーター渡して)るんだな」感が出てnewはあったほうがいいし、
後者なら「新しいFooのインスタンスを作る関数のFoo()を呼んでるのにnewなんて余計やろ?」ってなる

従ってコンストラクタとしてFooを定義する言語や、クラスがそもそも関数的な存在の言語ならnewは蛇足
2017/06/21(水) 11:39:01.69ID:XUERnIj3
>>902
コンパイラとしては無いと困るもんでもない
newのあるなしで挙動は変えられるけど
2017/06/21(水) 11:42:21.94ID:x++JJuQ3
スタックかヒープかってこと?
2017/06/21(水) 11:46:29.64ID:v7daEmTS
>>908
> コンストラクタはクラス名と同じって制約があるんだから、コンパイラの気持ちになったらnewなんて別にあってもなくてもいいでしょ
class Foo { }
function Foo() { }
2017/06/21(水) 11:48:18.80ID:v7daEmTS
class Foo { }
function Foo() { }
が両立する言語の場合、
a = new Foo(); // Fooクラスのコンストラクタ
b = Foo(); // 関数Fooの呼び出し
を区別する必要があるから、newが必要
2017/06/21(水) 12:29:16.70ID:Y4WM7moX
>>913
それをnew無しにもできるでしょ。クラスと関数で区別つくんだし
2017/06/21(水) 12:43:42.22ID:Y9QahJfp
>>903
リフレクション
2017/06/21(水) 12:45:39.84ID:Y9QahJfp
Activator.CreateInstance()とかは?
2017/06/21(水) 12:52:24.42ID:JHIJAiI6
classname.new()
2017/06/21(水) 12:56:10.63ID:v7daEmTS
>>914
newなしだったら、
a = Foo();
b = Foo();
なんですが・・・
2017/06/21(水) 14:21:56.72ID:L1LFWazB
new を付けなかったら、インスタンスが作られないから、
this が正しく、インスタンスを指さない

JavaScript だと、prototype 継承が動作しない
2017/06/21(水) 16:12:32.59ID:CwIOTiNS
お、おう
2017/06/21(水) 22:04:39.36ID:xiNpcjp1
JavaScriptができた当時の仕様だと、
インスタンスを作る方法はnewしかないでしょ?
2017/07/01(土) 23:37:05.45ID:Tp0p2tiJ
まぁ言ってる意味は分からんでもないんだよな
コンパイラはFooがクラスか関数か、何なのか知ってるから
区別できるよねっていう
ただし意味解析をしなければFooが何なのか分からない
newがあれば構文解析だけで何をしようとしているかわかる
Fooが何かのか解析するまでもなく、字面の並びだけで関数呼び出しなのか
インスタンスの生成なのかの区別がつく
いざコンパイラを作るとなったらこの差はでかい

あとなんつーか、そういうこと言い出したら
(int i = 0; i < 100; ++i ) なんていう並びの書き方はfor文の時にしか使わないんだから
「for」って要らなくね?とか、goto ERR;って書くけど、ERRがラベルであることは
コンパイラは知っているんだから「goto」って要らなくね?とか
2017/07/01(土) 23:45:05.96ID:N+ZXroXE
Foo()というメソッドが定義されてなければnewなしだとコンパイルエラーになるんじゃないの...
2017/07/02(日) 00:07:24.31ID:yqVk05l0
コンパイラはソフトウェアにとって重要なものであるので
ちゃんと専門の学問があってセオリーがある
必ずしもセオリー通りにする必要はないが、いちおうセオリーがある
セオリーに従えばコンパイラは
字句解析→構文解析→意味解析、というステップを踏んで
プログラムを解析することになっている
ここで、Fooがクラスであるか関数であるかによって
インスタンス生成か関数呼び出しか、切り替えるという文法にしてしまうと
意味解析をしなければ構文解析ができない、という逆流現象が発生してしまう
また、コンパイラ生成器にBNFか何かを食わして自動で構文解析のコードを生成してもらうと
思っても、意味解析をしなければ構文が判明しない箇所のある文法では都合が悪いじゃろ
ただし、セオリーはセオリーでしかなく、従わないことも多々ある
たとえばC++の字句解析において、これは最長一致であるので
「>>」は右シフトと判断されそうなものであるが
出現場所によっては「>」と「>」の二つに分解される
これは字句解析がその後の工程であるはずの構文解析を先回りして少しだけ
してしまっている状態
2017/07/02(日) 00:07:47.85ID:0SO6fajC
>>922
> コンパイラはFooがクラスか関数か、何なのか知ってるから
> 区別できるよねっていう

知らないぞ?っていうかJavaScriptにおいて
クラスは関数と全く同じもの。
2017/07/02(日) 00:11:14.19ID:0SO6fajC
なんかニワカが長文書いているようだが、
JavaScriptにclassキーワードが追加されたのは比較的最近。
互換性を保つ上で、classキーワードは関数に変換される。

また
function Klass と書けばクラス
function func と書けば関数
というふうに先頭が大文字か小文字かで区別する
というのはあるがこれは慣習であって言語仕様ではない。
2017/07/02(日) 00:14:28.75ID:yqVk05l0
JavaScriptの話などしていないから関係ない
なぜなら元の>>901の質問者のコードはどう見てもJavaだから
>>919あたりで何故か脱線したようだけど、これは全くのノイズであるから関係がない
2017/07/02(日) 01:37:38.04ID:9byBa7OY
obj = instantiate(Foo)
929デフォルトの名無しさん
垢版 |
2017/07/03(月) 06:49:00.62ID:rdvbpUW5
オブジェクトが請け負う役割の範囲が未だよく分からん。

例えば、武器を装備するという行為は、
オブジェクト自身に機能を持たせるのか、
actorを第一引数とする処理を別に作るのか。

対象を省略できるからオブジェクトに実装したりするけど、コンテキストの依存性などの問題でゲームマスター的なクラスに処理を任せるべきだなと思ったり。
2017/07/03(月) 07:34:00.67ID:Rzh0OD1D
「武器を装備しろ」と命令したらあとは当該クラスがよしなにやって
こっちには結果教えてくれればいいだけなので
その「役割の範囲」そのものが当該クラス任せです。
クラスが自分でやっても、武器総合管理クラスに聞いてても
上位は感知しないことで切り離してるので。
2017/07/03(月) 07:39:44.51ID:sUmj13cM
equip(soldier, weapon)
soldier.equip(weapon)
2017/07/03(月) 11:04:22.70ID:SlrShd+d
関数型なら武器を装備するのも簡単
2017/07/03(月) 22:50:46.43ID:R6Sojlsl
セックスはどうすればいいんだ?
934デフォルトの名無しさん
垢版 |
2017/07/03(月) 23:00:58.77ID:c364q6zP
chinko.equip(manko)
2017/07/03(月) 23:03:36.07ID:R6Sojlsl
一方的だな
2017/07/04(火) 23:07:51.12ID:VgVQ93XC
friendにして相互っつ〜ワケにはいかんの?
937デフォルトの名無しさん
垢版 |
2017/07/05(水) 21:55:54.95ID:QXr7Yy+H
オブジェクト試行の「オブジェクト」っていうネーミングって
誤解を招かないか、
どっちかというと「モノ」じゃなくて仮想的な「生命体」じゃない?
だって動きを持ってるし、誕生して活動して死ぬわけじゃん。
「モノ」なのはコンストラクタやメソッドでやり取りされる「引数」
の方だろ。
「プロパティ」は「生命体の所有物」だと思えばスッキリする。
なのに生命体の方をオブジェクトと言うのはおかしいよ。
クラスはその生命体の「家系」みたいなもんだな。
両親がいる必要がないから単細胞生物の分裂のほうが近いか、
クラスは「遺伝子情報」だな、これでかなりスッキリするじゃないか。
938デフォルトの名無しさん
垢版 |
2017/07/05(水) 22:12:07.95ID:odMt6Ynp
つまり美少女の母親もまた処女懐胎した美少女なわけだな
2017/07/05(水) 23:48:29.76ID:s7u8/Pz4
まだいたの?
オブジェクトを無理やり現実に当てはめるやつ
2017/07/06(木) 00:07:02.68ID:/frq9FD5
>>939
生温く見守ろうぜ
941デフォルトの名無しさん
垢版 |
2017/07/06(木) 00:22:32.98ID:O802MHgz
>>937
新鮮な意見だな。
コードと現実は違うって概念のカテゴリー分けに使われてるだけだと思った。
2017/07/06(木) 01:33:28.30ID:Gh9vN0mU
擬人化しないと物事を理解できない人っているよな
943デフォルトの名無しさん
垢版 |
2017/07/06(木) 01:40:25.53ID:9sJW4q9K
じゃああなた方はバイナリの0と1をCPUの信号レベルで
全部機械的に把握できるんだな?すげえなぁ、さすが
コンピュータの熟練技術者は違うね。

言語化してるんだから抽象的思考は重要に決まってんだろ。
2017/07/06(木) 01:53:51.11ID:Gh9vN0mU
なに言ってんだこいつ
2017/07/06(木) 03:07:14.86ID:x/UayICR
抽象化ってなんだっけ?
どこら辺が抽象化してるの?
2017/07/06(木) 03:11:06.65ID:pIo4ewrq
いずれにしても少女に喩えなくて良い
2017/07/06(木) 04:00:24.80ID:jOp2RAP8
「1+1ってなに?りんごは?りんごはどうなっちゃうの!?」
2017/07/06(木) 10:41:08.52ID:sqBoBgpD
>>947
リンゴは一緒に買いに行ってほしいの
2017/07/06(木) 10:57:30.69ID:/frq9FD5
りんごちゃんかわいい
2017/07/06(木) 11:55:37.04ID:ZZVNNqrh
飛躍的な議論が進行しているな
951デフォルトの名無しさん
垢版 |
2017/07/06(木) 12:23:55.42ID:yrqFUwOI
少しずつまともに美少女うんこ問題を議論できる土台が出来てきたようだな
2017/07/06(木) 12:27:47.00ID:jsnas7L+
何を面白がるかみたなもんにこそ知性が出ちゃうと思ってる
悲しいね
自覚が無いのか意固地になっちゃってるのか知らんけど
2017/07/06(木) 18:21:22.89ID:j+3WJv+Z
モデルは問題解決のために設計するので、
まったく的外れ。

世の中を表現したいわけじゃないし、
世の中に似せる必要も全くない。
954デフォルトの名無しさん
垢版 |
2017/07/06(木) 19:22:23.33ID:0T2UvbzF
なんか最近「モデル」って言うの馬鹿の間で流行ってるの?w
2017/07/06(木) 19:24:13.39ID:NwSzXY2t
(? なに言ってんだこいつ…)
2017/07/06(木) 19:40:14.63ID:rLOZYnLv
オブジェクト指向ってDBのエンティティを拡張したものだろ

1事実1箇所と考えたら現実に当てはめないとダメだろ
2017/07/06(木) 20:22:03.68ID:ZZVNNqrh
>>956
いいえ

いいえ
2017/07/06(木) 20:29:21.13ID:Dxq//V42
>>956
残念ながら見当外れ
959デフォルトの名無しさん
垢版 |
2017/07/06(木) 20:45:03.97ID:ecitQSu4
エンティティとオブジェクトは対応するものだよ
960デフォルトの名無しさん
垢版 |
2017/07/06(木) 20:47:16.64ID:ecitQSu4
エンティティからクラスを自動生成するのが今のやり方
対応しないとしたら正規化できてない
2017/07/06(木) 21:08:11.46ID:ZZVNNqrh
リソース系ならまだわかるが
2017/07/06(木) 23:39:48.30ID:x/UayICR
対応と言われても抽象的で分からんな。
エンティティは実態でオブジェクトはその射影だよ。

何を持って対応とするの?
エンティティとオブジェクトで可逆性は保証されてないけど
2017/07/07(金) 00:03:06.17ID:ZLKHtWHA
エンティティだけがオブジェクト指向だと思ってるCRUDマンワロタw
2017/07/07(金) 00:06:20.53ID:ZLKHtWHA
そーゆーさ、入れポン出しポンっていうの?超シンプルなCRUDの経験しかない奴が
オブジェクト指向とはをなんぞやを語るのやめてよマジでww
965デフォルトの名無しさん
垢版 |
2017/07/07(金) 05:43:32.56ID:1OiH67XQ
>>943
何が言いたいのかわからんが、プログラミングしたい事象を、そのままオブジェクトに丸ごと落とし込むんじゃ無くて一旦分解して考える。
共通点とか過去の資産使えそうなのはそうする。
ここは他でも使えそうとかあったら分けておく。
再利用出来そうな場所と、そうでない場所を分ける。

人と車って系統的に全然違うからオブジェクト指向の動物クラスみたいなのじゃ全然違うだろ?
でも移動出来るってのは同じだ。
食事と燃料補給は違うが、エネルギーが無いと動かないってのも同じ。
そうやって全然関係無さそうなものの共通点を考えると抽象的なクラスが出来てくる。
現実のオブジェクトと違うけど、より本質に近いオブジェクトになる。
2017/07/07(金) 07:21:29.95ID:5Fyb0GDQ
>>965
人と車を動くという共通点によって同じ操作をインターフェイスで作るみたいな感じ?

10画面程度の業務システムしか組んだことないから知らんのだけど大規模システムはそんな風にオブジェクト指向で設計するの?

オブジェクト指向入門見て分類学的に設計するものだと思ってた
2017/07/07(金) 07:25:14.64ID:5Fyb0GDQ
966だけど、ゲームでオブジェクト指向すると動くという操作は人も車も変わらんか

業務システムじゃエンティティが正義だと思うけど、ゲームや制御じゃ事情や適用方法が違うんだろうね

制御は構造化しかやったことないけど
2017/07/07(金) 07:33:06.32ID:DRnLdr12
>>937
アラン・ケイのメッセージングのオブジェクト指向がまさにその着想だな

http://worrydream.com/EarlyHistoryOfSmalltalk/
My biology major had focused on both cell metabolism and
larger scale morphogenesis with its notions of simple mechanisms
controlling complex processes

でも残念ながら現在の主流は抽象データ型のオブジェクト指向
クラスやそれに準ずる言語機能をユーザー定義型として扱うストラウストラップらの着想が根底にあり
生命体とのアナロジーはそぐわない
969デフォルトの名無しさん
垢版 |
2017/07/07(金) 07:44:57.59ID:JJYyKRQq
大規模かは知らんが、最近は継承はあまり好まれなくなった。
委譲やインターフェースによる多態性のが好まれる。

これはおいらの推論だが、昔はCUIからGUIに移行するときの規模に対応するためにOOPが誕生した。
今度はPCやスマホなどの多様なGUI、webプログラミングでビューとロジックを分ける必要が出てきた。
ここにOOPは対応しきれてない。

そこで関数型言語が注目されたりした訳だが、今のOOPは関数型言語と同じ所を目指してる最中な気がする。
なぜなら、関数型言語にはコード資産が無いけどOOPには有るから。
全く違うプラットフォーム行くのは怖いから。
実際、言語は優秀でもツール類が絶望的に足りない。
2017/07/07(金) 08:16:46.35ID:G2hd19q1
継承を使わないのは、複雑になるから。
多重で継承すると、デバッグが大変。

継承でロジックの一元化を狙うより、
1番トップの1階層目ぐらいの継承で妥協しておいた方が、
ソースを体系化しやすく、プロジェクトの見通しが良くなる。
2017/07/07(金) 08:31:15.22ID:SENaJwbT
>>970
言語として多重継承できる言語の方が少ないと思う

あとロジックの一元化は継承とまた別の話だよ
2017/07/07(金) 08:42:08.67ID:G2hd19q1
>>971
多重じゃなくて、継承の継承でした。
垂直の継承。

継承がロジックの一元化の全てではないが、
手法の一つなので別問題にする必要もないと思うが。
どう別問題に扱うの?
2017/07/07(金) 08:54:11.36ID:3/JgoNbI
継承はあるけど継承の継承は出来ないって例えばどの言語?
974デフォルトの名無しさん
垢版 |
2017/07/07(金) 08:54:25.16ID:8UX+Q+HA
オブジェクトが必ずしもDBとだけ対応してるってのは
間違いじゃないかな?
関数オブジェクトとかあるし、
GoFのデザパタとかで出て来るオブジェクトは全然DB関係ない
のばっかりじゃん。
JavaScriptやUIプログラミングもオブジェクト指向化してるけど
UIなんてDBと無関係だぞ。
俺は >>937だけど、JavaScriptやっててオブジェクトは「生命体」
だと思ったんだよ、「xxxer」 ていうオブジェクト作ること多いじゃん、
だから「xxxをする人」ってことでしょ。
DIとかオブジェクトを引数としてやり取りしたり、
メソッド内で他のオブジェクトを new したりすると何やってんだか
はじめはわからなくなったけど、
「ある生命体Aの部下として生命体Bを『配属』させ、所有物のように受け渡したり、
部下として仕事をさせる」と考えると結構上手く説明がつくことに気づいたんだよ。
2017/07/07(金) 08:59:17.56ID:6QLBDLc9
「おいら」って20年ぶりくらいに見た
2017/07/07(金) 09:00:08.09ID:U3HkjAD4
クラスあるいはそれに準ずる言語機能を抽象データ型(簡単にはユーザー定義型)として扱う着想において
クラスの継承により部分型を表現するのは危険をはらむということはかなり早い時期に指摘されている
だから言語機能としてのインターフェースが考案され、以降はそれを使って部分型を安全に表現する言語が汎用されている

継承は部分型を表現すること以外に、実装の重複をなくす(簡単にいうとコピペによる分散を防ぐ)役割も担っていたが
初期のインターフェースは実装を持てなかったため、継承のメリットのうち後者は捨てるか、クラスとの併用で気をつけて使うしかなかった

ただ、型クラスやトレイトという考え方や言語機能が考案され、インターフェイスも実装を持てるようになったので
クラス(というか継承)の役割はほぼ終わりつつある
2017/07/07(金) 09:28:29.21ID:G2hd19q1
>>974
初心者への例え話レベルですね。

客、ウェイター、料理人、冷蔵庫(データベース)

客がウェイターに指示をする。
ウェイターが料理人に指示をする。
料理人が冷蔵庫から材料を取り出す。
でも、プログラム上では冷蔵庫から食材を料理人に渡す人がいる。
現実世界では包丁は料理人が使わないと効果を発揮しない。
プログラム上では、包丁だけあれば食材を切り刻むことができる。

店長は、店員を部下を持つ。
だが、店長の所有物ではない。
店員のリポジトリから、店コードでアクセスするものだ。
店長も店から見れば店の所有物なのだから。

だから、データにアクセスする機能は人オブジェクトにはない。
2017/07/07(金) 11:35:17.41ID:6eecx6PE
「おいら」さんはいつもの変な子でしょ。
なんか今日はこまめにID変えてるけど。

そうじゃなくて、むかしは大型コンピュータしかなかったから
大きな処理を行うにつれて「ネットワークで繋がった他のコンピュータに処理を委譲する」という
処理形式が現実になってきた。
そうなるともはや処理時間も通信状態も不明な他所のコンピュータで動いてる処理を
シーケンシャルな一意の順番で行ってゆくというのが非現実的になるのが明白で
そういった視点から「こういう処理をせよ」とクラス(独自の処理単位/物理的に別な機械)に命令したら
その単位が他に依存しないで自律的に処理を行う「オブジェクト指向」が提唱された。
(オブジェクトの再利用がどーのというオブジェクト指向とは別物)

そして、現代では「このシーケンシャルに処理が行われるとは限らない」は
薄れるどころかますます重要性を増してる要素なのだけど
なぜか亡霊のように『処理の間に他人が絡まなければ』って
局所的処理があたかもこれからも可能だと"信心"してる
関数型言語とかいうのが地獄の底から這い出してきて
世界の皆が困惑してる。だいたいそんな状況。
2017/07/07(金) 11:57:04.53ID:U3HkjAD4
>>969
> 昔はCUIからGUIに移行するときの規模に対応するためにOOPが誕生した。

それはアラン・ケイのメッセージングのOOPの話で、継承を前提とした現在主流の抽象データ型のOOPとは関係ないよ
念のためメッセージングのOOPというのは所謂「オブジェクトにメッセージを送って」とかいうお題目を唱えながら
設計・実装・実行・運用と幅広い局面における「可能な限りの決定の遅延」を徹底する考え方ね
http://squab.no-ip.com/collab/uploads/61/IsSoftwareEngineeringAnOxymoron.pdf

>>978
> そうなるともはや処理時間も通信状態も不明な他所のコンピュータで動いてる処理を
> シーケンシャルな一意の順番で行ってゆくというのが非現実的になるのが明白で
> そういった視点から「こういう処理をせよ」とクラス(独自の処理単位/物理的に別な機械)に命令したら
> その単位が他に依存しないで自律的に処理を行う「オブジェクト指向」が提唱された。

そんな「オブジェクト指向」の出自は初耳なんだけど誰が提唱したもの?

ちなみに抽象データ型のオブジェクト指向は、C with Classe(後にC++)のスウストラップのこちらの所謂 what-is 論文が有名
http://dl.acm.org/citation.cfm?id=624721
同時期にEiffelのメイヤー、抽象データ型のリスコフ、SIMULAでクラスとオブジェクトを考案したダールとニガードも
同様の着想(SIMULAスタイルのクラスを抽象データ型として扱い、その継承機構で部分型を表現する)を得ている
980デフォルトの名無しさん
垢版 |
2017/07/07(金) 12:01:56.23ID:xvg52mfm
困惑してるだけなら関数型言語の機能取り入れたりしないだろ。
その再利用とは別のオブジェクト指向ってどうなったんよ。
MVCとかMVVMじゃ無いよね?そんな昔じゃ無いし。
2017/07/07(金) 12:11:51.38ID:6QLBDLc9
出所とか歴史上の経緯とか大切なことなの?
2017/07/07(金) 12:12:45.80ID:6QLBDLc9
それと「だれそれが提唱した〜」とか
983デフォルトの名無しさん
垢版 |
2017/07/07(金) 12:13:19.21ID:xvg52mfm
>>979
そのsmalltalkやRubyのオブジェクト指向が関数型言語と同じ方向目指してるなって感じてて、でも今の所関数型言語のが相性が良いように思える。
2017/07/07(金) 12:31:03.55ID:vHHwjjQx
>>981
継承の概念を作ったのはC++
そのさきは
2017/07/07(金) 12:32:20.58ID:U3HkjAD4
>>981
そりゃ大事だろ
誰がどういう背景でどんなことを目指して考案・発案したかって知らないでどうやって使いこなすのさ?

特に「オブジェクト指向」は同名の違う考え方が混在しているうえに
想像で語られるオレ定義が跳梁跋扈しているから、それらに翻弄されないためになおさらでしょ

>>982
誰が提唱したかを知っていれば、それを冠することで区別が付けやすいってだけの話
同じ「オブジェクト指向」でも異質な考え方があるのを区別しなければならない特殊事情を鑑みてこれは必要なこと
2017/07/07(金) 12:33:44.47ID:vHHwjjQx
>>983
いいこと言った
つまりオブジェクト指向に継承やカプセル化は
必要ないし害悪ですらあるってことが明らかになってきているってことだな
2017/07/07(金) 12:35:07.48ID:vHHwjjQx
インターフェイス、つまり型による契約プログラミングこそがオブジェクト指向の本質
2017/07/07(金) 12:35:11.95ID:SENaJwbT
>>972
あ〜深いヤツは見ててしんどいですね

ロジックの一元化を「このメソッドいろんなところで同じ処理するからまとめたよ!継承したら呼べるよ!」って感じで使ってる所だととても大変
振る舞いを一元化して異なる動作をさせたいメソッドのoverrideで使ってたら苦にはならないよ

手法としては存在するよね?って聞かれたら存在する
でも問題は設計であって継承ではないと考える
2017/07/07(金) 12:37:16.77ID:SENaJwbT
>>986
お、出たな
カプセル化不要論は浸透したかい?
990デフォルトの名無しさん
垢版 |
2017/07/07(金) 13:06:08.89ID:xvg52mfm
>>986
ありがとうだけど、継承はともかくカプセル化は必要。
モジュールも広い意味でのカプセル化だからね。
それまで不要とは思わないし、副作用と縁のきれない手続き型言語にカプセル化ある種運命共同体。
2017/07/07(金) 13:30:17.87ID:XBLDwFYK
結局どこまで行っても、ここで議論されてる事とは
「どう構造化し記述すべきなのか」なんである
2017/07/07(金) 14:05:53.15ID:vHHwjjQx
>>990
カプセル化が必要なくなるように設計するべき
手続き型に逃げちゃダメ
オブジェクト指向やりたいんでしょ?
2017/07/07(金) 14:06:56.46ID:vHHwjjQx
オブジェクト指向っていうのは言わば関数型なんだよね
2017/07/07(金) 14:08:59.90ID:vHHwjjQx
手続きをカプセル化するだけじゃただのモジュール指向手続き型
カプセル化が要らなくなるまで設計を洗練させること
これ即ちオブジェクトの正規化なり
2017/07/07(金) 14:43:00.99ID:G2hd19q1
無駄に正規化したところで、クラスの粒度、階層がバラバラになるからほどほとにしないと無駄だよ
2017/07/07(金) 15:22:06.11ID:6QLBDLc9
こだわるポイントが不適当だな
997デフォルトの名無しさん
垢版 |
2017/07/07(金) 18:42:32.82ID:eVPhxI3P
>>992
いんや。
関数型言語したいん。
だから対岸の火事なのん。
998デフォルトの名無しさん
垢版 |
2017/07/07(金) 19:12:56.87ID:8UX+Q+HA
>>977
ごめん、ちょっと言い方間違えたは、別に部下として配属する
必要はないな。
あと、thisって何かイマイチしっくり来なかったんだけど、
「この」って解釈するからどういう意味なのかわからかったが、
「俺の」と解釈しほうがいいと思った。
つまり任意のパラメータを「俺のもの」として保持しておけば、
外部から「こいつの(xxさんの)」として呼び出せるって訳だ。
2017/07/07(金) 19:32:27.33ID:6QLBDLc9
なにがなんでも日常とか物理的現実に結びつけなくたってええんやで
2017/07/07(金) 19:38:53.61ID:SENaJwbT
>>992
カプセル化は最重要だよ
おまえは何もわかってない

わかろうともしていない
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 96日 3時間 8分 15秒
レス数が1000を超えています。これ以上書き込みはできません。