X



オブジェクト指向ってクソじゃねぇかよPart4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2019/04/28(日) 23:38:35.09ID:URSBxRTf
無理やりオブジェクト指向にしたから出てきた問題を解決して凄い凄い言ってるだけ。
単なるマッチポンプ。


カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、
オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、
オブジェクトの実際の型を隠蔽したりすることをいう。

偏差値の低い学校向けの情報処理系教科書において「大変すばらしいものであり絶対に使うように」と大体的に宣伝された。

一方、カリフォルニア大学バークレー校の有識者を中心としたインターネットを作った人たちは「階層化の有害性」として
「絶対に使うな」としている。大雑把にいうと、その時は良くても、将来的な改修の際に隠蔽されたデータに
アクセスできないと解決できない問題が出てきて、結果的にデスマーチに陥るというのである。

オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で
縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」
という概念はない。

https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96

前前前スレ
オブジェクト指向ってクソじゃね?
https://mevius.5ch.net/test/read.cgi/tech/1535085129/

前前スレ
オブジェクト指向ってクソじゃねぇよ? Part2
https://mevius.5ch.net/test/read.cgi/tech/1539872441/

前スレ
オブジェクト指向ってクソじゃねぇかよPart3
https://mevius.5ch.net/test/read.cgi/tech/1542884872/
0265デフォルトの名無しさん
垢版 |
2019/05/04(土) 20:46:49.29ID:Sc3vVUfC
>>264
何を買おうとしてんだ?
出版社から買うと送料かかるだろ?
0267デフォルトの名無しさん
垢版 |
2019/05/04(土) 21:00:14.93ID:Sc3vVUfC
>>266
Cでオブジェクト指向を実装する方法みたいな話が載ってんのか?
実用性はまったくないが、疑問を解消する姿勢は評価する。

送料無料の本の通販サイトじゃ売ってないのか?
どこで買おうとお前の自由だけど、今どき送料払って買うなんて珍しい。
0268 ◆QZaw55cn4c
垢版 |
2019/05/04(土) 21:07:08.59ID:7fnHNdb2
>>267
私は >>172 で示したとおり C で(委譲とは区別できる形での)継承は実装できない(ただしこれに対しては >>175 の突っ込みあり)、
という持論ですが、でも、C で OO を全部記述してやる、という心意気を本の紹介文から感じてしまったので思わずポチってしまった…
0269デフォルトの名無しさん
垢版 |
2019/05/04(土) 21:18:48.10ID:Sc3vVUfC
>>268
しばらく前までC++はCに変換してCのコンパイラでコンパイルしていたらしいから
C++でできることならできるんじゃね。
C++で使われていたテクニックを解説してるような本なんじゃね。
勝手な想像だけど。
0270デフォルトの名無しさん
垢版 |
2019/05/04(土) 21:40:55.93ID:XA9psxEW
継承は型に関係がある
委譲は関係ない
なんでいつも型が出てくるのか
オブジェクト指向そっちのけで型の疑問を解消したいんだが
0271デフォルトの名無しさん
垢版 |
2019/05/04(土) 21:43:53.68ID:eyQzK648
継承も委譲も型とは関係ない
型はプログラミングの論理的不整合を
コンパイラに見つけてもらうための追加機能であって
コンピュータに人間の仕事を肩代わりさせたいなら
型を使って、人間が頑張りたいなら型を使わないだけの話
0272デフォルトの名無しさん
垢版 |
2019/05/04(土) 21:50:28.79ID:Sc3vVUfC
普通はクラスも型に含めるだろ。
そしてクラスと継承は関連する。
0273デフォルトの名無しさん
垢版 |
2019/05/04(土) 22:30:19.33ID:Nl+/+Ip0
型って集合のことじゃん
bool型は{true,false}の集合
int型は{0,1,2...}の集合

抽象データ型は関数をその集合に入れられますよってもの
オブジェクト指向言語では抽象データ型を定義できる

実装の継承は値や関数を引き継げる
型の継承は抽象関数を引き継げる

オブジェクト指向における型は値、関数の実装、抽象関数の集合
オブジェクトの定義は型の定義と同義

