オブジェクト指向ってクソじゃねぇよ? Part2
レス数が1000を超えています。これ以上書き込みはできません。
すごいんだよ?
カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、
オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、
オブジェクトの実際の型を隠蔽したりすることをいう。
偏差値の低い学校向けの情報処理系教科書において「大変すばらしいものであり絶対に使うように」と大体的に宣伝された。
一方、カリフォルニア大学バークレー校の有識者を中心としたインターネットを作った人たちは「階層化の有害性」として
「絶対に使うな」としている。大雑把にいうと、その時は良くても、将来的な改修の際に隠蔽されたデータに
アクセスできないと解決できない問題が出てきて、結果的にデスマーチに陥るというのである。
オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で
縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」
という概念はない。
https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96
前スレ オブジェクト指向ってクソじゃね?
https://mevius.5ch.net/test/read.cgi/tech/1535085129/ >>951
>オブジェクト単位に分ける工程
人工知能は『物の意味』を『区別』することから始まるのでは?
776 Mr.Moto sage 2018/09/08(土) 08:57:47.30 ID:Hj3WpMqo
「もの」という言葉が出たついでに言っておくと、
ここでいう「もの」は“individual”、すなわち「不可分なもの。
個人、個体、個物」を意味する。れっきとした哲学用語だ。
ただし、これは「物理的な存在」ではなく、「概念」を
指していて、しかも「具体的な意味」「内包的な意味」を
持たない。その意味で、individual は「意味を引っ掛ける釘」の
ようなもので、「こっちの釘とあっちの釘は、どこがどう違うと
言われても説明できない。ただ、引っかかっている意味が違うし、
比較によって区別できる」ものである。
同じような性質をもった存在として、Codd のデータベース理論における
データベース・キーというものがある。 自然言語処理スレッド その5
http://mevius.5ch.net/test/read.cgi/tech/1537152490/
そもそも人工知能とは、『オブジェクト指向の果てなき追求』ではないのか?
違うか?
違うというなら、その理由を50字以内で述べろ! >>953
違うという理由を人に聞く前に
そうだという理由を述べるのが筋だろ >>954
>違うという理由を人に聞く前に
>そうだという理由を述べるのが筋だろ
ならばシステムをオブジェクト単位に分ける必要性について答えておこうか。
>>951
>オブジェクト単位に分ける工程が完全に削除できるんだから
戦神のベルトが倉庫を圧迫。仕分けましょう【DQ10】
http://okirakudq10.com/archives/53537205.html >>955
科学とか工学にはるかに至らない
迷信とか思い込みのレベルだな >>935
そんな風に、セレクタ(的なシンボル)とオブジェクトが一緒くたにして扱われるところが、Smalltalk-72の良いところだと思っていて、76や80のメッセージセレクタはちょっと味付けが違っていて、オブジェクトと一線を画しているというのが、私の個人の感想です。 >>949
> そのエラーが出てからの対処が容易であることがすなわちケイのOOPの肝たる「決定の遅延」(のサポート)なんですよ
エラーが出る時点で駄目でしょ?
> おそらくとうてい許容できない行為だろうとは思いますが、Smalltalkでは日常のこちらを参考まで
許容してはいけないことだね。
エラーが出て止まるならまだいいけど、間違った結果で実行されてしまったら取り返しがつかないもの
アクロバットプログラミングはやめよう Smalltalkの実行しながら修正できるっていうのは、
「最初から再実行しなくても修正できるよ」程度のものなんだろう
最初から再実行すればいいじゃん?
それが今の時代の感覚。
テストコードはあるしプロセスを終了して最初から再実行すればいい
無の状態から再実行するから同じ状態が何度でも作れる
ユニットテストはSmalltalkで一番最初に実装されたが、
これにによって「最初から再実行しなくても修正できるよ」の
価値が大きく下がったのだろう
もちろんSmalltalk開発の初期はコンピュータの性能が低く
Smalltalkの場合、実行環境そのものという設計だったから
再実行できたとしても、再実行するのに時間がかかった
それも今はプロセス単位で再実行できるし、コンピュータの性能の
向上で再実行すれば十分になってしまった。
昔はデバッガを使って実行中にブレークポイントで止めて実行しつつ状態を
確認していたのだが、今はそんなことをすることは殆どなくなった。
なぜなら関数レベルで単体で実行することが簡単になったからだ。 >>957
おっしゃるとおり、今のキーワードに相当するトークンをメッセージ内に適当に混ぜられる自由度は失われていますね
感覚はわかりましたありがとうございます >>951
頭からダラダラ書くことしかできないお前にはそうなんだろうな w >>959
> ユニットテストはSmalltalkで一番最初に実装されたが、
> これにによって「最初から再実行しなくても修正できるよ」の
> 価値が大きく下がった
注目する部分の粒度というかタイミング(あるいはリズム感)みたいなものが互いに食い違っているんだよね
動画にもあるように、たとえTDDであっても再実行せずに直せるのは別にアクロバティックでも何でもなく
むしろ(TDDとしても)自然な流れなんだけどなぁ
決定の遅延派と早期結合派とは一生わかりあえないんだろうねきっと >>962
TDDではまず実行してテストが失敗する状態にしないといけない
実行し終わって結果が出てるんだよ
つまり二回目以降の実行っていうのは「再実行」
この再実行が簡単に行えるわけだが、それに対する
Smalltalkのメリットは未実装の直前まで実行できるってことでしかない
それで一体どんな価値があるというのか?
> 決定の遅延派と早期結合派とは一生わかりあえないんだろうねきっと
価値の話をしてないからな。
決定を遅延できるから素晴らしいんだ!(何が?)
そう、何が素晴らしいのかが書かれていない
過去においては素晴らしいなにかがあったかもしれないが、
それは今は別の技術によって解決されてしまってるということ
別の技術というのは早期結合のことじゃない
別の技術による決定の遅延という意味。決定の遅延自体は行っている。
Smalltalkの言語機能を使っていないだけ
それとも今の時代においても、何か価値があるのか?
なくなってしまってるから書けないはずだ >>963
> Smalltalkのメリットは未実装の直前まで実行できるってことでしかない
> それで一体どんな価値があるというのか?
未実装の直前まで他の準備に煩わされることなく作業をスムーズに進められるのはあきらかに価値あることだろう
未実装でエラーを出した後、仮実装のためのメソッドを追加し1回目のテスト実行を終えられる
この流れを妨げないスピード感はとにかくコンパイルを通すためにいろいろ手続きを踏まないといけない早期決定畑の人には分からないと思う
あと、レッド(→イエロー)→グリーン→リファクタリング→…のサイクルを回すのはたしかにそれぞれは再実行だけど
レッド、イエロー、グリーン、リファクタリングそれぞれの工程で実行中に書き換えられることのメリットは生きてくる
なんか、批判的に指摘してくることの粒度というかレイヤーというかがいちいち外れているんだよね
当たり前なことをしたり顔で主張されても「そうですね。で?」ってなるだけ
たとえばこれもそう↓
> 決定を遅延できるから素晴らしいんだ!(何が?)
アラン・ケイも書いているとおり(念のため再掲)→http://squab.no-ip.com/collab/uploads/61/IsSoftwareEngineeringAnOxymoron.pdf
使い捨てではない長期運用を想定したソフトウエアの開発において、知見というのはあとからついてくることは誰もが経験済みだろうし
それを開発中、運用中のシステムに適用しようと思ったとき(まあ早期決定脳では思いもよらないことだが…)に役立つのは明らかだよ
たぶん思慮の及ぶダイナミックレンジがずれていてすごく狭い範囲のことしか頭にないんじゃないかな
繰り返し指摘されているような限定された局面での問題であれば今の技術で十分対応できているしそれを否定する気はさらさらないよ
あと、あくまで暫定実装に過ぎないSmalltalkの実装やその欠陥にとらわれすぎでは?
本来であればアラン・ケイの「オブジェクト指向」とそれが目指す「決定の遅延」のために必要な要素は何かや
ストラウストラップらの型をクラス様エンティティでやるアイデアの「オブジェクト指向」との違いが何かが論じられるべきだろう
なんでそんなにSmalltalk(をやっつけること)にこだわるのかね(ほんと親でも殺されたか?) >>964
> 未実装の直前まで他の準備に煩わされることなく作業をスムーズに進められるのはあきらかに価値あることだろう
再実行しても0.1ミリ秒ぐらいの差しかないけど? >>964
> アラン・ケイも書いている 〜略 〜 親でも殺されたか?)
そいう長文言い訳はいらないんで、
どんな価値があるか書いてよw
ホント言い訳だけだな。長いのは 15行以上のカキコはたいていクソなので無条件にNGにしてる。
(.*\n){15}でNG word登録。 >>961
>頭からダラダラ書くことしかできないお前にはそうなんだろうな w
チンポがシコシコするぜ!! >>965
> 再実行しても0.1ミリ秒ぐらいの差
未実装メソッドを実装するときににコンテキストが分かれば(つまり実行中なら)実装もしやすいだろうとそういうメリットだよ
再実行する前の話
>>966
> どんな価値があるか書いてよw
書いたけど読んでないの?
> 使い捨てではない長期運用を想定したソフトウエアの開発において、知見というのはあとからついてくることは誰もが経験済みだろうし
> それを開発中、運用中のシステムに適用しようと思ったとき(まあ早期決定脳では思いもよらないことだが…)に役立つのは明らか >>961
>頭からダラダラ書くことしかできないお前にはそうなんだろうな w
ドラえもん ぼくたち地球人
https://youtu.be/UYdfmyd2vD4
僕たち地球人〜今日も明日もあさっても〜チンポがシコシコ〜するんだよー!
バ バ ア が 潮 吹 い た ぁ !
http://egg.5ch.net/test/read.cgi/welfare/1539337979/ 611 名無し三等兵 (ワッチョイ 7fe7-t9Bb) sage 2018/11/22(木) 12:46:59.97 ID:vFEoyYoC0
>>587
「ちんちん」の語源の1つの説に、
支那の娼婦が幼児語で「入れて入れて」と言った言葉を
当時の出羽守が有難がって日本に広めたという
かなり眉唾物な故事がある。
その説に依るなら「チンポかシコシコする。」は
当然のように入れた側の所感とその転用じゃな。
591 名無し三等兵 (スッップ Sd1f-hEn1) sage 2018/11/22(木) 12:26:55.61 ID:9IvK1JXqd
>>587
シコシコするは他動詞なので、所有者の意思とは無関係にチンポが自立行動するのであれば「イライラする」「ムラムラする」という自動詞を用いるのが正しい >>969
> 未実装メソッドを実装するときににコンテキストが分かれば(つまり実行中なら)実装もしやすいだろうとそういうメリットだよ
それは実行しなくてもコンテキストがわかるなら
もっとメリットが有るってことかな? >>966
>そいう長文言い訳はいらないんで、
チンポがシコシコするぜ!! 結局Smalltalkの実行中に編集ができるっていうのは単なる
未実装メソッドを実装するときににコンテキストが分かれば
(つまり実行中なら)実装もしやすいだろう程度のことでしかなかったということだ
要するに、テキストエディタの補完機能でなんとかなるし、
型があればもっと実行しなくてももっと正確にコンテキストがわかるということ
大したメリットじゃないんだよね >>973
> それは実行しなくてもコンテキストがわかるなら
> もっとメリットが有るってことかな?
もとより、コンテキストの関係ない関数型ならいらない機能だけどそれはさておき
それなりの深さを持つコールスタックと状態を持つオブジェクト指向を使い続けるならそういうことになるだろうね
でもホットスワップだとかインクリメンタルコンパイルとか無茶しやがって…って技術をこれまでも早期結合派は編み出してきたわけだから
(君は無理っぽいが)その便利さが分かる人がいれば、いつかコンテキストを実行せずに知る技術もひねり出されるんじゃないかな >>976
そんなにコンテキスト(=型情報)を知ること重要?w >>977
コンテキストは実行時情報で型情報ではないよ? OOPのメリットと言う上記全てがCommonLispでも可能だが、別にCommonLispがオブジェクト指向だからというわけではないぞ
実行時の環境がどれだけ豊かかという点はオブジェクト指向に関係は無いよ。smalltalkの特徴と混同し過ぎではないか? >>978
「じゃないよ」じゃなくて
何かを言えって >>979
> OOPのメリットと言う上記全てがCommonLispでも可能
アラン・ケイは彼のOOPで目指した「決定の遅延」がLispでも(というかSmalltalkとLispのみで)可能と述べていますから当然ですね
「決定の遅延」を「メッセージング」というメタファー(まあ実際に送るのでもいいのですが)を使って目指すのがケイのOOPなので
「メッセージング」を使わずとも「決定の遅延」は実践可能だからこれは(ケイの)OOPの本質ではないという指摘は
主客を取り違えています。
同様のことはビョーン・ストラウストラップらの「ユーザー定義型をクラス(様エンティティ)でやる」アイデアのOOPについても言えて
ユーザー定義型(データ抽象、抽象データ型)はクラスのない××言語でもできるから、これはOOPの本質じゃない!という指摘も
やはり的を外しています ほんとなぁ「決定の遅延」を言語でやることが目的になってるよなw
なんのためにやるのか?それは言語以外のレイヤーで実現できないのか?
それが抜けてる >>980
書いてあるじゃんw
実行時のもろもろの情報だよ
コールスタックだったり、インスタンス変数情報だったり、テンポラリー変数情報だったりとにかく様々だよ
もちろん型情報も含まれるけど「イコール」ではない > コールスタックだったり、インスタンス変数情報だったり、テンポラリー変数情報だったりとにかく様々だよ
つまりデバッガとブレークポイントによって実現できることって話か
決定の遅延となんの関係もないw >>983
別に言語のみにこだわる必要はないと思うよ?どうしてそんなふうに思う?
とにかくSmalltalkを気にしすぎだよ
他のレイヤーでできているならそれでいいと思うよ
Smalltalkについては学習コストを鑑みて
全てをオブジェクトとそれへのメッセージングというシンプルなドグマで解決できるならベターだし
言語(というかOSモドキ)ならそういう世界を比較的簡単に実現し、そこでの実践を通じて実用性の検証ができるというだけの話だろう 結局の所、決定の遅延で何が出来るか?というとデバッグ時にソースコードを
編集する機能が作りやすくなるというメリットだったって話で良いかね?
↓つまりこれ
コードを編集し、(c#、VB、C++)、Visual Studio でデバッグを続行
https://docs.microsoft.com/ja-jp/visualstudio/debugger/edit-and-continue?view=vs-2017
> エディット コンティニュを使用すると、プログラムが中断モードのときに
> ソース コードを変更できるため、時間を節約できます。 などの実行コマンドを選択して、
> プログラムの実行を再開すると続行または手順、エディット コンティニュに
> 自動的にいくつかの制限でコード変更を適用します。 このため、デバッグ セッション中に
> コードを変更できます。デバッグ セッションをいったん停止し、プログラム全体を
> 再コンパイルしてからデバッグ セッションを再開する必要がありません。 >>985
> つまりデバッガとブレークポイントによって実現できること
そこからまたエディタに戻って定義して再実行して…って手間は俺はいやだなって話をずっとしている >>987
これはかなり近いかなと思って試してみたことあるけど、変更が反映されないんだよね
結局再実行は必要 >>986
> とにかくSmalltalkを気にしすぎだよ
それはSmalltalkぐらいだからだよ
「決定の遅延」という言葉が独り歩きして
それで何が出来るのか?が語られないのは。
でもはっきりしたじゃないか。デバッグ時にソースコード編集機能を
実現しやすくなるのが「決定の遅延」
そして別に決定の遅延をしなくても、デバッグ時にソースコードを編集する機能は実現できる。
言語のメリットとして上げるほどのことでもなかった。 >>988
> そこからまたエディタに戻って定義して再実行して…って手間は俺はいやだなって話をずっとしている
え?バグ無しで一発で作れるの?すごいね(笑)
結局再実行するでしょ 再実行する手間がいやなら、ソースコードを編集して保存したら
自動的にテストを再実行するようにすればいい。
ファイルを保存したときにテストを自動で実行する
https://qiita.com/135yshr/items/0e14082cf3a8e654964c >>990
> それはSmalltalkぐらいだからだよ
そりゃそうだよ
今のところLispとSmalltalkくらいしかできないことのさらに高みを目指そうっていう話なんだから…
早期結合派は誰か目先の利く人が無茶をして実現された技術が導入されて普及しないかぎり永久に理解できない話だと思うよ もう早期結合派とか言わんでくれる?
コードを編集してデバッグを続行する機能でしかないんだから 昔はホットスワップなんてアクロバチックな機能はいらない
インクリメンタルコンパイルなんてコンパイル速度が速ければいらないだろとか言ってたクチじゃないの? 図星かw
Smalltalkが「決定の遅延」を実践し難なく実現したアクロバチックな便利機能を
早期結合派の有志が無茶をしつつも実現し普及させ、君みたいな想像力に乏しい人でもしたり顔でその恩恵にあずかれる
いい話じゃないか >>965
>0.1ミリ秒
そうか、MSは0.1ミリ秒のために多大なリソースを投入してデバッグ中のメソッドのホットパッチ&継続実行を可能にしたんだな。www >>997
時系列が逆ですね
多大なリソースを投入してデバッグ中のメソッドのホットパッチ&継続実行を可能
にしたので、0.1ミリ秒ぐらいのメリットしかなくなったんですよw SmalltalkのOSモドキはLinuxやWindowsといった本物のOSと比べて
あまりにも出来損ないのゴミなのが問題なんだよ
決定の遅延?大変結構だと思うよ?本物のOSの上で出来るならね
でもゴミOSモドキの上でOSゴッコするくらいなら決定の遅延なんて要らない だから最初から言ってるように、Smalltalk初期の時代はメリットが
あったかもしれないけど、今となっては言語機能に含めなくても
別の方法で本来の目的が達成できるようになったと言ってる このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 34日 19時間 43分 46秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。