オブジェクト指向の概念を教えれ
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGJavaScriptで document.write("Hello!"); がやっと書けるようになったオイラに、
オブジェクト指向の何たるかを、わかりやすく、華麗に、スマートに教えてください。
これは、主に自然言語において発揮される高い言語能力が、
プログラマの優秀さの必要条件でもあるという想定を検証するためにも、
チャレンジしがいのある課題であるゴルァ
0002手間は省こう
NGNG0003デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1002523282/l50
オブジェクト指向は戦場では必要無し その2
http://pc.2ch.net/test/read.cgi/tech/1013266554/l50
好いた方へどうぞ。
∧∧ ミ _ ドスッ
( ,,)┌─┴┴─┐
/ つ 糸冬 了. |
〜′ /´ └─┬┬─┘
∪ ∪ ││ _ε3
0004デフォルトの名無しさん
NGNGオブジェクト指向って関係あるのか?
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNGJavaScript 言語はプロトタイプベースのオブジェクト指向言語として使える
http://www.tokumaru.org/JavaScript/
>>5
オブジェクト指向は概念だからね。
http://www.ogis-ri.co.jp/otc/hiroba/technical/OO_Guide/index.html
http://www.ogis-ri.co.jp/otc/hiroba/technical/concept.html
0007デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG簡単に説明してやるからよく聞けよ。
6年3組の生徒は、田中くんも鈴木くんも佐藤さんも高橋さんも
みんな"6年3組の生徒"として扱える。
それがオブジェクト指向だ。
0010デフォルトの名無しさん
NGNGいまいちのみこめないような、
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNGつーことは
敵キャラ消して5秒後に出すってやると
スライムもドラキーもいどまじんもそうなるんか?
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG/ この糞スレは無事に /
/ 終了いたしました /
/ ありがとうございました /
/ /
/ モナーより /
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
∧_∧ / /∧_∧
( ^∀^) / /(^∀^ )
( )つ ⊂( )
| | | | | |
(__)_) (_(__)
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG本屋に行くと1冊5000円くらいのテキストがあるから、買って来い!
0017デフォルトの名無しさん
NGNGこれでいいの?
enum { TANAKA, SUZUKI, SATOU, TAKAHASHI } class63;
0018デフォルトの名無しさん
NGNG幼馴染
>>1 ⇔ VB
↓ 片思い
オブジェクト指向 ⇔ クラス概念
付き合ってる
↑ 友人 ↑ 友人
VC++,JAVA カプセル化
0019デフォルトの名無しさん
NGNGわからん奴にとってはなんの糧にもならない。ますます煙に巻くだけ。
OOPとは追体験的に理解するべき概念だ。
初心者はうだうだ考えずにまずCLASSでも書いてみろ。
0020デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNGにメソッド[逝ってよし]を実装すれば、
∧∧
〜′  ̄ ̄( ゚Д゚)<逝ってよし
UU ̄ ̄ U U
継承↓
ギコの継承クラスであるclassギコフッサールも
,,,,,,,,,,,,,,, ∧∧
〜′,,,,,,,,,,ミ,,゚Д゚彡<逝ってよし
UU"""" U U
[逝ってよし]メソッドを持つことになる。
0023デフォルトの名無しさん
NGNG0024メタレス
NGNGレスは全て間違っている。
0025デフォルトの名無しさん
NGNGつーか、JavaScriptを自由自在に使いこなすのに
オブジェクト志向は全く必要ないので勉強する必要はありません。
ここで良書を教えてもらって買ったとしても本代の無駄です。
(煽りではないよ。マジレス。)
0026デフォルトの名無しさん
NGNGそりゃそうだ.「はさみってどんなの?」と聞かれたら,実際につかわせる
のが一番はやいですからね.
でも,こういう話は好きなので,私の理解している部分を
#>>1には絶対理解不能だろうけど……
OOP:
データ&関数で取り扱っていた構造化プログラムから発展した概念.
「〜〜って何?」「〜〜してほしい」といった『目的』をベースに
プログラムすることができるのが特徴.
構造化プログラム言語は,「関数を使ってデータを加工する」
手順が一般的で,データの構造や状態を考慮してプログラムする
必要があるが,OOP言語はそのあたりを容易に(目的ベースの記述に)
抽象化できる.
#Cみたいなオブジェクト指向に対応していないと言われている
#プログラム言語でも,オブジェクト指向的な記述は可能ですね.
#よくできたライブラリだとデータの状態を意識することなく
#プログラム出来ますし,Cベースで開発されているスクリプト
#言語(Rubyとか)とかも,中の記述はオブジェクト指向ですからね.
あと,Objectオブジェクトを『物』と訳している本とかあるけど,正しい?
私は『目的』じゃないかと思うんですけど……
どう考えてもOOPの概念をわかりづらくしている諸悪の根源のような
気がする……
0027デフォルトの名無しさん
NGNG犬.鳴く
猫.鳴く
止まりの衒学者。
0028デフォルトの名無しさん
NGNG26とか嘘だから気をつけるように
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG(世界)全体が部分(物、オブジェクト)から構成されていて
それらが影響しあって(すなわちメッセージをやり取りしあって)
物事が進んで行く、という思考様式のこと
そういうモデル化をプログラミングでも行うって言う
ムーブメントだな。それによる利点とかは
上で誰かが書いているようなことだ
0031デフォルトの名無しさん
NGNGということは、JavaScriptを使いこなせるようになったあかつきにも、
オブジェクト指向が理解できてないということでしょうか?
00329
NGNG交換可能性という意味では当たってる(言いたかったのは抽象化だけど)。
それだけでは何の意味も無い OO の構成要素だったね。というわけで >>24 に同意。
>>1
というわけで、 >>19-20 に同意しつつも、それだけじゃあんまりなので
何を勉強すると OO への理解が早まるかというのを記してあげます。
それは GoFのデザインパターンです。
OO をわかってる人が厳選した OO の使い方ですので、これらが(なぜこういう設計か)
理解できると、あなたも OO が理解できちゃいます。
003326
NGNGありゃ.そうだった?
したいことをするために細部に立ち入らなくていいっつうのがOOPの目的かな
と思ってるんだけど.
ちなみに蛇足だけど,
>>27
犬.鳴かせる
猫.鳴かせる
じゃない?
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGネタじゃないよ
C言語をまずやりましょう
その後にC++に移りましょう
複数の関数とデータが合わさったものが「クラス」です
クラスを使ってプログラミングをすることがオブジェクト指向プログラミングです
(と考えてもいいの。これに文句を言う奴は小学生に「自然数とは・・・」と語り出す
数学オタと変わらない)
ここでどのような基準でクラスを切り分けるかの問題があります
この時の切り分け方の思想が「オブジェクト指向的概念」です
ここでやたらおかしな抽象論を振りかざす輩がいるから
ワケワカ状態になるのです
まずは具体的な処理の仕方から入った方がいいでしょう
0036デフォルトの名無しさん
NGNGオブジェクトの統合された存在としてソフトウェアを構築するのがオブジェクト指向プログラミング。
0037デフォルトの名無しさん
NGNG003835
NGNGこれは一定の処理をクラスの中に閉じ込めることです
まずこれのメリットを理解しましょう
「継承」やら「多態性」やらは無視して構いません
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG004135
NGNG「クラスをどのように利用するのか」と
「クラスをどのように設計するのか(切り分けるのか)」
を区別しましょう
最初の内はクラスの利用だけでいいでしょう
クラスの利用とは既存のライブラリを利用することです
自分で設計するクラスは一つだけでもいいでしょう
一つのクラスの中に全ての処理を入れてもいいです
0042デフォルトの名無しさん
NGNGアクター理論や型理論でも持ち出したいなら是非ともやってくれ。
004335
NGNGJavaから入ってもいいです
でもJavaの解説書は抽象論が多くてワケワカになる可能性も高いです
抽象論は無視できるのならJavaでもいいです
0044デフォルトの名無しさん
NGNGコード書かれてもわからないけど
004535
NGNGデザインパターンはサッカーで言えば「戦術」に当たります
ロクにドリブルもパスもできないサッカー初心者に
「ゾーンデフェンスとは・・・」と語るようなものです
まずは基礎技術を磨きましょう
基礎技術を磨かなければ戦術には意味がありません
0046デフォルトの名無しさん
NGNGOOPLの理論(43の言うところの抽象論)を
読んで理解できないとしたら読解力に難ありだよ。
カプセル化、継承、多態を理解しようと努めて
結果的に理解できなかった人で、
非OOPLな言語ではものすごい生産性を誇ってる人なんていないだろ。
>42
お前も相当に読解力が足りないな(藁
0047デフォルトの名無しさん
NGNG複数の関数とデータが合わさったものは「プログラム(又はライブラリ)」じゃないの?(w
0048デフォルトの名無しさん
NGNGこのスレには未経験衒学者と低学歴コーダしかいないんだね(藁
↓
これの真意が・・・
↓
OOPLの理論(43の言うところの抽象論)を
読んで理解できないとしたら読解力に難ありだよ。
・・・だっつうんか?
004935
NGNG貴方のツッコミはくだらなすぎて相手にできません
早急に接続を切って首を吊って死んでください
0050デフォルトの名無しさん
NGNGはたから見ても見苦しいな
0051デフォルトの名無しさん
NGNG喧嘩とオブジェクト指向はプログ板の華だね
0052デフォルトの名無しさん
NGNGVBを使ってみて一度挫折したC++(class)を理解できた
「使う側」の視点に立てれば「作る側」も見えてくるかと
0053デフォルトの名無しさん
NGNGVBではポリモーフィズム理解出来てないとCLASSを理解した(VBレベルでの)
とは言えないよ。VBでインタフェースのインプリメントとか出来る?
0054デフォルトの名無しさん
NGNGそれから細部を一つずつ理解しようとしてもムリだ。
まさしく「外国語」を覚えていくみたいに学習していかないと身につかないよ。
005535
NGNG自分でクラスの設計をしてみましょう
この時に、「どのようにクラスを設計したらいいんだろう?」
と思い悩むでしょう。
具体的な処理面から言えばクラスとは「複数の関数とデータが合わさったもの」です
しかしここでクラスというものを抽象的に考えると
「一定の処理をするモノ」とみなすことができます
その「モノ」をオブジェクトと呼ぶことにしましょう
ここから抽象論が始まります。
「オブジェクトに何をさせたいのか?」
「オブジェクトに何を伝えるのか?」
「オブジェクトは何を知ってるのか?」
このような抽象的問いを実際の具体的なクラスの構造に落とし込む過程こそが
「オブジェクト指向」なのです
オブジェクト指向プログラミングで最も大切なことは
具体的思考と抽象的思考の両面から思考することです
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG何で、VBでポリモフィズムの理解が居るの?
そう述べれるのなら、interfaceのimplがVBでできることを知ってるんじゃ
もっとも、全てのメソッドをimplしなきゃいけないけど
0058デフォルトの名無しさん
NGNG>そう述べれるのなら、interfaceのimplがVBでできることを知ってるんじゃ
>もっとも、全てのメソッドをimplしなきゃいけないけど
何が言いたいのかわからん。常識だろ。
0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG昨日、近所のム板行ったんです。ム板。
そしたらなんか見慣れないスレッドがいっぱいでわけわかんないんです。
で、よく見たらなんか「OOの概念教えれ」とかいうスレが上がってるんです。
もうね、アホかと。馬鹿かと。
お前らな、OO如きで普段来てないム板に来てんじゃねーよ、ボケが。
OOだよ、OO。
なんか親子連れとかもいるし。一家4人でム板か。おめでてーな。
よーしパパデザパタ説明しちゃうぞー、とか言ってるの。もう見てらんない。
お前らな、Squeakやるからそのスレ下げろと。
ム板ってのはな、もっと殺伐としてるべきなんだよ。
OOアンチな奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと目的のスレ見つけたかと思ったら、隣の奴が、継承、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、継承なんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、継承、だ。
お前は本当に継承を使いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、継承って言いたいだけちゃうんかと。
ム板通の俺から言わせてもらえば今、ム板通の間での最新流行はやっぱり、
モジュール化、これだね。
インターフェイスプログラミングモジュール化多態。これが通の頼み方。
モジュール化ってのはコードの影響範囲を局所化する。そん代わりモジュール単位が多め。これ。
で、それにインターフェイスプログラミング多態。これ最強。
しかしこれを頼むと次からスクリプト屋にマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前らド素人は、Cでメモリ配置の勉強でもしてなさいってこった。
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGそんな俺も最近よく昔のことを思い出す。
小4くらいのとき、マンコが穴だなんて思いもしなかった。
が、年の離れた兄貴のいるTは
「ヤッターマンコーヒーライター」
などという言葉を知っているいわば勇者的存在であった。
で、穴があることを知った俺たちだが、どうしてもそれが信じられない。
で、むしろ逆にガキであることを利用して調べようと思った。
ターゲットは音楽の教師である。美人だった。今にして思えば20歳くらいだったのではないだろうか。短大出てすぐだったように思う。
実行はいたって単純。ガキ特有のカンチョーというあれである。
あれを前に突き刺すというのだ。
ガキなら許されるであろうという勝手な発想だが、たしかにマンコすら知らない奴がほとんどだったからナイスな判断だったろう。
で、実行はTだった。
Tはなんの躊躇もなくやった。
思い切り。
思い切ってやっちゃいかんだろ、と思った。なぜにおまえはフルパワーなのだ、と。
音楽教師は泣いた。20歳前後という年齢を考えればギャグでもきつい。ガキからすれば大人だったのだが、今思うと娘だ。
むしろ、処女だった可能性すらある。すまん先生。
が、Tも泣いていた。
両手人差し指骨折だった。第2関節より下で折れていた。
もろに刺さったんだと感心した。やはり勇者だ。
しかも、救急隊員に、マンコに指が刺さって折れましたと泣きながら事情を説明していた。
あの姿も相当かっこよかった。
0063デフォルトの名無しさん
NGNG皆そろいもそろって文末に句点を打たないんだろう?)
0064デフォルトの名無しさん
NGNG>これが通の頼み方。
何に頼むんだ?
書き直しを命ずる。
0065デフォルトの名無しさん
NGNG(´-`).。oO(お前のことだろ)。
0066
NGNG0067デフォルトの名無しさん
NGNG0068真35
NGNG「クラスとインスタンスの区別は?」
説明が面倒だったから省いただけ
「何でカプセル化だけを特別扱いしてるのか?」
教える順番の問題だよ。
これが理解できん奴が本を書くからワケワカになるんだよ
実際問題として、初心者に継承や多態性を教えても意味がないだろ。
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG便利かなー、と、考えてる。(xは色数を示すあれの代わり。)
ぜんぜん関連性も何も無いけど・・・。
0071デフォルトの名無しさん
NGNG説明が面倒なら最初から説明すんな。
言葉足らずなOOの説明ほど有害なものはない。
0072デフォルトの名無しさん
NGNG0073
NGNG本当は中身などないので説明できないのです。
思考操作されているのでそれに気付かないだけです。
OOのことは忘れてください。
0074真35
NGNGこれは例えば、「GUI部品を継承して利用」みたいな解説で
利用と設計がごっちゃになるんだよ
経験者には当然の違いだとしても初心者は混乱するんだよ
初心者の気持ちが分からん奴が本を書くなって。
「具体的思考と抽象的思考って何や?」
これはオレのオリジナルな考えなんだけど
こういう風に解説すれば一番分かりやすいんだよ
抽象的な理論を具体的な処理で言い換えれば、てことだよ
これがないから初心者は分からなくなるんだよ
既存の入門書の著者は説明が下手糞すぎる。
初心者がオブジェクト指向が理解できない一番の理由は書籍の説明の下手さにあるんだよ
今日はキャラ作っておれなりの説明を試みたんだが・・・
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNGいいか、よく聞け。オブジェクト指向で重要なのはずばり
「カプセル化」
だ。
ほかの事はとりあえず忘れてよし。
0077デフォルトの名無しさん
NGNG0078
NGNG0079
NGNGダンはちがうだろ。「ウィンダム」となんだっけ?
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGそれは抽象データ型だって。OO は、その先の話。
008232
NGNG>(と考えてもいいの。これに文句を言う奴は小学生に
>「自然数とは・・・」と語り出す数学オタと変わらない)
ごもっともです。
でも問題なのは、この程度の理解で 「俺は OO を理解したが、従来の手法より劣っているな」とか言う人がいるのが問題なので、それがスタートラインについたにすぎない事をはじめから教えてあげなければいけないと思うです。
>> 37, 45
今はいい入門本がありますよん。といってもたしかにドリブルくらいはできないと意味なしですが、GoF本読んで理解しろ!という意味ではないですので。
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGカプセル化はこの際「どうでもいい」だろう。
オブジェクト指向は戦場では必要無し その2
http://pc.2ch.net/test/read.cgi/tech/1013266554/l50
の、Point 論争を読むべし(300番くらい)。たかがPointにgetter, setterを
付けるのを「オブジェクト指向」だと思われたんじゃ迷惑だ。
OOを勉強するなら「インスタンス」を理解することが最優先。
マルチインスタンスがわかってこそ、OOのありがたみがわかる。
0085デフォルトの名無しさん
NGNG最優先もなにも一通りやらないと意味ないだろ。
0086デフォルトの名無しさん
NGNGカプセル化指向って名前にしとけばよかったのに。
0087デフォルトの名無しさん
NGNG岩波講座ソフトウェア科学17「モデルと表現」
読んでみたらいかがでしょう。オブジェクト指向に関わる基本概念が
非常に良く理解できると思うのですが。
残念なのは、絶版になってしまったこと。(古本屋で見つければ)
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNG極端な例を出して煙にまく奴
0090デフォルトの名無しさん
NGNGへ?
http://www.google.co.jp/search?q=%83%7D%83%8B%83%60%83C%83%93%83X%83%5E%83%93%83X&hl=ja&lr=
http://www.google.co.jp/search?q=multi+instance&hl=ja&lr=
0092デフォルトの名無しさん
NGNGで、OOとの関係は?
0093デフォルトの名無しさん
NGNGで、「閉じる」ボタンのイベントプロシージャにいろいろ処理が書いてあるわけだ。
フォームが100個あったら、それぞれに「閉じる」ボタンを張りつけて、
イベントプロシージャにコードを書いて・・・
こんなことやってたら面倒だろ?
それが、フォームを継承してやれば、継承元フォームの「閉じる」ボタンに
処理を書くだけで、継承先では不要になるんだよ。
えらい楽だと思わないか?
0094デフォルトの名無しさん
NGNGみたいだから、そんなにいじめないであげようよ。
0095デフォルトの名無しさん
NGNG厨房の頃、全てのゲームを抽象化したゲーム用
アプリケーションフレームワークを
思いついた時とても感動した。
application.init;
repeat
application.game.init;
application.game.run;
application.game.done;
until not application.game.continue;
application.done;
0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNG悪いこと言わないからRubyをやれ、
Rubyこそ真のOOPLだ!!
0098デフォルトの名無しさん
NGNG0099Seisei_Yamaguchi
NGNG0100召還師
NGNGそのスレで煽っておきながら、1日ほっといたら
実はすごいのを召喚してしまっていたので
無視した逃げてきた者です。
しかし、なにより鬱なのが、>>98のResを見て
summonsという意味の日本語が召喚で
僕の使ってた召還はrecallの意味だったことです。
真性に間違ってました。
…しかしrecallでも、ある意味、あってるかも。
0101デフォルトの名無しさん
NGNG「ファイル分けと一緒じゃん」と思い込む勘違い君が出てくる。
確かに、ファイル分けて、Cならstatic指定すれば「カプセル化」らしき
ものは実現できるんだが。
でも、それはOOじゃないでしょ。なぜならどこにも「オブジェクト」が
いないから。
0102デフォルトの名無しさん
NGNGその違いが、[マルチインスタンス]って奴なの?
0103デフォルトの名無しさん
NGNGていうかOOでいうマルチインスタンスって何さ?
0104デフォルトの名無しさん
NGNGまず実行ファイルがあります。
メモリ内は空です。
インスタンスを作るというのは、
実行ファイルがメモリ内にメモリビットを構築した
ときの構築物をいうのです。か?
0105デフォルトの名無しさん
NGNG言及しないでクサーい
0106デフォルトの名無しさん
NGNG実装側からみた側面としては間違ってはいない。
「ポインタとはメモリアドレスの事である」という説明と同程度には合っている。
0107デフォルトの名無しさん
NGNGなんとなくしっくり来る分析だな。
0108デフォルトの名無しさん
NGNG0109void 1;
NGNGもちろん正否や優劣にかかわる評価ではありません。
>>11
>性質を付加して対象を作り上げる。
属性の束がオブジェクトであるって言われればちょっと理解が進んだ気がする。
>>30
>そういうモデル化をプログラミングでも行うって言うムーブメントだな。
文化的ムーブメントはオイラの統計では3〜4年で終わるんだよね。
娘。も終わりかけてるし
>>55
>このような抽象的問いを実際の具体的なクラスの構造に落とし込む過程こそが
>「オブジェクト指向」なのです
何が人間クラスや国家クラスを保証しているか知らなくても、
人間や国家を知っているし、常に利用したり信奉したりしてるからね。
案外ヒトの考え方ってobject-orientedなんですね。
object-basedじゃないとこがミソかな。
>>97
>Rubyこそ真のOOPLだ!!
古典的にして力強いアド。やってみようかって気にいっしゅんなりました。
でもまずJavaScriptを
0110デフォルトの名無しさん
NGNG前向きで良い!
0111110
NGNG>でもまずJavaScriptを
どうしても JavaScriptでOOしたいなら
http://member.nifty.ne.jp/masarl/article/js-oop.html
0112101
NGNGhttp://www.parashift.com/c++-faq-lite/classes-and-objects.html#[7.5]
In C, encapsulation was accomplished by making things static
in a compilation unit or module. This prevented another module
from accessing the static stuff. (By the way, that use is now
deprecated: don't do that in C++.)
Unfortunately this approach doesn't support multiple instances
of the data, since there is no direct support for making multiple
instances of a module's static data. If multiple instances were
needed in C, programmers typically used a struct. But unfortunately
C structs don't support encapsulation. This exacerbates the tradeoff
between safety (information hiding) and usability (multiple instances).
これだと一応カプセル化にも重点を置いてるけど、JavaにしろPythonにしろ、
デフォルトのアクセス制限を緩くしている。
カプセル化が重要じゃないとは言わないが、少なくとも真っ先に説明することじゃ
ないと思うんだけどなあ。
0113デフォルトの名無しさん
NGNGJavaScriptは関数型の言語だからやめとけ。
Javaとは別物だぞ。
0114デフォルトの名無しさん
NGNGハァ?
0115デフォルトの名無しさん
NGNGつまり、デフォルトでインスタンス変数のアクセス制限を厳しくしているRubyは
逝ってよしということですか?
0116110
NGNG>あと,Objectオブジェクトを『物』と訳している本とかあるけど,正しい?
>私は『目的』じゃないかと思うんですけど……
>どう考えてもOOPの概念をわかりづらくしている諸悪の根源のような
>気がする……
『目的』よりはマシ。
0117デフォルトの名無しさん
NGNGDenis.M.Richeは俺のオナペット。
Kernihgnは俺の妹。
sttrustropは俺の愛人。
松本はチンコ。
0118デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNGjavaは知らんがpythonは手抜きでインスタンス変数がpublic相当になっている
だけだと思われ。
0121デフォルトの名無しさん
NGNGカプセル化 == 隠蔽ってわけじゃないよね。
別に必要に応じて透明なカプセルだっていい。
カプセル化は中身を外からいじるのを禁止するためのものではなく
中身がどうなっているか外から気にしなくてもよくするためのものでしょう。
0122デフォルトの名無しさん
NGNG>中身がどうなっているか外から気にしなくてもよくするためのものでしょう。
気にしないためには見えてはいけない。
透明だったり、半透明だったら気になりませんか?
すけすけですよ?
0123
NGNG0124
NGNG0125デフォルトの名無しさん
NGNG新しくプログラム言語(の理念)を作るというということは、
よほど実現したい機能があったと思われます。
それが何かというと、おそらく
ある実行されている(メモリにロードされている)プログラムが、
他のプログラムを起動させたり、協調したりすることだと思います。
だから、オブジェクト指向というのは、言語記述の形態(継承とかカプセル化とか)に関することよりも、
コンパイル後つまりバイナリ化(機械語化)された段階の形態。
つまりメモリ展開とか共有とかの問題じゃないかなと思っています。
どうでしょうか?>>1
0126デフォルトの名無しさん
NGNGSuper_AV ippon;
protected:
H_hon issatu;
public:
Syouroppoo fake;
};
0127デフォルトの名無しさん
NGNGJavaScriptのDateクラスをモデルに考えて、便利だなと納得しかけてたとこなんで。
>つまりメモリ展開とか共有とかの問題
分かりませんが、DLLとか想像すればいいのでしょうか?
0128デフォルトの名無しさん
NGNGそれはコンポーネント指向。オブジェクト指向とは直接の関係がない。
0129デフォルトの名無しさん
NGNGコード補完時に思いっきり見えますが?
0130110
NGNG同意。
0131デフォルトの名無しさん
NGNGint value;
struct{
void *buf;
} private;
} myclass_t;
0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNG0135デフォルトの名無しさん
NGNG最近考えるのだが優秀な指導者(グル)に師事するのがオブジェクト指向プログラミングを理解する早道なのではないかと思う。
メールで添削教室とかやってくれないかな。
0136高校生
NGNGクラスライブラリを書いてみることを勧める。そして、それらを、
プログラムの中で使うことによってカプセル化や再利用性の重要
性を理解することであろう。
0137デフォルトの名無しさん
NGNG残念ながら OO のグルに心当たりはないけど…。
みんな GURU に師事しなくても OO を理解してるんだから、それ以外の方法もあるはずです。
もう OO についてはいろいろ勉強したのにも関わらず従来のスタイルから抜け出せませんか?
もしそうならばポイントを見落としているだけかも知れません。
そうではないならば、もっと勉強してください。絶対無駄にはなりません。
今まで OO に関してどんな事を勉強しました?
あと、今までの知識も絶対無駄にはならないです。
なかなか今までのやり方を抜け出せないのは、既成の手法をよく理解しているからだと思います。頑張ってください。
0138デフォルトの名無しさん
NGNGナマイキな厨房だったら、このくらい書けるしな。
0139デフォルトの名無しさん
NGNGhttp://www.shoeisha.com/book/Detail.asp?bid=740
を読んでみるのがいいんでないかとオモタ。
俺がいっちゃん最初に読んだOO本がこれだたのは
ひじょーにラキーと思ってまする。
この他にも、OO本何冊か読んでみたけど
俺的に「これじゃワカラネーヨ」というものばっかだたネ。
0140真性信者137(ナマイキな厨房)
NGNGこっちも誰だかわからないやつに教えてあげてるのです。
自分も幸せになれた物だから、人も幸せにしてあげたいのです。
まぁ、小さな親切大きなお世話かも知れませんがね、
変にすれて人の親切を正直に受け止められない人間は悲しいですよね。
0141デフォルトの名無しさん
NGNG0142135
NGNG135です。おかげで少し気が楽になりました。
なんかオブジェクト指向プログラミングなんか簡単だよ、
出来ないのはお前がアフォのせいだゴルァ!(妄想)
という声があちらこちらから聞こえていたので少しあせっていたのです。
とりあえず、
>>41,55のやり方でがんばってみるよ。
正直、早くワシも幸せになりたぃ
そんでは、さんきゅ
0143デフォルトの名無しさん
NGNG同じ事を言っても偉い人が言ったら納得してそうでない人なら納得しなさそうだな。
権力に弱そう。自分の考えをもっていなそう。
誰が言ったかじゃなくてどういうことを言っているかを考えればいいのに。
0144デフォルトの名無しさん
NGNG具体的な事何も言わないでなぐさめるだけなら、だれでも出来るってこった。
0145デフォルトの名無しさん
NGNGはやくおしえてくんろ。
0146デフォルトの名無しさん
NGNGオブジェクト指向そのものの利点をあんまり感じないんだが、
誰かいい例をあげてくれんか?
0147デフォルトの名無しさん
NGNGと思ったらどう?
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNGデザインパターンとか見ると、何か気がつくところがあるかも。
0150デフォルトの名無しさん
NGNGとよい」的なOOの考え方って、良い設計を行う妨げになってるん
じゃないかと思うときがある。
例えばオブジェクトの比較なんかはC++でもjavaでも、比較方法は
比較対象となるオブジェクトのメソッドとして実装することが
言語仕様で決められてるわけだけど、対象物の比較なんてのは
第三者が行うことだし文脈によって方法も変わってくるから、比較
対象であるところのオブジェクトが定義するべきじゃない。つまり
実現方法が間違ってるんじゃないかと思うのよ。
で、何でこうゆう設計になってしまったのかなーと考えてみると、
冒頭に書いたようなことが原因ではないかと思うわけ。同じような
問題には、オブジェクトの文字列化やメモリ割り当ての方法なんかも
ある。
つーわけで、少なくとも現在のOOには改善の余地があると思うし、
このような問題がOOに解決できないものなら「OOは捨て」てのもアリ
かとも思うようになってきたんだけど、他の人の意見も聞いてみたく
なったんで何か意見くだちい。
0151デフォルトの名無しさん
NGNGこの二つを学ばずにOOに手を出すと、まず終わります。
0152デフォルトの名無しさん
NGNG比較を第3者(オブジェクトの外部)から行うとカプセル
化を壊すと思うのだけど。壊さないためにはオブジェクト
定義と一緒のモジュールの中に入れたい。それで言語概念
を少なく保つにはメソッドにするのが簡単。文脈によって
違うとすれば、その文脈を自動判別させるより、メソッド名
なりで区別する方が言語概念を少なく保てる。代替案として
どのような文脈判別メカニズムを提案されますか?
0153デフォルトの名無しさん
NGNGもうちょっと問題を絞ったほうが議論しやすいのでは。
主張:
オブジェクトの比較は、比較対象であるところのオブジェクトで定義すべきでない。
なぜならば、比較を行うのは第三者だし、文脈によって方法が変わってくるから。
0154デフォルトの名無しさん
NGNG問題が解決できないものを捨てたら、何も残りません。
代替案が無い以上最善の方法を使うしかないと思うが。
0155デフォルトの名無しさん
NGNG理解している人には3人くらいしかいない」そうだ。
http://village.infoweb.ne.jp/~fwgf2942/
0156150
NGNGjavaでもC++(STL)でもComparatorつうのがあってカスタムな比較を
したいときには一応指定できるようになってる。オレが思うに、
どちらの言語でもこのComparatorを唯一の標準にするべきだった。
で、おっしゃるとおり、比較対象となるオブジェクトに外部から
アクセスすることはOOの急所の一つであるカプセル化を壊すことに
なってしまう。オレは第三者が比較を行うのが自然な設計であると
考えてるから、現在のOOは良い設計を行う妨げになってるのでは
ないかと思うわけ。
代替案としては、明示的に宣言した場合にはオブジェクトのprivate
な部分にアクセスすることを許可するような仕組みが考えられる。
こうゆう仕組みをサポートする言語があるのかどうかは知らんけど。
0158150
NGNGまあ、その通りなんだけど、設計自体を問題視してるのではなくて、
そのような設計をさせてしまうOOという手法のあり方を問題にしてる
のよ。
オブジェクトの比較云々はその具体例だと思ってちょ
0159WILL
NGNG>> 146さんと150さん
オブジェクト指向自体のってーのが良くわからないんだが、
オグジェクト指向の利点てのは
オブジェクト指向設計が徹底されると、複数のプログラムからできてるシステムでも
「どのプログラムもある種類のデータには同じアクセスをしている」
ちゅ-ことを保証できることにあるとおもうんだわ。
例えば、
「 期間の開始日と終了日には常に 開始日 ≦ 終了日 の関係が成り立たなければならない」
っちゅ-事の管理を構造体と関数でやろうとすると、
ファイルとかデータ-ベースとか引数から期間のデータをもらう度に、
開始日と終了日のチェックをする関数を呼び出す羽目になると思うんだわ。
でも、期間をオブジェクトにしてそのオブジェクトの
開始日と終了日に値をセットするメソッドでチェックするようにして置けば
一々、期間読み込み → チェック関数呼び出し をしなくても良くなるわけさ。
0160デフォルトの名無しさん
NGNGそりゃ大変だ。外国に勝てないぜ。
つーか彼が知っている日本人は何人なのか気になる。
0161WILL
NGNGあ〜、なるほど・・・。
もしかして、下手な設計者がオブジェクト指向もどきをしようとすると
公開されなきゃならないはずのデータまで隠蔽されてしまって、
痒いところに手が届かないクラス乃至オブジェクトができるといってます?
そーれはそのとおりかもしれない。
0162デフォルトの名無しさん
NGNGこれはまだいい方。
「隠蔽しなきゃならないはずのデータまで公開」されちまった日にゃぁ...
0163デフォルトの名無しさん
NGNG0164150
NGNG- 本来オブジェクトの比較は第三者(Comparatorのような)が行うべきだ。
理由は、前に書いたので分かって貰えると思う。
- ところがjava言語では、Objectクラスに比較メソッド equals(Object)
が定義されていて、任意のオブジェクトの比較にこのメソッドを使う
のが標準的、ということになってる。これはおかしい。
- じゃ、なんでこうしてるのか?と考えてみると、OOの考え方が悪い方向
に影響を与えてるのではないかと推測できる。つまり、
1 オブジェクトの内部データに確実にアクセスできるのはそのオブジェクト
自身だけである、というカプセル化の考え方があるから。したがって、
第三者であるところのComparatorは潜在的に、オブジェクトを比較する
のに十分なデータにアクセスできるとは限らない。
2 「オブジェクトは自分自身について知っているとよい」という考え方が
あるから。
こんな感じ。
0166デフォルトの名無しさん
NGNGそんな必死になるようなもんじゃないと思う。
逆にOOP言語を効率的に使いこなす技術程度でいいんじゃないかと
0167150
NGNGどうも。確かに固執してるかもしれない。かれこれ1ヶ月も気になってる(w
ただ、この問題に気づいたのは過去にjavaでコレクションやってて躓いた
ときだったし、今日もC++でplacement newやってて同じ問題にぶち当たった。
なんつうか、不必要に遠回りさせられてるような気がして、もっと柔軟な
言語なりパラダイムなりが必要なのではないかと思うのよ。
0168WILL
NGNGうーん・・・。
つーか、equals()メソッドと150氏のおっしゃってる
Comparatorではどうも役割が違う気がするんだが・・・。
A.equals(B)
は、主体Aが渡されたオブジェクト"Bと自分自身とが等しいか?"
を判断しているのに対して、
C.compare(A , B)
では、主体Cが"AとBが等しいか?"を判断している
という差があるはず。
で、この二つの答えは必ずしも一致する必要がないし、
どちらが標準ってことも言えないとおいらは考える。
ただ、後者型の比較の仕方はとりあえず
ライブラリの実装としてはあまり適切じゃないんじゃないかな?
150氏がOOの考えが悪い方向に影響を与えていると感じているのは、
何でもかんでもカプセル化しなきゃならないっちゅーような考え方
なんじゃないかなぁ。
もし、>>163の1にあるように第3者であるComparatorが潜在的に
比較するのに必要な情報にアクセスできないのであるとすれば、
それは比較対照となるオブジェクトとComparatorのどちらかの
設計ミスである可能性が高いと考えられる。
可能性としては次の二つ。
1.比較対照となるオブジェクトさんが人に見せなきゃならないデータを見せてない。
(夏休みの宿題とか)
2.こんぺれーたさんはもうちょっと比較対照となるオブジェクトと
仲良くならなければならない。
「(赤の他人のてめぇがおいらの口座の暗証番号を盗み見るなよ。
(おいらの嫁さんなら教えるかも知らんがな〜)」
と、言った感じ?
まぁ、どちらにしろ"わかりやすい設計"をするためのオブジェクト指向
なんであって、"正しいオブジェクト指向"するための設計をしていたんじゃ
本末転倒も良い所だと思う今日この頃。
・・・答えになってるかどうかはわからんけど。
0169デフォルトの名無しさん
NGNGまず、比較は第三者がすべきだという根拠を説明するところからはじめてみては?
0170デフォルトの名無しさん
NGNGダブルディスパッチがしにくいとか?
0171デフォルトの名無しさん
NGNGオブジェクトを中心に考えると、比較の実装は
"そのオブジェクトが別のオブジェクトと等しいかどうか調べる"
となるんだろうけど、二つが等しいかどうかどっちがどうとか考えず、
単純に比較できたほうがやりやすい、って思ってしまう。
けど、これはデータ中心で考えてるんだろうなぁ。
0172150
NGNGオブジェクトが提供する機能と、そのオブジェクトを比較する
機能は異なるもので、また異なると見なした方が便利だから、
って感じかな。
例えば文字列オブジェクトを例にとると、文字列の比較方法は
大文字・小文字を区別しないとか最初の何文字だけを比較するとか
千差万別に存在するわけだけど、どの方法で比較したいのかを
知っているのは文字列オブジェクトの使用者だけで、文字列
オブジェクト自身ではないでしょ。だから比較方法は文字列とは
切り離して第三者が行うべきだと思う。
0173169
NGNG「文字列の比較方法は」
と言っている通り、
比較という概念には比較対象となる各オブジェクトに帰結するものが多い
と思うんだけど。
これを無理にComparatorという第三者に持っていってもいいけど、
そのComparatorは何でも知ってる神様的存在でなければいけない。
文字列比較、文字と数値の比較、整数と分数の比較、…
例えば整数と分数の比較はどうやって行うのか?
結局「分母と分子」という分数の構造と「通分」という分数の知識を
要求されるよね。
するとこのComparatorは分数の中身を知ってる超越的存在でなければならない。
0174デフォルトの名無しさん
NGNGオブジェクトが公開してないデータを用いて比較する場合は
どうすればいい?
結局は第三者がカプセル化を破る手段(friendとか)
が必要になる?うーん
って言ってる事が>>168と同じになってきた
0175150
NGNGA.equals(B)とC.compare(A, B)の意味的な違いは同意なんだけど、
どちらが標準として扱われているかと言えば、明らかに前者でしょ。
オレは後者を標準にするべき(つまるところ、AがBをどう思っていよう
が知ったことではない)だと考えているから、
> ライブラリの実装としてはあまり適切じゃないんじゃないかな?
には同意できん。もうちょっと詳しく教えて。
で、後半部分で指摘されてるような設計ミスは、Comparatorを使うと
往々にして起こり得そうなんだけど、>>156で提案してるのが、これを
カバーするための案なのよ。動的分類をサポートするならともかく、
そうでないOO言語では「私もあなたのお嫁さんになりたいのよ」も柔軟に
対応できたらいいなと。
0177150
NGNG別にComparatorが全てを知っている必要はないでしょ。
Comparatorは、比較するべきオブジェクトの種類を判別
できて、使用者が望む方法で比較できればそれでいい。
そしてこれはあらかじめ定義されてる必要性は全くなくて、
必要なときに使用者が定義してやればそれで済む。
0178デフォルトの名無しさん
NGNG0179169
NGNGつまり分数と整数の比較をしたい人はそれぞれ自分で
比較するための処理を書かないといけないわけ?
その手の「車輪の再発明」はバグの温床になりそうな…
それよりも例えばSmalltalkみたく全ての比較をメソッドで定義して
使用者がどの比較基準を使うか選んだほうがよくない?
0180150
NGNGまだ起きてたのか、オレもだけど(w
うーっとComparatorの使い方を説明すれば解って貰える思う。
ComparatorはSet(Smalltalkにもあったよね)のコンストラクタの引数に
与えたりして使う。使用者が意図するオブジェクトの比較方法をSetは
知らないので、知ってるComparatorをこちらで定義して与えてやる。
すると、Setは要素となるオブジェクトの比較方法を知らなくても、
boolを返すComparatorのcompare(Object, Object)メソッドという共通
インターフェイスを呼び出すだけでオブジェクトを比較できる、と
いうような具合。
文字列の比較で、通常は大文字・小文字を区別して比較が行われる
のを区別しないようにしたい場合には、使用者が定義するComparator
の比較メソッドは文字列クラスのEqualsIgnoreCase(String)を呼び出
すだけで終わる。
もちろん、EqualsIgnoreCaseに相当するメソッドがなかったら、自前の
奴を実装するわけだけど。
どのインターフェイスに統一するかの話。
0181169
NGNG例えばSmalltalkでソートする時には
SortedCollection withAll: aCollection sortBlock: [:less :more | less < more]
とかするけど、この[:less :more | less < more] は引数を2つ取る無名関数みたいなもの。
これを無名関数という汎用なものではなくて比較に特化したクラスにしたい
って話ね。
各種比較の実装は各クラスの責任で行なうけど、
もう1つ高い抽象化をしたい、って事ね。
それって別にオブジェクト指向が邪魔になってるわけでも
オブジェクト指向に反してるわけでもないような気がするけど。
0182150
NGNG無名関数のままでもいっこうに構わない。いろいろな比較メソッド
を要素となるクラスの側で定義するのも全然構わない。
問題なのは、そのような比較メソッドがなくてもう一段レベルの低い
ところまで行って自前のものを実装しようというときに、カプセル化
(アクセス制御)が邪魔して思うようにできない可能性があって、それが
javaやC++でComparatorを大々的に使用することの歯止めになってるん
じゃないか?てこと。>>164
0183デフォルトの名無しさん
NGNGカプセル化を隠蔽と捉えているようじゃ駄目だよ。
0184デフォルトの名無しさん
NGNG解決されてるか、もうすこし調べれ、って感じな。
それから、文字列比較の問題は、ビットパターンが同じかどうか比較
するのと、「同じ」っていうのを、あるクラスがどう定義してるかっていう
のがごっちゃになってるみたいだし、同じクラスのインスタンス同士の
比較と、違うクラスのインスタンスの比較も分けてないみたいだ。
「大文字と小文字を区別しない比較」なんて、文字列クラス以外のどこ
で定義しろというんだ?
どうしても「第3者が比較」したいならクラスメソッドでええやん。
それから、、、つっこみドコロ多いから以下略
0185150
NGNGそれは、「カプセル化の恩恵は隠蔽の不利益を補って余りある
ものだから、目を瞑るべきだ」ってこと?
---
オブジェクトの比較について整理してみる。
比較は第三者が行うべきだというオレの意見は、これは統一的な
インターフェイスとしてA.equals(B)ではなくC.compare(A, B)を
採用するべきだ、ということを言ってるのよ。
前者の問題点は、比較方法を変えるためにAに手を入れなければ
ならないこと(それ以外にも手が無いわけじゃないけど、後者の
解決法に較べたらスマートじゃない。>>184氏の言うように、オレ
の知らない言語ではもっといい方法があるかもしれないけど)。
後者の場合は、使用者が意図する比較方法をその度に定義してやれば
いいのでこの問題を解決できる。オブジェクト比較のStrategy
パターンと言ってもいいかもしれない。
0186デフォルトの名無しさん
NGNG使用者の都合で「別の比較方法を追加」したい時にC.compare(A, B)っていう
選択もあるだろうが、A.equals(B)や A sameAs:B を否定する理由にはならん
だろう…
0187John ◆0z.4Is5E
NGNG>後者の解決法に較べたらスマートじゃない。
これおかしいと思うよ。
簡単に書ける=スマートではない事は明らかだよね。
Comparatorなんて物を作ったときのデメリットは
オブジェクトが自分の挙動を知らない事になる。
これが意味するところは、クラス単位での管理が困難になる。
つまり、コードの保守という点でリスクを背負う事になる。
念のため聞いておくと、外部から見てリードオンリーなメンバを作る事って
何か問題があるかな?
問題なければ、あらゆる比較は可能だけどね。
0188デフォルトの名無しさん
NGNG>オブジェクトの内部データに確実にアクセスできるのはそのオブジェクト
>自身だけである、というカプセル化の考え方があるから。したがって、
>第三者であるところのComparatorは潜在的に、オブジェクトを比較する
>のに十分なデータにアクセスできるとは限らない。
オブジェクトを比較するのに十分なデータを読み出せないというのは
クラスの設計がおかしい。
クラスを利用する方が間違ってる場合もあるけど。
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGはあ?>>187はツッコミ所満載だが、何か?
0191デフォルトの名無しさん
NGNG■翻訳者が仕事するように駄目な奴をさらす■
http://pc.2ch.net/test/read.cgi/tech/1008165139/-100
の58にそっくりだな。
もしかして同一人物か?
0192150
NGNGComparatorという別のクラスを作るのは、管理面でちょっとは
不利かもしれないけど、他の方法で同じことを実現するのは
難しいと思う。おかしいと言うのなら、これ以外の方法で実現
できる統一的なインターフェイスを提案してほしい。
後半部分に関しては、OO的な観点から言えば、公開する必要のない
内部情報をアクセス可能にするのは危険だ、ということになる。
個人的には、アクセスする側・公開する側の両者が、自分が何を
しているのかを理解しているなら構わないと思うけど。
0195John ◆0z.4Is5E
NGNGequalとか
equalIn***とか(equal_in_***)
>内部情報をアクセス可能にするのは危険だ
だから、リードオンリーって書いたんだけど。
それともリードオンリーのメンバが存在するケースのデメリットがあるんですか?
>自分が何をしているのかを理解している
具体的に書いてくれないと、ちょっとよくわからないんだけど。
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG150呼んでるぞー
0198デフォルトの名無しさん
NGNGが見たいのは俺だけ?
190が登場したら、190とJohn以外の書き込みは禁止の方向で
0199150
NGNG>equalとかequalIn***とか(equal_in_***)
「統一」と言ってるんだから一つにしてくれよ。
例えば、あなたがハッシュテーブルをコーディングしていて、
出所のわからない二つのオブジェクトをハッシュテーブルの
使用者のために比較しなければならないときに、いったい
どうやってこの二つを比較するんだ?
>それともリードオンリーのメンバが存在するケースのデメリットがあるんですか?
>具体的に書いてくれないと、ちょっとよくわからないんだけど。
アクセスされる側のクラスをAと呼ぶことにすると、Aの公開インターフェイス
は将来に渡ってある程度互換性が保証されるんだろうけど、Aのリードオンリー
のメンバを含む内部実装は、保証されない。だから、Aがバージョンアップしたり、
Aを他の実装に切り替えたりしたときに、アクセスしてる側のオブジェクトが
動作しなくなるかもしれない。アクセスする側はそのリスクを承知した上で
アクセスしなくちゃいけない、ってこと。
0200184=196
NGNG0201デフォルトの名無しさん
NGNG0202150
NGNG>>184氏の発言は、何というか、ビットパターンとか
クラスメソッドとか言ってて微妙にはずしてるような
気がするのよ。「もしかして何か重要なヒントが隠さ
れてるのか?」とも考えてみたんだけど、今のところ
理解できないのでレスできない(w
0203John ◆0z.4Is5E
NGNGそんなのどうやったって無理だけど。
>どうやってこの二つを比較するんだ?
HashObject#equalInHashValue()
みたいな感じかな。
>将来に渡ってある程度互換性が保証されるんだろうけど
そんなんだったら、Javaのライブラリーは将来使い物にならなくなるって
事なんだよね(w
まあ、オブジェクト指向理解度88%に認定かな。
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG0206John ◆0z.4Is5E
NGNGさらに分かりやすく書くと
>出所のわからない二つのオブジェクトをハッシュテーブルの
>使用者のために比較しなければならない
さらに、オブジェクトへのポインタの値が同じかどうか調べる必要もでてきました。
さあ、どうする?みたいな・・・・・
0207デフォルトの名無しさん
NGNGいや、たまに出てくる俺的感覚の押し売り。
Johnが絡んでるんだから、おして知るべし。
0208デフォルトの名無しさん
NGNG0210John ◆0z.4Is5E
NGNGそれとも言ってる意味がわからなかったのかな。
前半は、第三者が比較しても比較の方法分だけメソッド名が必要。
後半は
継承がわかってないか、あるいは継承の使い方をわかっていないのどちらか。
>アクセスしてる側のオブジェクトが動作しなくなるかもしれない。
こんなケースはありえないと言うか、
「リードオンリー」って書くのは4回目くらいなんだけどね。
0211デフォルトの名無しさん
NGNG0212John ◆0z.4Is5E
NGNG説得は不可能って言うか、
分からない事に目をつぶるスタイルじゃ
何を言っても無駄な気がしてきたので、もうやめた。
ちなみにレイトバインディングくらいはわかってるんだよな?
0213デフォルトの名無しさん
NGNG#Yes!!
0214169
NGNGいや、マルチメソッドは共通した名前と意味を持つメソッドの実装を
引数の型に応じて複数用意する仕組み。あんまり直接的な関係はないと思う。
ただ、マルチメソッドの実装として、型を指定した引数の情報隠蔽を破る仕組みも
用意している場合があるという点では参考になるかもしれん。
俺的には、この議論はどっちかというとデザインパターン的な所にいくんじゃないか
と思うのだが、どうよ?
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNGせめてvisibilityとstatic(dynamic) typingぐらい理解してからにしとけよ。
こっちが恥ずかしくなる。
0217John ◆0z.4Is5E
NGNGtypingって型の事言ってるのか?
静的型付言語とかの事?
だとしたら、ちょっとかわいそう。
がんばって勉強してくれ。
0218John ◆0z.4Is5E
NGNGアクセサメソッドを使えばリードオンリーなメンバは作れる。
って書くほど大げさじゃないけど。
equal(A , A)
equal(A , B)
B extends Aのケースを考えれば。
じゃ、おやすみ
0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG使い分ければ?
どっちかが絶対的に優れているわけではないし。
時と場合によるのでは?
0221デフォルトの名無しさん
NGNG>>150はClassObj.equal(a,b)が、
>クラスメソッドとか言ってて微妙にはずしてるような気がするのよ。
だと>>202で言ってるんだよ。
0222150
NGNG感じであってるよね? Visitorパターンと関連が深そう。
で、>>169氏の言う通り、直接関係があるわけではなさそう。
0223デフォルトの名無しさん
NGNG>>181や>>182で言ってることは Eiffel ならできると思う。
はっきりしたことは分からないれど。
0225デフォルトの名無しさん
NGNGJavaなら俺もprivate/protected変数に
public getXXX()をつけるけど
これで解決じゃない?
0227デフォルトの名無しさん
NGNG気に障ったらすまん・・・が、しんで
0228デフォルトの名無しさん
NGNG(等値の話だとすると)オブジェクトは自分自身について詳しいので,
自分と相手が等しいかどうかを判定するのはオブジェクトに任せちまって
いいんじゃない?わざわざ第3者を連れてくるのは,独立していない
オブジェクトをこしらえることになるのでスマートじゃない.
せいぜい>>202の言うとおりクラスメソッドでやるべきだねぇ.
0230228
NGNGこれが等値じゃなくて比較の話になると150の逝っていることに意味が出てくる
オブジェクト同士を比較する方法は「オブジェクトのどの特性に注目するか」
によって複数存在するからねぇ.
「ドラッグカーとラリーカー,どっちが速い?」
そんなもん条件によって全然違う.
「F1と野球,どっちがすごい?」
……何を比較すりゃいいんだ?
こういうときは,150の言うとおり,プログラマが審判となるオブジェクト
をでっち上げて判定させる C.compare(A, B)の形式のほうが柔軟性が高い.
でも,いちいち作るのは面倒だから,オブジェクトA, Bの性質から比較される
「だろう」基準をあらかじめ用意して,自分自身で判断させるA.compare(B)の
方法もあっていいとおもう.
結論としては結局ケースバイケースでやれやっつうことに……
何回も出てきてるじゃん,この結論.
0231150
NGNGとりあえず、同値性判断や順序判断の操作を総称して「比較」
と呼んでる感じ。その辺はなんとなくで解ってちょ。
オブジェクトは自分自身について詳しいけど、bool equals(Object)
という単一のインターフェイスで判断できるのは、オブジェクトが
主観的に最も適切だと思っている方法でだけででしょ。
で、それがオブジェクトの使用者が意図している方法と一致するとは
限らない。だから、客観的な判断が出来て、使用者の意図を知っている
第三者を連れてこなきゃいけない場合がある。
そして、この第三者を連れてくる方法が今のところ最も汎用性の高い
やり方なんじゃないかと思うのよ。
で、まあこのように考えた場合、それはOO的観点からは、
>独立していない オブジェクトをこしらえることになるのでスマートじゃない
ことになってしまうので、OOに問題があるんじゃないか?
と言ってるのよ。>>164の2
0232仕様書無しさん
NGNG0233デフォルトの名無しさん
NGNG話をわかりやすくすると、
例えばある人間が「同じ」と判断する基準があって、
if (ある人間.equal(a, b))
のequalの判定基準はa,bそれ自身では特定できないってこと?
0234224
NGNGEiffelには Javaの Objectに相当するクラスに
オーバーライドできない
standard_equal (shallow_equal) と
deep_equal と
オーバーライドできる equal というメソッドがあるんだけどどう思う?
0235150
NGNGそうです。
>>234
standard_equalとdeep_equalは全てのオブジェクトに共通する比較
方法を定義してるんだよね。equalの方は、これが汎用インターフェイス
であるのなら、前述の理由で設計が悪いと思う。
0236デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNG@sort = sort { $a.hoge <=> $b.hoge } @hogehoge;
sort := SortedCollection sortBlock: [:a :b| a >= b].
適切な getter があれば良いということか
0240150
NGNGうん、個人的にはアスペクト指向を拡大解釈してOOに組み込みたい感じ。
アスペクト指向はまだ勉強すら始めてないんでビクビクもんなんだけど、
副作用的な部分だけでなく本筋の部分もアスペクト指向的に織り込めたら
いいね(確証なし)。
>>237
重要なのはインターフェイスなので、実装方法はどうでもいいのでは?
0241169
NGNG150が欲っしてるのは比較方法を適宜選択できるようなインターフェイスでしょう。
あるCollectionではequal、別のCollectionではdeep_equal、
また別のCollectionではidentity_equal、さらに別のCollectionでは名前の比較とか。
SmalltalkではこれをBlockClosureでやりくりするけど、
これを静的型でやるにはどうする?って話で,、Comparatorが一番近いだろう、と。
その時に比較対象となるオブジェクトが十分なインターフェースを提供していない場合には
情報隠蔽が邪魔だというのが150の主張だと思うんだけど、
俺的には、それはその比較対象となるオブジェクトの設計の問題だろうと思う。
比較に限らず、常にその問題はあるわけで、そこで必要十分なインターフェースを
洗い出すのが設計ってもんだろうと思うのだが。
0242224
NGNG>その時に比較対象となるオブジェクトが十分なインターフェースを提供していない場合には
>情報隠蔽が邪魔だというのが150の主張だと思うんだけど、
>俺的には、それはその比較対象となるオブジェクトの設計の問題だろうと思う。
同意。
0243224
NGNG>これを静的型でやるにはどうする?って話で,、Comparatorが一番近いだろう、と。
Eiffel では比較用のメソッドを定義して
メソッドを引数として渡すと思う。
0244召還師
NGNG比較について、例えば
型A,B,C3で、比較方法も3つだと…
(1)比較方法を全部、被比較オブジェクトのメソッドとして持たせる場合
a.hikaku1(b) <- 比較法1
a.hikaku2(c) <- 比較法2
a.hikaku3(b) <- 比較法3
(2)第三者の審判オブジェクトを作る場合
judge1.hikaku(a, b) <- 比較法1
judge2.hikaku(b, c) <- 比較法2
judge3.hikaku(a, c) <- 比較法3
型が増える可能性が高い場合、(1)有利。
比較法が増える可能性が高い場合、(2)有利。
一般的に(という言い方をすると突っ込まれるがw)、
比較法の方が増える可能性が少ないので、
(1)の方がよく用いられる。
…ってだけじゃないの?ここでの議論って。
なんか、もっと根深いことを議論してるの?良く分からないが。
0245150
NGNGそこまで同意。設計に問題があるから云々っていうのは別にOOに固有
の問題でもないとも思う(ただ、情報隠蔽を前面に出してるので相対的
に問題になりやすいはず)。
で、問題が発生したときに、比較対象となるオブジェクトのソース
コードを変更できる立場にあるのであれば、修正すればそれで済む。
でも、そうでなくて修正することができない場合に、Comparator
を使う戦術は使えなくなってしまう。だから、Comparatorは戦術と
しては申し分ないのに、オプションという不当な扱いを受けてるの
ではないかと考えたわけ。
0246228
NGNGふむふむ,「等値」じゃなくて「ある特徴が同じ」ぐらいの意味かな?
#等価ってやつ?
確かにそれだったらオブジェクト自身にやらせるよりは判定オブジェクトを
でっち上げてそいつにやらせたほうがいいかも.
まあ,特徴ごとにA.equalSize(B)とかA.equalData(B)とかメソッドを作って
やってもいいような気もするけど,それはそれで(使う側も作る側も)
めんどくさそう.
>>241
同意.
隠蔽しているということは,その部分が変更される可能性があるということ
なので,その部分に依存するのはリスク高いね.ちゃんと契約された内容を
使うようにする必要があると思う.
0247169
NGNGなるほど。つまり、Eiffelでは
「比較が問題になるようなCollectionを*利用する*クラスでは
その比較自体がそのクラスである程度の重要度を持っているわけだから
その比較をメソッドとして提供するよう契約するだけの価値がある。」
という考え方なんでしょうか?
俺的にはEiffelのそういうマジメな所に好感を持っています。
Smalltalkでは「比較基準を作りたい?じゃ作ればぁ〜」って感じかな(藁
ループなども全てBlockClosureで実装するから、
「ある処理」をBlockClosureとしてオブジェクト化する事には
何の抵抗もないんだよね。
0248デフォルトの名無しさん
NGNG1、A.equal(B) では解決できない場合 C.compare(A,B) が必要だ。
2、だったら「比較」はすべて、 C.compare(A,B) で統一すべきで、A.equal(B)無いほうがよい。
というふうにずっと見てるんだが。
この 2 が、場合によって適切なシンタックスを選べばいい、っていう意見と対立してるんだろ?
で、 C.compare(A,B) で統一できないのは、OOPLの欠点だとまで言ってるようだ。
0249228
NGNG確かに比較についてはそれでおしまいだね.
そういやSTLの連想コンテナは両方の方法をやってるや.
#デフォルトはOperator<を使って,ユーザー定義の関数(オブジェクト)が
#指定された場合はそちらを利用して「等値」を判定
#この辺の話は"Effective STL"が詳しくてよかったなぁ
実はこの先にもう一つ話があって,
>>164
あるオブジェクトが他のオブジェクトの詳細を必要に応じて知ることが
できないのはOOの悪い癖じゃないの?
というのが150の意見.
0250150
NGNG今までの話をまとめてOOの弱点を挙げてみる。こんな感じだろうか
- 機能そのものよりも、その機能プラスその機能を自己完結させる
ために必要なものまでを含めてモジュールとする傾向が強い。
- カプセル化を前面に押し出しておきながら、それを柔軟に扱うの
に必要な機能を提供していない(これは言語依存かも)。
0251デフォルトの名無しさん
NGNG0252169
NGNG> - 機能そのものよりも、その機能プラスその機能を自己完結させる
> ために必要なものまでを含めてモジュールとする傾向が強い。
で、何が困るんでしょ?
> - カプセル化を前面に押し出しておきながら、それを柔軟に扱うの
> に必要な機能を提供していない(これは言語依存かも)。
カプセル化がオブジェクト単位でしかできないという事?
それでも大抵のオブジェクト指向言語は
オブジェクトとして扱う粒度をユーザー(プログラマ)の判断に委ねているし、
そうして生み出されたオブジェクトを使ってより粒度の粗いオブジェクトを
合成するための仕組みを提供していると思いますが。
オブジェクトの粒度に言語(環境)によって強い制約が課せられているOOといえば
COMがとりあえず思い当たる例なんだけど、そういう話をしてるんじゃないよね?
0253169
NGNGリファクタリングでオブジェクトの粒度を細かくすることもできる。
っつーか、この辺の柔軟性がオブジェクト指向の利点の1つだと思ってたのだが。
0254150
NGNG二番目の方なんだけど、用語が間違ってたかもしれんので
訂正します、スマン。
- 情報隠蔽を前面に押し出しておきながら、それを柔軟に扱うの
に必要な機能を提供していない(これは言語依存かも)。
これはさっきの、Comparatorがいまいち好まれない理由はなぜかを
考えたときの(推測から出た)結論を直接うけてる。
0255召還師
NGNG「癖」のことを言ってるのか…。
「癖」って言われると、難しいものがあるなw。
でも、詳細を知ることが出来ないのは、
単にインターフェースが足りてないだけだと思うんだけど…。
そもそも情報隠蔽が嫌いな人って、"生データ"好きな人が多いけど、
往々にして"生データ"そのものより、加工されたデータの方が情報が多い場合がある。
例(適当なのが思いつかないが…):気体の状態方程式でPV=nRT(Rは定数)を考えると、
生データはP, V, Tの3つでgetP(), getV()...で得られるデータはP, V, n, Tの4つ
みたいにメソッド経由の方が情報が増えたりすることが多々ある。
生データを直接触って4つ目の情報を導き出す時には方程式を使わなければいけないが、
方程式を変化させる必要がある場合、メソッド経由ならメソッド内だけ変えればイイのに対して、
生データ直接お触りの場合は、触ってるの全てを直さなければいけない。
っていうか、オブジェクトの"生データ"なんて、たいがい見ても意味ないものばかり。
ただの委譲先オブジェクトだったり、加工しないと意味のないデータだったり…。
#つまりは、情報隠蔽の是非の議論だよね?勘違いしてるかな?
#論点が良く分からないのよ。
0256デフォルトの名無しさん
NGNG>- 機能そのものよりも、その機能プラスその機能を自己完結させる
> ために必要なものまでを含めてモジュールとする傾向が強い。
なぜ弱点なのだろう?
そうしておくと、モジュール間の結合が疎になる利点があるし、
オブジェクトの内部が矛盾した状態にならないことを保証出来る
利点もある。
それに、>>150がこだわる「統一されたインターフェイス」を提供
するのには、必要なことだとおもうが。
> - カプセル化を前面に押し出しておきながら、それを柔軟に扱うの
> に必要な機能を提供していない(これは言語依存かも)。
カプセル化しているからこそ、あるモジュールが外部に提供する
サービスが保証できるんであって、中を自由にいじれるように
してしまったら、そのモジュールが動作を保証できなくなる。
「柔軟」というのは、危険なコードが自由に書ける事ではないだろう。
>>150は、インターフェイスの統一にこだわるあまり、モジュールの
提供する、そして動作の保証をするインターフェイスの重要性を
理解できていないようだ。
0257256
NGNGカプセル化して、さらに、外部に晒したくないものは隠蔽する事で
モジュールが公開しているインターフェイス以外の方法でその
オブジェクトにアクセスする事を拒否できるんだしな。
する
0258150
NGNG>で、何が困るんでしょ?
不必要なものは無い方がよい。そして、その不必要なものが
インターフェイスとして公開されてたりすると、知らない
所でそれをあてにされてたりして、思わぬ所で躓いたりする。
いい具体例が思いつかない‥
0260256
NGNGOO(またはOOPL)のせいにしてるやつって、以外と多いのな。
あと、危険なコードははじめから書くな、っていう主張と、
危険であることが解かっていれば書いて良いっていう主張は、
永遠に平行線なんだよね。
おれは、「やむおえない場合なら、危険であることが、シンタックス的、
セマンティックス的にコードと設計書に主張できれば、危険なコードも
書いてもいい」っていう意見だ。
0261150
NGNG先にこっち。
例えばjavaなんかだとクラスのルートであるところのObjectクラス
で比較メソッドbool equals(Object)が公開されてる。比較すること
のできないクラスを定義したとしても、こいつが洩れなく付いてくる。
それではということで、privateに再定義しようとするとコンパイル
エラーになる。なぜなら、一度公開されたインターフェイスをアクセス
制御を強める方向に再定義することはインターフェイスの意味を破壊
してしまうから。
どうしても比較させたくない場合は例外を送出するように再定義する
くらいしか解決方法がない。
こんな問題をスマートに解決する方法の一つとして、不必要なインター
フェイスは最初から避ける、てのはかなりいい線いってると思うけど
どう?
>公開していない内部にアクセス出来る方がいいと
>主張してるひとの言う事とは思えないんだが…
何でもOKって言ってるわけじゃないよ。リスクを承知の上で、
ってのは>>199とか他の所でも結構触れてる。>>156では
明示的に宣言するなら、とかそうゆうことも書いてる。
0262デフォルトの名無しさん
NGNG「このクラスライブラリは俺の求めるequalsを提供しない。謝罪と賠償を・・・」
って言ってるだけ。
変な比較メソッドが必要になるような自分の設計を見直すところから始めろよ。
0263デフォルトの名無しさん
NGNGhttp://mentai.2ch.net/test/read.cgi/otaku/1016198191/
0264169
NGNG情報隠蔽はOOのとても基礎の部分だから、
実際に情報隠蔽を破る前に
本当にそれが必要で他にもう方法が無いことが確実であることを
当事者のできるだけ多くが議論して合意している、
という前提で
> おれは、「やむおえない場合なら、危険であることが、シンタックス的、
> セマンティックス的にコードと設計書に主張できれば、危険なコードも
> 書いてもいい」っていう意見だ。
に同意。
OO原理主義的(藁)なSmalltalkでも、
インスタンス変数は皆protectedであって
アクセサを通さなければ外部から更新することはできない。
が、実はinstVarAt:やinstVarAt:put:で外部から直接変数を
参照したり代入したりできる。
これは確実に情報隠蔽を壊しているのだが、
これらinstVarAt:とinstVarAt:put:がないとSmalltalk環境自体が動かない(藁
もちろん、滅多な事では使ってはいけないのは言うまでもない。
0265169
NGNG少なくともidentityはどんなオブジェクトにも必須でしょ。
そのidentityをデフォルトのequalityにでもしとけばいいんじゃないの?
0266150
NGNG>そうしておくと、モジュール間の結合が疎になる利点があるし
これは理解できる。オブジェクトが自己完結的であった方が
よい理由になるね、納得。
ただ、インターフェイスの統一に関しては違うと思う。多重継承
なりインターフェイス継承なり、これを補える設備がある。
0267256
NGNGインターフェイスの継承は、「あるインターフェイスを提供している」事を保証
するに過ぎないんだ。
提供しているインターフェイスが適切に実装されていることを保証するには、
やっぱり自己完結させるべきなんだ。
たとえば、インターフェイスFileStreamを継承したとして、open,close,
read,write,seek みたいなメソッドがあることが保証できる。
しかし、これらのメソッドが正しく動作する保証は、そのメソッドを実装する
以外に、矛盾した結果(openしてすぐにwrite,先頭にseekしてreadしたのに
writeしたものが読めないとか)にならない事を保証しないと意味が無い。
インターフェイスとは、あるサービスを提供することを保証するだけでなく、
サービスを保証しない条件を明確にする意味もあるんだよ。
0270150
NGNGそれは仰る通り。なんだけど、それが「統一されたインターフェイス」
や、オブジェクトの機能と関係無いインターフェイスを提供することに
価値がある、という話にどうゆうふうに結びつくのかわからん。
論点を明確にしたいので、ちょっと質問。
Streamオブジェクトに文字列化のためのtoStringないしshowメソッド
は必要? オレはこれが不必要だと思ってて、こうゆうのを自己完結
のためのインターフェイスだと言ってるんだけど。
0272256=267
NGNGなるほど、さんきゅ。
Eiffelはアスキー出版から本が出たときに、前半だけ読んで、そのままだわ。
>>270
toStringやshowが、機能と関係無い、って言ってる時点で、論点の確認に
ならない気がする。
ま、そういうのも「自己完結」の一部というのはわかる。けど、それについては
それこそ、なぜ弱点なのかの説明が欲しい。
それから、もし、仮に、「統一されたインターフェイスのために、
なぜtoStringやshowが必要か?」っていう質問なら、toStringや
showは、シリアライズは可視化のための統一されたインターフェイスじゃ
ないのかね?って返事になるな。
ま、ちゃんと答えるなら、toStringやshowは自己完結の一部であって、
それが自己完結そのものではない、ってところか。
自己完結は統一されたインターフェイスを保証するために必要だ
といっているのであって、自己完結が統一されたインターフェイス
の全てじゃない。
0273272化粧品
NGNG自己完結の全てが統一されたインターフェイスのために必要なわけじゃない。
のまちがい、スマソ。
0274デフォルトの名無しさん
NGNGどう見てもOOPLそのものへの疑問ではなく、既存のクラスライブラリの設計への不
満をぶちまけてるだけとしか思えない。
嫌なら自分で1から作れ。
そんな俺様ライブラリ誰も使わんと思うが。
0275256
NGNG>>266
>>そうしておくと、モジュール間の結合が疎になる利点があるし
>これは理解できる。オブジェクトが自己完結的であった方が
>よい理由になるね、納得。
とか、今納得してるようなら、もうすこし勉強と経験積んでからもう一度
かんがえてくれたまい。
って感じな…
0276150
NGNGするにはもうちょっと時間がかかりそう。天秤がたくさんだ。
>>274
その通り。>>150を見ればわかると思うけど、オレの意見は既存の
クラスライブラリに対して、設計が悪いんじゃないか?という疑問
を持ったことから始まってる。
>>275
そうかもね(w
0277デフォルトの名無しさん
NGNG>くらいしか解決方法がない。
こいつ痛すぎる(w
はっきり言うけど、Comparatorなんて作る利点はない。
もちろん指摘の通り情報隠蔽ができなくなるのが一点。
あとは、あえて情報隠蔽を捨てて実装してみろ。
1万行超えたあたりで理解できる。
オブジェクトに比較メソッド持たせるのと何も変わらない。
むしろ、オブジェクトに比較メソッドを持たせる事の利点がわかるはず。
統一的なインターフェースとか言ってるけど、クラス名の指定が必要なわけだから
全然統一じゃない事に気づかないほど頭が悪いのか?
0278228
NGNG>>275
クラスを「利用する側」と「提供する側」の永遠のジレンマですな.
利用する側:クラスは「自分の」プログラムに適したものが欲しい
提供する側:クラスは「利用者すべての」プログラムで使える様にしたい
つうことで,利用者は最適性を,提供者は汎用性を追い求める……と
結局,両方とも追い求めているものが違う訳だからねぇ.
通常だと継承とかしてクラスのカスタマイズをするわけだけど,
隠蔽という概念を尊重するのならばあまり無茶はできないし……
利用する側:
カスタマイズ「したい」部分をカスタマイズすれば最適化を行える
しかもそのカスタマイズは未来永劫利用できることを保証されている
提供する側:
ユーザーがどのように利用していようと,ユーザーに影響を与えずに
クラスのカスタマイズができる.
つうのは理想だなぁ.両者が好き勝手やるとなんにもできないので,
結局契約で縛る必要があるんだけど……
……デザインパターンとかフレームワークとかの話になるのかな?
0280デフォルトの名無しさん
NGNGはあ?
Comparatorが情報隠蔽を壊せるわけねえジャン。何言ってんだよ。
比較メソッドとの違いももう何回もループしてるだろ、その議論。
0281デフォルトの名無しさん
NGNGマアマア。
277はただのアホなんで、無視してやってくだせえ
0283277
NGNG0284召還師
NGNGこちらの方が、深く根深い問題だな。
継承したら、子クラスは親クラスのインタフェースを必ず
すべてサポートしなければいけないのが、嫌なんだろうな。
階層の下に行くにつれて、インタフェースがどんどん大きくなっていって、
ある時点での子クラスは、その子クラス自身が使われる問題領域では
恐らく使わないであろうインタフェースまでサポートしなければいけないのが納得いかない…と。
これは確かに歯がゆいねぇ。
(1)子クラスが親クラスのインタフェースを全て扱えることを保証
(2)あるクラスが必要最小限のインターフェースをサポート
の2つの要求のどちらが優先か、にかかっている。
普通は、1>2の場合継承を使い、1<2の場合委譲を使う。
実装階層とインタフェース階層を別に用意して、
TPOに合わせて(?)インタフェース階層をいくつも作ったりとか…。
ここら辺が気持ち悪い?
0285224
NGNGstandard_equal と deep_equal と equal は引数が2つのメソッドだと書くの忘れてた。
それと、オーバライドできるのは equal じゃなくて、引数が1つの is_equal です。
勘違いした。すまん。
Eiffelの例を考えてみました。
class COMPARATOR
feature
xxx_equal(a, b: FOO): BOOLEAN is do ... end
...
end
class B inherit A COMPARATOR
feature
foo1, foo2: FOO
hoge is
do
create foo1
create foo2
if xxx_equal(foo1, foo2) then
print("True")
else
print("False")
end
end
end
必要があれば xxx_equal を引数として渡すこともできます。
0286228
NGNG継承だけの話というよりか,クラス設計者とクラス利用者の間の
契約の話ですかねぇ
その中に継承の話も含まれるんだけどね.
150は,
クラス利用者がクラスを自分のプログラムに最適化する過程で,
クラス設計者が想定した状況(クラス利用者に対して提示した契約)
を越えた範囲でオブジェクトを利用したくなる事態が発生するけど,
#例:オブジェクト同士の比較
#あと,継承したときの子クラスのインターフェースを制限したいとか
このときにオブジェクト指向言語だと(隠蔽などの機能により)
クラス設計者の権限が強いので,利用者はクラス設計者の掌の
なかでしかプログラミングできないのは不便だ.これはオブジェクトの
独立性やカプセル化等を前面に押し出したOOPの悪い癖じゃない?
といってるわけで.
当然クラス設計者にとってこのこと(想定した状況しか発生しないと
いうこと)は優れた利点であり,同時にOOPの利点でもあるんだけど,
クラス利用者にとって(他人が想定した状況しか作り出せないということは)
結構大変な制限になるから不自由なことになるんだよね.
言語仕様として,クラス設計者とクラス利用者の間の権限をどのへんで
バランスさせるか……難しいよねぇ
#まあ,(クラス)設計者は利用者の要望に応えるよう努力している
#けどね.例で出てきた比較の話だと,STLではデフォルト機能を利用して
#両対応してるし.でも,それとはちょっと違う話.
0287228
NGNGあくまでオブジェクトの独立性(カプセル化/情報隠蔽)の話だなぁ
ちょっと先走り汁が出すぎたみたい.逝ってきます……
0288274
NGNG>オレの意見は既存のクラスライブラリに対して、設計が悪いんじゃないか?
>という疑問を持ったことから始まってる。
そんでequalsに矛先を向けるのか?
「標準の比較メソッドが有って困る奴より嬉しい奴の方が圧倒的に多いはずだ」
という設計思想の表明だろ、アレは。
脳みそがねじれててライブラリの文脈に沿った設計が出来ないんなら無理してOOPL
使う必要は無いが、逆恨みでデムパを振り撒くのはやめてくれ。
0289277
NGNGわかってないのはおまえ。
Comparatorが情報隠蔽と背反だと書いてるのが読めないのか?
>比較メソッドとの違いももう何回もループしてるだろ、その議論
はぁ?
じゃあ、具体的な違いを上げてみろよ。
ここの奴らは、違いが分かってないだけ。
だから、俺は実際に実装してみろと書いたまで。
思考実験できない奴は、実際にやってみるか
人の意見を素直に聞くかしかないだろ。
それから、150は自作自演するな。
見苦しい。
デザインパターンとかフレームワークとか言ってるやつは問題外。
今更継承が論点になってると思ってるのか?
どんな方法を用いても、継承抜きで何が考えられるんだよ。
それから、継承と委譲の違いが分かってない奴
おまえ実行時ポリモーフィズムが使えてない恐れあり。
ハンドルはネタか?
キモイからやめとけ。
>>286
それ全部妄想
こいつら、ほんとにOOでプログラム書いた事があるのかと疑うよ。
どうせ、学生だと思うけど。
最近の大学院生は理論先行の奴ばっかり。
アルゴリズムは知ってるけど、コーディングができないってどんなバカだよ。
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNGそこかしこにありありと見えるな。
本をかじった程度で語るな。
0293デフォルトの名無しさん
NGNGプロジェクト管理というこれまたやっかいなファクタのほうが重要になるね。
0295デフォルトの名無しさん
NGNG0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNG0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNG0301228
NGNGありゃりゃ,先走りすぎたか.せっかく面白いネタだったのになぁ.
青臭い理論を軽く受けながすぐらいの貫禄が欲しいもんだけど.
理論で遊ぶのって,実務者にとっては腹立たしいことなのかね?
まあ,一言だけ.
>こうゆうジレンマってOO以外の手法ではどう捉えられてんだ?
これは実際に自分で体験してみるのが正解かな?
とりあえずはC, Delphi, VBといった環境が対比的で面白いと思う.
#環境/手法の限界を体験するのはなかなか大変だけどね.
とりあえず150には伝わったみたいなので潜伏しよう……
0302デフォルトの名無しさん
NGNGつーかよぉ、Comparatorと情報隠蔽が背反なら
オブジェクト指向と情報隠蔽も背反になっちまうわなプププ
Comparatorが特殊なわけではないことは既に何回か指摘されているよ。
0303デフォルトの名無しさん
NGNGいまだにあげてるおまえを晒し上げ
0304デフォルトの名無しさん
NGNG>>156
をどうぞ
>青臭い理論を軽く受けながすぐらいの貫禄が欲しいもんだけど.
ベースがなってないから、そこから展開される理論は幼稚なものになる。
でも、ベースにまで論点を戻さない。
だから厨房って言われるわけ。
>とりあえずはC, Delphi, VBといった環境が対比的で面白いと思う.
何言ってんだか。
Scheme,Lisp当たりを上げないと意味ないだろ。
ついでに、ジレンマって150の勘違いなだけだし。
0305デフォルトの名無しさん
NGNGで、気づいた。
>オレは第三者が比較を行うのが自然な設計であると
>考えてるから、現在のOOは良い設計を行う妨げになってるのでは
>ないかと思うわけ。
現在のOOは150が思う自然な設計を行う妨げになっていると
訂正したほうがいいかもな。
>明示的に宣言した場合にはオブジェクトのprivate
>な部分にアクセスすることを許可するような仕組みが考えられる。
Object.equalもプライベートな変数にアクセスしますが何か?
リードオンリーメンバで解決というのに納得した俺は厨房?
何も新しい事を書いてないのでsage
0306召還師
NGNG実はここまでいろんな意見が出されているが、それらは観点の違いだけ。
僕の場合は、情報隠蔽を厳守するという前提の元で、
あるオブジェクトを柔軟に制御できないのはインタフェースの設計に問題があると考え、
そのインターフェースに深く関連する継承と委譲について軽く触れただけ。
228が最終的に移行した意見は、ライブラリは改変してはならないという前提の元で、
あるライブラリの提供者と利用者の立場の違いを述べている。
150はやや飛躍している感があるが、ここで取り上げられているような問題が
たびたび噴出するということ自体が、パラダイムとしてのOOの欠点ではないかという意見だ。
>>277君だけずれてるんだよね。
まず、Comparatorと情報隠蔽は何も関係ない。
また、>>284での僕の意見の「子クラスは親クラスのインタフェースを必ず
すべてサポートしなければいけない」というのを読み間違えているようだが、
これは概念的強制であって、OOの枠組で作業する以上、あらがえないんだよ。
ちなみに、継承と委譲の違いを指摘するなら、
転送(forwarding)と委譲(delegation)の違いを指摘すべきだね、
>>284の文意を見る限り。(自分で言うのもなんだが)
まあ、>>277は概念と設計と実装がごっちゃになっているんでしょう。
君のような体力系PGは体が資本だから、体に気をつけてな。
0307デフォルトの名無しさん
NGNG継承のないオブジェクト指向言語、あるよ。そしてこういうこと言う
のなら実装の継承と界面の継承(サブタイプ)を区別して論じてくれ。
あとEmeraldとか知ってる?
0308デフォルトの名無しさん
NGNGいや、>>277は概念も設計も実装もわかちゃいないに一票
0309デフォルトの名無しさん
NGNG実行時ポリモーフィズム?プププ
0310召還師
NGNGエメラルドってプロトタイプベースのOOPLだっけ?
実際、僕はそういう言語には触れたことがない。
ちょっと調べてみるけど、その言語は、「概念的に」継承が存在しないんだね?
クラスベースの継承に相当するメカニズムそのものが存在しないと。
だとしたら、オモシロイね。
>実装の継承と界面の継承
書くのが面倒臭いから区別しなかった。確かに、無責任だな。
0312デフォルトの名無しさん
NGNGわかりやすくまとめてくれる識者求む。
結局今は何が論点なんだ〜。
継承のないOOPLって動的バインドはどうやってるんですか。
ついでに、実行時ポリモーフィズムって動的バインドの事だよね?
0313デフォルトの名無しさん
NGNG0314召還師
NGNGでもまあ、参考になったよ。
継承がcloneされた時のみ発生し、その後は個別にupdateするみたいな…。
(間違っていたら訂正して)
しかし、OOの概念を取り扱うためにはOOPLからなるべく離れなければいけないが、
そういう意味では284でのクラスや委譲という表現は避けたほうがいいのかな?
むしろ、何か特定のOOPLをベースに議論した方が分かりやすいな。
*僕も、概念と実装が区別できてないな。
0315デフォルトの名無しさん
NGNGと言ってみるテスト、つか、実感。
0317312
NGNG詳しく教えて欲しいんですが
私C++しかよくわからんのですが、
動的バインドってのはvirtualと派生クラスポインタでやるものと認識
してい・・・いえ本に書いてありました。
本を読んでみると
関数オーバーロードもポリモーフィズムと呼ぶ事が書いてありますが
こっちがOOと関係あるかと言えば、ないですよね。
動的バインドのほうはオブジェクト指向プログラミングには
なくてはならない機能ですよね。
これを無視してオブジェクト指向とか言ってたら
デザインパターンが成り立ちませんからね。
0318デフォルトの名無しさん
NGNGそれは、statically typed なOOPLの一部に限っての話。
dynamically typedな場合は、継承が無くても(以下略)
0319317
NGNGdynamically typedなOOPLで
もっともメジャーなものはなんでしょうか?
0320デフォルトの名無しさん
NGNG動的バインドには(実装の)継承どころか(界面の)サブタイプすら
なくたって構わない。たとえばinterfaceどうしの継承がなくて、
変数や返値の型にはinterface型しか書けないよう改造したJava言語
考えてみなよ。動的バインドは何ら問題なくできるでしょ?
そういうものもstatically typedな言語の「一部」には違いないよネ。
0321デフォルトの名無しさん
NGNGそういう質問すると、アレが出てくるぞ、アレが…
0322317
NGNGちょっとよくわからないのですが、
界面のサブタイプとは、同名のメソッドという意味でしょうか?
javaよくわからんのですが、
Class implement Interfaceとやる事くらいは
どこかでみた事あるのですが
このimplementは継承ですよね・・・
0323デフォルトの名無しさん
NGNG実務で5年以上OO漬けになってるやつ以外は口出すな。
0324デフォルトの名無しさん
NGNGはいはい。今日はいい天気ですねえ。
0325デフォルトの名無しさん
NGNGOOについて、はっきり断定する意見は信用するな。
0326デフォルトの名無しさん
NGNGOOについて、あいまいな意見は信用するな。
0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNGあ、いや、やめとく…
0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNG多態について騙ってくれ。
0332デフォルトの名無しさん
NGNGと思ったが、教える側は、ちゃんと教えられるだけの知識と経験を
もっている奴以外、口出すなという意味なら同意。
0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG下僕インターフェイスを実装しているオブジェクトは
「逝け!」の命令だけで目的地に向かう。
その昔は下僕に応じた命令をしなくちゃいけなかった
「怪鳥ロプロス空を飛べ!」
「ポセイドンは海を逝け!」
「ロデム変身地をかけろ!」
ご主人様も楽な時代になりました。
0337169
NGNGimplementsも継承の一種と看做せるし、subtype関係も発生させるけど、
interfaceという型仕様に対してclassが実装を与えるという契約の色のほうが濃い。
ちなみにJavaではinterface間の継承関係も存在して、interface型間のsubtype関係を構築できる。
ちなみに動的型OOPLといえばSmalltalkを出さないわけにはいかんでしょ、やっぱ。
0338デフォルトの名無しさん
NGNGちゃんと答えが返ってきたよ。
0339デフォルトの名無しさん
NGNGなんかジャイアントロボを思い出したよ。
ロボ〜〜だけだもんな、命令(藁
0340デフォルトの名無しさん
NGNG「城乃内はバグを取れ!」
「弦間(以下略)」
0341デフォルトの名無しさん
NGNG0342デフォルトの名無しさん
NGNGジャイアントロボ = オブジェクト指向
このスレの結論はこれでいいですか?
0343デフォルトの名無しさん
NGNG頼むから実装の継承と界面の継承を分離して語ってくれ。まず
implementsが実装の継承なわけないよね?インタフェースには
実装がないんだから。で、継承とは何か定義してみなよ。なおかつ
subtype関係も発生させるっていうのならsubtype関係も定義して
みなよ。
0344デフォルトの名無しさん
NGNG界面の継承とインターフェイスの継承と仮想クラスの継承、概念の違いはどこにあるですか?
その文脈でいうところのsubtypeとは、どんなもんですか?
0345169
NGNGで、お前は何を言いたいんだ?
implementsが実装の継承なわけないんだから、
改めて界面の継承と断る必要もないだろ。
これだけじゃ何だから1つ答えておくが、
ClassA implements InterfaceB
の場合、ClassAはInterfaceBのsubtypeだ。
0346317
NGNG>なくたって構わない。
やっぱり、これの意味がよくわからんのですが
界面ってなんですか?
インターフェースを無理やり日本語にしたような感じですが。
そういうふうに解釈させてもらいますと、
オブジェクト同士に共通のインターフェース(界面)を持たせる手段は
C++では継承
JAVAでは継承(extends)とimplement
だとおもうのですが、
動的バインドするには共通のインターフェースが必須です。
そして共通のインターフェースを持ったクラスのIDが必要ですね。
そうなると、動的バインドするには継承のような機構がないとダメだと思うんですね。
で、どこかに委譲というのがありましたが
委譲してしまいますと動的バインドは使えんのですね。
03471
NGNG話が難しいのでずっと黙ってましたが、
オライリーのサイ本を読んでると、こうあります。
では、次の二つのコードを比較してみましょう。
rect.setSize(x, y);
setRectSize(rect, x, y);
どちらのコードも、オブジェクトrectに対して同じ操作をしています。
しかし、操作の対象がオブジェクトであることは、先ほどのメソッド呼び出しの
書式の方が明瞭です
(この説明がピンとこない方はオブジェクト指向プログラミングに慣れて
いないからでしょう。もう少し経験すれば納得できると思います)。
「明瞭」「ピンとくる」とか「慣れ」ってある程度事情を語ってますか?。
上の文章にもたまたま比較が出てくるけど、オイラ的にはあいかわらず、
ヒトの認知や意思がもともとオブジェクト指向だったに一票。
絶対的な視座や、視点の欠如にとっては比較は意味ないようだよ。
神の前の平等とか、不増不減とかね。
素人が口出ししてごめんね、みんな。つまりもっと分かりやすく話してってことです。
0348169
NGNGあるオブジェクトが答えることができるメッセージの集合を考えてみましょう。
整数オブジェクトAは+, -, *, /, toStringに答えることが出来るとします。
文字列オブジェクトBは++, toUppercase, toStringに答えることが出来るとします。
ここで、変数VにメッセージtoStringを送ったとします。
すると変数Vが指すオブジェクトが自分なりにtoStringに答えます。
ここで動的束縛が発生するわけです。
EiffelやJavaなどの静的型言語では、変数に型を持たせることで
その変数にメッセージを送ってもいいかどうかをコンパイル時に判断します。
この時の基準になるものがsubtype関係で、extendsとimplementsなどから構築されます。
動的型言語では、実行時に判断します。
Smalltalkではクラスの継承関係を遡ってメッセージに対応するメソッドを探索しますが、
あくまでそのオブジェクトがそのメッセージに答えられるかどうかのみが問題であり、
継承関係はメソッドを探索するときに使われるにすぎません。
もちろん共通の基底クラスが必要なわけではありません。
あくまで個々のオブジェクトがメッセージに反応できるかどうかのみが問題になります。
Selfではクラスがありませんが、オブジェクトがメソッドを持っており、
委譲関係を使ってメッセージに対応します。
というわけで、動的束縛にはクラスさえ必要ありません。
0349デフォルトの名無しさん
NGNG動的バインドに共通の型が必要ないって言ってる人は
RTTI によるメソッド検索とか、ウィンドウズのウィンドウプロシージャみたいな
方法でメッセージ→必要な動作の結びつけの事を動的バインドって言ってると思うし、
共通の型が必要でしょ?って言ってる人は vptr から vtable を探しだす部分
の事を動的バインドって呼んでる気がする。
どっちが正しいんだっけ?
ところで、OO に関して考えたことをひとつ。
OO を学ぶと何かに深く依存する事を嫌うようになる。
結局、実装に依存するのではなくインターフェイスに依存する(抽象度が高くなる)だけで、何かに依存している事にかわりはない。
アンチOOはごく少しの保険料を払うのを拒んでいざという時に泣く人で、
OO信者は常識的にありえない災害を恐れて保険会社のカモになる人。
俺はどっちも嫌だな…ちょっと OO 信者気味だったから、もう少し自分の考えを見直そうと思う。
でもアンチOOほど実装に依存する事に疑いを持たなくなる事はもうできないだろうなと思う。
0350デフォルトの名無しさん
NGNGなるほど、あなたがたは「A implements I」を「AはインタフェースIを継
承している」と呼ぶわけなのね。私はそういう場合には「継承」という言
葉を使わないもので話が食い違っていたようです。だって定められたシ
グニチャのメソッド作るっていうだけなんだから何も「継承」はしてないっ
ていう気がするんだもの。またJava Language Specificationでもその場合
に「inherit」とは言わないよね。
>>347
CLOSではsetRectSize(rect, x, y)でrectの種別に応じてdispatchされます
よね。そういうオブジェクト指向言語もありでしょ。
0351デフォルトの名無しさん
NGNG「共通の型が必要ない」とは言っていないです。ただ継承は必要
ないと言っただけです。ところが、あるインタフェースを
implementsすることを「継承する」と呼んでいる人と対話していた
ために話がこんがらがったようです。
0352デフォルトの名無しさん
NGNG名を名乗れ!
無名は嫌い。
0353デフォルトの名無しさん
NGNG0354317
NGNGどうも。
>Selfではクラスがありませんが、オブジェクトがメソッドを持っており、
>委譲関係を使ってメッセージに対応します。
こっちは、Selfと言うものを触ってみないと理解できそうもない。
smalltalkの動的束縛はjavaと比べると破格ですな。
で、javaのinterfaceが先進的である理由がようやくわかったと思う。
java信者になりそうだ。
0355デフォルトの名無しさん
NGNG実装継承しか継承と認めないの↑がいるだろ。
0357デフォルトの名無しさん
NGNGていうかそれ読みにくいし本に載ってない単語だから使うのやめない?
0358デフォルトの名無しさん
NGNG>implementsすることを「継承する」と呼んでいる人と対話
「インターフェイス継承」という用語が通用している現状は無視?
0359デフォルトの名無しさん
NGNGじゃなんて呼ぶの?インタフェース継承?それで「A implements I」
の場合「AはIからインタフェース継承」していると呼ぶのかなあ。
自分的にはやっぱ「I1 extends I2」のようなものだけをインタフェース
継承と呼びたい気分だ。もちろん実装継承のみに「継承」という言葉を
使ってインタフェース継承は「サブタイピング」と呼ぶ、と言う主義は
ある。それはそれで気持が良い。
0360デフォルトの名無しさん
NGNGかぶった!それで「A implemens I」と「I1 implemens I2」は区別
しないわけね?
0363デフォルトの名無しさん
NGNGUML暗いもんですいません。それで「I1 implemens I2」はUMLでは
どう呼ばれているのでしょうか?
0365169
NGNGうーん、
インターフェイス継承そのものを表現するシンボル(ロリポップ)は
クラスとインターフェイスの間に書くなあ。
インターフェイス同士の場合は普通の継承のシンボル(三角)で書く。
ちなみにクラスとインターフェイスの間の継承も普通の継承のシンボルで
表記することも可。ただしインターフェイスであることをステレオタイプで
明示する。
でもまあ、これはあくまで記法の問題だから、
用語としてインターフェイス間の継承をインターフェイス継承と呼ぶかは
また別問題のような気がする。
ちょっと手元に資料がないんで、はっきりしなくて、すまそ。
0366169
NGNG> クラスとインターフェイスの間に書くなあ。
間に書くっていうか、
インターフェイスは丸で囲んで、実装するクラス(四角)に実線を引く。
0367デフォルトの名無しさん
NGNGご教示感謝!とりあえず、UMLで「A implemenets I」を
インタフェース継承と呼ぶことは分かった。「I1 extends I2」
は同じ用語か別の用語かまだ分からないんだけど、UMLはさて
おいて、この両者は区別して呼びたいと思いません?
0368デフォルトの名無しさん
NGNGさておくも何もインターフェイス継承とただの継承でしょ
0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNGこれを区別する目的は何?
0371デフォルトの名無しさん
NGNGを含むクラスの継承は、どこへ行っちゃったんだろう?
実装を含まないクラスや、サブクラスがメソッドを再定義する事
を要求するクラスの場合は「継承」って呼ぶだろ?
0372デフォルトの名無しさん
NGNGインタフェースどうしを拡張しているのと、クラスを
作る時にそのインタフェースに実装を与えるのとでは
やることが全然違うと自分には感じられます。そう感じ
ない人もいるのかも知れませんが。
0373デフォルトの名無しさん
NGNGそれは実装を継承してるから継承なんだとも言えるね。
もっとも全く実装を持たない抽象クラスからの継承も
継承と呼ぶんではあるけど。
0374371
NGNGSmalltalkはクラスを作る時でさえ、特別な構文を必要としないんだしね。
0375371
NGNG>>373
そう、それは予想していた答えのうちの1つ。
結局、「インターフェイスを継承する」っていう言い方をすりかしないか、なんて、シンタックスの話で、
インターフェイスをインプリメントするのが、継承の概念から外れてるわけじゃないんだよね。
Smalltalkはクラスを作る時でさえ、特別な構文を必要としないんだから、構文上は実装しているように
見えても、それを「実装の継承だ」っていうのはあまり意味が無い。
0376デフォルトの名無しさん
NGNGだからさ、ひとつ「継承」という用語の意味を定義してみてよ。
0377375
NGNGところで、「ダイナミックバインド」だけど、動的バインドには動的なものと静的なものがある、
ってのは、押さえておいておくれ>わかってないヤツ
静的なダイナミックバインドは、静的な型付けされた言語で、継承関係にあるクラスの
メソッドうちどのメソッドが起動されるか、っていうのが、実行時に解決されるような場合。
動的なダイナミックバインドは、実行時の変数型によって起動されるメソッドが決定される
というか、変数にバインドされているオブジェクトにメッセージが送信されるような場合。
静的に型付けされた言語で、動的なダイナミックバインドっていうのも、考えられる。
any型やobject型をサポートする言語は、これに入るだろう。
ちゅーことで、いま、論点ってなに?
0378375
NGNG定義っつってもなぁ…
「あるクラスの性質の一部、または全部を再利用することを宣言する。」
くらいは言ってもいいかな。
「継承」なんて、言語の定義によっていろいろあるからね。
親のもっている性質をすべて受け継ぐのを継承って定義してる言語もあるし、
Selfみたいに、継承を委譲で実現してる言語もある。
そもそも「継承の定義はこー」っていう答えが出てくるのは、わかってない証拠だろう。
0379378
NGNG0380デフォルトの名無しさん
NGNG俺的には多人数で開発するときとかに楽になるかなと思うくらい。
一人っきりで開発するならあまり利点が見つからん。ゼロとはいわないが。
0381デフォルトの名無しさん
NGNG>俺的には多人数で開発するときとかに楽になるかなと思うくらい。
ウダウダ言う前にやれ。
やらん奴には一生解らん。
0382デフォルトの名無しさん
NGNG0383169
NGNG動的束縛といったら、
コンパイル時にどのメソッドが起動されるか解決されているようなのは
通常は含まないでしょ。
それを言うのなら、
「動的束縛を伴うメッセージ送信と、動的束縛を伴わないメッセージ送信がある」
というべきでは?
0385169
NGNGすまそ。完璧に誤読。徹夜明けでボ〜っとしとった。
前者はvtableなどで実装されるようなもの、つまり
ある変数に束縛されたオブジェクトが受け取ることが出来るメッセージ
の集合が変数の型によってコンパイル時に確定できるもの。
(メソッドをindex可能)
後者はvtableでは実装できないもの、つまり
ある変数に束縛されたオブジェクトが受け取ることが出来るメッセージ
の集合がコンパイル時に確定できないもの。
(メソッドをindex不可)
っていう事で合ってる?
静的型での後者はinterface型の変数へのメッセージ送信がいい例だね。
0386デフォルトの名無しさん
NGNG>>339
のジャイアントロボって
オブジェクト指向よりはるかに高度だろ
robo()
ってやるだけで適切なことしてくれるんだから
0387384
NGNG頭がはっきりしてから、もいちど読むといいかも(^^;
ダイナミックバインドは、ある変数にどのクラスのインスタンスが束縛されているかが
実行時まで特定できない。これは>>383のとおり。
>>377の前者の例は、C++で仮想函数を呼び出す時、後者の例は、Smalltalkのメッセージ送信だ。
0388384
NGNG>>385は、静的なダイナミックバインドと動的なダイナミックバインドの実装(?)の話、
ってことでは、はずれてないと思う、けど、充分じゃない。
後者の場合でも、メッセージの集合は確定できるでそ。(極論すれば全部ってこと)
それから、「コンパイル」は持ち出さないほうがいいだろうね。
で、なんで静的なダイナミックバインドと動的なダイナミックバインドを区別するか
っていうと…
はっきりわからん。
静的な型付けの言語と動的な型付けの言語だと、どうしてもこういう違いは出てくる
から、わざわざ分けなくても別れてるって感じ。
ただ、型安全の保障の問題とか、初期化時に変数の型が決定するような場合とか、
静的型付けの言語で、サブクラスへのキャストを許す場合とか、違いを論じるのに
意味のある場面はいろいろ想像できる。
このへん、詳しい人の解説があるとうれしいじょ。
0389169
NGNG> 後者の場合でも、メッセージの集合は確定できるでそ。(極論すれば全部ってこと)
全部ってことは、わからないのと同じ状態だと思う(藁
少なくともvtableによる実装は非現実的になる。
> で、なんで静的なダイナミックバインドと動的なダイナミックバインドを区別するか
> っていうと…
少なくとも言語設計での重要な判断の1つだとは思うけどね。
型安全の保障の問題については、別問題じゃないの?
例えばinterface型へのメッセージ送信では
動的なダイナミックバインドが発生するけど、
安全性は保障されてるよね。
0390デフォルトの名無しさん
NGNG寝てる間にずいぶん盛り上がっているな…(w
そうね、クラスという言葉も使いたくない。何かが何かを引き継ぐ
ことを継承っていうでしょ。一番広い意味はそれだよね。あ、別に
「どういう言い方をするのが普通」というのは別に人の好みでいいの。
継承を実装の継承と実装の継承じゃないものとに分けることは無意味、
という主張については賛同者は多いのかな?そこが興味あるのね。
>>389
インタフェースだってvtableによる実装をしようと思えばできるよ。
JVMではやってないだけで。(1)各クラスについて、そのクラスが
implementsしてるインタフェースごとに別のvtableを用意する、
(2)インタフェース型の変数についてはオブジェクトの参照と
対でvtableへの参照を保持する。
0392377=388
NGNG>全部ってことは、わからないのと同じ状態だと思う(藁
まぁ、たしかにそうなんだが(w
たとえばSmalltalkは実行時にダイナミックにクラス作ったりメッセージ定義したり出来るから、
実は、わかっているもの全部でも、充分じゃないんだよね。
型安全については、動的型付けの言語の場合、実行時にチェック出来るんだから、
保証されてるのがデフォルトとも言える。
でも、動的な型付けの言語だけど、初期化時にあるオブジェクトに束縛したら、
あとは静的な型制限のある言語の場合、この制限は型安全を指すんじゃないだろうか?
(あ、具体的にどの言語がそうだったか、忘れたけど、俺の妄想だったらごめん)
>> で、なんで静的なダイナミックバインドと動的なダイナミックバインドを区別するか
>> っていうと…
>少なくとも言語設計での重要な判断の1つだとは思うけどね。
ま、言語設計の判断材料の選択肢ではあるだろうね、他を決めたら必然的に決まる場合も
あるし、これを先に決める場合もあるだろうし。
おれもそろそろ仕事する、じゃ、また。
0393377
NGNG漏れは、実装のみの継承、インターフェイスのみの継承、両方、っていうの、わけるほうがいいと思う。
導出したクラスを使うことを前提に設計されたクラス(多くの場合、インターフェイスの継承を伴なう)と
インスタンスを作って使うためのクラスで、再利用性の性質が全然違うからね。
Javaだとfinalなクラスから継承したら、再利用性もクソもあるか、つーよーな話、戦場スレには
なんども出てきたし(w
0394デフォルトの名無しさん
NGNGまあ継承をさらに分類することは無意味だと思う人には放置しといて
頂くとして。強い型の言語の場合、継承の「機能」を分類すると
(A)実装の継承
(B)インタフェースの継承
(B1)新しいインタフェース定義に際してインタフェースを継承
(B2)クラスを作る(実装を与える)ためにインタフェースを継承
こう分類できると思うのね。で、自分的には(B1)と(B2)は区別したい
気分なわけ(さらに好みを言わせてもらえば(B2)は継承と呼びたくない…
単なる好みなんでそれ以上突っ込まれても困るけど)。もちろん実際の
言語ではこれらが混ざっている…たとえば純粋な(A)だけで(B)を伴わない
ということはC++やJavaではできないよね。
ところでJavaではfinalなクラスはサブクラス作れないけど、どういう
議論だったわけ?>>戦場スレ。まあ読みに行ってもいいんだけど…
0395393
NGNGJavaだとfinalなクラス → Javaなら当然final指定するようなクラス(を継承を禁止できない言語で)
ということで、表現がへんでした、訂正さしてくらさい。
>たとえば純粋な(A)だけで(B)を伴わない
>ということはC++やJavaではできないよね。
C++でもJavaでもいいから、委譲をシンタックスでサポートして欲しいなぁと思ったり、忘れたり…
>強い型の言語
用語の話でなんですが、reinterpret_castのあるC++は、型安全を破れるので、
「強い型」と言わないっていうのがあるので、静的な型って言いません?
参照↓のp8
http://www.graco.c.u-tokyo.ac.jp/~igarashi/class/fp/chap2.pdf
あ、本題については、もうすこし考えます。
0396デフォルトの名無しさん
NGNG型安全を破れるかどうかで「強い」と「静的」を使い分ける
というのははじめて聞きました。勉強になります。ただOOPL
の場合動的束縛があるということは型の一部分は実行時に定
まるので「静的」という言葉にちょっと抵抗がありますね。
これも気分の問題。
0398デフォルトの名無しさん
NGNGA: 神なんか本当にいるのか?
B: いることを信じろ。信じなければ一生わからん。
というやり取りと同じように見えた。
0399Javaさん
NGNGprivate Object ore, omae;
mona(Object ore, Object omae) {
this.ore = ore;
this.omae = omae;
}
public String toString() {
if (ore.equals(omae)) {
return "omaemona-";
} else {
return "omaegana-";
}
}
}
0400デフォルトの名無しさん
NGNGああ、なるほどね。ただstrongly typedという用語の
一般的な定義とちょっと違うと思うけど。いや、別にだから
駄目というつもりはないです。strongly typedで検索とか
してみました?
0402397
NGNG<検索
statically typedと同じ意味で使ってるのがいっぱい出てくるんですよね(w
ただ、statically typedとstrongly typedの両方を説明してるページは少ない感じです。
両方出てくるオブジェクト指向FAQでは、strongly typedはMLの説明で出てくるんですけど、
そのほかはstatic typing って表記されていて、はっきりわけてあるみたいです。
0403デフォルトの名無しさん
NGNGだからオブジェクト指向FAQをやっている人の陰謀(w では?
型安全についてはtype safeという昔からの用語があるのに
わざわざこれまでと別の意味でstrongly typedという用語を
使わせようっていうのはいかがなものか(w でもそういう流派
があることは了解しました。
ところでPascalみたいに右辺値(変数)の型と左辺値(値)の型
が厳密に一致している言語とOOPLみたいにsubtype関係にあれば
自由に入れてよい(その範囲で型が動的に変化し得る)とを区別
したい場合はどう呼び分けるべきなのかな。
0405デフォルトの名無しさん
NGNG0406169
NGNGinclusion polymorphismの有無
あと、OOPLでの型安全には
オブジェクトアロケーションの安全性と
メッセージ送信の安全性の2種類があると思う。
0407デフォルトの名無しさん
NGNGいやまあ、それはいいんだけどその用語ってオブジェクト指向に
偏しているような気もするわけで。Pascalをさしていきなり
「inclusion polymorphismのないstatically typedな言語です」
と紹介しないだろうと思う…
なに、OOPLの型安全性はその2種類に排他的に分類されるって?
それ面白いね、ぜひもっと詳しく聞かせてよ。それ以外にナイ
っていうところがよくわからない。
0408398
NGNG「概念を教えれ」スレなのに、「やらないとわからない」ってのは
無意味な回答だと思ったからさ。
0409召還師
NGNG僕は今まで継承とは血縁関係みたいなもんだと思ってたんだけど、
(「人間関係のうち血縁関係のみDNAから確定される関係で
他の人間関係はすべて後付けで意味が決まる」という意味で…)
>>307で教えられたEmeraldでの継承のようなクローン人間が出てきて、
その考え方も揺るぎ始めている。
今の僕には継承を定義することなど無理だ。
よって、Emerald検索の際見つけたページを挙げることによって
具体例でもって微力ながら議論に加わらせていただきたい。
http://a414s1.it.nanzan-u.ac.jp/seminar/tobj/tobj3/node1.html
0410169
NGNG別に俺は排他的に分類されるとも他にはないとも言っていないが。
ちなみにinclusion polymorphismはオブジェクト指向に限ったことではなくて
AdaやModula-2、Modula-3なんかにも取り入れられている概念だが。
例えば[0..2]とIntegerね。
0411デフォルトの名無しさん
NGNG排他的でないとしても「特徴的な2点」なわけ?その2つの名前を挙げた
だけではよくわかんないな。いやまあ、気が向いたらぜひ語ってください。
なるほど、そうするとPascalの[1..10]と[1..100]なんかもinclusion
polymorphismがあることになるの?だとするともともとの問題に戻って
PascalとJavaの違いは何の違いということで特徴づければよいの?
>>409
どっちかというとプロトタイプベースが目新しかったですかー(w
0412デフォルトの名無しさん
NGNG想像するとこんな誤解をしていると思われるが
オブジェクト指向言語 : Java, C++ など
関数型言語 : C など
とりあえずScheme,lispあたりでgoogleに突撃してみよう。
0414デフォルトの名無しさん
NGNG一人仕事でも十分役には立ってるけどな。
それ以前では把握しきれなかったような規模のコードを一人で設計して、書いて、メンテできてるし。
もっとも、実装面ではカプセル化というよりはコンポーネント化によってI/Fがすっきりできることと
generic programmingやtemplateによるコードの圧縮の功績が大きいけどね。
0415380
NGNG>もっとも、実装面ではカプセル化というよりはコンポーネント化によってI/Fがすっきりできることと
> generic programmingやtemplateによるコードの圧縮の功績が大きいけどね。
俺もこの恩恵は受けている。ただもし人いっぱいだったらとか考えたら
もう少し有り難みが増すかな?と思ったりする。
そのうち複数人の仕事もやらざるを得ないだろうからそのときまで待ってみます。
0416414
NGNGスレ違いだけど複数人の仕事の話。
現在は複数人の仕事中心だけど、OO的な設計や仕様を他人には
押しつけないようにしている。
全体の仕様を細かく分断していって、個々の機能間は旧来の設計で
済ましているわけね。
実装面の話しになっちゃうけどJavaをまったく使わないようにしてるんで
そういう分け方をしてても、それぞれのモジュール間の連携がうまくとれてるし、
別にOOわからん人がいたって問題は発生していない。
だから、多人数でのプロジェクトでも、こいつはOOがどのくらい分かってる
のかとかも気にしないし、説明する気もない。
あくまで自分の最良でやる部分を、OOが一番よければOOで、そうでないのは
そうでないので、さくっと作って、統合して、メンテしてる。
ここでね、なんか、システムをね、JavaでOOでEEでBeansで、とかってやってるとね、
結局全員Javaが分かっていないといけなくて、全員がOOをそれなりに分かってないと
いけなくて、なんかちぐはぐなシステムができちゃうことが多いのよ。
だからね、複数人の仕事やるのもいいけどね、OOベースの言語でやろうかな、
なんて、まだ考えない方がいいかもよ。
いや、スレ違いなんだけどね。
0417デフォルトの名無しさん
NGNGそれから、OOPLでやらないと、わかってる人がなんか不自由になるからいや。
漏れ的には、ぼちぼち説明しながらプロジェクト進めて、終わったときになんとなく底上げが
出来てるとええなぁ、くらいは思う。
ひねもすのたりのたりかな。
0418デフォルトの名無しさん
NGNGOOをわかってる奴がOOPLを使えない問題は、OOわかってない奴が
OOPL使う問題よりも小さいから、二択ならOOPL使わないほうを選ぶ。
OOPLじゃなくてもOO使う奴は使うんだから。
0419417
NGNGこれがよくわからんのだ。
たとえばどんな問題?
こういうのって、たいがい、OOPLであるがゆえの問題じゃないんだよね。
OOわかってないやつがOOPL使って問題になるような場合って、
OOPLでなくても同じ様な問題でるだろうし、だいたい、今時、
OOPLでない言語って、選択肢少なくて困らない?
0420デフォルトの名無しさん
NGNG当然そういう奴がOOPL以外を使った場合も悲惨にはなるんだが、
OOPL使われるよりはマシ、ってのが今までの経験則。
0421417
NGNGヤレヤレ、結局戦場スレと同じか…
オブジェクトの切り分けながおかしいとかって、抽象的すぎて話になんないな。
モジュールの中に詰め込まれたコードのローカルな事が、表に影響を与える
ような設計すな。
ちか、クソなモジュールが出来てきたら、わかってるやつなら、自前でラッパー
書くとかするだろ。
OOPLはOOがわかってなくても、OOPLの特徴的な機能、カプセル化とか、
情報隠蔽とかを使うだけでも、意味があるんだが…
元凶は>>420みたいなのが、開発言語の制定をする立場にある、って事に
尽きるようだ。
0422421
NGNG0425421
NGNG違う。
おれはドキュソばかりのプロジェクトも動かした。
その経験で言っている。
「OOPLであるがゆえに失敗した」とされるプロジェクトは、
たいては、その言語に不慣れなメンバーばかりで、
失敗の原因が「自分達が不慣れ」なのが原因でなくて、
「OOPLはリスクが高い」ような結論を出してしまう場合や、
OOPLに過大な期待をしたような場合だ。
OOPLを採用するまでも無く、うまくいっているプロジェクト
にOOPLを持ちこむ必要は無いし、OOPLを採用して失敗
したプロジェクトを、もとの環境に戻すことも否定はしない。
当然、経験の少ないものを使うリスクはある。
けど、それは「OOPLであるがゆえ」の失敗では無い。
0426デフォルトの名無しさん
NGNG「アンチパターン」にいろいろと紹介されているね.
例えば
"The Blob" "Ambiguous Viewpoint" "Functional Decomposition"
なんかそうじゃない?
一応参考
http://www.antipatterns.com/dev_cat.htm
0427380
NGNGすれちがいなんで複数人話はこの辺でおしまいで。
0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNGオブジェクト指向の概念って何?
一般的に、必須の概念として、
「カプセル化(含、情報隠蔽)」「継承」「多態」
とか言われることが多いけど、どうなのかな?
っていうか、何があるとオブジェクト指向といえて、
何がないとオブジェクト指向といえないのですか?
0430デフォルトの名無しさん
NGNG>オブジェクト指向の概念って何?
>一般的に、必須の概念として、
>「カプセル化(含、情報隠蔽)」「継承」「多態」
概念を説明するのに、必須概念で説明するのはどうでしょうか。
>っていうか、何があるとオブジェクト指向といえて、何がないとオブジェクト指向といえないのですか?
これは概念じゃなくて、定義じゃないでしょうか。
オブジェクト指向だけで定義というは難しいと思います。
オブジェクト指向分析の定義、OOPの定義、クラスベースOOPの定義、位に狭めないと。
0431デフォルトの名無しさん
NGNGここで概念を学ぶにはノイズが大きすぎる。
0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNGつか、そもそも概念っつーのは、具定例やたとえ話をしながら、相手の中に形成していくもんだし。
0434デフォルトの名無しさん
NGNGそれぞれが固有の性質やふるまいを持った『もの(オブ
ジェクト)』の集まりとして捉える考え方(パラダイム)」。
それ以上でも以下でもない。継承も多態も隠蔽も並行性
もどれ1つとして必須というわけではない(その概念なし
にオブジェクト指向プログラミングすることはあり得る。
0435デフォルトの名無しさん
NGNG読み手を混乱させような、まるっきり無価値なレス
付ける奴が出てくるよな。いったいなに考えてんだ?
0436デフォルトの名無しさん
NGNG方がずっと問題〜。
0437デフォルトの名無しさん
NGNGOOで多態は必須だけど
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNGよかないよ。
>継承も多態も隠蔽も並行性もどれ1つとして必須というわけではない
この必須でないケースってのはかなり特殊で
(434がこの環境でまともな開発を行っているとはとても思えない)、
大半の手続き型をベースにしたOOPL(Java, C++など)
を使う開発者にとっては間違いかつ有害。
0440デフォルトの名無しさん
NGNGでもオブジェクト指向設計して、あるシステムを作ったら多態は
使われている個所がなかった、なんていうのは別に珍しくもない。
「オブジェクト指向言語」の定義の話ならまた別に考えるでしょ?
0441デフォルトの名無しさん
NGNGならおりるよ。
0442デフォルトの名無しさん
NGNG>定義の話をしているのか?教育の話をしているのか?
両方だよ。
>あるシステムを作ったら多態は使われている個所がなかった、
結果として使わなかったと必須ではないはまったく別物だろ。
0443デフォルトの名無しさん
NGNGってそういうもんじゃないのか。
0444デフォルトの名無しさん
NGNG概念はメタ。
個々の言語はそのインスタンス。
分けて考えよう。
0445デフォルトの名無しさん
NGNGOOという基底クラスがあるとしてだね、
どのようなアトリビュートとメソッドが考えられるか、
マターリと、たとえ話でもいいから、語ってクレー。
0446デフォルトの名無しさん
NGNG「メッセージ送信記法」なんてどお。
単に「オブジェクト.メソッド名(引数…)」っていう順番で書くこと
なんだけど。「メソッド名(オブジェクト, 引数…)」と同じだと言われ
てもこれだけでだいぶ気分が違う。
0447デフォルトの名無しさん
NGNG目的語に初めてオブジェクトがでてくるね。
なんか、んー、今更って感じだが。
0448デフォルトの名無しさん
NGNG>使われている個所がなかった
それはオブジェクト思考設計から不要だったという事では?
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG多態が使われる箇所が存在するか否かでオブジェクト
指向設計の適用の適否が決まると本気で思ってるの?
そういう箇所が1箇所あったとして、そこがシステムの
変更で削除されたら、それだけでオブジェクト指向設計
が不要なシステムに変化するの?興味深い意見だ。
自分は、多態が不要だとか言ってるわけじゃない。逆に
オブジェクト指向やる人が多態を知らないとか使いこな
せないとかじゃ困るし、言語も多態をサポートしてないと
不便だと思うよ。ただ、多態がなかったら絶対にオブジェ
クト指向じゃないとかそういう考えは教条主義的で自分の
好みではないというだけ。絶対にナニナニだなんて言う
固執した考え方に対しては必ずそれがあてはまらない場面
が登場してくると思うのね。マーフィーの法則っていうか。
0451デフォルトの名無しさん
NGNGこれを行わないならOOじゃない。
これを行うなら、多態が必要。
以上。
hello worldにOOは不要だし。
0452デフォルトの名無しさん
NGNGだからさ、オブジェクト指向設計して実装はOOPLじゃない
場合もあるわけよ。OOPLであるにしても、実際に多態が必要
になるまで決め打ちに選択するかも知れない。性能とかで。
そういうのも認めない、インタフェースが使ってないもの
は他が何であれ断じてオブジェクト指向じゃない、そういう
ご主張なのね。やれやれだな。
そうそう、Boochさんの本だったかな、温室の温度制御とか
の小さい例題。ああいうのもオブジェクト指向な分解と設計
としていいじゃん。色々つけていけばそりゃ多態が欲しくなる
けど、だからといって最初の小さいものがオブジェクト指向じゃ
ないとは言えないと思うのね。hello worldだって仕様によって
はオブジェクト指向で設計したいかもよ。
0453デフォルトの名無しさん
NGNGそうするに高度な柔軟性を維持しつつ何でもありって言いたいんだろ。
お前の言ってること何の役にも立って根蝦夷。
0454デフォルトの名無しさん
NGNGわかりやすく説明してやると、
javaのクラスライブラリーのクラスが
java.lang.Objectを継承している事のメリットが
わからん奴には、たぶんOO云々いってもわからん。
で、objectを継承してるという事で多態必須。
>インタフェースが使ってないもの
javaのインターフェースじゃないよ。
>Boochさんの本だったかな
何それ?
有名なのか?
一般人にとっては、
そんな不適切な例をあげられても意味ない、なんて事はないよな?
>温室の温度制御とかの小さい例題。
ooで設計するなら、温度計クラスのインターフェースを抜き出して
それを継承(あるいはインプリメント)したクラスを作るな。
という事で、多態は必須。
0455デフォルトの名無しさん
NGNG0456
NGNG0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNGimport java.io.*;
abstract class ConsoleWriter{
protected PrintWriter impl;
public ConsoleWriter(){impl = System.out;}
abstract public void writeObject(Object o);
}
class StringConsoleWriter extends ConsoleWriter{
public StringConsoleWriter(){super();}
public void writeObject(Object o){impl.println((o!=null)?o.toString():"null");}
}
public class HelloWorld{
ConsoleWriter writer;
public HelloWorld(){writer = new StringConsoleWriter();}
public void sayHello(){writer.writeObject("Hello World!");}
public static void main(String args[]){
HelloWorld obj = new HelloWorld();
obj.sayHello();
}
}
0459デフォルトの名無しさん
NGNG反論になってると思うなら勝手にやってれば。そこまでして
必須だと思いたいのかねえ。
ちなみに自分がC++を始めて書いた時はvirtualと書かないと
動的にならないことに驚愕して全部virtualをつけまくって
いました。10年くらい前かな。それも問題ありだよねー。
0460デフォルトの名無しさん
NGNGもう潮時だよ。
ゆっくり休めよ。
0461デフォルトの名無しさん
NGNG0462デフォルトの名無しさん
NGNGH8マイコンのソフトをオブジェクト指向っぽく書いてみたいのですが。
0463デフォルトの名無しさん
NGNGたとえば、GTKとか。
0464デフォルトの名無しさん
NGNGここをすべて読めば何かが見えてくるだろう。
http://pc.2ch.net/test/read.cgi/tech/1009177280/
0465デフォルトの名無しさん
NGNG軽く勉強してみました。
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);
なかなかオブジェクト指向って感じですな。
ありがとうございました。
P.S.
軽く調べたらgccのC++が使えるみたいなので使うことにします。
お騒がせしました。
0466デフォルトの名無しさん
NGNGアフォ?
458が無駄じゃない事を示すと
writer = new StringConsoleWriter();
ここをファクトリーメソッドにしておけば、
例えばネットワークを超えてコンソールに書き込む処理に
「簡単」に変えることもできる。
この場合の「簡単」がどういう意味かはわかるよね?
if/elseが多態で処理される事によって、保守管理が楽になる。
よって、多態は必須。
ところで
>動的にならないことに驚愕して全部virtualをつけまくって
10年前はsmalltalkでもやってたわけ?
0467デフォルトの名無しさん
NGNGなにを問題としているか不明です。
意見の異なる点を洗い出してから話してください。
こんな話では何時までたっても結論は出ません。
2人ともなにやってんだか?
プログラマーとは思えない。
0468デフォルトの名無しさん
NGNG冷静な第三者的意見は sage で頼む。
0469デフォルトの名無しさん
NGNG受けてそれがトラウマになってんだろ。
0470デフォルトの名無しさん
NGNG> (B1)新しいインタフェース定義に際してインタフェースを継承
> (B2)クラスを作る(実装を与える)ためにインタフェースを継承
俺は
B1 はインターフェースを拡張
B2 はインターフェースを実装
と言ってるけどな。UML でもインターフェースの実装には、別の記号が用意
されてるよね。
0471貼っとく
NGNGオブジェクト指向の基礎は、「オブジェクトというものを最も基本的なものとして考える」
ということだろ?
オブジェクト指向プログラミング言語にとってのオブジェクトとは
「データ+プログラム」だ。どこが難しいんだ?
繰り返し書いているが、基本が簡単だかからといって、そこから派生するもの
実際に利用しているまで、全てが簡単だなんて言うつもりはないし、漏れもそう思う。
基本と応用の間を繋ぐ物 複雑な現実の中から、どうシンプルな本質を
見つけか?という問題に対して答えに近いと思うHPを引用したつもりだ。
72さんの言う意味も判るが、それは応用(実際に役に立っているもの)しか
見ていないように思う。
じゃあ、逆に72さんに聞くがオブジェクト指向のどこが難しいのでしょうか?
消防な漏れに教えてください。
http://pc.2ch.net/test/read.cgi/tech/1016462874/100 より。
0472デフォルトの名無しさん
NGNG「分かりやすく説明してやる」
などと勘違いした痛い奴が居るスレがここですか…
0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNG>>452
> OOPLであるにしても、実際に多態が必要
> になるまで決め打ちに選択するかも知れない。性能とかで。
「仕様変更を考慮しない場合もあるよ」
といっているのに対し
>>466
> 例えばネットワークを超えてコンソールに書き込む処理に
> 「簡単」に変えることもできる。
「仕様変更するかもしれん」といっているのは変だと思うぞ。
0475デフォルトの名無しさん
NGNGこれはOO不要ですね、はい。
0477デフォルトの名無しさん
NGNG通常のオラクルなどのテーブルを設計する場合、DOAで分析しデータを正規化するとER図を作りますが、オブジェクト指向のデータベースを適用する場合は、データの正規化は必要ないのでしょうか?
http://home.highway.ne.jp/kogure/jugyo/webtext/oodb/index.html
0478477
NGNG0479
NGNG0480デフォルトの名無しさん
NGNGひとことで言えば、オブジェクトをそのまま格納するのがOODBですから、
正規化の必要はありません。
>>478
RDBとオブジェクト指向で開発すると、RDBに格納したデータをオブジェクトに入れる、
またはオブジェクトをRDBに格納する形に変換する必要があります(インピーダンス
ミスマッチ、でしたっけ?)。
このため、RDB+OOPLでは、やらなくてはいけないことが増え、生産性は、
OODB+OOPLより低くなると思います。
0481デフォルトの名無しさん
NGNGホスト相手のときはどうするんですか?
0482デフォルトの名無しさん
NGNG0484デフォルトの名無しさん
NGNGSmalltalkのクラスライブラリのIntegerが
Objectを継承している事のメリットが
わからん奴には、たぶんOO云々いってもわからん、
と言ってみるテスト(藁
0485デフォルトの名無しさん
NGNGオブジェクトでラッピングしてもの両方ある
というのが最もよいのかな。どうかな。
誰かに聞いてみよう。
0486デフォルトの名無しさん
NGNG「全てがオブジェクト」っつーのがシンプルで一番
よいのでわ? プリミティブ型って処理効率を上げる
ためだけに存在するんじゃないかと思う。
0487デフォルトの名無しさん
NGNG0488デフォルトの名無しさん
NGNG一貫性が保てないというのはあってる?
0489デフォルトの名無しさん
NGNG禿同
ついでにいうと、その尺度の妥当性、というか
どういうシチュエーションで意味がある尺度なのか、
という点についても簡単に言及してあるのが望ましい。
物差しの当て方によって、さまざまな結論を導くこと
ができるが、なかには無意味な「当て方」もある。
机上の空論ってのあることだし。
0490デフォルトの名無しさん
NGNG文糖以上の意味はないと思う。
「全てがオブジェクト」にみえる言語でも実際は、インラインで展開して
速度面での効率を追求するような実装をしているものもある。
レイトバインドのコストを理解していればバカ正直に「全部オブジェクト」
にするのは効率的にはムダ以外の何ものでもないことはわかると思う。
JavaやC#がプリミティブを捨てなかった理由もそこにあると思うし、
>>485が言っているようにオブジェクトでラップしたクラスと両方あれば
統一的な取り扱いの面でも問題はないはず。
0491ロボ鉄 ◆MGTy6iYI
NGNG0492デフォルトの名無しさん
NGNG>JavaやC#がプリミティブを捨てなかった
C#は微妙なところだな。
BoxingはSyntax Sugarという点では「全てオブジェクト」の上を行ってるよ。
0493デフォルトの名無しさん
NGNG言語が提供しているプログラミングモデルの話をしてるの?
プログラミングモデルが人間に優しくて実装が高速なら一番
いいわけだけど…
0494デフォルトの名無しさん
NGNGプログラミングモデルの話でしょ?
しかし実装もおろそかにしちゃんらん訳で「両方」
C#のBoxing unBoxingはいい感じ
0495デフォルトの名無しさん
NGNGboxing/unboxingだけでは不十分なのでは?
1 * 10000の結果と1000000 * 100000000000000の結果を全く同じように扱うことができるのは
Integerがオブジェクトであることの恩恵だよね。
primitive typeで同じ事をしようとすると
1. intをIntegerのsubtypeにする。
2. 四則演算などを全てLargeIntegerも扱えるようにoverloadする。
3. overloadはコンパイル時ではなく実行時に解決する。
ってな事が必要になる。
これならintもオブジェクトにしたほうがスッキリする。
0496デフォルトの名無しさん
NGNGだからSmalltalkは原理主義だって言われるんだよ。
そんなどでかい数値なんかたまにしか使わねーのにパフォーマンス犠牲にしてまで
実装する理由がわからん。YAGNI!
0497デフォルトの名無しさん
NGNGプログラマがすっきりした気分になったとしても、
実行性能がでなければ捨てられるだけナリヨ。
オブジェクト「しか」選択肢がないより、プログラマ側に選択の
余地があるほうが好ましいなり。
プログラマがすっきりする言語が性能も一番なんだったら、Cのかわりに
Lispが天下をとっておったことじゃろーて。
0498デフォルトの名無しさん
NGNGって何に使うの?
0499デフォルトの名無しさん
NGNGではJavaやC#に比べてどれぐらいのパフォーマンスが犠牲になるのか示してみそ。
C#はともかくJavaについてはどのみちバイトコードのオーバーヘッドのほうが大きいよな。
>>497
プププ。
いまだにオブジェクト「しか」選択肢がないと思ってる 化石君ですか?
実行性能を要求される部分はユーザプリミティブにすればいいだけだよ。
例えばSqueakならSmalltalkで書いたコードをCに変換してくれて、
あとはそれをコンパイルすればユーザプリミティブとして利用できるよ。
何でこうSmalltalkへの批判はどれも時代遅れなんだろう (藁
0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNGJavaでIntger互換な多倍長整数(LargeInteger)を作ればいいんじゃない?
というか、もうそういうの在るし。
>>498
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_005/csharp_abc03.html
これぐらいのこと、調べてくれ。
>>502
SmalltalkVMを拡張すること
ユーザ定義のオブジェクトということだ。
でも同時性ってなに?
0504デフォルトの名無しさん
NGNGそうすると今度はint使ってる部分とInteger使ってる部分とのインターフェースが問題になる。
いちいち変換して渡す?
つーか、オブジェクトとしてのIntegerを否定する人達って
自動ガベージコレクタをどう思ってるんだろうな。
Javaは自動ガベージコレクタ「しか」使えないとか批判するんだろうな。
配列の範囲チェックなんかも
自動範囲チェック「しか」使えないとか批判するんだろうな。
ま、セキュリティホールを量産してなさい、ってこった。
0505デフォルトの名無しさん
NGNGそんなことも知らないのかよ。
boxingをカタカナで書いてみな。
「ボクシング」
そうだ、それだよ。
四角いリングのなかで男たちが熱く殴り合うアレだよ。
でだな。
英語では単語の前にunが付くと
「逆の〜」とか「不〜」とか「〜の欠如」とか
いった言葉を作ることができるわけだ。
つまりだな、unboxingってのは、
「四角いリングのなかで男たちが熱く殴り合うアレ」が欠如している、
とか、その逆とかいった意味になるんだよ。
わかったか。
0506デフォルトの名無しさん
NGNG>>496
多分10年後くらいには、
「そんなどでかい数値なんかたまにしか使わねーが、
パフォーマンスに実質影響ないので」
となる。
0507503
NGNG変換すればいい。
C#ではプリミティブ型とオブジェクト型の間を簡単に変換する機能
があるから。
それが、さっきから話題になってるボクシング
それにボクシングを使わなくても簡単に出来るでしょ?
普通のプログラムでは、もっと複雑なことやってるし。
Smalltalkerのかたも勉強しようね。
時代は確実に進んでる。たぶん、きっと、けっこうね。
0508504
NGNGだからさ、いちいちboxing/unboxingするわけ?って聞いてるんだけど。
awtにintを渡すたびに毎回unboxする?
配列の添字にするたびに毎回unboxする?
GUIから渡ってきた整数を毎回boxする?
汎用ライブラリではどっちに揃える?それとも内部でbox/unboxを繰り返す?
パフォーマンスのためのプリミテイブ型が結局box/unboxの手間を頻発させたりはしないか?
0509デフォルトの名無しさん
NGNGSmalltalkのようにタグ付きオブジェクトポインタを使って
整数オブジェクトのコストを抑制した上で
インクリメンタルコンパイラの性能向上を図ったほうがいいと思われ。
0510デフォルトの名無しさん
NGNG0511読まずにカキコ
NGNGgenerational scavenger一本でやってもいいと思うんだよね。
そうすれば実装上もすべてがオブジェクトでいけると思うんだ。
0512デフォルトの名無しさん
NGNG0513511
NGNG0514511
NGNG何が違うんだろうな?
0515デフォルトの名無しさん
NGNGちょっと手間がかかるけど速いっていうのと、
どっちを取るかって話みたいね。
boxingはそんな手間じゃないとは思うけど。
0516デフォルトの名無しさん
NGNGboxing/unboxingは全自動と言うわけではないのでは?
0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNG0519デフォルトの名無しさん
NGNG0520504
NGNG(Integer)とか書くのが手間だと言っているんじゃなくて、
boxingに伴なう変換操作に手間がかかるということ。
1回1回の変換操作は大したことなくても
頻発するとかなりの手間になる。
indexとして使ったり、GUIとのやりとりに使ったりね。
あと、整数がオブジェクトだと遅いといってる人達には
VMの速度に対してどれぐらいのオーバーヘッドになっているのか
示してもらいたいものだ。
0521デフォルトの名無しさん
NGNGばーかばーか
0522デフォルトの名無しさん
NGNGアフォっすか?どう考えたって遅いだろ?
0523デフォルトの名無しさん
NGNGhttp://www.c-sharpcorner.com/Language/BoxNUnBoxGAG.asp
読んでみたが、504の言ってることがどう間違ってるのかサパリワカラーン。
上記URLより
> Boxing a value of a value-type consists of allocating an object instance and copying the value-type value into that instance.
パフォーマンス的にはどう考えても頻発させたくない操作だと思うが。
一方、SmalltalkのSmallIntegerはメモリアロケーションを伴わない分
効率的だと思うが、どうよ?
0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNG>VMの速度に対してどれぐらいのオーバーヘッドになっているのか
>示してもらいたいものだ。
問題の範囲をずいぶん狭くしたもんだ。
0526デフォルトの名無しさん
NGNG両方あるから便利でいいじゃない?
普段はオブジェクトでラップされた整数つかって
肝の部分でプリミティブ型の整数をつかえばいヨシ
これだとboxing,unboxingする回数少ないでしょ?
0527デフォルトの名無しさん
NGNG>普段はオブジェクトでラップされた整数つかって
>肝の部分でプリミティブ型の整数をつかえばいヨシ
むちゃくちゃ言うなあ。
足し算もできないようなのを「普段」使うのか?
肝の部分、って、これじゃいつも肝じゃん。
0528デフォルトの名無しさん
NGNGJavaがVMを前提にしている以上、
VMも含めた全体の性能にどれだけの影響があるかを問題にするのは
とても自然だと思うのだが、どうよ?
それとも君は車の性能を計るのに
燃料ポンプの性能で最高速度を計算するタイプ?
>>526
両方あると混乱するだけだな。
相互に変換して使おうとしたら、
大きい数はintのサイズに限定されるし
パフォーマンスはボトルネックになっている側が支配的になる。
あんまりいい事ないんだよね。
0529デフォルトの名無しさん
NGNGboxing, unboxing といってるから、てっきり native code 混在の話をしてると
思ってたんだが、いつのまにか JavaVM 限定の話になってたのか?
0530528
NGNGboxing/unboxing自体は関数型言語の処理系なんかでも使われてる技術だから
そもそもOOにすら限定されないな。
このスレでは>>499の流れからJava限定で書いている。
0531デフォルトの名無しさん
NGNGたとえば Java (JIT enabled) な状況で
- Integer を使った MD5 チェックサム計算
- int を使った MD5 チェックサム計算
- JNI を使って C で書いた MD5 チェックサム計算を呼び出す
を書いて、速度を比較してみろいう話? (面倒だから、俺は嫌だが)
0532デフォルトの名無しさん
NGNG全部が肝だと思うならそうすりゃいい。
(でも80:20の法則って知ってるよね。)
>>529
C#もVMだしね
>>530
というか関数型プログラミング言語が元ネタじゃなかっ竹?
0533528
NGNG端的に言えばそういうこと。
さらに言うと、MD5計算だけでなくアプリケーション全体のパフォーマンスで
比較しないとね。
例えばPGPを扱えるMTAを実装して、
1. 全部Smalltalkで
2. 全部Javaのintで
3. 全部C#のintとInteger両方を使って
4. PGPは外部ライブラリを使って
実装した場合*メールの読み書き全体*に与える影響を比較するとか。
「遅い」というからにはそういう基準で比較しないと意味ないでしょ。
>>532
C#ってネイティブコードへの変換みたいな事もいってなかったっけ?
あと、boxingが関数型由来というのは、俺の知る限りではその通り。
たぶんSimonとかが持ち込んだんじゃないかな。
0534デフォルトの名無しさん
NGNG「簡単に言うとな、そこだけ取り出して修正ができるっていう便利なものなわけだ」
教えられてるほうは頭に?マークが浮かんでいた。
0535デフォルトの名無しさん
NGNGオブジェクト間の結合を疎にするってのは構造化プログラミングでも
ある程度は出来るけどOOPLのようにエレガントには逝かない。
0536デフォルトの名無しさん
NGNG自分が月に一度しか使わなかったら、「普段の生活の中で、どのくらいの差になるか」
とかいいだしそうだな。
0537デフォルトの名無しさん
NGNGそのとおりですがなにか?
都民は無駄な物買い込めるほど家が広くないんだよ。
0538デフォルトの名無しさん
NGNG後から条件を付け加えるのは、都合が良すぎるな。
MD5 ライブラリなんかは、たとえばファイルをサーバ・クライアント間で同期
をとるときに使ったりするから、速度や使用メモリ量がきわめてクリティカル
になる場面もあるんだよ。
0539528
NGNGだからMD5計算がボトルネックになっているのなら、
その部分は速度重視な言語で書けばいいんじゃない?
>>499にもあるように、Smalltalkも今は他言語を積極的に使える時代なんだから。
俺もSqueakで3次元ポリゴン描画ルーチンをSmalltalkで書いて、
肝の部分だけCに自動変換してユーザプリミティブ化したことあるよ。
しかし、ボトルネックも特定せずに「***は遅いから使えん」などと言うのはアフォ。
80:20の法則で言えば、20のために80の部分まで危険に晒す必要はないでしょ。
20の部分は20の部分に適した言語で書けばいいだけ。
で、残りの80の部分で整数がオブジェクトである不利益がどれだけありますか?ってこと。
0540デフォルトの名無しさん
NGNG0541528
NGNGその月に一度の用事がどれだけ時間にシビアかによるし、
かつ、その前後のスケジュールがどれだけタイトかにもよるわな。
もし、特に問題もなく30分前に出発できるのに
無理して3分で済まそうとして交通事故にあうリスクを増加させているんなら
俺なら30分かけるほうを選択するぞ。
0542デフォルトの名無しさん
NGNG今度は、「自分から見て一番アホそうな書きこみが相手」に、条件後付けですか?
条件後付けは、失笑を買うだけですよ。
おもちゃにされてるの、気がつきませんか?
あと、ageんな。
0543デフォルトの名無しさん
NGNGま、良いけど。
0544デフォルトの名無しさん
NGNGまともな反論ができないもんだから仮定条件のアフォな誤読をご開陳ですか。
茶々入れるんならせめて>>484以降の文脈を理解してからにしたらどうですか?
ま、良いけど。
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNG特に >>487 と >>489 な。
0548デフォルトの名無しさん
NGNG折には528はごく当然な事を言っているようにしか見えないのですが。
hot spotの特定や言語の適材適所という工学的にごく常識的な事を「後付け」などと言いだすようでは
失笑を買うのはあなたのほうではないかと思いますよ。
0549デフォルトの名無しさん
NGNGたとえば、>>533と>>539を読み比べてみれ。
「hot spotの特定や言語の適材適所という工学的にごく常識的な事について論じている」っていう条件を後付けしてる、ってゆーの、わかる?
0550デフォルトの名無しさん
NGNG>>539の
>だからMD5計算がボトルネックになっているのなら、
>その部分は速度重視な言語で書けばいいんじゃない?
とかさ。
でも、それより整数がオブジェクトであるメリットについてなにも言ってないんだよね。
あとさ、条件を言わないで、遅いのは問題じゃないって言っておいて、
そこ突っ込まれてから、「こういう条件では問題ない」って後付けしてるから、
失笑ってことになるんだろ。
0551デフォルトの名無しさん
NGNGはあ、>>533で比較条件を例示して>>539で対処例を出しているように読めますが。
で、548が何の後付けなんでしょうか?
それを言うのなら、>>549こそ
「工学的な常識を前提にするな」という条件を後付けしているように思えるのですが。
0552デフォルトの名無しさん
NGNG528は「遅いのは問題じゃない」なんて言っていないと思いますが。
折が読んだかぎりでは、「遅い」云々は言語だけで決まるものではなく、
使用条件に依存している、という主張で一貫していると思います。
それに、どちらかというと>>538のほうが条件の後付けに見えます。
MD5チェックサムとだけ言っておいて、あとでこんな使い方もある、と
条件を付け足しています。
0554デフォルトの名無しさん
NGNGtimesRepeat: aBlock メッセージも factorial メッセージも受け取れて、
場合によってLargeIntegerを返したりするのは、メリットだと思う。
そこから導出したクラスで、番号なのか数なのか順序なのかはっきり
させるプログラミングのしかたも、結構好き。
でも、メリットを活かせない場面も、沢山ある。
たとえば、MD5の計算がクリティカルなのがあらかじめ予想できるなら、
おれははじめから速度が活かせる言語を選ぶし、3Dのポリゴンの描画
なら、はじめからSmalltalkでなんか書かない。
やってみて、数値演算がボトルネックになるから、そこだけ別の言語で
書きなおす、とかするくらいなら、はじめからC++とかで書くよ。
ボトルネックの特定は、たしかに重要なんだが、実行速度の最適化は
アルゴリズムでするのが定跡だろ。
細かい反論重ねるくらいなら、相対的に遅い事をさっさと認めて、
IntegerがObjectのサブクラスであるメリットについて、話しないか?
0555538
NGNG> それに、どちらかというと>>538のほうが条件の後付けに見えます。
もちろん、あれは後付だよ。
553 が特定の条件下で問題ないでしょと発言したから、それなら逆の条件を
仮定すれば問題アリという結論も導けるから、そんな主張には意味がないと
返しただけ。
何でも良いけど、まずは前提条件をはっきりさせてくれ。
0556550=554
NGNG>>533は「遅くない」ことを主張したいがための後付けの条件なの、ミエミエじゃん。
>「工学的な常識を前提にするな」という条件を後付けしているように思えるのですが。
そう読めますか?
>>528が工学的な常識を前提にしているように読めない、っていう意味なんですが。
「工学的な常識を前提にするな」などという主張はしてませんよ。
>>553
同じ計算をした場合、プリミティブな整数型にくらべ、Objectのサブクラス
の整数クラスのインスタンスとでは、相対的に遅いのは明らか。
でさ、あなたの考えるメリットってなに?
0557528
NGNG> たとえば、MD5の計算がクリティカルなのがあらかじめ予想できるなら、
> おれははじめから速度が活かせる言語を選ぶし、
あらかじめ予想できたら、その通りだな。俺もそうする。
> 3Dのポリゴンの描画
> なら、はじめからSmalltalkでなんか書かない。
それも1つのやりかただと思う。
俺の場合、穴空きポリゴンの三角形分割なんかも必要だったんで、
どこまでプリミティブ化するか決めかねていた面もある。
一度プリミティブにしちゃうと後戻りしにくくなるんで。
それで、どのみち後でCに自動変換できることもわかっていたんで、
まずは全部Smalltalkで書いてみて、実行速度を実測してみて
どの部分をプリミティブ化するか決めることにした。
この場合はSmalltalkのIntegerとCのintとの間にインピーダンスミスマッチみたいなものがあって、
ある意味整数がオブジェクトであるためのデメリットといえる。
なんて書くと、また後付けとか言われそうだが。(苦笑
0558528
NGNG整数がオブジェクトであるメリットは、俺にとっては
anInteger timesRepeat: aBlock や
anInteger factorial や
anInteger + anotherInteger が
SmallIntegerであってもLarge(Positive/Negative)Integerであっても同様な動作が期待できること。
その結果、整数を引数とするメソッドを書いた時に、そのメソッドの汎用性を高めることができる。
そのメソッドへの整数引数が毎回SmallIntegerならば、
SmallIntegerはタグ付きオブジェクトポインタとして実装されているから
整数オブジェクトのためのメモリアロケーションは発生しないし
動的束縛などの実行時のオーバーヘッドはインクリメンタルコンパイラによって軽減させることができる。
そのメソッドへの整数引数がSmallIntegerだったりLarge(Positive|Negative)Integerだったりするなら
そのメソッドの汎用性が高まるし、実行時のオーバヘッドは可変長整数とほぼ同様になる。
0560デフォルトの名無しさん
NGNG> >>533は「遅くない」ことを主張したいがための後付けの条件なの、ミエミエじゃん。
そうですか?まあそういう読み方もあるかもしれませんね。
どっちかというと折的には「そんなこといったら言語比較とか不可能じゃん」と思ったのですが。
0561デフォルトの名無しさん
NGNG> メリット・デメリットがはっきりすれば、あとは用途に応じて秤にかけて
> 適切な方を選択すればいい。
同意です。
0562デフォルトの名無しさん
NGNG> 整数がオブジェクトであるメリットは、
これは、最近の言語だと Generics で対応するのが流行りかも。
Generics と OO って相性良いよ。
0563554
NGNG>>たとえば、MD5の計算がクリティカルなのがあらかじめ予想できるなら、
プログラムの目的によって、どこがクリティカルなのか解かる場合もあるしね。
>どこまでプリミティブ化するか決めかねていた面もある。
思考錯誤のしやすさ、というなら、かなり同意。
で、俺は思考錯誤をする時のやりやすさも含めて、プロトタイピングの効率
が優先する場面なら、1桁くらいの整数演算の効率はどーでもいいと思う。
仮に、CのintとSmalltalkのSmallIntegerの効率の差が10倍違っても、同じ
アルゴリズムなら、いつでもほぼ10倍なわけだしね。
そうそう、後付けといえば、「プログラムの実行性能より、プロセス起動の
性能の方がクリティカルだったら?」とかいう豪快なのもあるかも(w
0564528
NGNG> 適切な方を選択すればいい。
そうだね。その通りだと思う。
ただし、メリット・デメリットは言語や処理系のみで決まるものじゃない、ってのは
クドすぎるかな。
0565554
NGNG>>>558
>> 整数がオブジェクトであるメリットは、
>これは、最近の言語だと Generics で対応するのが流行りかも。
実行時にSmallIntegerが返って来たりLargePositiveIntegerが返って来たりするの、Generics で対応ですか?
ちょっと興味あり。
0566デフォルトの名無しさん
NGNG> 実行時にSmallIntegerが返って来たりLargePositiveIntegerが返って来たりするの、
> Generics で対応ですか?
コンパイル時に型が確定できる場合には、Generics で行ける。
>>558 で例としてあげられていた
> anInteger factorial や
> anInteger + anotherInteger
なんてのは、そうだよね。
0567528
NGNG> これは、最近の言語だと Generics で対応するのが流行りかも。
> Generics と OO って相性良いよ。
なるほど。
MLのFunctorは昔ある程度使い込んだことがあるんだけど、
正直、STLなどは不勉強であまり使ったことなかった。
例えばどんなメリットがあるのかなぁ?
関数のoverloadがほとんど必要なくなるとか?
0568デフォルトの名無しさん
NGNG> ただし、メリット・デメリットは言語や処理系のみで決まるものじゃない、
具体例を挙げるとポイント高いです。
0569554=565
NGNG>>>558 で例としてあげられていた
>> anInteger factorial や
>> anInteger + anotherInteger
>なんてのは、そうだよね。
これは、コンパイル時に戻り値の型、確定できないとおもうです…
0570528
NGNGえっと、>>558で書いた
anInteger + anotherIntegerは
anIntegerもanotherIntegerも
SmallIntegerだったりLarge(Positive|Negative)Integerだったり
実行時に決定するんですが、その場合はどうなんでしょう?
0571デフォルトの名無しさん
NGNGだから、それを言い出すと言語比較とかできなくなると思うのですが…
まあ、言語比較が無意味だというのならそれはそれで1つの見識ですが、
あまり広く受け入れられないと思いますよ。
0572デフォルトの名無しさん
NGNG最近の流行りは Modern C++ Design という書籍。
0573528
NGNGん、そうだね。
言語特有のメリット・デメリットもあるけど、そうでない部分も多いと思うよ。
>>568
んー、ちょっと具体性に欠けるかもしれないけど、>>558で例で言えば
引数として固定長整数が来るのか可変長整数が来るのかコンパイル時に確定できれば
静的型付でかつ整数がvalue typeなほうが演算の速度はいいし、型情報を最適化のために利用することもできる。
実行時にしかわからない場合には、整数がオブジェクトのほうが動的束縛の処理を集中できるメリットがある。
するとVMのコードを集中させることができ、最適化やキャッシュに有利。
整数がvalue typeだと、動的束縛のための処理をオブジェクトのための動的束縛とは別に用意することになり、
その結果、動的束縛のための処理が分散されてしまう。
さらに、value typeの動的束縛を言語や環境が提供していない場合には
ユーザプログラマが動的束縛のコードを書くことになり、
コード量が増えることでデバッグやメンテナンスにも影響する。
似たような事はガベージコレクタにも配列の範囲チェックにも同様な事が言える。
特にポインタ型の扱い(許される演算など)は状況によってメリット・デメリットが錯綜すると思うが、どうよ?
0574528
NGNG例えばガベージコレクタを使わないほうが実行速度を稼げる可能性がある。
しかし、プログラマは常に最高のコードを書けるわけではないから、
ガベージコレクタを使うことでより上質なコードを書ける場合もあり、
結果的に実行速度を稼げる可能性も大いにある。
そしてガベージコレクタの実装はポインタ型に許される演算などに大きく影響され、
Cのように自由なポインタ型でガベージコレクタ無しで実行速度を稼げる可能性があるが、
Modula-2やModula-3のように非常に限定されたポインタ型と高質なガベージコレクタのほうが
結果的に速いコードが書ける場合もある。
また、通信路などの環境によってボトルネックが決まっている場合にはプログラムの処理速度自体が無意味な場合もある。
極端に言えば、アセンブリとSmalltalkでも実行速度は結果的に同じになる場合すらある。
0575528
NGNGOOから離れてしまうが、もうちょっと補足すると、
ポインタ型に許される演算やポインタを取り出す処理を限定することで可能な最適化処理もある。
例えばある変数のアドレスがポインタとして取得された可能性を調べることで
より多くのloop invariantの特定やstatementの順序変えが可能になる。
これも言語要素が「実行速度」という同一指標に関してメリットともデメリットともなる例だと思う。
0577デフォルトの名無しさん
NGNG> 極端に言えば、アセンブリとSmalltalkでも実行速度は結果的に同じになる
> 場合すらある。
なんで極論を持ち出して、わざわざ Smalltalk のアプローチを全て肯定
しようとするかなぁ、この人は。
利点は利点、欠点は欠点としてフェアな視点で把握して、その後に得失を
考え、あるいは欠点を克服する方法を出してくれば良いだけなのに。
0578デフォルトの名無しさん
NGNG長文ごくろうさんですが、
それも何か、細かく分解すれば言語のメリット・デメリットになるような気がします。
まあ一般に言語や処理系の設計は常にメリット・デメリットが隣り合わせで、
状況によってメリットが出たりデメリットが出たり、という意味では同意です。
0579デフォルトの名無しさん
NGNGえ、本当にあれを読んで528がSmalltalkを全肯定してると思うのですか?
Smalltalkという単語が出てきているのはその1文だけですが、
折にはその前後からSmalltalkにあてはまるメリットもデメリットも読み拾うことができましたが。
というか、Smalltalk使っている人が一方の例にSmalltalkを出すのはすごく自然なことだと思いますよ。
折も別スレで別の言語でもいい文脈で何となくsmlを持ち出したりしたし。
あの1文をもってSmalltalk全肯定と断定するのは、あなたのほうに色眼鏡があって
前後の記述を無視して重箱の隅を突ついているように折には思えます。
0580デフォルトの名無しさん
NGNG厨房なんで勘違いしてるかもしれないけど、value typeの存在する言語は
value type操作用のプリミティブが存在してるはずだから、あなたのいう
ような「value typeの動的束縛」は存在しなくて、プログラマが静的に決め
打ちしたコードが走ってるだけだと思うんだけど。
VMで走る言語であっても、バイトコードへのコンパイル時に、型が静的に
決定できればいいわけだし。実際Javaは静的に引数の型を決定できたんじゃ
なかったけ?
あとコード量は増えないと言うのがBoxing/Unboxingなんじゃないの?
0581デフォルトの名無しさん
NGNGhttp://www.objectlink.co.jp/PradaSmalltalk/PradaSmalltalk-JPN_4.html#SEC8
0582デフォルトの名無しさん
NGNGジェネリックが何に対してジェネリックかといえば型だからねー。
(って、こんなことみんな知ってるか。)
JavaScriptによる ジェネリックプログラミング
ttp://www.mamezou.com/tec/Tips/jsgl/index.html
0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG0585age
NGNG0586デフォルトの名無しさん
NGNG激しく同意。
第一線で活躍している開発者は方法論ごときで
試行錯誤して時間を潰すわけにはいかないのだよ。
0587デフォルトの名無しさん
NGNG確かに、現場の人間は、実りの少ない議論でつぶす暇がないからなあ…
方法論なんか胴でもいいから、使えるものを出せ!がお客の要求だし。
万が一完成したとても有益な方法論があったとしたら、導入する意思は
ある?もしもあるとしたら、なにを持って有益と判断する?
0588デフォルトの名無しさん
NGNG>もしもあるとしたら、なにを持って有益と判断する?
まぁ!納期まで2週間も余ったわ!
0589デフォルトの名無しさん
NGNG>ある?もしもあるとしたら、なにを持って有益と判断する?
んなもん必要ない。Cには完成された方法論が既にあるし、
OO関連はCと相容れないので有益とはとてもいえない。
C++だのJavaだのOOなんてものは
Cという激戦区から弾き出された厨房用だろ。
俺は最後までこの分野で勝ち残って引退するよ。
0590デフォルトの名無しさん
NGNGスレタイ嫁や、スレ違いだよ。
今隣にあるスレにでも逝け。
0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNGコボラーみたいになるわけだな。
0594デフォルトの名無しさん
NGNGOO分からんやつはJAVA厨房になるんだよ。
0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNGそして、戦場では必要無しスレへ相互再帰。
0598デフォルトの名無しさん
NGNGすんごい差があるね。
だけど、実際に使うかどうかは別だなあ。
0599デフォルトの名無しさん
NGNG同意、使う使わないはともかく知ってるってことは重要だ。
0600デフォルトの名無しさん
NGNG0601デフォルトの名無しさん
NGNG使ってみないと判らない事もあるよ。
たぶん。
0602デフォルトの名無しさん
NGNG禿同。
スキルっていうのは往々にしてそういうもんだ。
極論だが、素振りの仕方は知っているだけではダメで、実際に練習しないと
ボールを打てるようにならない、というのと似たような一面があると思う。
全てについてそうだとはいうつもりはないが。
で、人によって「ちょっとの練習」でばっちり打てるようになる要領の良い奴もいれば、
「どんなにたくさん練習」してもそこそこにしか打てるようにならない奴もいる。
だから自分がどのていど「要領が良い」のかを客観的かつ的確に把握して
おく必要がある。
問題なのは、野球と違って、なにを以って打てたことになるのか、がはっきり
していないことだな。だから勘違い野郎がばっこすることになる。
ちなみに俺は要領のあまりよくない、ちょっと勘違いしたやつ、というところだろう。
自戒を込めつつ…。
0603デフォルトの名無しさん
NGNG0604601
NGNG背景(理論・概念)を知るというのは、それが適用できる
方向性、可能性を知ることだと思う。
オブジェクト指向のような技術的なものは使ってみないと
判らないこと、それが適用できる限界が判らないと思う。
ただし、この理論は凡人の理論だ。
天才もしくはウィザードな人は、勝手に一人で先に行ってください。
できれば、おこぼれをくれると凡人な私はうれしいな。
0605デフォルトの名無しさん
NGNG個人的にはオブジェクト指向と呼ぶ言葉は良く解らないのですが、
C++やJavaの概念は物の状態や操作を整理する事を言語が
直接サポートしている事だと思います。
0606デフォルトの名無しさん
NGNGまあ整理する事をサポートするだけなので
C++やJavaがプログラムの生産性、保守性を
上げるわけでは無いと思います。
0607デフォルトの名無しさん
NGNGしかしながら物事の整理に対してセンスが良い
SE/PGにとっては力強い武器に成ると思います。
0608デフォルトの名無しさん
NGNGで、何が言いたいの?
0609デフォルトの名無しさん
NGNG599と601で「使う」の意味が違ってるね.
まあ,大した話じゃないけど,擬似問題に填まらんよう気をつけんとねぇ
0610デフォルトの名無しさん
NGNG「使う」?同じ意味で使ってるように見えるけど?
「知る」という意味が601と599では違うなら判るけど。
でも599さんってコンサルタントな人じゃないんかな?
なんとなくそう思う。
0611デフォルトの名無しさん
NGNG実際にプロジェクトで使うかどうかはともかく、使ってみたらどうなるかを知ってることは重要だ。
ってことだろ?
だから>>601は明らかに誤読だと言っている。
もしかしたら、>>599が誤読という罠かもしれないけど(w
0612610
NGNG>概念を知ってて、実際にやってみたらどうなるか、を知ってる奴と知らない奴では
>すんごい差があるね。
以下略
>>599
>>>598
>同意、使う使わないはともかく知ってるってことは重要だ。
その手段(手法)を使う使わない以前に、手段があると知っていることは重要だ
と私は読めます。
手段を複数持っておくこと、第二案を用意しておくことが重要だ
ということじゃない?違うかな?
0613デフォルトの名無しさん
NGNGだとしたら、>>599は>>598の何に「同意」なんだろう??
0614デフォルトの名無しさん
NGNG0615612
NGNGゴミスレにしてごめんなさい。
0616なぜ、オブジェクト指向技術が優れていると言われるのか?
NGNGまた、従来のコンピュータだけではなく携帯電話やカーナビゲーションといった
携帯端末でも動作でき、さらにそれを短期間で開発しなければならない。
このような状況を克服するためには、以下のような技術を融合させる必要があり、
それがすなわちオブジェクト指向なのである。
�@どの環境でも動作するソフトウェア開発言語
�Aどの環境でも動作するソフトウェア部品(再利用コンポーネント)
�Bソフトウェア開発において人間が理解しやすい分析・設計手法
�@は、Javaである程度実現している。C#についてはJava陣営と戦略は異なるものの、
C#をどこでも動作できるような.NET環境の普及を目指している。
�Aは、ソフトウェアを部品として扱うための枠組みである。
�@を実現していることが前提となるが、「オブジェクト(もの)」という単位は、
ソフトウェア部品として理解しやすい。
�Bは、今日のようにシステムが複雑になるにつれて重要になってきた要求である。
従来のソフトウェア開発言語(C言語など関数型言語)で使われていた構造化手法では、
人が理解しやすい分析や設計手法を表現するには限界があった。
オブジェクト指向なら、人が実世界を理解する単位を「オブジェクト」として表現するため、
理解しやすくまたシステムの複雑化にも対応できる。
0617デフォルトの名無しさん
NGNGどこから突っ込め、と?
(ボロボロだな、ぉぃ)
0618デフォルトの名無しさん
NGNG1行目まではまともだったんだがなぁ・・・。
理論以前に勉強すべきすることがあると思いますよ。
機種依存文字とか。
0619616
NGNGあんまりにも酷いんで引用してカキコしてみた。
ちなみに書いたのは某社のCTOだそうな。泣けるね。
0620616
NGNG0621デフォルトの名無しさん
NGNGああ、お偉いさんならいいよ。
上は理想を追うくらいの方がいい。
現状でそうなってると思ってる奴はダメダメだが。
0622デフォルトの名無しさん
NGNGこれか?
さすが症泳社。
0623デフォルトの名無しさん
NGNG4ページ目の欄外だ。
藁減る
0624デフォルトの名無しさん
NGNGSEって、こんな仕事なの?
まあSEっていう職業自体あいまいなものだが。
結局このHPに書いている、Level4以上に
行けるか逝いけないかというのが問題だろうなー。
でも行ける人は、こんな本読まなくても行ける。
0625デフォルトの名無しさん
NGNG0626デフォルトの名無しさん
NGNG大変な職業なんだねー
0627デフォルトの名無しさん
NGNGなかなか辛いねぇ
0628デフォルトの名無しさん
NGNGおんなじ特集なら,「Interface」の方が100倍ぐらいイイ……かな?
「人間はバカだから,道具をシンプルにしとかないと使いこなせないンよ」
というのには激しく同意.
0629デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNG別に開発者なんて誰でも同じだと思うけどね。そんなに難しい仕事じゃないよ。開発なんて。
レベルもクソもあるかよ。
(それより今一番、大変なのは、消費者から直接金を取る立場の人とかでしょう。)
0632リンク
NGNG0633デフォルトの名無しさん
NGNGこういうところの製品はあまり買いたくないなぁ
0634デフォルトの名無しさん
NGNGつーか、少なくとも勘定系の開発を委託したくはないな、いろんな意味で (W
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNG今あるオブジェクト指向型言語が良いものだとは思えないなー。
0638デフォルトの名無しさん
NGNGぜひ語ってくれ。
0639デフォルトの名無しさん
NGNG0640637
NGNG良い言語が無いから困ってるんだ。
C++の総称(&総称の特殊化)が、次のトレンドへの突破口
だと思ってるんだけどねー。
しいて言えばLuxorかなー?
ttp://www.ff.iij4u.or.jp/~takusi/
0641デフォルトの名無しさん
NGNGそこ壊れてます。
0642デフォルトの名無しさん
NGNGいや、いいよ。でもどういう所がイイか書いてくれないと。
>>640
GenericityってC++が起源じゃないよね。AdaとかCLUとかEiffel
とか。ま、ともかく次のイイ言語にはGenericityはあって欲しい。
でもC++がイイ言語というわけには行かないよね、やっぱし。
あとC++になくて欲しいもの。delegationかな。それとinterface
とimplementationの完全分離。サブクラス作るとsubtypeに勝手に
なるのはもうヤメた方がいい。以上私の勝手な好みでした。
0643デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNG総称の特殊化って Constraned Genericity のこと?
>GenericityってC++が起源じゃないよね。AdaとかCLUとかEiffelとか。
Genericity の起源はたぶん Algol68
>意味の検証をシグネチャでしか行わないC#のdelegateは嫌いだなあ。
C#のdelegateはレシーバが固定されているのが嫌い。
Smalltalkのselector とか EiffelのAgent みたいにしてほしい。
0645デフォルトの名無しさん
NGNGdata.add(Object.create(int,8).num);
data.add(Function.call("hogehoge"));
全部オブジェクト指向は面倒くさい。
0646デフォルトの名無しさん
NGNGその3つのうちどれがオブジェクト指向?
どれも全然オブジェクト指向っぽくないんだけど。
と、ネタに反応してみるテスト
0647デフォルトの名無しさん
NGNG0648麗恵香
NGNG。誰か不正アクセスの仕方とか教えてください。
お願いします。
0649デフォルトの名無しさん
NGNGあんたはアメリカ人の乳輪がどうして大きいのか、
原稿用紙200毎分レポート書いてこい
0650デフォルトの名無しさん
NGNGデータは自分が何をされるかをあらかじめ知っている」
入門書でいきなりこの抽象的な説明に会い、厨房だった自分は挫折した。
教える側のエキスパートが少ないのがオブジェクト指向の最大の欠点だと思う。
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG言語仕様が分かってきた頃にやっと意味が理解できるのが入門書。
0653narucy56 ◆wMOjCT4s
NGNGオブジェクト指向はムズカシくてわけわかんないけど、
使えるとなんかカッコイイみたいな、複雑なことが美徳
という風潮にマッチしちゃってるよな。けど、最近はさ
すがに分かりやすい本がいくつが出てきて、誰でもすぐ
に使いこなせる技術になってきていると思う。
0654デフォルトの名無しさん
NGNG理解できれば、まずまず使いこなせる。
0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNG噛み砕いて、というか日本語で。
to implement は実装するでよろしかったか?
0657デフォルトの名無しさん
NGNG"has a"は、持っているであり、包含
"is a"は、部分集合であり、public派生
"is implemented using"は、〜によって実装されるであり、包含または
privete/protected派生
この3つの違いが理解できるまでは、むやみにクラスを派生させては
いけない。
0658デフォルトの名無しさん
NGNGどうしようも無いくらいショボイ突込みでゴメソ
"has a"関係の場合、継承でなく関連で。
というのは、もう定説だと思うけど・・・
0659658
NGNG逝ってきます。
0660デフォルトの名無しさん
NGNGC++なら総称を使おう。(藁
継承と違って、独立性が高いから良いぜ。
あっ。ごめん、ここオブジェクト指向スレだったね。(藁
0661デフォルトの名無しさん
NGNGおれは is a kind of って習った
で、is implemented using って何?
おれはprivete/protected派生は触れないライブラリから派生した
クラスを基底クラスのメンバーへアクセスされるとうざいとき使うが
0662デフォルトの名無しさん
NGNG実装は一体化したいという場合だと思われ
でも、これって継承使うか?
0663デフォルトの名無しさん
NGNG継承を使わず、できるだけ包含を使うように推奨されています。
ただし、継承元の限定公開メンバにアクセスしたい時のみ、継承を
用います。>>661さんが言っておられることです。
例えばStackクラスを作ろうとしたとして、実装は配列でもリストでも構いませ
んよね。この場合Stackクラスの中に配列やリストのクラスを「はめ込みます」。
もしStackクラスから配列やリストにアクセスする必要が生じたときのみ、
protected継承を使います。しかしこれはあまりよい継承スタイルとは言えません。
あと、is aとis a kind of、is implemented usingとis implemented in term of、
いろんな言い方がありますが、同じことです。
0664661
NGNGじゃだめかな?
0665デフォルトの名無しさん
NGNGそれ以外は使わない。
0666デフォルトの名無しさん
NGNGオーバーライドって仮想関数のことだよね。そしたらpublic継承だから、is a kind of
の関係にある場合ならどんどん使っていいんじゃない?
0667デフォルトの名無しさん
NGNGprivete/protected派生をつかってる
0668デフォルトの名無しさん
NGNG再定義ってできないよね?
こういうので困ったこと無い?
俺はコンポジションするオブジェクトの仮想関数もオーバライド
できるべきだと思うんだけど。
0669デフォルトの名無しさん
NGNGなにか具体例がありますか?
0670デフォルトの名無しさん
NGNG具体的な例がなにかないでしょうか?イメージがわかないんですけど・・・・
例えば、包含しているクラスが複数あり、そのクラスが同一の型であるとし
たら、それを内包するクラスに仮想関数があったら、メンバをどうやって区別
するのでしょうか?
0671668
NGNGコールバックメソッドを再定義して、コンポジションするクラスのメンバに
アクセスしたいけど、できないから。
こんな場合は、インナークラスでも使うのかな、でもはじめからあると
便利じゃないかなと思うんですけどね…。
0672671=668
NGNG名前は必ず identical? ですから >> 670
インナークラスで対処できそうですけど、タイプ量と複雑さが
増すから、言語でサポートしてくれるとあっさりしてていいんじゃないかと。
でも、私の認識が甘いのかもしれません。
0673デフォルトの名無しさん
NGNG一個なら一個だけbridge
複数集約してるなら、そのどれかを選べるbridge
オーバライドでは実現できないね。
0674デフォルトの名無しさん
NGNGそれは正しいが、めんどくさい。
これが真実。
0675デフォルトの名無しさん
NGNGポインタも持ってりゃいいだけだ。
面倒でもなんでもない。
0676デフォルトの名無しさん
NGNG基底クラスへのポインタと、仮想化されたメンバ関数へのポインタを...に読み替えてくれ。
だがどちらにしろ、ここで話す内容じゃないな。
0677デフォルトの名無しさん
NGNGソース例キボン
0678デフォルトの名無しさん
NGNGforwording,delegateのこと?
http://javalab.cs.uni-bonn.de/research/darwin/delegation_eng.html
そういうことが出来ることは、いいことなのか?わるいことなのか?
判らん。
設計の問題なのかも?どうかな?
0679デフォルトの名無しさん
NGNGclass Lengthen {
int width_;
public:
typedef ostream &(Lengthen::*method_t)(ostream &os);
Lengthen(int width) : width_(width) {}
ostream &SetWidth(ostream *pos) { return *pos << fixed << setw(width_); }
virtual ostream &puttitle(ostream *pos) = 0;
virtual ostream &putdata(ostream *pos) = 0;
~Lengthen() {};
};
0680デフォルトの名無しさん
NGNG{
vector<Lengthen *> show_order;
// 好きな順に登録
show_order.push_back(new Name("(´д`;;)"));
show_order.push_back(new Age(14));
show_order.push_back(new Gendor(Gendor::Male));
show_order.push_back(new End);
// ヘッダ
for_each(show_order.begin(), show_order.end(), bind2nd(mem_fun1(&Lengthen::puttitle), &cout));
// データ
for_each(show_order.begin(), show_order.end(), bind2nd(mem_fun1(&Lengthen::putdata), &cout));
}
残りは推測しる
0681デフォルトの名無しさん
NGNGなんか、忘れそうなのでメモメモ
0682デフォルトの名無しさん
NGNG最近、活動してないね。
やっぱり(以下 検閲削除)
0683デフォルトの名無しさん
NGNG0684デフォルトの名無しさん
NGNG主旨は立派なんだが、出てくるものは何だかなあ。
0685デフォルトの名無しさん
NGNG0686ddd
NGNGでかいプログラムや,多人数で開発するにはいいが
そうでなければオーバーヘッドがでかいだけなんじゃないかと
最近思ったりする
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNGすべてをオブジェクト指向というのは非効率。
けど、クラスライブラリは非常に有益。
0689ddd
NGNGわけのわからん挙動で結局
なかまで調べてたいへん
ということもある。
あと便利なのもあるけどたこなのもあると思うんだが
0690デフォルトの名無しさん
NGNGフレームワーク系のクラスライブラリかな?
だとしたら同意。
ドキュメントが分散しすぎてて「俺の書いた別売り解説本絶賛発売中嫁」みたいな
0691デフォルトの名無しさん
NGNG0692デフォルトの名無しさん
NGNG0693デフォルトの名無しさん
NGNGこれからは構造化の時代です。
皆さん今までありがとう御座いました。
0694デフォルトの名無しさん
NGNGさようなら693さま!(・∀・)ニヤニヤ
0695デフォルトの名無しさん
NGNGですが、いい大人が図形作画ソフトの前で、
「うがあああああああわかんねえええええええなにぱたあああんなんだああああ!」
と言っているのを見てると、なんだかなあ…と思います。
0696デフォルトの名無しさん
NGNGなんか原一男みたい(わかんないか)
0697デフォルトの名無しさん
NGNGが本当に自然に書けるようになっているんだね。メソッドまでオブジェ
クトにラップするとは....。
Cベースのウインドウプログラミングではイベントやウインドウの扱い
で泥沼にはまったけど、C#でOOなプログラムを書いていけばこの辺りの
非本質的な部分で悩むことはだいぶ減りそう。プログラム環境としては、
JavaやDelphi以上かも。
やはりネットワークやウインドウプログラムでは、OOって必須だね。
0698デフォルトの名無しさん
NGNGそれはOOの一つの側面。
ライブラリーを作る側から見たOOの特徴を理解しましょう。
0699DQN
NGNG0700デフォルトの名無しさん
NGNGたい焼き機と、たい焼きと、あんこの関係だよ。
たい焼き機がclassで、たい焼きがobject、あんこがmemberだな。
プログラムをそういう考え方で統一して作ろうってのが、
オブジェクト指向ってわけだ。
ようするに、メリットもあればデメリットもある。
どうでもいい考え方の一つってことだ。な。わかった?
0701デフォルトの名無しさん
NGNG勉強し直し。
0702デフォルトの名無しさん
NGNG質の悪い教育ビデオでも見た?
0703デフォルトの名無しさん
NGNG元ネタは日経の某VB厨雑誌と思われ。
0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNGdelete は?
0706デフォルトの名無しさん
NGNGガーベジコレクション
0707デフォルトの名無しさん
NGNGいまどき OO 否定派なんてやっぱりネタなのか?
0708デフォルトの名無しさん
NGNG0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNG0711デフォルトの名無しさん
NGNGOOよりになるね。
0712デフォルトの名無しさん
NGNG想像してみたら、なんとなくオブジェクト指向のメリットを
説明できていることに気がついた。
※構造体(オブジェクト指向の始祖)
構造体を使う方じゃなく、使われる構造体自身が機能を持っていると、
コードがすっきりしていいんじゃないか?
↓
*最初のクラス(継承は出来ない)
コードに手を加えずに、機能の拡張が出来たら便利じゃないか?
↓
*継承が使えるクラス
継承したクラスを親クラスとして扱うと統一した型で扱えて便利だ。
でも、それなら型を定義するためだけにクラスを作るのは汚い。
↓
*インターフェイスの発生(型のみの定義が可能に)
みんなで型を活用したコーディングを色々試しているうちに、
定石が固まってきたのでまとめてみた。
↓
*デザインパターンの発生
そんなにキャリア長くないんで実際がどうだか知らないけれど、
こんなもんじゃないかなと思う。
実際どう?
0713デフォルトの名無しさん
NGNG0714ななち
NGNG「進化の歴史」は、言いすぎだと思う。
0715デフォルトの名無しさん
NGNGSmalltalkも今から見れば出てきたのが滅茶苦茶早いからね。
初代は1972年にはもうあったんだっけ?
Cの登場とSmalltalkの登場はほぼ同時期だったと思う。
そしてSmalltakには継承が1976年に導入されて1980年にはMVCができた。
CがC++になったり、Javaがでてきたりするのは更に後だね。
デザパタは元々はSmalltalkのコミュニティから出てきたって
聞いたことがあるけどこれは本当?
0716デフォルトの名無しさん
NGNGしかし全てをそれで表現しようとするのは間違い、なはず。
0717デフォルトの名無しさん
NGNGオブジェクト指向とは何かと言えば、継承・多態・カプセル化。
この三つをネジ釘としてオブジェクトという単位を構成し、
それらの結合体としてソフトウェアを構成していくのが狭義のオブジェクト指向。
広義にはそれを思想化して設計法や発想法にまで拡張するけど、
狭義かつ具体的な手法としてはあくまでも、
継承+多態+カプセル化=オブジェクト
Σオブジェクト=ソフトというオブジェクト
このほーてー式が基本。下手に適用範囲を拡大して
何でもOOで片づけようとすると却って苦しいこともあるので、
OOPに慣れたプログラマほど、OOをシンプルで小さなものとして捉えた方がいい。
0718716
NGNG0719デフォルトの名無しさん
NGNGご明察。
Javaメインでやってて、その前がC++をほんのちょっと、
その前はBASICまでブランクがあいてます。
>>715
そんな昔からあるのか・・・
でも、BASICやってた頃はオブジェクト指向なんて
かけらも見かけたこと無かったなあ。
0720デフォルトの名無しさん
NGNG表現できるかどうかじゃなくて、表現しやすいかどうかが重要。
表現できるからといってやたら適用・援用・強要すると幸せになれない。
0722逝って良しの1
NGNGオブジェクト指向ではない。
モノとして扱える/振舞うプログラムモジュールを用いた構造こそがオブジェクト指向
である。
結果としてカプセル化になる傾向はあるが、オブジェクト指向の集合の端っこで
重なっている別の集合と考えた方が良い。
継承・多態はオブジェクト指向とは全然別の記述上の構造に過ぎない。
0723逝って良しの1
NGNGオブジェクト指向ではない。
0724デフォルトの名無しさん
NGNGこりゃまた、ずいぶんヘタレた例をあげたもんだ…
0725デフォルトの名無しさん
NGNG一見すると正しいようで、実はあまりいい考え方とはいえない罠。
実装上の形式的な、継承・多態・カプセル化、が
ソフトをいきなりオブジェクト指向化するわけではないのは確かだが、
それは単に悪例だというだけであって、
継承・多態・カプセル化はただの実現手段なんだ、
という考え方は危険性を孕んでいる。
継承・多態・カプセル化が本当に「ただの」実現手段ならば、
それ以外の「広く適用可能で」「実際に利用されている」
実現手段でもって実現されたオブジェクト指向の作例も常に頭になくちゃならない。
でないと、有効な実現手段が他にないということなのだから、
結局はオブジェクト指向と継承・多態・カプセル化が表裏一体だと認めてる。
つーわけで実際にそこそこ広く使われている実装手段で
継承・多態・カプセル化の解釈に当てはまらないものを例示してくれ。
思想的なポジションとして継承・多態・カプセル化をオブジェクト指向から
切り離すのは全く正しい考え方ではあるが、
具体的な実装手段を伴わないままに概念が先行してしまうと、
オブジェクト指向以外の実装手段の利用に対する注意が削がれやすい。
OOマンセーになった経験の浅いプログラマがハマりやすいパターンがこれ。
結果的に何でもオブジェクト化しちゃって保守性を逆に下げてしまったりする。
継承・多態・カプセル化では表現しづらいものがあったら、
「だけどこれはオブジェクトとして解釈できる」
というところにあまり拘泥せず、別の考え方もできるようにした方がいい。
オブジェクトじゃない機能の凝集性が低く
スクリプト風のシーケンシャルな処理フローの中に
そこから制御されるオブジェクトを関連づけていくとかね。
プログラマには美的水準以前に、納期や品質というハードルが待ってるんだから。
0726デフォルトの名無しさん
NGNG異議ないか?
0727デフォルトの名無しさん
NGNG使ってる?
0728デフォルトの名無しさん
NGNGデリゲードとはちがうんだろ?
0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNGオレモナー
0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG同じだと思うが。
>>727
これを読めれ。
実装の継承に関する問題
http://www.microsoft.com/japan/developer/library/jptech/TechArt/VTools/vb/vb6/ifacebased.htm
0734指向ってどういう意味?
NGNGオブジェクト指向、クラス指向、インターフェース指向を
状況によって変えるのが吉。
まあ、同じことを頭の中で見方を変えて考えてるだけだが…。
1つの統一された考え方のみで全てを説明できるほど
頭が整理もされてないってのもあるし。
っていうか、これってJava指向?
駄文でスマン。
*最近思うが、JavaでもSmalltalkにはない良さもあって良いよね。
0735デフォルトの名無しさん
NGNG0736デフォルトの名無しさん
NGNGどういう事だ?
0737デフォルトの名無しさん
NGNGクスクス
0738デフォルトの名無しさん
NGNG0739デフォルトの名無しさん
NGNG何を意図として何を指してそう言ってるのかがさっぱりわからん。
0740738
NGNG0741デフォルトの名無しさん
NGNG暇なので意訳してやる!
(ポリモーフィズムを使うと、インスタンスの型に応じた
処理を呼び出せるらしいけど、)←※1
例えば、DrawSquare,DrawCircle,DrawTriangle...ってやらないで、
呼び出しをDrawメソッドに統一するとソースが見やすいってだけなの?
※1 おそらく>>735が全く理解していない部分。
0742デフォルトの名無しさん
NGNGいや、それくらいの類推は出来るよ。みんな。
その前提でからかってるの。
どっちにしろ通ぶって多様の話振った割には言葉の用法からして間違ってるし。
0743735
NGNGとりあえず、意味がわからん
0744735
NGNG0745デフォルトの名無しさん
NGNGだからポリモーフィズムつーのは、
一つにまとめあげようとする技術の総称だ。
これでわからんのなら消えろ。
0746指向ってどういう意味?
NGNGオブジェクト指向的には、
違うオブジェクトに同じメッセージを出しても違う反応を示すのは当たり前。
だって、違うオブジェクトなんだもん。…というしかない。
つまり、十人十色なのがポリモーフィズム。
クラス指向的には、
下位クラスから上位クラスに対してメッセージシグニチャによる検索をして、
初めにHITした内容の処理を行う。
つまり、同シグニチャを名前空間によって、
分離・分類する構造化的手法がポリモーフィズム。
インターフェース指向的には、
インターフェース壁により実行者と実装者が分離するのが
インターフェースの目的の1つなので、
あるメッセージシグニチャに対して実行したり実装したりする。
「実装者←→インターフェース←→実行者」のマッピング。
つまり、実装者の変化が実行者に対するポリモーフィズム。
利点・欠点をはぐらかして書くと、こんな感じかも。
0747デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNG0749デフォルトの名無しさん
NGNG0750ポリモーフィズムなんて
NGNGそういった外面をまったく同じにするような使い道しか
思い浮かばないな
0751デフォルトの名無しさん
NGNGopen
close
send
get
メソッドなんかは思いっきりポリモーフィズムじゃないの?
0752デフォルトの名無しさん
NGNG0753デフォルトの名無しさん
NGNGクラスじゃないだけで。
0754デフォルトの名無しさん
NGNG0755逝って良しの1
NGNG0756デフォルトの名無しさん
NGNG0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNGお前は厨。
0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNGリファクタリング対象
0762デフォルトの名無しさん
NGNG必要になってから泣くなよ(w
0763デフォルトの名無しさん
NGNGワロタ
0764デフォルトの名無しさん
NGNGЮ)__)
| ゚Д゚.| ハァ?
^^^^^
0765デフォルトの名無しさん
NGNGttp://www.tcp-ip.or.jp/~ikken/cpp/
0766デフォルトの名無しさん
NGNGprogrammerとしては正しいことを書いてる。
software engineerとしてはあまりに乱暴。
0767デフォルトの名無しさん
NGNGそのページ
>構造化プログラムとは即ち構造体を使うプログラムだ
この言葉が彼のレベルを集約している
ワロタ
0769デフォルトの名無しさん
NGNG実行時まで、どのデバイスが相手になるのかわからないんなら、ポリモーフィズムかも。
でも、コーディング中にデバイスが特定できてるんなら、手続き抽象、ていどかも。
0770デフォルトの名無しさん
NGNGまさにC++がそのような言語だね。
0771デフォルトの名無しさん
NGNG0772デフォルトの名無しさん
NGNGPrefsクラスで集中管理するのか、各クラスがシリアライズするのか。
簡単な物は後者で良いんだけど、設定ダイアログを持つアプリケーションのような
複雑な物になってくると、前者だとPrefsクラス一つで簡潔になると思うけど、
後者だとダイアログクラスが各オブジェクトを知らないとならなくなるから、
大変じゃないですか?
0773デフォルトの名無しさん
NGNG駄目か。
0774デフォルトの名無しさん
NGNG設定ダイアログやレジストリとのインターフェイスは、Prefs関連のクラスに集約する。
設定は、各クラスの初期化の時か、パラメータ変更通知メソッドに、パラメータとして渡すようにしてるよ。
0775逝って良しの1
NGNGおそーい。
俺がとっくに実用化済み。
0776デフォルトの名無しさん
NGNGダサい
クラスとリソースが密接に関わり合うと言うのもなんだかなー
0778774
NGNGどんなダイアログで変更するのか、なんて、知ってる必要ないじゃん。
だから、そこを分離、抽象化してるんだけど…
0779デフォルトの名無しさん
NGNGそれってPrefsクラスと言うか、単なるローカルレジストリじゃない。
OS等の物理レジストリとの関係を疎遠な物にしているだけでさ。
もう一つ上のレイヤの、オブジェクトとプロパティの関連について知りたいな。
各オブジェクトが、Prefsクラスに問い合わせるようにするの?
それだったら、本質的にはWinで言うGetPrivateProfile〜と変わらないしね。
設定ダイアログも、クラスの内部と別に作らないといけないから、
管理に掛かる手間も2倍になってしまう。
0780デフォルトの名無しさん
NGNG>>713の方がコーポネント志向ではあるな。
実際ActiveXコントロールなんかは
コントロール自体にプロパティページを内包する形は
採ってないので、それが良い方法なのかはわからないけど。
0781デフォルトの名無しさん
NGNGわかりやすいプログラムになら、プロパティ管理クラスと、
プロパティ画面表示クラスを、別に用意した方がいいだろうな。
オブジェクトの独立性は低下するが。
納得できない奴もいるかもしれないが、
オブジェクト指向的=最適な選択じゃないいい例かもな。
俺の能力に問題があって、
オブジェクト指向に出来ないだけだと思うなら、
自分でプログラミングして確かめてみな。
頭の中の妄想じゃなくてな。
0782デフォルトの名無しさん
NGNGStatusとActionを決してごちゃまぜにしないこと
0783デフォルトの名無しさん
NGNGStatus→プロパティ
Action→メソッド
これらを含む概念がclassだと思ってたけど違うの?
0785デフォルトの名無しさん
NGNGいや、良い方法が思いつかないから質問しとるんです
0786デフォルトの名無しさん
NGNG結局、それが全ての間違いの元だったのです・・・
というか、それを過信しすぎると破綻するというか。
0787デフォルトの名無しさん
NGNGオブジェクト指向に出来たら良いわけでもない
0788デフォルトの名無しさん
NGNG違いますか?
0789デフォルトの名無しさん
NGNG特に>>788。
おまえにはポリシーっつーもんは無いのか。
0790デフォルトの名無しさん
NGNG0791デフォルトの名無しさん
NGNG0792デフォルトの名無しさん
NGNG0793逝って良しの1
NGNG他人の考え出したモノをなぞるだけでポリシーもクソもないもんだ。
ポリシーを口に出せるのは俺設計俺構造が出来る人だけ。
0794デフォルトの名無しさん
NGNG自然言語って何?
0795デフォルトの名無しさん
NGNG例えば
>自然言語って何?
とか。
0796デフォルトの名無しさん
NGNG0797デフォルトの名無しさん
NGNGって言うか人が使うファジーな言語のこと。
0798デフォルトの名無しさん
NGNG0799デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNGOOPを理解してるっていうんなら、OOPが完全無欠の開発手法ではない以上、
問題点もちゃんと指摘できるはずだ。
0801デフォルトの名無しさん
NGNG0802デフォルトの名無しさん
NGNG0803デフォルトの名無しさん
NGNG0804800
NGNGそれは俺への当てつけかい?(笑)
OOP以外により優れたものがあると、俺がどこに書いた?
道具は適材適所って意見は多いが、
その具体的な判断基準にまで触れたレスは見かけない。
だから、それを明示できるような奴はいないのか、と話を振ったまで。
OOPが適したところ、適さないところ、の判断もできないようじゃ
OOPについて語る資格があるとも思えない。どうよ?
0805デフォルトの名無しさん
NGNG適材適所〜としか意見が言えない連中はよく読んどけ。
0806デフォルトの名無しさん
NGNGで、どこが適してて、どこが適してないんだ?
さっさと教えれ。
0807デフォルトの名無しさん
NGNGだって勉強中なんだもん♪
0808デフォルトの名無しさん
NGNG当てつけのつもりはない m(__)m
0809デフォルトの名無しさん
NGNG適したところ1つ、もしくは適さないところ1つを、順番に上げていってください。
0810デフォルトの名無しさん
NGNG802です。
0811デフォルトの名無しさん
NGNGとりあえずお前には適してない
0812デフォルトの名無しさん
NGNG0813デフォルトの名無しさん
NGNG実装継承のクラス階層は良くない
メッセージドリブンOSでのGUIは良い
0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNGという事例を以前聞いたことがあるが・・・
0816デフォルトの名無しさん
NGNGシステムのなが〜い初期化処理とか。
0817デフォルトの名無しさん
NGNG世の中には、適不適を無視したシステムも有る。
(しかし、大抵は少数派。)
0818デフォルトの名無しさん
NGNG向かないのに、何故か携帯でJAVAは
(日本だけは)多数派?
汚い手練手管のドコモの功績か?
0819デフォルトの名無しさん
NGNGだとあんまり必要ないかも
0820デフォルトの名無しさん
NGNGいつもうんちく垂れてる粘着ドキュソは
結局なにも説明できないね
なんか底が知れたって感じ
0821デフォルトの名無しさん
NGNG自分は結構便利だと思ってるけど、なぜ便利かということを振り返ると、
・名前の衝突がかなり回避できる
・VCのエディタがメソッドを補完するために羅列してくれる
・統一的な概念だから整理して考えやすい
・関数やライブラリだけでカプセル化するのに比べて、もっと様々なものを
カプセル化できるようになった
こんな所かな。
0822デフォルトの名無しさん
NGNGいつもウンチクすらたらすことの出来ない粘着ドキュソは
結局煽りしか出来ないね
なんか深さすらはじめからないって感じ
0823デフォルトの名無しさん
NGNGのように理解できると思うんですがどうでしょう。私はそうでした。
Delphiを持ち上げるわけではないですが。
0824名無しさん@Emacs
NGNGISBN4-7741-1325-5 C3055 \1580E
あたりから始めるのがよいかと思われ。
読んで分かったような気にならなかったらスッパリあきらめる。
0825デフォルトの名無しさん
NGNGオブジェクト指向を盲信する人
−>適材適所すら言えない
−>オブジェクト指向が理解できていない
−>悔しいので何でも他人の理解不足のせいにする
−>そして自己満足 & 自己陶酔
オブジェクト指向の問題点を指摘できる人の方が
まだ少しはオブジェクト指向を理解できているのかもね
かもだよかも(藁)ヘンナアオリハイランヨ
0826デフォルトの名無しさん
NGNGOOはどんな状況でも常に最適の解ですが何か
0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNG3流のマはすっこんでろ。
0829デフォルトの名無しさん
NGNG設計の下位レイヤーに近い実装の方がオブジェクト化しやすい。
上位レイヤーに近い実装の方がオブジェクト化しにくい。
コンポーネントはオブジェクトでも接着剤までオブジェクトとは限らない。
0830デフォルトの名無しさん
NGNG0831デフォルトの名無しさん
NGNGオブジェクト化しづらい物を,無理にOOするOOマンセーは逝ってヨシ.
0832デフォルトの名無しさん
NGNG使われる側のオブジェクトは固めの言語で書くと割に幸せ。
0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNG「適所」がポイント
0835デフォルトの名無しさん
NGNG0836デフォルトの名無しさん
NGNG要は、きっちり文章化するものではない、ということですか?
0837デフォルトの名無しさん
NGNG要は、きっちり定義できないので逃げる、ということですか?
0838デフォルトの名無しさん
NGNG自分がわかってなくて適所も言えないための
逃げ口上という結論でいいですか?
0839デフォルトの名無しさん
NGNGやりたくないんだったらやらなくていい。
決まっていることじゃないから。
0840デフォルトの名無しさん
NGNGと言えるケースならオブジェクト化しやすいんだよ。要するに適所なんだよ。
0841デフォルトの名無しさん
NGNG0842デフォルトの名無しさん
NGNG右は北を向いて東の方向
0843デフォルトの名無しさん
NGNG人に聞くだけで知識つけようなんざプログラマとしてどうなのか?
0844デフォルトの名無しさん
NGNGおいおい、そんな当たり前の事言ってどうする。俺をがっかりさせるな。
今までの勢いはどうした、弱気になるな。OOやらない奴は馬鹿と言ってくれ。
>>843
もしかして、オブジェクト指向の勉強のために、君に教えを乞う奴が居ると思った?
凄い自信だな、感心したよ。試すつもりはないが、オブジェクト指向の適所をあげてくれ。
もしかして、全ての環境・状況が適所の、完全無欠の絶対手法なのかな?
0845デフォルトの名無しさん
NGNG>もしかして、オブジェクト指向の勉強のために、君に教えを乞う奴が居ると思った?
>凄い自信だな、感心したよ。
俺も文章の意味を簡単に変えてしまうあなたの理解力に感心。
0846デフォルトの名無しさん
NGNG言うなれば修正オブジェクト指向だ。
0847デフォルトの名無しさん
NGNG目的はプログラムの開発効率のアップな訳だからそれでも問題はないけどね。
0848デフォルトの名無しさん
NGNGほとんどの点でオブジェクト指向は最良の選択のはず。
0849デフォルトの名無しさん
NGNG>ほとんどの点でオブジェクト指向は最良の選択のはず。
さようならとしか言いようがない。
0850デフォルトの名無しさん
NGNGどういうときに何がオブジェクト指向より優れているのか
具体的に教えてくれ。
まあさようならでもいいけど。(w
0851デフォルトの名無しさん
NGNG0852デフォルトの名無しさん
NGNGソースコード公開してるわけでもねぇし、
馬鹿で良い。チョコット組めるだけまし
0853デフォルトの名無しさん
NGNG0854デフォルトの名無しさん
NGNG0855デフォルトの名無しさん
NGNGこれがOO厨の正体だな。
馬鹿すぎて、自分がオブジェクト指向を理解できていないことすら、理解する能力がない。
0856デフォルトの名無しさん
NGNGわかったわかった。まあどうでもいいからさ、
どういうときに何がオブジェクト指向より優れているのか
具体的に教えてくれよ。
0857デフォルトの名無しさん
NGNG説明してもお前じゃ理解できない。
自分で本読んで勉強しろ。
0858デフォルトの名無しさん
NGNGつーか、お前は誰にも説明できないだろうが。
そもそもオブジェクト指向以外って何があるか知ってるかい?
構造化だ!とか言うのか?w
0859デフォルトの名無しさん
NGNGどういうときに何がオブジェクト指向より優れているのか
具体的に教えてくれよぉ〜。
0860OO原理主義者 1
NGNG0861OO厨
NGNG,,--―'''""`ヽ'  ̄`ヽ、
/ ヾ / ~`ヽ
/ ヽ;:/""""ヾ ミ ヽ
/ ;:;;:::''''"""" \ i
/ / ヽ ヾヽ
/ / / ;/ ヾ ヽ
/ ;:;:ヽ ,,,,;;::'''''ヽ ;:|
i / ,,,,;;::::::::::::::: ___ヽ ヽ
| | | " __ :::: '"ゞ'-' ヾ ヽ
| | ヾ | '"-ゞ'-' ::::::. : | ;:|
| ;:| : ::::::: : .、 | :|
| ヽ ( ,--、 ,:"' | /|!
| ヽ ヾ |;:/
| | __,-'ニニニヽ /|
|| `、ヽ ヾニ二ン" /;:|
| ヽ \ /ノ
| i `ー-::、_ ,,..-'|ヽ
ヽ;:;:;:;: ;:人 `ー――'''''"~ / ヽ
\;:;:;:;:/ `ー-、 ,.-'" \ー-、
,.-'" :/ \ ,.-''" |
/ ! ~>、,.-''" |
,,..-‐'''"" ヾ ,.-''"――――-、 /
オブジェクト指向がオブジェクト指向であると見抜けない人が
(プログラミングをする事は)難しい
0862デフォルトの名無しさん
NGNG色々難しそうな造語を作って並べてみるのはコの業界によくありがち
なこったが、つまりは同じコードを何度も書きたくねえってこった。
0863デフォルトの名無しさん
NGNG少し大規模になってくると、OOが適してる場面が非常に多いことも
また事実。
goto文ばかりのプログラムよりも、構造化プログラミングのほうが
より適してる場面が非常に多いのと同じようなもの。
新しい手法が開発されればOOが最適とはいえなくなるだろうけど。
0864デフォルトの名無しさん
NGNG0865デフォルトの名無しさん
NGNGこういう人が現場を不幸にする
0866デフォルトの名無しさん
NGNGなんでいつまでたってもそういう大雑把な話しかでてこないんだよ。
OO嫌いな奴もOOのここがこういう風に駄目だとか具体的なこと言えよ。
0867デフォルトの名無しさん
NGNGじゃあまずお前からだな。
0868デフォルトの名無しさん
NGNG責任転嫁しようとして必死の人たち。OOは良くないから
わからなくても平気、と思い込もうとしている。
マジかわいそう。
0869デフォルトの名無しさん
NGNGはい、次の方。
0870デフォルトの名無しさん
NGNG今の時代OOできないっていうのは、40過ぎて童貞のようなものです。
必死になるのはわかりますが、自分を相手にしない女をボロクソに言ったり、
セクース経験がある人に八つ当たりするのはやめてください。
僕らの世界ではそれが普通なので。
0871デフォルトの名無しさん
NGNG今の時代Javaができないっていうのは、40過ぎてスカトロ未経験のようなものです。
必死になるのはわかりますが、うんちを食う女をボロクソに言ったり、
うんちを食う経験がある人に八つ当たりするのはやめてください。
僕らの世界ではそれが普通なので。
0872デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNG0874デフォルトの名無しさん
NGNGオブジェクト指向マンセースレが立たないのはなぜか。
あなたがたはよく考えねばならない。
0875デフォルトの名無しさん
NGNGアンチスレが立つのは、理解できないフェードアウト組の必死の抵抗。
0876デフォルトの名無しさん
NGNG0877
NGNG構造化だろうが、OOだろうが、アスペクトだろうが、
客が望むものを作ったやつの勝ち。
0878デフォルトの名無しさん
NGNGいいこと言った。
早くて高くてうまい。これが理想。
0879デフォルトの名無しさん
NGNG2つ継承して派生クラス作るのが通のやり方。
やっぱり効率がいいのだよ。
人間だって父と母から継承するだろ?
プログラムだって同じ。
おまえらアンチOOは可哀想だな(w
0880デフォルトの名無しさん
NGNG>2つ継承して
多重継承とその謎の継承方法は違うよな?
0881デフォルトの名無しさん
NGNGマイナーなデザパタだけどな。使ってみろ。
0882OO原理主義者 1
NGNG0883デフォルトの名無しさん
NGNG暇なら書籍でも読め
0884デフォルトの名無しさん
NGNG0885デフォルトの名無しさん
NGNG>>881
0886デフォルトの名無しさん
NGNGわかったわかった。
構ってやるよ。暇なんか?暇なら書籍でも読め。
あー悪かった。遊んでやるからネタ振りしろ。
0887
NGNG0888デフォルトの名無しさん
NGNG実際にシステム開発はせず、VB厨・C#厨・Delphi厨を攻撃することで、
日々のストレスを解消する一派。
ヒッキーが多く、実務経験がないため、机上の空論から抜けられない。
かまってもらいたくて、朝から晩までくだらないレスをする。
建久社新語辞典より
0889デフォルトの名無しさん
NGNGお見逸れ致します。
0890デフォルトの名無しさん
NGNG0891デフォルトの名無しさん
NGNG0892デフォルトの名無しさん
NGNG0893デフォルトの名無しさん
NGNG使わない(えない)奴が妬んで暴れている。
0894デフォルトの名無しさん
NGNGつまらんことわめいてないで、転職雑誌買いに行った
ほうがいいよ。お先真っ暗だよ、マジで。
0895デフォルトの名無しさん
NGNG定義など存在しない
0896デフォルトの名無しさん
NGNG0897デフォルトの名無しさん
NGNG>適材適所ってのがよくわからん。
>ほとんどの点でオブジェクト指向は最良の選択のはず。
同意。
0898デフォルトの名無しさん
NGNGしてるだけだろ?
0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNG0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNG100年使えるはずだったのになぁ・・・。
0903デフォルトの名無しさん
NGNG継承とオブジェクト・コンポジション。
これだけは覚えなさい。
すべての基本です。
0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNGまあ、抽象的な部分が大きいから、
はっきり書くのがためらわれるのは分からんでもない。
何書いたって叩かれそうだからな(藁
が、書かないでいたって話になんねぇから書く。
煮るなり焼くなり好きにしろや。が、ツッコミは具体的にな。
0906905
NGNGソフトを、オブジェクトと呼ばれる単位の塊と見て
設計・実装を行うソフトウェア開発手法である。
オブジェクトとは、広義には、
強い関連を持つ幾つもの処理を一つの区分にカテゴライズして
それを一つの統一された概念の単位と見たものであり、
狭義には、継承・多態・カプセル化によってそれらの単位を実装したものである。
カプセル化とは、データとそのデータに付随する処理を一体化し、
処理関数(=メソッド)を通じてのみデータを変更できるようにする手法である。
規定外のデータ操作によるバグを減らすという、安全面での効果があるとされる。
また、カプセル化のみによるオブジェクトの実装は、抽象データ型とも呼ばれる。
継承とは、カプセル化によって実装されたオブジェクトの、
大部分は同じだが一部が異なるバリエーションを、
元となるオブジェクトに対して差分を実装する形で実装する手法である。
無駄のない差分実装により、実装効率面での効果があるとされる。
また、継承は、通例、多態の基礎となる。
0907905
NGNG共通のインターフェースでアクセスする手法である。
処理の実装実体と、その処理を外部から参照する利用側実装との間の依存性を弱め、
ソフトウェアの設計の抽象化や、保守性の向上に効果があるとされる。
現在幅広く使われているオブジェクト指向プログラミング言語では、
継承に基づいた多態を実現している。
継承は原則としてオブジェクト同士の木構造の関係を作り出すが、
その関係で根にあたるオブジェクトの性質を、
葉に近い下位のオブジェクトも備えているので、
上位のオブジェクトの一種として下位のオブジェクトをアクセスできる。
下位のオブジェクトの実装が変化しても、
上位オブジェクトの一種、という位置づけを崩さなければ、
これを利用する側のコードを変更する必要はない。
Java/C#/C++/ObjectPascal などの言語では、
クラスとインスタンスという概念に基づいてオブジェクトを実装する。
これは、型と変数の関係に対応するものであり、
オブジェクトの実体の内容を定義する雛形がクラス、
その雛形に基づいてメモリ上に実体化されたものがインスタンス、と呼ばれる。
クラスとインスタンスという区別を設けない言語もある。
0908905
NGNG継承・多態・カプセル化、そして、クラス・インスタンス、は、
いずれもオーソドックスな開発テクニックに同類のものを見ることができる。
しかし、それらを連携させたオブジェクトという単位で考えることで、
個々のテクニックの利点をより容易に活かせるところに意義がある。
逆に言えば、個々のテクニックに執着するあまり、
それらの連携をよく意識することができなければ、
オブジェクト指向プログラミングとは言えない。
オブジェクト指向プログラミングでは
ソフトを構成するであろう個々の機能の全体の中に、
それらの機能の間の関連性を見いだし、分類・整理し、
オブジェクトという単位に仕切り分けてゆかねばならない。
このような事柄を前提とする性質上、
仕切り分けを必要としないほどに規模が小さい場合や、
個々の機能の間に関連性があまりない場合や、
逆にあらゆる部位の間に深い関連性があり分割できない場合、
などには適用が難しい。
一般には、ソフトの規模が大きい方が適用しやすいと言える。
無理な適用は実装を肥大化させ、また硬直させもするので、
要不適を常に意識し、杓子定規にオブジェクト化しないことも重要である。
以上。
0909デフォルトの名無しさん
NGNG0911OO原理主義者
NGNGアンチOO原理主義の典型的な症状がでています。
治療が必要です。
もう、手遅れかもしれません(藁
0913OO原理主義者
NGNGどこからツッコメばいいか…
0914905
NGNGどこからでも。好きなだけ。
必ずしも応じるとは限らんけどな。
それと、俺個人のOOP観を語ってるわけじゃないから
そこんとこ勘違いしないように。
新人向けの概説テキスト書けと言われたら、って感じの内容。
0915デフォルトの名無しさん
NGNG逃げ道を確保する。
0916905
NGNG言われると思ったヽ(´ー`)ノ
そういうわけで俺様のOOP観を語っておいてやろう。
オブジェクト=複製可能な状態付き関数
究極にはこれ。これの塊でコードが書けるならOOPだと言っていいね。
問題は、それらのオブジェクトが美的感覚に見合うかどうか。
世間のPGが抱いているOOPへのイメージは結局はそこに機軸がある。
自分のオブジェクト間つうかコードの世界観があって、
それに適合するものを自分のOOPとして主張する。
そんなもん当然千差万別だから、人によって意見が食い違う。
歩み寄りの意思がなきゃOOPの話なんてできやしないよ。違うか?
0918デフォルトの名無しさん
NGNG0919905
NGNGじゃ補うなり置き換えるなりして代案を出してくれ。
>>918
やりすぎても害が大きいと考えるようになったんだ。
一例だが、例えばデザパタに出てくるパターンは、
オブジェクトと見るよりもtemplate関数と見た方が面白い。
そう気付くと、あれをオブジェクトとして見る必然性が薄れる。
0920デフォルトの名無しさん
NGNGGoFに出てきてるようなデザパタは
オブジェクトとして見ないのなら意味のないものが多いですが、何か?
オブジェクトの定義については、
オブジェクトは内部状態を持つ必要はないし (関数型言語ベースのOOPLもある)
継承を持つ必要もない (継承のないOOPLもある)
メッセージを送ると何か応える実体。これで十分。
0921(;´Д`)ハァハァ
NGNGclass >>918 {virtual void pure() = 0;};
0922デフォルトの名無しさん
NGNGそれってclosureじゃん
0923デフォルトの名無しさん
NGNGまあ、
closureはよりピュアなobjectとも言えるし、
objectは豪華装備なclosureとも言える。
0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNGオブジェクトはデータ主体だと言う違いじゃないの?
0926デフォルトの名無しさん
NGNG>メッセージを送ると何か応える実体。
それでは(用語が違っているだけで)実質上、
関数との違いでさえ全く表現されていないと思われ。
0927デフォルトの名無しさん
NGNG0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNG無視
0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNGアンチ・OO原理主義ですか?それとも
アンチOO・原理主義ですか?
0932デフォルトの名無しさん
NGNGアンチOO原理・主義です。
0933デフォルトの名無しさん
NGNG朝鮮民 主(体)主義 人民共和国
0934デフォルトの名無しさん
NGNG0935デフォルトの名無しさん
NGNG俺の中では屑言語。
0936デフォルトの名無しさん
NGNGlispを改造した言語を作った方がいいとおもいませんか?
まぁ、漏れはSchemeで十分だが。
誰か高速なコード生成するコンパイラを作ってたもう。。。
0937デフォルトの名無しさん
NGNGマクロが扱いが死ぬほど難しくないか?
フローを追っていって、厳密に解決出来ないなら、
結局内部にインタプリタを用意する必要があるだろ。
0938デフォルトの名無しさん
NGNGまぁ、ちょっと興味あるな。
C以外の言語からなんかいいのが派生したら万々歳。
0939デフォルトの名無しさん
NGNGだからプリプロセッサでやるんじゃないの?
0940デフォルトの名無しさん
NGNGFlavorはどうよ?
0941デフォルトの名無しさん
NGNGプリプロセッサって何スか?
Lispのマクロは動的展開されるからこそ意味があると思うんですが。
0942デフォルトの名無しさん
NGNG0943よ
NGNGなんつか、「オブジェクト指向プログラミングとは」ではじまった
文章にしては、内容が静的な動的型付けの言語の特徴の説明になってるんだよね。
だから、突っ込み方が多くて、逆につっこみづらい。
細かく区切ると、それぞれは、間違ってはいないんだけど…
0944デフォルトの名無しさん
NGNG言わんとすることは分かるつもりだが。。。
それを説明しちゃうとOOP分かってる人にしか分からない説明になりそうな罠。
0945デフォルトの名無しさん
NGNGすまん、「静的な動的型付けの言語」ってのが何を言いたいのかよくわからんのだが…
動的型付けはいいけどさ、静的なって何が静的な?
0946デフォルトの名無しさん
NGNGJavaのような、言語としての性質は静的な物だって事じゃないの?
0947デフォルトの名無しさん
NGNG言語としての性質は静的って、何の性質について?
Javaは静的型付けだけど、「静的な動的型付け」って言ってるからなあ。
ヨクワカラン君でスマソ。
0948よ
NGNGで、それが静的っていうのは、変数の取りうる型が、宣言した型か、
その派生経路に出てくる型に限定されてること。
C++やJavaは、これ。
対してSmalltalkやPythonは変数があらゆる型を取れるから、動的。
>>906 の、継承が多態の基礎っていうのは、静的な動的型付け言語の特徴ね。
selfみたいに動的な動的型付けの言語で、継承がなくても多態のある言語もある。
0949よ
NGNGふつう、相手の知らない概念を、相手の中に形成するときって、
たとえ話をしながら、相手の知ってる概念との差分で理解してもらう
って多いけど、OOPの説明って、たとえ話の作り方のたとえ話みたいに
なっちゃうから、つか、OOが「メタたとえ話」みたいな感じだから、
説明むつかしいんだと思う。
だから、短くすると、わかってる人にしかわからない説明になるのは、
しょうがないって気がする。
でも、正しく説明されてれば、理解の目標には、なると思う。
0950デフォルトの名無しさん
NGNG結局のところ、「理解できた奴/理解できない奴」には断絶がある
いくら正しく説明してもある種の悟りが無いと理解できないと思う。
例えば自転車
自転車に乗れない奴が乗れるようになるにはある種のコツが必要で、
乗れるようになってしまうと、何故自分が自転車に乗れなかったのかを
思い出せなくなる。
0951OO原理主義者
NGNGobject
物,物体
対象
目的(のもの)
某英和辞典より。
>>931
アンチ・OO原理主義です。
OOを理解していると思い込み
アンチOOとOO原理主義と対立するOO厨のこと。
OO厨で十分か(w
0953デフォルトの名無しさん
NGNGそれは言える。
0954デフォルトの名無しさん
NGNGいやintとかはObject型じゃないから、VBでVariant型しか使わない状態と一緒?
0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNG0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNGオブジェクト指向言語があるのかが気になる。
0961よ
NGNGたぶん、無い(w
0962デフォルトの名無しさん
NGNGえ?
動的束縛な静的型付けオブジェクト指向言語は多数実在しますが。JavaとかEiffelとか。
それに静的束縛な静的型付けオブジェクト指向言語は、C++でvirtual宣言をしなければ、
静的束縛かつ静的型付けになると思いますが。
逆に、静的束縛な動的型付け言語ってのが存在しないじゃないのか?
0963よ
NGNGそれは、旧来のOOPLの狭義の動的束縛なのね。
もっと一般的には、たとえばPythonで
a=1
def foo(b):
return b*a
def zoo(c):
a=5
return foo(c)
だけ示した場合、zoo(3) が3を返すのは「静的束縛」なのさ。
それから、静的型付けっていうのも、より一般的には、変数の型
(というか、式の型)が変わらない事を言うんだ。
だから、静的型付けの言語は、たいていの場合、型安全を保障する
いわゆる「強い型付け」の言語なんだよ。
0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNG0967デフォルトの名無しさん
NGNGOOでただ束縛といったら、メッセージとそれによって起動されるプログラムを対応付けることだと思うんだけど、
もしかして、OOという文脈がなければ(=一般的)こんな使われ方もしますよー、とか言ってる?
0969デフォルトの名無しさん
NGNGOOの文脈だろうが何だろうが、scope rules on implicit variable declarationをdynamic bindingと呼ぶなんて聞いたこともない。
ソースきぼんぬ。
>>965
StroustrupのC++関係の論文でも読み漁るといい。
0970よ
NGNGhttp://www.ito.ecei.tohoku.ac.jp/~izumi/TISL/doc/ISLISP/j_scope.html
http://www.sun-inet.or.jp/~yaneurao/intensive/spt1.html
http://www.hpcs.is.tsukuba.ac.jp/~msato/lecture-note/comp2001/comp3/lecture3.html
など。
0971デフォルトの名無しさん
NGNG乙curry!
0972967
NGNGOOの文脈ですら通じなくなるので、
とりあえずOOの文脈で通じる言葉でしゃべっとけ。
>>948
>動的型付けってのは、変数の型が実行時に決まるってこと。
>で、それが静的っていうのは、変数の取りうる型が、宣言した型か、
>その派生経路に出てくる型に限定されてること。
>C++やJavaは、これ。
C++やJavaは、変数の指すオブジェクトのクラスが静的に決まるような
厳しい静的型付けの言語ではないけど、
OOではポリモーフィズムをサポートする関係上
そういう静的型付けするということはありえないので、
OOの文脈で静的型付けといったら、Javaみたいな言語のことを言う。
本当は、
C++やJava=半動的半静的型付け
Smalltalk=完全動的型付け
とか呼んだらいいのかも。
0973デフォルトの名無しさん
NGNG>OOの文脈ですら通じなくなるので、
OO以外の文脈しらないやつがエラそうに(ププ
0974デフォルトの名無しさん
NGNGOOのスレでOOでは誤解される事がほぼ確実な用語を補足説明なしに使うよりは
随分とマシなのでは?
0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNG遊ばれてるという事にやっと気付いたようだね。ぷ。
0977デフォルトの名無しさん
NGNGageちゃお。
0978デフォルトの名無しさん
NGNGこっちがあ〜あ・・・だ。ageんなや
0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNGOOは再利用が得意なんだろ?
0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNGじゃあ新スレでこのスレを継承します。
0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNGオブジェクト指向の概念を教えれ 2重継承目
って感じ?
0986デフォルトの名無しさん
NGNG:
0987デフォルトの名無しさん
NGNGextendsを一押ししておく。
0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991どすの?
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNGVBかよ!
0994デフォルトの名無しさん
NGNGDelに謝れ。
0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG___ヽヽ ヽ丶 (´ (´ {-―-/ (´⌒ } /./ l (´⌒(´
/ ┼─┼ ===== .(´ l/l ノ} ( }-‐''´レ' / (´⌒´
, く / {\, _,,..::--――――- ''´ `、l ヾ_ツ / (´
/ ヽ / } `´ o .,-‐―┐ o .丶 ヽ `、
l ./ l ヽ ヽ ヽ (´⌒(´ (´⌒(´
{ ム-―‐-┴ `、. (´⌒´ .〉―‐-〉 (´⌒(´ (´⌒(´
/ ._,,=-::.,,_ ∧ ∧ ノ ./ (´⌒(´
{,,__,,....::-‐''"´/l :::::``ヽ. (゚Д゚,,)`/ヾ/、/ ̄`ヽ/ (´⌒´
ああん i ' ....:::::/ l:::...... ,、 :::⊂ ⊂ ヽ / l l i,/``i./ ≡(´ (´⌒(´ (´⌒(´
こすれる. l..::{::::/i::::ハ::/ i::∧:::ハ:::::::/ /〜:丶_ `ム-=ッ l (´⌒(´
{/{::/l'ヾノ V リ V ヽ,:∪ ∪::::::::::::ヽ-‐ l | L_ (´⌒(´
∧∧ ) ____l/.i .;:= =ュ { .{::::::::,、::::lヾ _ ヾ.、 7 ≡(⌒⌒(⌒⌒
⊂(゚Д゚⊂⌒`つ ̄ ノ l. { ,.,. ,.,. .{ / ト、::::{ \l  ̄ //〈 ≡≡(⌒⌒
`''ーヾ、,,__,,ム,,___,,{ムヽ、 ヾ、 ̄) .〉 ` ヽ| _ノ===::::;;;ム_〉≡(´⌒
` _ _,,....-ヽ、 ノ~
1000ゲトー
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。