コンパイル時に型チェックを行うのは静的型付けの説明かな
0274デフォルトの名無しさん
垢版 |
2019/05/04(土) 22:51:35.47ID:Sc3vVUfC
>>273
プログラムを数学に関連付けて誤解するバカって多いよね。
0275デフォルトの名無しさん
垢版 |
2019/05/04(土) 23:24:33.38ID:Nl+/+Ip0
>>274
そうなの?
0276デフォルトの名無しさん
垢版 |
2019/05/04(土) 23:28:14.72ID:Sc3vVUfC
>>275
オブジェクトを生成するとき、
そのオブジェクトは集合からやってきたとでも思ってるの?
あるクラスのオブジェクトを保持する集合がどこにあると意識してんの?
そもそもお前の中じゃどういうときに集合の存在を意識してんの?
0277デフォルトの名無しさん
垢版 |
2019/05/04(土) 23:33:45.72ID:Nl+/+Ip0
>>276
質問の意味がわからない
僕が言いたいのは>>273に書いたとおりですよ
型って集合だよねってことです

質問ばかりで僕の負担が半端ないので
論理を展開していただけると助かります

オブジェクトが集合からやってきたとするならばうんぬんかんぬん
あるクラスのオブジェクトを保持する集合がどこそこにあると意識するならうんぬんかんぬん
自分は集合をこう意識するんだうんぬんかんぬん
てな具合で
0278デフォルトの名無しさん
垢版 |
2019/05/04(土) 23:36:17.52ID:Sc3vVUfC
>>277
アスペかよ。
集合の存在なんてプログラムする際にはまったく現れないのに
集合として説明するお前は愚かだなあ
と言ってんだよ。
0279デフォルトの名無しさん
垢版 |
2019/05/04(土) 23:38:32.19ID:Nl+/+Ip0
>>275に書いた「そうなの?」は
単純に「プログラムを数学に関連付けて誤解するバカって多い」
この事実を僕が知らないから聞いてみただけですよ

アンケート取ったわけじゃないだろうし
ベイズ推定的な直感で言っておられるんだろうとは思ったけど
何か具体的なエピーソードトークがあれば披露していただいて
0280デフォルトの名無しさん
垢版 |
2019/05/04(土) 23:40:00.28ID:Nl+/+Ip0
>>278
そうなの?
0281デフォルトの名無しさん
垢版 |
2019/05/04(土) 23:45:36.93ID:Sc3vVUfC
>>279
>>280
バカ過ぎる。
0282デフォルトの名無しさん
垢版 |
2019/05/04(土) 23:52:01.62ID:Nl+/+Ip0
>>281
集合の存在に気づく僕と
それに気付かない君とでは
僕がバカすぎるの?

ダニング=クルーガー効果で
君は自分が賢いと思い込んでるだけじゃないの?
0283デフォルトの名無しさん
垢版 |
2019/05/04(土) 23:53:59.04ID:MLjSCBQc
>>276
横だがSmalltalkにはallInstancesというメッセージがあってだな…

とはいえSmalltalkのクラスはSimula同様に型ではないけどね
0284デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:00:12.11ID:n5gpFbvN
自分の知ってることに無理やり結びつけて「理解できちゃう俺すげー」
言うのはやっぱり愚かだと思いますよ。
0285デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:07:33.18ID:0ZGoSt+d
>>284
君は自分が知らないことがあったら
それを知ってる人を愚かだと思うん?

はたしてそれは賢いことなんかね
0286デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:15:17.29ID:0ZGoSt+d
>>270が型とはなんぞや的なことを言ってたから
型は集合でオブジェクトと密接な関係があることを僕なりに説明したつもり

ちなみに型は集合って考えは少数派ではないとも僕は思ってる
ググったらたくさんでてくる

たとえばこれとか

プログラム言語論
http://www.cs.tsukuba.ac.jp/~kam/lecture/plm2017/6.pdf
0287デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:16:04.30ID:qgM2q7bL
>>282
だから、集合の存在をいつ意識するのか聞いたんだが。
答えられないお前…。
0288デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:16:19.14ID:0ZGoSt+d
違う考えをお持ちならそれをご披露いただければ
自分が思う型はこういうものだ的なご意見を拝読したいです
0289デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:18:20.77ID:0ZGoSt+d
>>287
うん・・・なんかごめん。
意識するの意味がわからなくて・・・。

