前スレ
オブジェクト指向って自然な文法だな 2
http://echo.2ch.net/test/read.cgi/tech/1490506257/
探検
オブジェクト指向って自然な文法だな 3 [無断転載禁止]©2ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
2017/04/02(日) 16:30:38.65ID:n7h/bBRg
898デフォルトの名無しさん
2017/06/21(水) 07:08:04.36ID:n4ESO8N1 猫ドアは後出しでドアの要件増やされるけどインターフェイスで振る舞いを追加してけば対応可能じゃないの
オブジェクト指向言語的に考えたら
オブジェクト指向言語的に考えたら
899デフォルトの名無しさん
2017/06/21(水) 08:08:08.40ID:XUERnIj3 >>898
それはインタフェース自体を増やすと言ってるように聞こえるけど?
それはインタフェース自体を増やすと言ってるように聞こえるけど?
900デフォルトの名無しさん
2017/06/21(水) 08:31:13.44ID:ajPkQF0E >>898は新規インターフェイスの追加じゃなくて既存のインターフェイスへ機能追加だろ
901デフォルトの名無しさん
2017/06/21(水) 08:32:01.05ID:S2UygZ3z new ってなんなのか、なぜ必要なのか教えて、
オブジェクト生成元クラスのコンストラクタ関数の結果を得るだけなら、
Foo obj = Foo();
とすれば new なくても書けるのに、なぜ new を書く必要があるの?
オブジェクト生成元クラスのコンストラクタ関数の結果を得るだけなら、
Foo obj = Foo();
とすれば new なくても書けるのに、なぜ new を書く必要があるの?
902デフォルトの名無しさん
2017/06/21(水) 08:55:18.55ID:BZXMZb7j newがあるから僕らはそれがコンストラクタを呼ぶものだと知ることができる
newがなければ何をすれば良いのかわからない
コンパイラの気持ちになって考えろよ
newがなければ何をすれば良いのかわからない
コンパイラの気持ちになって考えろよ
903デフォルトの名無しさん
2017/06/21(水) 09:09:53.08ID:mDRh5T94 newをかかなくていい言語をさがそう
904デフォルトの名無しさん
2017/06/21(水) 09:11:42.85ID:mDRh5T94 C++の例
Base *base_pointer = new Base();
Base base();
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
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
906デフォルトの名無しさん
2017/06/21(水) 10:28:20.88ID:bqAd0GFb new要らないな
907デフォルトの名無しさん
2017/06/21(水) 10:47:23.25ID:eLmte6hp コンパイラが進化すればいらなくなるんじゃね
908デフォルトの名無しさん
2017/06/21(水) 11:13:54.44ID:+MSTc8BP >>902
コンストラクタはクラス名と同じって制約があるんだから、コンパイラの気持ちになったらnewなんて別にあってもなくてもいいでしょ
人にわかりやすいようにしてあるだけ
なにがコンパイラの気持ちだアホ
コンストラクタはクラス名と同じって制約があるんだから、コンパイラの気持ちになったらnewなんて別にあってもなくてもいいでしょ
人にわかりやすいようにしてあるだけ
なにがコンパイラの気持ちだアホ
909デフォルトの名無しさん
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は蛇足
(new Foo)(p1,p2,p3) ととらえるか、new (Foo(p1,p2,p3)) と捉えるかの感覚の違いじゃない?
前者なら宣言的に「新しくFooのインスタンスを作って(初期化パラメーター渡して)るんだな」感が出てnewはあったほうがいいし、
後者なら「新しいFooのインスタンスを作る関数のFoo()を呼んでるのにnewなんて余計やろ?」ってなる
従ってコンストラクタとしてFooを定義する言語や、クラスがそもそも関数的な存在の言語ならnewは蛇足
910デフォルトの名無しさん
2017/06/21(水) 11:39:01.69ID:XUERnIj3911デフォルトの名無しさん
2017/06/21(水) 11:42:21.94ID:x++JJuQ3 スタックかヒープかってこと?
912デフォルトの名無しさん
2017/06/21(水) 11:46:29.64ID:v7daEmTS >>908
> コンストラクタはクラス名と同じって制約があるんだから、コンパイラの気持ちになったらnewなんて別にあってもなくてもいいでしょ
class Foo { }
function Foo() { }
> コンストラクタはクラス名と同じって制約があるんだから、コンパイラの気持ちになったらnewなんて別にあってもなくてもいいでしょ
class Foo { }
function Foo() { }
913デフォルトの名無しさん
2017/06/21(水) 11:48:18.80ID:v7daEmTS class Foo { }
function Foo() { }
が両立する言語の場合、
a = new Foo(); // Fooクラスのコンストラクタ
b = Foo(); // 関数Fooの呼び出し
を区別する必要があるから、newが必要
function Foo() { }
が両立する言語の場合、
a = new Foo(); // Fooクラスのコンストラクタ
b = Foo(); // 関数Fooの呼び出し
を区別する必要があるから、newが必要
914デフォルトの名無しさん
2017/06/21(水) 12:29:16.70ID:Y4WM7moX >>913
それをnew無しにもできるでしょ。クラスと関数で区別つくんだし
それをnew無しにもできるでしょ。クラスと関数で区別つくんだし
915デフォルトの名無しさん
2017/06/21(水) 12:43:42.22ID:Y9QahJfp >>903
リフレクション
リフレクション
916デフォルトの名無しさん
2017/06/21(水) 12:45:39.84ID:Y9QahJfp Activator.CreateInstance()とかは?
917デフォルトの名無しさん
2017/06/21(水) 12:52:24.42ID:JHIJAiI6 classname.new()
918デフォルトの名無しさん
2017/06/21(水) 12:56:10.63ID:v7daEmTS919デフォルトの名無しさん
2017/06/21(水) 14:21:56.72ID:L1LFWazB new を付けなかったら、インスタンスが作られないから、
this が正しく、インスタンスを指さない
JavaScript だと、prototype 継承が動作しない
this が正しく、インスタンスを指さない
JavaScript だと、prototype 継承が動作しない
920デフォルトの名無しさん
2017/06/21(水) 16:12:32.59ID:CwIOTiNS お、おう
921デフォルトの名無しさん
2017/06/21(水) 22:04:39.36ID:xiNpcjp1 JavaScriptができた当時の仕様だと、
インスタンスを作る方法はnewしかないでしょ?
インスタンスを作る方法はnewしかないでしょ?
922デフォルトの名無しさん
2017/07/01(土) 23:37:05.45ID:Tp0p2tiJ まぁ言ってる意味は分からんでもないんだよな
コンパイラはFooがクラスか関数か、何なのか知ってるから
区別できるよねっていう
ただし意味解析をしなければFooが何なのか分からない
newがあれば構文解析だけで何をしようとしているかわかる
Fooが何かのか解析するまでもなく、字面の並びだけで関数呼び出しなのか
インスタンスの生成なのかの区別がつく
いざコンパイラを作るとなったらこの差はでかい
あとなんつーか、そういうこと言い出したら
(int i = 0; i < 100; ++i ) なんていう並びの書き方はfor文の時にしか使わないんだから
「for」って要らなくね?とか、goto ERR;って書くけど、ERRがラベルであることは
コンパイラは知っているんだから「goto」って要らなくね?とか
コンパイラはFooがクラスか関数か、何なのか知ってるから
区別できるよねっていう
ただし意味解析をしなければFooが何なのか分からない
newがあれば構文解析だけで何をしようとしているかわかる
Fooが何かのか解析するまでもなく、字面の並びだけで関数呼び出しなのか
インスタンスの生成なのかの区別がつく
いざコンパイラを作るとなったらこの差はでかい
あとなんつーか、そういうこと言い出したら
(int i = 0; i < 100; ++i ) なんていう並びの書き方はfor文の時にしか使わないんだから
「for」って要らなくね?とか、goto ERR;って書くけど、ERRがラベルであることは
コンパイラは知っているんだから「goto」って要らなくね?とか
923デフォルトの名無しさん
2017/07/01(土) 23:45:05.96ID:N+ZXroXE Foo()というメソッドが定義されてなければnewなしだとコンパイルエラーになるんじゃないの...
924デフォルトの名無しさん
2017/07/02(日) 00:07:24.31ID:yqVk05l0 コンパイラはソフトウェアにとって重要なものであるので
ちゃんと専門の学問があってセオリーがある
必ずしもセオリー通りにする必要はないが、いちおうセオリーがある
セオリーに従えばコンパイラは
字句解析→構文解析→意味解析、というステップを踏んで
プログラムを解析することになっている
ここで、Fooがクラスであるか関数であるかによって
インスタンス生成か関数呼び出しか、切り替えるという文法にしてしまうと
意味解析をしなければ構文解析ができない、という逆流現象が発生してしまう
また、コンパイラ生成器にBNFか何かを食わして自動で構文解析のコードを生成してもらうと
思っても、意味解析をしなければ構文が判明しない箇所のある文法では都合が悪いじゃろ
ただし、セオリーはセオリーでしかなく、従わないことも多々ある
たとえばC++の字句解析において、これは最長一致であるので
「>>」は右シフトと判断されそうなものであるが
出現場所によっては「>」と「>」の二つに分解される
これは字句解析がその後の工程であるはずの構文解析を先回りして少しだけ
してしまっている状態
ちゃんと専門の学問があってセオリーがある
必ずしもセオリー通りにする必要はないが、いちおうセオリーがある
セオリーに従えばコンパイラは
字句解析→構文解析→意味解析、というステップを踏んで
プログラムを解析することになっている
ここで、Fooがクラスであるか関数であるかによって
インスタンス生成か関数呼び出しか、切り替えるという文法にしてしまうと
意味解析をしなければ構文解析ができない、という逆流現象が発生してしまう
また、コンパイラ生成器にBNFか何かを食わして自動で構文解析のコードを生成してもらうと
思っても、意味解析をしなければ構文が判明しない箇所のある文法では都合が悪いじゃろ
ただし、セオリーはセオリーでしかなく、従わないことも多々ある
たとえばC++の字句解析において、これは最長一致であるので
「>>」は右シフトと判断されそうなものであるが
出現場所によっては「>」と「>」の二つに分解される
これは字句解析がその後の工程であるはずの構文解析を先回りして少しだけ
してしまっている状態
925デフォルトの名無しさん
2017/07/02(日) 00:07:47.85ID:0SO6fajC926デフォルトの名無しさん
2017/07/02(日) 00:11:14.19ID:0SO6fajC なんかニワカが長文書いているようだが、
JavaScriptにclassキーワードが追加されたのは比較的最近。
互換性を保つ上で、classキーワードは関数に変換される。
また
function Klass と書けばクラス
function func と書けば関数
というふうに先頭が大文字か小文字かで区別する
というのはあるがこれは慣習であって言語仕様ではない。
JavaScriptにclassキーワードが追加されたのは比較的最近。
互換性を保つ上で、classキーワードは関数に変換される。
また
function Klass と書けばクラス
function func と書けば関数
というふうに先頭が大文字か小文字かで区別する
というのはあるがこれは慣習であって言語仕様ではない。
927デフォルトの名無しさん
2017/07/02(日) 00:14:28.75ID:yqVk05l0928デフォルトの名無しさん
2017/07/02(日) 01:37:38.04ID:9byBa7OY obj = instantiate(Foo)
929デフォルトの名無しさん
2017/07/03(月) 06:49:00.62ID:rdvbpUW5 オブジェクトが請け負う役割の範囲が未だよく分からん。
例えば、武器を装備するという行為は、
オブジェクト自身に機能を持たせるのか、
actorを第一引数とする処理を別に作るのか。
対象を省略できるからオブジェクトに実装したりするけど、コンテキストの依存性などの問題でゲームマスター的なクラスに処理を任せるべきだなと思ったり。
例えば、武器を装備するという行為は、
オブジェクト自身に機能を持たせるのか、
actorを第一引数とする処理を別に作るのか。
対象を省略できるからオブジェクトに実装したりするけど、コンテキストの依存性などの問題でゲームマスター的なクラスに処理を任せるべきだなと思ったり。
930デフォルトの名無しさん
2017/07/03(月) 07:34:00.67ID:Rzh0OD1D 「武器を装備しろ」と命令したらあとは当該クラスがよしなにやって
こっちには結果教えてくれればいいだけなので
その「役割の範囲」そのものが当該クラス任せです。
クラスが自分でやっても、武器総合管理クラスに聞いてても
上位は感知しないことで切り離してるので。
こっちには結果教えてくれればいいだけなので
その「役割の範囲」そのものが当該クラス任せです。
クラスが自分でやっても、武器総合管理クラスに聞いてても
上位は感知しないことで切り離してるので。
931デフォルトの名無しさん
2017/07/03(月) 07:39:44.51ID:sUmj13cM equip(soldier, weapon)
soldier.equip(weapon)
soldier.equip(weapon)
932デフォルトの名無しさん
2017/07/03(月) 11:04:22.70ID:SlrShd+d 関数型なら武器を装備するのも簡単
933デフォルトの名無しさん
2017/07/03(月) 22:50:46.43ID:R6Sojlsl セックスはどうすればいいんだ?
934デフォルトの名無しさん
2017/07/03(月) 23:00:58.77ID:c364q6zP chinko.equip(manko)
935デフォルトの名無しさん
2017/07/03(月) 23:03:36.07ID:R6Sojlsl 一方的だな
936デフォルトの名無しさん
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 つまり美少女の母親もまた処女懐胎した美少女なわけだな
939デフォルトの名無しさん
2017/07/05(水) 23:48:29.76ID:s7u8/Pz4 まだいたの?
オブジェクトを無理やり現実に当てはめるやつ
オブジェクトを無理やり現実に当てはめるやつ
940デフォルトの名無しさん
2017/07/06(木) 00:07:02.68ID:/frq9FD5 >>939
生温く見守ろうぜ
生温く見守ろうぜ
941デフォルトの名無しさん
2017/07/06(木) 00:22:32.98ID:O802MHgz942デフォルトの名無しさん
2017/07/06(木) 01:33:28.30ID:Gh9vN0mU 擬人化しないと物事を理解できない人っているよな
943デフォルトの名無しさん
2017/07/06(木) 01:40:25.53ID:9sJW4q9K じゃああなた方はバイナリの0と1をCPUの信号レベルで
全部機械的に把握できるんだな?すげえなぁ、さすが
コンピュータの熟練技術者は違うね。
言語化してるんだから抽象的思考は重要に決まってんだろ。
全部機械的に把握できるんだな?すげえなぁ、さすが
コンピュータの熟練技術者は違うね。
言語化してるんだから抽象的思考は重要に決まってんだろ。
944デフォルトの名無しさん
2017/07/06(木) 01:53:51.11ID:Gh9vN0mU なに言ってんだこいつ
945デフォルトの名無しさん
2017/07/06(木) 03:07:14.86ID:x/UayICR 抽象化ってなんだっけ?
どこら辺が抽象化してるの?
どこら辺が抽象化してるの?
946デフォルトの名無しさん
2017/07/06(木) 03:11:06.65ID:pIo4ewrq いずれにしても少女に喩えなくて良い
947デフォルトの名無しさん
2017/07/06(木) 04:00:24.80ID:jOp2RAP8 「1+1ってなに?りんごは?りんごはどうなっちゃうの!?」
948デフォルトの名無しさん
2017/07/06(木) 10:41:08.52ID:sqBoBgpD >>947
リンゴは一緒に買いに行ってほしいの
リンゴは一緒に買いに行ってほしいの
949デフォルトの名無しさん
2017/07/06(木) 10:57:30.69ID:/frq9FD5 りんごちゃんかわいい
950デフォルトの名無しさん
2017/07/06(木) 11:55:37.04ID:ZZVNNqrh 飛躍的な議論が進行しているな
951デフォルトの名無しさん
2017/07/06(木) 12:23:55.42ID:yrqFUwOI 少しずつまともに美少女うんこ問題を議論できる土台が出来てきたようだな
952デフォルトの名無しさん
2017/07/06(木) 12:27:47.00ID:jsnas7L+ 何を面白がるかみたなもんにこそ知性が出ちゃうと思ってる
悲しいね
自覚が無いのか意固地になっちゃってるのか知らんけど
悲しいね
自覚が無いのか意固地になっちゃってるのか知らんけど
953デフォルトの名無しさん
2017/07/06(木) 18:21:22.89ID:j+3WJv+Z モデルは問題解決のために設計するので、
まったく的外れ。
世の中を表現したいわけじゃないし、
世の中に似せる必要も全くない。
まったく的外れ。
世の中を表現したいわけじゃないし、
世の中に似せる必要も全くない。
954デフォルトの名無しさん
2017/07/06(木) 19:22:23.33ID:0T2UvbzF なんか最近「モデル」って言うの馬鹿の間で流行ってるの?w
955デフォルトの名無しさん
2017/07/06(木) 19:24:13.39ID:NwSzXY2t (? なに言ってんだこいつ…)
956デフォルトの名無しさん
2017/07/06(木) 19:40:14.63ID:rLOZYnLv オブジェクト指向ってDBのエンティティを拡張したものだろ
1事実1箇所と考えたら現実に当てはめないとダメだろ
1事実1箇所と考えたら現実に当てはめないとダメだろ
957デフォルトの名無しさん
2017/07/06(木) 20:22:03.68ID:ZZVNNqrh958デフォルトの名無しさん
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 エンティティからクラスを自動生成するのが今のやり方
対応しないとしたら正規化できてない
対応しないとしたら正規化できてない
961デフォルトの名無しさん
2017/07/06(木) 21:08:11.46ID:ZZVNNqrh リソース系ならまだわかるが
962デフォルトの名無しさん
2017/07/06(木) 23:39:48.30ID:x/UayICR 対応と言われても抽象的で分からんな。
エンティティは実態でオブジェクトはその射影だよ。
何を持って対応とするの?
エンティティとオブジェクトで可逆性は保証されてないけど
エンティティは実態でオブジェクトはその射影だよ。
何を持って対応とするの?
エンティティとオブジェクトで可逆性は保証されてないけど
963デフォルトの名無しさん
2017/07/07(金) 00:03:06.17ID:ZLKHtWHA エンティティだけがオブジェクト指向だと思ってるCRUDマンワロタw
964デフォルトの名無しさん
2017/07/07(金) 00:06:20.53ID:ZLKHtWHA そーゆーさ、入れポン出しポンっていうの?超シンプルなCRUDの経験しかない奴が
オブジェクト指向とはをなんぞやを語るのやめてよマジでww
オブジェクト指向とはをなんぞやを語るのやめてよマジでww
965デフォルトの名無しさん
2017/07/07(金) 05:43:32.56ID:1OiH67XQ >>943
何が言いたいのかわからんが、プログラミングしたい事象を、そのままオブジェクトに丸ごと落とし込むんじゃ無くて一旦分解して考える。
共通点とか過去の資産使えそうなのはそうする。
ここは他でも使えそうとかあったら分けておく。
再利用出来そうな場所と、そうでない場所を分ける。
人と車って系統的に全然違うからオブジェクト指向の動物クラスみたいなのじゃ全然違うだろ?
でも移動出来るってのは同じだ。
食事と燃料補給は違うが、エネルギーが無いと動かないってのも同じ。
そうやって全然関係無さそうなものの共通点を考えると抽象的なクラスが出来てくる。
現実のオブジェクトと違うけど、より本質に近いオブジェクトになる。
何が言いたいのかわからんが、プログラミングしたい事象を、そのままオブジェクトに丸ごと落とし込むんじゃ無くて一旦分解して考える。
共通点とか過去の資産使えそうなのはそうする。
ここは他でも使えそうとかあったら分けておく。
再利用出来そうな場所と、そうでない場所を分ける。
人と車って系統的に全然違うからオブジェクト指向の動物クラスみたいなのじゃ全然違うだろ?
でも移動出来るってのは同じだ。
食事と燃料補給は違うが、エネルギーが無いと動かないってのも同じ。
そうやって全然関係無さそうなものの共通点を考えると抽象的なクラスが出来てくる。
現実のオブジェクトと違うけど、より本質に近いオブジェクトになる。
966デフォルトの名無しさん
2017/07/07(金) 07:21:29.95ID:5Fyb0GDQ >>965
人と車を動くという共通点によって同じ操作をインターフェイスで作るみたいな感じ?
10画面程度の業務システムしか組んだことないから知らんのだけど大規模システムはそんな風にオブジェクト指向で設計するの?
オブジェクト指向入門見て分類学的に設計するものだと思ってた
人と車を動くという共通点によって同じ操作をインターフェイスで作るみたいな感じ?
10画面程度の業務システムしか組んだことないから知らんのだけど大規模システムはそんな風にオブジェクト指向で設計するの?
オブジェクト指向入門見て分類学的に設計するものだと思ってた
967デフォルトの名無しさん
2017/07/07(金) 07:25:14.64ID:5Fyb0GDQ 966だけど、ゲームでオブジェクト指向すると動くという操作は人も車も変わらんか
業務システムじゃエンティティが正義だと思うけど、ゲームや制御じゃ事情や適用方法が違うんだろうね
制御は構造化しかやったことないけど
業務システムじゃエンティティが正義だと思うけど、ゲームや制御じゃ事情や適用方法が違うんだろうね
制御は構造化しかやったことないけど
968デフォルトの名無しさん
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
でも残念ながら現在の主流は抽象データ型のオブジェクト指向
クラスやそれに準ずる言語機能をユーザー定義型として扱うストラウストラップらの着想が根底にあり
生命体とのアナロジーはそぐわない
アラン・ケイのメッセージングのオブジェクト指向がまさにその着想だな
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には有るから。
全く違うプラットフォーム行くのは怖いから。
実際、言語は優秀でもツール類が絶望的に足りない。
委譲やインターフェースによる多態性のが好まれる。
これはおいらの推論だが、昔はCUIからGUIに移行するときの規模に対応するためにOOPが誕生した。
今度はPCやスマホなどの多様なGUI、webプログラミングでビューとロジックを分ける必要が出てきた。
ここにOOPは対応しきれてない。
そこで関数型言語が注目されたりした訳だが、今のOOPは関数型言語と同じ所を目指してる最中な気がする。
なぜなら、関数型言語にはコード資産が無いけどOOPには有るから。
全く違うプラットフォーム行くのは怖いから。
実際、言語は優秀でもツール類が絶望的に足りない。
970デフォルトの名無しさん
2017/07/07(金) 08:16:46.35ID:G2hd19q1 継承を使わないのは、複雑になるから。
多重で継承すると、デバッグが大変。
継承でロジックの一元化を狙うより、
1番トップの1階層目ぐらいの継承で妥協しておいた方が、
ソースを体系化しやすく、プロジェクトの見通しが良くなる。
多重で継承すると、デバッグが大変。
継承でロジックの一元化を狙うより、
1番トップの1階層目ぐらいの継承で妥協しておいた方が、
ソースを体系化しやすく、プロジェクトの見通しが良くなる。
971デフォルトの名無しさん
2017/07/07(金) 08:31:15.22ID:SENaJwbT972デフォルトの名無しさん
2017/07/07(金) 08:42:08.67ID:G2hd19q1973デフォルトの名無しさん
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を『配属』させ、所有物のように受け渡したり、
部下として仕事をさせる」と考えると結構上手く説明がつくことに気づいたんだよ。
間違いじゃないかな?
関数オブジェクトとかあるし、
GoFのデザパタとかで出て来るオブジェクトは全然DB関係ない
のばっかりじゃん。
JavaScriptやUIプログラミングもオブジェクト指向化してるけど
UIなんてDBと無関係だぞ。
俺は >>937だけど、JavaScriptやっててオブジェクトは「生命体」
だと思ったんだよ、「xxxer」 ていうオブジェクト作ること多いじゃん、
だから「xxxをする人」ってことでしょ。
DIとかオブジェクトを引数としてやり取りしたり、
メソッド内で他のオブジェクトを new したりすると何やってんだか
はじめはわからなくなったけど、
「ある生命体Aの部下として生命体Bを『配属』させ、所有物のように受け渡したり、
部下として仕事をさせる」と考えると結構上手く説明がつくことに気づいたんだよ。
975デフォルトの名無しさん
2017/07/07(金) 08:59:17.56ID:6QLBDLc9 「おいら」って20年ぶりくらいに見た
976デフォルトの名無しさん
2017/07/07(金) 09:00:08.09ID:U3HkjAD4 クラスあるいはそれに準ずる言語機能を抽象データ型(簡単にはユーザー定義型)として扱う着想において
クラスの継承により部分型を表現するのは危険をはらむということはかなり早い時期に指摘されている
だから言語機能としてのインターフェースが考案され、以降はそれを使って部分型を安全に表現する言語が汎用されている
継承は部分型を表現すること以外に、実装の重複をなくす(簡単にいうとコピペによる分散を防ぐ)役割も担っていたが
初期のインターフェースは実装を持てなかったため、継承のメリットのうち後者は捨てるか、クラスとの併用で気をつけて使うしかなかった
ただ、型クラスやトレイトという考え方や言語機能が考案され、インターフェイスも実装を持てるようになったので
クラス(というか継承)の役割はほぼ終わりつつある
クラスの継承により部分型を表現するのは危険をはらむということはかなり早い時期に指摘されている
だから言語機能としてのインターフェースが考案され、以降はそれを使って部分型を安全に表現する言語が汎用されている
継承は部分型を表現すること以外に、実装の重複をなくす(簡単にいうとコピペによる分散を防ぐ)役割も担っていたが
初期のインターフェースは実装を持てなかったため、継承のメリットのうち後者は捨てるか、クラスとの併用で気をつけて使うしかなかった
ただ、型クラスやトレイトという考え方や言語機能が考案され、インターフェイスも実装を持てるようになったので
クラス(というか継承)の役割はほぼ終わりつつある
977デフォルトの名無しさん
2017/07/07(金) 09:28:29.21ID:G2hd19q1 >>974
初心者への例え話レベルですね。
客、ウェイター、料理人、冷蔵庫(データベース)
客がウェイターに指示をする。
ウェイターが料理人に指示をする。
料理人が冷蔵庫から材料を取り出す。
でも、プログラム上では冷蔵庫から食材を料理人に渡す人がいる。
現実世界では包丁は料理人が使わないと効果を発揮しない。
プログラム上では、包丁だけあれば食材を切り刻むことができる。
店長は、店員を部下を持つ。
だが、店長の所有物ではない。
店員のリポジトリから、店コードでアクセスするものだ。
店長も店から見れば店の所有物なのだから。
だから、データにアクセスする機能は人オブジェクトにはない。
初心者への例え話レベルですね。
客、ウェイター、料理人、冷蔵庫(データベース)
客がウェイターに指示をする。
ウェイターが料理人に指示をする。
料理人が冷蔵庫から材料を取り出す。
でも、プログラム上では冷蔵庫から食材を料理人に渡す人がいる。
現実世界では包丁は料理人が使わないと効果を発揮しない。
プログラム上では、包丁だけあれば食材を切り刻むことができる。
店長は、店員を部下を持つ。
だが、店長の所有物ではない。
店員のリポジトリから、店コードでアクセスするものだ。
店長も店から見れば店の所有物なのだから。
だから、データにアクセスする機能は人オブジェクトにはない。
978デフォルトの名無しさん
2017/07/07(金) 11:35:17.41ID:6eecx6PE 「おいら」さんはいつもの変な子でしょ。
なんか今日はこまめにID変えてるけど。
そうじゃなくて、むかしは大型コンピュータしかなかったから
大きな処理を行うにつれて「ネットワークで繋がった他のコンピュータに処理を委譲する」という
処理形式が現実になってきた。
そうなるともはや処理時間も通信状態も不明な他所のコンピュータで動いてる処理を
シーケンシャルな一意の順番で行ってゆくというのが非現実的になるのが明白で
そういった視点から「こういう処理をせよ」とクラス(独自の処理単位/物理的に別な機械)に命令したら
その単位が他に依存しないで自律的に処理を行う「オブジェクト指向」が提唱された。
(オブジェクトの再利用がどーのというオブジェクト指向とは別物)
そして、現代では「このシーケンシャルに処理が行われるとは限らない」は
薄れるどころかますます重要性を増してる要素なのだけど
なぜか亡霊のように『処理の間に他人が絡まなければ』って
局所的処理があたかもこれからも可能だと"信心"してる
関数型言語とかいうのが地獄の底から這い出してきて
世界の皆が困惑してる。だいたいそんな状況。
なんか今日はこまめにID変えてるけど。
そうじゃなくて、むかしは大型コンピュータしかなかったから
大きな処理を行うにつれて「ネットワークで繋がった他のコンピュータに処理を委譲する」という
処理形式が現実になってきた。
そうなるともはや処理時間も通信状態も不明な他所のコンピュータで動いてる処理を
シーケンシャルな一意の順番で行ってゆくというのが非現実的になるのが明白で
そういった視点から「こういう処理をせよ」とクラス(独自の処理単位/物理的に別な機械)に命令したら
その単位が他に依存しないで自律的に処理を行う「オブジェクト指向」が提唱された。
(オブジェクトの再利用がどーのというオブジェクト指向とは別物)
そして、現代では「このシーケンシャルに処理が行われるとは限らない」は
薄れるどころかますます重要性を増してる要素なのだけど
なぜか亡霊のように『処理の間に他人が絡まなければ』って
局所的処理があたかもこれからも可能だと"信心"してる
関数型言語とかいうのが地獄の底から這い出してきて
世界の皆が困惑してる。だいたいそんな状況。
979デフォルトの名無しさん
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スタイルのクラスを抽象データ型として扱い、その継承機構で部分型を表現する)を得ている
> 昔は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じゃ無いよね?そんな昔じゃ無いし。
その再利用とは別のオブジェクト指向ってどうなったんよ。
MVCとかMVVMじゃ無いよね?そんな昔じゃ無いし。
981デフォルトの名無しさん
2017/07/07(金) 12:11:51.38ID:6QLBDLc9 出所とか歴史上の経緯とか大切なことなの?
982デフォルトの名無しさん
2017/07/07(金) 12:12:45.80ID:6QLBDLc9 それと「だれそれが提唱した〜」とか
983デフォルトの名無しさん
2017/07/07(金) 12:13:19.21ID:xvg52mfm >>979
そのsmalltalkやRubyのオブジェクト指向が関数型言語と同じ方向目指してるなって感じてて、でも今の所関数型言語のが相性が良いように思える。
そのsmalltalkやRubyのオブジェクト指向が関数型言語と同じ方向目指してるなって感じてて、でも今の所関数型言語のが相性が良いように思える。
984デフォルトの名無しさん
2017/07/07(金) 12:31:03.55ID:vHHwjjQx985デフォルトの名無しさん
2017/07/07(金) 12:32:20.58ID:U3HkjAD4986デフォルトの名無しさん
2017/07/07(金) 12:33:44.47ID:vHHwjjQx987デフォルトの名無しさん
2017/07/07(金) 12:35:07.48ID:vHHwjjQx インターフェイス、つまり型による契約プログラミングこそがオブジェクト指向の本質
988デフォルトの名無しさん
2017/07/07(金) 12:35:11.95ID:SENaJwbT >>972
あ〜深いヤツは見ててしんどいですね
ロジックの一元化を「このメソッドいろんなところで同じ処理するからまとめたよ!継承したら呼べるよ!」って感じで使ってる所だととても大変
振る舞いを一元化して異なる動作をさせたいメソッドのoverrideで使ってたら苦にはならないよ
手法としては存在するよね?って聞かれたら存在する
でも問題は設計であって継承ではないと考える
あ〜深いヤツは見ててしんどいですね
ロジックの一元化を「このメソッドいろんなところで同じ処理するからまとめたよ!継承したら呼べるよ!」って感じで使ってる所だととても大変
振る舞いを一元化して異なる動作をさせたいメソッドのoverrideで使ってたら苦にはならないよ
手法としては存在するよね?って聞かれたら存在する
でも問題は設計であって継承ではないと考える
989デフォルトの名無しさん
2017/07/07(金) 12:37:16.77ID:SENaJwbT990デフォルトの名無しさん
2017/07/07(金) 13:06:08.89ID:xvg52mfm >>986
ありがとうだけど、継承はともかくカプセル化は必要。
モジュールも広い意味でのカプセル化だからね。
それまで不要とは思わないし、副作用と縁のきれない手続き型言語にカプセル化ある種運命共同体。
ありがとうだけど、継承はともかくカプセル化は必要。
モジュールも広い意味でのカプセル化だからね。
それまで不要とは思わないし、副作用と縁のきれない手続き型言語にカプセル化ある種運命共同体。
991デフォルトの名無しさん
2017/07/07(金) 13:30:17.87ID:XBLDwFYK 結局どこまで行っても、ここで議論されてる事とは
「どう構造化し記述すべきなのか」なんである
「どう構造化し記述すべきなのか」なんである
992デフォルトの名無しさん
2017/07/07(金) 14:05:53.15ID:vHHwjjQx993デフォルトの名無しさん
2017/07/07(金) 14:06:56.46ID:vHHwjjQx オブジェクト指向っていうのは言わば関数型なんだよね
994デフォルトの名無しさん
2017/07/07(金) 14:08:59.90ID:vHHwjjQx 手続きをカプセル化するだけじゃただのモジュール指向手続き型
カプセル化が要らなくなるまで設計を洗練させること
これ即ちオブジェクトの正規化なり
カプセル化が要らなくなるまで設計を洗練させること
これ即ちオブジェクトの正規化なり
995デフォルトの名無しさん
2017/07/07(金) 14:43:00.99ID:G2hd19q1 無駄に正規化したところで、クラスの粒度、階層がバラバラになるからほどほとにしないと無駄だよ
996デフォルトの名無しさん
2017/07/07(金) 15:22:06.11ID:6QLBDLc9 こだわるポイントが不適当だな
997デフォルトの名無しさん
2017/07/07(金) 18:42:32.82ID:eVPhxI3Pレス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- コメ「余っている」年明けに下落も? 大量の在庫が倉庫を圧迫、赤字の恐れ…業者「値下げするしか…」 ★2 [Hitzeschleier★]
- 「レーダー照射」なぜ中国は素直に謝罪しないのか 非を認めず反論逆ギレ、ごめんなさいと言えない国情 [七波羅探題★]
- 40代教員、1億8600万円分の暗号資産だまし取られる 「警察手帳のような物」見せられ−滋賀県草津市 [蚤の市★]
- 松村沙友理、スタバは好きだけど「やっぱコーヒーに700円800円が…」「家でお湯わかしてやったらタダやん」 [muffin★]
- 村上佳菜子『ネプリーグ』で“放送事故級”の言い間違い [ひかり★]
- 【山形】豚舎が全焼 ブタ400頭が焼け死ぬ [シャチ★]
- 高市「国内にも80兆円投資する!」とか打ち上げれば、30年不況なんて吹っ飛ぶのでは?財源は何とかして。あと中抜はしないで。 [219241683]
- 【速報】「ハゲ」、来月から放送禁止用語へ。代替表現は「ナチュラル」で統一 [347751896]
- 【緊急】朝倉未来のブレイキングダウンで不意打ち食らって失神した選手、くも膜下出血で死亡 [455031798]
- 日本、ガチで終焉。資材高騰と人手不足で全国各地で再開発ストップwwwwwwwwwwwwwwwww [271912485]
- 中国「もう怒った😡本気出す😤」 ぼく「..な、何が来るんだ?!」 中国「パンダ」 ぼく「え?」 [916950698]
- 【速報】トランプ「高市、お前邪魔」 [931948549]