僕には答えられないからこういうときに自分は意識するんだ!的なことをお述べいただければ
あるいは自分は意識しないんだなぜならば型とはこういうものだからやー!的なことをお述べになって
いただければ僕は正座して読むよ
0290デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:18:28.00ID:qgM2q7bL
>>286
「プログラムを数学に関連付けて誤解するバカって多いよね。」
を自分で肯定してくれてご苦労w
0291デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:20:03.01ID:qgM2q7bL
>>289
「型は集合である」と主張してるのはお前なんだから
お前がプログラムのどういうときに「型は集合である」と意識するのか言えよwww。
俺は意識しない。
それ以上俺から言う必要がなさ過ぎて。
頭悪いなあ。
0292デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:20:36.74ID:n5gpFbvN
>>285
知ってることを周回遅れでさも真実かのように語られた時、
やっぱ愚かだなって思うもんだよ。
どうせhaskellとかあの辺の抽象的な関数型言語からの受け売りでしょ。
自分が偏ってることに少しは気付く努力をしましょうね。
0293デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:20:58.81ID:0ZGoSt+d
>>290
僕が肯定したら「プログラムを数学に関連付けて誤解するバカって多いよね。」
この命題は真になるん? 僕の意見が参考になったら僕も嬉しいです
0294デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:21:24.11ID:qgM2q7bL
>>289
つうかお前も集合だと意識することはないのなwww。
型を集合として意識することがないのに
「型は集合である」と主張するお前って一体…。
0295デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:22:32.45ID:qgM2q7bL
>>293
反論してる奴なんてお前しかいなくて
お前が同意しているんだから
問題は解消したよ。
みっともない反論はやめような。
0296デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:24:12.16ID:0ZGoSt+d
>>291
君は型は集合であるを意識しないんだ
僕もプログラミングしてるときには考えないかな
君はプログラミングしてるときに意識することを大事だと思ってるわけでしょ
それはどうして? そこんとこ詳しくお聞きしたいな
自分は意識しないんだ、なぜならば型とはこういうものだからなんやー!ていう
力強い君の意見がお聞きしたいな

>>292
じゃあ君は型とはなんぞやの質問に対してどう答えるん?
0297デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:26:14.51ID:qgM2q7bL
>>296
プログラミングしてるときに意識しないのに
なんでプログラムにおける「型は集合である」と主張するんだ?
バカの考えは謎。
0298デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:26:15.52ID:0ZGoSt+d
>>294
僕はプログラミングしてるときに「型は集合である」ことを意識する
必要があるとは思ってなくて型とはなんぞやということを
考えたときに集合かなーて思っただけだよ

君はプログラミングしてるときにどう意識してるかが大事だと
思っているわけでしょ、それはわかった
それでは君は型をどう意識してるん?
0299デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:27:16.46ID:qgM2q7bL
>>298
型は型である。
型の定義は教科書読んで勉強しような。
集合なんてかかれていないからw。
0300デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:34:45.97ID:0ZGoSt+d
>>299
それは何の説明にもなってないです

辞典でちんぽを調べてちんぽはちんぽであるって載ってたらブチ切れでしょ?
ベンチプレスで鍛えた自慢の鉄腕で分厚い辞典を真っ二つに破り捨てて
発行元に即クレームの電話入れてTwitterで拡散して炎上させるでしょう
あなたが今言ってるのはまさにそういうことで完全に鉄腕ちんぽですよ

>>286の大学の講義資料は読みました?書かれてますよ

自分が勉強した内容や経験や知識をもとに
自分の意見を言えば建設的な議論ができるのかなって思うんですよ
意見交換という形でコミュニティとしては健全かなと
0301デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:39:16.18ID:qgM2q7bL
>>300
頭悪い奴だと思っていたらちんぽマンかよ。
相手して損した。

その資料の「型はデータの集合である」という記述を言ってる?
お前の言う「集合」の意味じゃねえだろwwww。
0302デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:42:30.17ID:0ZGoSt+d
>>301
大学の講義資料は僕の言う集合ですよ
君の言う集合は違うん?

君は型は集合ではないんだって立場なんですよね
では君は型をどう説明しますか?
この質問だけだと漠然としてて答えにくいかもしれないので
オブジェクト指向における型とは〜
プログラミングにおける型とは〜
と言ったふうに説明しやすい前提を置いていただいていいですよ
教えてください
0303デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:43:57.20ID:qgM2q7bL
>>302
ちんぽマンは数学における「集合」の意味も理解してないのかよ。
ちんぽマンはバカ過ぎて会話にならん。
0304デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:45:53.25ID:0ZGoSt+d
>>303
北海道大学でも同様に型を集合と説明してますよ
理解してないのは君の方かと

抽象データ型
http://kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/SE/04-abstdatatype.pdf


それはさておき僕の理解とは関係なく君の説明が聞きたいな
君は型というものをどう説明しますか?
0305デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:50:32.51ID:0ZGoSt+d
具体的に説明できないなら
自分がプログラミングするときに型をどう意識してるかを教えていただけると
なんかこうふんわりしてて生意気そうなやわらかさみたいな感覚的なものでも良いですよ
それに対して僕がつまりちんぽということですねと返すから
そこからあと一言いただければ
0306デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:51:45.62ID:qgM2q7bL
>>304
「データの集合」と書かれているんだが。
あのさあ…。
馬鹿のためにわざわざチェックしたのが時間の無駄だった。
0307デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:52:52.64ID:0ZGoSt+d
>>306
どこ読んでるん、ちゃんと読んで!
0308デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:57:04.20ID:qgM2q7bL
>>307
お前が明示しろよ無能。
0309デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:57:55.68ID:0ZGoSt+d
読んでいただいたのはありがたいけど
僕が聞きたいのは君の「型は集合じゃない」という意見だよ
ググればわかるようなまともな考えをここで知りたいとは思ってなくて
君のイカれた意見に興味があるんだよね、君の鉄腕を見せてくれ
0310デフォルトの名無しさん
垢版 |
2019/05/05(日) 01:00:49.46ID:0ZGoSt+d
>>308
もう読まなくて良いですよ
僕の考えは十分に示しましたし君がそれをわかろうとしないのは仕方ないことかなと

僕は今夜君の型の説明が聞きたいです
僕は全力で君の意見をわかろうとするんでどうぞよろしくお願いします
0311デフォルトの名無しさん
垢版 |
2019/05/05(日) 01:19:18.18ID:0ZGoSt+d
おい鉄腕説明はまだか?

僕は正座して待ってる、足がしびれてきた
これ以上待たせたら虐待で訴える
0312デフォルトの名無しさん
垢版 |
2019/05/05(日) 04:15:03.38ID:2SY3w1vB
>>291
> お前がプログラムのどういうときに「型は集合である」と意識するのか言えよwww。

型→完全な円
(円の方程式)
集合→円形をした物
(円形の灰皿、円形の十円玉、円形のルーレット・・・その他身近なイロイロ)

『近似する実在物』を、ある一定の『実在しないひな形』にまとめるのが、オブジェクト指向!

イデアとは最高度に抽象的な完全不滅の真実の実在的存在であり、感覚的事物はその影であるとする。
イデアが存在しているのがイデア界(本質界)で、その陰が投影されているのがわれわれ人間の住む現実界となる。
例えば、現実の世界に、円形をした物はたくさん存在するが、いずれも完全な円ではないし円そのものでもない。
しかし、これらの円の背後には永遠不変で、完璧、かつ抽象的な円のひな型であるイデアがあるとする。
この考え方ってどっかで聞いたことある・・・そうだ!オブジェクト指向の考え方にそっくりなんだ。
オブジェクト指向はクラスという雛形(設計図)があり、クラスを元にして実体を持つオブジェクト
(インスタンス)がポコポコ作られるようなイメージである。
http://aidiary.hatenablog.com/entry/20050430/1114871993
0313デフォルトの名無しさん
垢版 |
2019/05/05(日) 07:38:48.91ID:ukSdQO/a
うん、で何が集合なわけ?
0314デフォルトの名無しさん
垢版 |
2019/05/05(日) 08:09:56.33ID:2SY3w1vB
>01000001011000000000000000000000

コンテキスト(時と場合)によって、チンポが随意筋なのか不随意筋なのかを使い分けような!

「モノ、コンテキスト、役割」の関係は、「モノ、照明、影」で例えられます。
モノに照明を当てると、影が出来上がります。影は、照明を当てる角度により形が異なります。
つまり、照明=コンテキスト、影=役割とすると、
仕事コンテキストでは従業員
家庭コンテキストではお父さん
趣味コンテキストではゲーム制作者
https://qiita.com/MinoDriven/items/2a378a09638e234d8614

>現代的な考え方: データ型=データの集合+演算・処理の集合
>01000001011000000000000000000000
>• int CPUが整数演算に使うなら 1,097,072,640
>• float CPUが実数演算に使うなら 14.25
>• String CPUが文字列処理に使うなら ”槍” とNULL文字
>• その他 CPUが画像処理に使うなら 白黒画像の一部


304 デフォルトの名無しさん 2019/05/05(日) 00:45:53.25 ID:0ZGoSt+d
>>303
北海道大学でも同様に型を集合と説明してますよ
理解してないのは君の方かと

抽象データ型
http://kussharo.complex.eng.hokudai.ac.jp/~kurihara/classes/SE/04-abstdatatype.pdf


それはさておき僕の理解とは関係なく君の説明が聞きたいな
君は型というものをどう説明しますか? 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
0315デフォルトの名無しさん
垢版 |
2019/05/05(日) 08:17:15.16ID:qgM2q7bL
>>314
今日もまた発狂して一人チンポ芝居かよ。
0316 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 08:30:40.13ID:3EWrT4Pn
>>269
それは同じ動きのCのコードを作るというだけで、できた C コードはすでに OO ではない可能性があるかと
0317デフォルトの名無しさん
垢版 |
2019/05/05(日) 08:35:30.18ID:qgM2q7bL
>>316
C++のプログラマはオブジェクト指向のコードとしてかいてるんだから
その主張は違う。
0318 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 09:10:01.64ID:3EWrT4Pn
>>317
C++ の時点では OO であっても、それをトランスパイラに通して出てきた C コードは OO ではない、という可能性はあるのでは?
例えば C++ の時点では OO であっても、コンパイラに通して出てきた機械語は OO とは言いがたいでしょう?
0319デフォルトの名無しさん
垢版 |
2019/05/05(日) 09:34:14.58ID:WbdERMwW
少なくとも数学的な集合の性質として
「順番は問わない」集まり
というのがある。これと型との関係は?
0320デフォルトの名無しさん
垢版 |
2019/05/05(日) 09:56:35.88ID:qgM2q7bL
>>318
最終的には機械語として実行されるから
どんな言語のオブジェクト指向ではないと言ってるようなもんだ。
どんな言語もオブジェクト指向ではない主張したいのか?
0321 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 10:27:41.83ID:3EWrT4Pn
>>320
私の主張は、コンパイル/トランスパイルする前の記述言語において、オブジェクトオリエンティッドが達成されればいいだけです
トランスパイル/コンパイル語の記述体がオブジェクトオリエンティッドでなくてもいい
ただし、C 言語は、最初の記述時点において、すでに、オブジェクトオリエンティッドにおける継承が記述できないと考えています
それを示すのが >>172 のといかけで、この内容を C で書けない、したがって OO を C で実現できない、ということになります
0322デフォルトの名無しさん
垢版 |
2019/05/05(日) 11:01:21.21ID:vlft8K2s
>>292
一般論として周回遅れマンが紛れ込んだときのベストな対応はスルー
周回遅れを自覚できていないという時点で
そいつの知力にはもはや期待が持てないので
そいつに対して一つのレスも費やしてはならない

この点を見誤ると、周回遅れマンに居座られてしまう
0323デフォルトの名無しさん
垢版 |
2019/05/05(日) 11:27:37.73ID:qgM2q7bL
>>321
だからそれに対して、昔のC++の実体はCだったと言った。
この意味を理解できてない様だなあ。
ついでにC++についても勉強したら。
0324 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 11:33:19.74ID:3EWrT4Pn
>>323
C++ をトランスパイルして出てきた C は継承を表現できていなかったのでは?
>>172 で私は C++ コードを書いていますが、これをトランスパイルして得られるはずの C コードはどのようなものと推察されますか?
0325デフォルトの名無しさん
垢版 |
2019/05/05(日) 11:36:34.86ID:qgM2q7bL
>>324
実際にC++をCに変換して確認しりゃいいだろ。
0326 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 11:40:56.87ID:3EWrT4Pn
>>325
すでに私は確認しており、C にトランスパイルされた時点で OO ではなかったと記憶しています
あなたは C でも OO できる、という立場であれば、>>172 の C++ コードに対して対応する C のコードを記述できるでしょうから、それを見せてください
C で OO の継承を記述できない、という立場であれば、私と同じです
0327デフォルトの名無しさん
垢版 |
2019/05/05(日) 11:43:11.75ID:qgM2q7bL
>>326
C++はオブジェクト指向だと認めるんだよな?
で、C++はCの機能だけで作られていた。
Cの機能だけでオブジェクト指向が実現できる、以外の結論を主張するのが意味不明過ぎて。
0328 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 11:49:03.20ID:3EWrT4Pn
>>327
>C++はCの機能だけで作られていた。
機能、という言葉の使い方があいまいですね
・「C++ をトランスパイルした結果が C のコードが出力される」という事実だけでは、C が(委譲とは区別された)継承を記述できるかどうかを示すことはできないのではないでしょうか?
0329デフォルトの名無しさん
垢版 |
2019/05/05(日) 11:52:26.46ID:qgM2q7bL
>>328
お前も理解力が低過ぎるから説明するのが面倒になった。
ま、お勉強しような。
0331 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 12:00:39.66ID:3EWrT4Pn
>>329
私は >>172 の C++ に対応する C コードを示していただければ満足します

>>330
多重継承のときは、そのアップキャストはどうなりますか?
0333 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 13:04:07.79ID:3EWrT4Pn
>>332
そのとおり!
そういうのを手でちまちまと書く、というのを「OO できている」とはいわないという主観です
0334デフォルトの名無しさん
垢版 |
2019/05/05(日) 13:29:53.55ID:0ZGoSt+d
>>322
一周先の考えでは型とはなんぞや?
0335デフォルトの名無しさん
垢版 |
2019/05/05(日) 13:31:39.27ID:0ZGoSt+d
>>333
なんで言わないん?
0338デフォルトの名無しさん
垢版 |
2019/05/05(日) 16:09:03.66ID:z2iHj6R4
そう言われるだろうと思って自分でルールを作らなくなるんだろう
自分ではない誰かが作った教科書を読めとしか言わなくなる
0339 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 18:05:11.84ID:3EWrT4Pn
>>335
基底クラスA, B とそのメソッド A.f(), B.g()
A, B を多重継承する派生クラス C とメソッド C.h()があったとして
(コード例は >>172)

今 C のインスタンス c に対して
c.f() と c.h() の両方を実行したいとき c の this から
c 内の A のために this を作り c.f() を呼ぶ…@
c 内の B のために this を作り c.h() を呼ぶ…A
@Aのどちらかあるいは両方について、c の this をずらして基底クラスの this を作らないといけません

>>172 の C++ では c->f() や c->h() とお気楽にかけるのに、C では、チマチマと this にオフセットを「人間が数えて」足し込むコードを書かなくっちゃいけない

そんな体たらくじゃ C では多重継承は書けないのと同等ですね
0340デフォルトの名無しさん
垢版 |
2019/05/05(日) 18:51:56.99ID:0ZGoSt+d
>>339
それはC言語がオブジェクト指向プログラミング言語ではないと
言ってるに過ぎないと思うの

手でちまちまと書く、というのを「OO できている」とはいわないのはどうしてなん?
オブジェクト指向プログラミング言語でプログラミングすることだけを
オブジェクト指向と言うん? それはどうしてなん?

オブジェクト指向は考え方であって手段として手書きするのか
言語の機能を使うのかはどちらでも良いと思うのだけれども
どうして多重継承を言語としてサポートすることが大事だと思うん?
0341デフォルトの名無しさん
垢版 |
2019/05/05(日) 18:52:30.16ID:0ZGoSt+d
なんでなん?
0342 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 18:58:42.59ID:3EWrT4Pn
>>340
>それはC言語がオブジェクト指向プログラミング言語ではないと
>言ってるに過ぎないと思うの

であれば、それが私の言いたいことそのものですね、問題ないのではないでしょうか?

>手でちまちまと書く、というのを「OO できている」とはいわないのはどうしてなん?
手でちまちまと、すなわち手動で this を作らないといけないようではオブジェクト指向はできてないでしょうね…

>オブジェクト指向プログラミング言語でプログラミングすることだけをオブジェクト指向と言うん? それはどうしてなん?
そうはいってませんよ、単に C でオブジェクト指向にのっとったプログラミングはできない(なぜならばオブジェクト指向の重要な要素である継承が実現できないから)、といっているだけです

>オブジェクト指向は考え方であって手段として手書きするのか言語の機能を使うのかはどちらでも良いと思うのだけれども
>どうして多重継承を言語としてサポートすることが大事だと思うん?
多重継承を例にするのがわかりやすいから、多重継承を例にしただけです。
0343デフォルトの名無しさん
垢版 |
2019/05/05(日) 19:04:45.27ID:0ZGoSt+d
>>342
君はオブジェクト指向プログラミング言語でプログラミングすることを
オブジェクト指向ができていると表現してるわけだね

C言語は多重継承をサポートしていないという事実から
C言語はオブジェクト指向プログラミング言語ではないを導き
C言語ではオブジェクト指向できてないを導出したわけですね

自明ですが、論理とは自明の積み重ねですからね
そういうの大事だと思います
0344デフォルトの名無しさん
垢版 |
2019/05/05(日) 19:15:32.32ID:0ZGoSt+d
僕の考えるオブジェクト指向はこうです

オブジェクト指向とはオブジェクトを主要なものとしてシステムを作ることです
オブジェクトとは状態と振る舞いのセットです

分析や設計の段階でオブジェクト指向で考えることができますし
C言語や継承の機能を持たない古いVBでもオブジェクト指向を適用可能です

要件を満たすにはこういうオブジェクトが必要だ
この状態はこのオブジェクトが持つべきだ
この振る舞いはこのオブジェクトが持つべきだと
考えるのがオブジェクト指向なのです
0345デフォルトの名無しさん
垢版 |
2019/05/05(日) 19:22:05.60ID:0ZGoSt+d
大事MANブラザーズバンドが昔
負けない事・投げ出さない事・逃げ出さない事・信じ抜く事 それが一番大事と歌いましたが
それを歌った本人は後年どれも大事じゃなかったと言いました
良い話です

オブジェクト指向プログラミング言語がもつ機能として
・カプセル化
・多態性
・継承
これらが提唱されてはいますが
オブジェクト指向にとってどれも大事じゃないです
良い話ですね
0346デフォルトの名無しさん
垢版 |
2019/05/05(日) 19:22:33.16ID:0ZGoSt+d
お前ら涙拭けよ
0347デフォルトの名無しさん
垢版 |
2019/05/05(日) 19:36:01.70ID:1Pm7tIcB
オブジェクト指向ってなんなのかもわからない人だらけで、クラスこととだと思ってる奴が未だに大勢いるからな
最近じゃクラスを持たないオブジェクト指向言語が使われ出してきていて誤解も減ってきてる気はするけど
0350 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 20:26:03.69ID:3EWrT4Pn
>>343
>君はオブジェクト指向プログラミング言語でプログラミングすることを
>オブジェクト指向ができていると表現してるわけだね

いいえ、OO な言語でなくても OO で記述できる範囲を代替できれば、それも「オブジェクト指向ができている」とします。
ただし C 言語は単一であっても継承を委譲と区別して記述できない…@
継承は OO では基本的な考え方、枠組みである…A
@Aより C 言語では OO 的な記述はできない
となります

>C言語は多重継承をサポートしていないという事実から
>C言語はオブジェクト指向プログラミング言語ではないを導き
>C言語ではオブジェクト指向できてないを導出したわけですね

多重継承だけではなく、単一継承も C では不可能、とします。
なぜならば、
構造体の第一メンバのアドレスと、構造体そのもののアドレスが一致するとは限らない…B
構造体の各メンバの物理的な順序はプログラマから指定することはできない、構造体テンプレートごとにシャッフルされても文句はいえない…C
0351 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 20:28:21.90ID:3EWrT4Pn
>>344
>要件を満たすにはこういうオブジェクトが必要だ
>この状態はこのオブジェクトが持つべきだ
>この振る舞いはこのオブジェクトが持つべきだと
>考えるのがオブジェクト指向なのです
これを@とします

@は
オブジェクト指向「的」に記述する
というなら許容できますが、オブジェクト指向そのものではないと思いますね
0352デフォルトの名無しさん
垢版 |
2019/05/05(日) 20:50:36.49ID:V2nyw4fH
人とか動物、鉛筆やボールペンならよく分かるんだが、実際のプログラムになると何がオブジェクトなのか途端に分からなくなる。
0353デフォルトの名無しさん
垢版 |
2019/05/05(日) 20:53:26.28ID:dlXoi6fS
>>340
>どうして多重継承を言語としてサポートすることが大事だと思うん?

随意筋 不随意筋
  ↖ ↗
  チンポ

『継承』は、子クラス➡親クラス。

多重継承を否定できないのは、この現実世界においては、状況によって相反する属性が現れるから。
特に機械翻訳においては、文脈によってコトバの属性を選択しなければならない。
0354デフォルトの名無しさん
垢版 |
2019/05/05(日) 20:58:11.78ID:n5gpFbvN
>>352
実際のプログラムではそういったビジネス要件のクラスと
メモリ、データベース、ネットワークアクセスを上手くマッピングするレイヤーが
必要になるからな。
オブジェクト指向が役に立つ場面もあるが邪魔になる場面もある。
0356デフォルトの名無しさん
垢版 |
2019/05/05(日) 21:12:22.54ID:0ZGoSt+d
>>350
つまり結論はC言語はオブジェクト指向プログラミング言語じゃないってことですよねわかります

>>351
僕のオブジェクト指向と君のオブジェクト指向は異なることを言ってますね
それはそうです
0357デフォルトの名無しさん
垢版 |
2019/05/05(日) 21:17:47.84ID:0ZGoSt+d
>>355
型の継承ならインターフェースって形でJavaはサポートしてますよん
Javaはインターフェースでのデフォルト実装ができるようになったので
実装の継承もできちゃう
0359デフォルトの名無しさん
垢版 |
2019/05/05(日) 21:43:00.38ID:0ZGoSt+d
>>352
プログラムで何をやるのかによって
変わってくるんじゃないかと

ソフトウェアが処理の対象にする分野はドメインと呼ばれるけれども
オブジェクトはドメインによって変わってくるかと

たとえば表計算というドメインでは「行」という概念があり「列」という
概念があり「セル」という概念があってそれぞれ状態や振る舞いを持つじゃん

ファイルはデータを読んで分析するというドメインでは「データソース」になるし
処理したデータを永続化するというドメインでは「データストア」になるし
データを連携するというドメインでは「連携データ」になる
てな具合で

ソフトウェアが解決しようとしてるドメインを考えることによって
こういう概念があるとシステムがわかりやすいよね
処理しやすいよねって考えるのがいんじゃないかなと思いました
0360デフォルトの名無しさん
垢版 |
2019/05/05(日) 21:43:22.15ID:0ZGoSt+d
>>358
それを言ったつもりだす
0361デフォルトの名無しさん
垢版 |
2019/05/05(日) 21:53:35.11ID:uNdN3SuK
>>360
Javaで言うとextendsで複数クラスを指定という意味
インターフェースはimplementsだから継承といよりは実装のほうが良いような
もちろんデフォルト実装があるのは知ってるけど
0362デフォルトの名無しさん
垢版 |
2019/05/05(日) 21:57:42.22ID:2SY3w1vB
>>358
>Javaで言うとクラスの多重継承の意味で聞きたかった

随意筋 不随意筋
  ↖ ↗
  チンポ

『継承』は、子クラス➡親クラス。

多重継承を否定できないのは、この現実世界においては、状況によって相反する属性が現れるから。
特に機械翻訳においては、文脈によってコトバの属性を選択しなければならない。
0363デフォルトの名無しさん
垢版 |
2019/05/05(日) 22:18:36.49ID:0ZGoSt+d
>>361
クラスにあってインターフェースにないものそれは状態
状態の多重継承ってことね
たしかにJavaではむりっすねー
0364デフォルトの名無しさん
垢版 |
2019/05/05(日) 23:16:17.25ID:qgM2q7bL
>>352
その疑問は的を得ている。
そこで設計指針が必要になる。
■ このスレッドは過去ログ倉庫に格納されています

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