オブジェクト指向ってクソかよPart5
■ このスレッドは過去ログ倉庫に格納されています
無理やりオブジェクト指向にしたから出てきた問題を解決して凄い凄い言ってるだけ。
単なるマッチポンプ。
カプセル化(英語: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/
前スレ
オブジェクト指向ってクソじゃねぇかよPart4
https://mevius.5ch.net/test/read.cgi/tech/1556462315/ >>306
ぶっちゃけたこと言います。
あなた、オブジェクト指向理解してねーですよね? >>309
また変なのが湧いてきたけど、
アクセサとかmethod使ったらアウトでしょ > アクセサとかmethod使ったらアウトでしょ
それは、あなたの希望ですよねw >>312
>> 171
の
>(3)ポリモーフィズムが可能
>Storage s = new Usb();
>...
>s = new SDCard();
>
>SDカード・USBの違いを区別することなくアクセス可能。
>s.read(ファイル);
これのどこがポリモーフィズムのせつめいなの?
「違いを区別することなくアクセス可能」とかかれりゃ
同じ名前のmethodがあるのかな?
newして使いまわしてなにやりたいんだかわからん
くらいしか思い付かないぜ
だからながしたんだが >>316
あなた...Java案件をこなすときはって言ってましたよね...?
Javaプログラマーですよね? オブジェクト指向って大まかにでも一言で説明できないような難解なものなの? >>318
Usb()とSDCard()はStorageのファクトリーだって言いたいの? >>316
オブジェクト指向を勉強したほうが良くないか?w
ポリモーフィズムでその例を見せられたら、
ああ、SDCard型でもUSB(メモリ)型でも
どちらでも同じように扱える例だなって気づくでしょ?
それに気づいた上で、何かしらの意見を言うならわかるけど、
それに気づかないレベルって、単にオブジェクト指向を知らないだけだよ。 多態のデメリット
・メソッド呼び出し部分見てもどれが呼び出されてるのかわからない。
呼び出し先の処理は実際に実行するまでどれになるか不明。
・マシン語に展開したとき、処理が安全だといいづらい
必要もないのに処理の分岐先がデータと一緒に送られてきて危なっかしい。
動的に処理が決定されるというのは静的言語のメリットを殺してる面がある。
必要もなくすべてのメソッドが多態可能とか悪夢 >>150 で思いっきり社員のことを批判されてましたが、正直、あなたの実力が凄く怪しいです。
>>319
このスレ、オブジェクト指向を学ぶ人にとって毒でしかないので、Qiitaとかで検索することをオススメします。 >>320
お前が今言った「ファクトリー」はどういうものか言ってみ。
質問の意図は、お前が自身がお前の言った言葉を
理解してるかを確認するためね。 >>322
> ・メソッド呼び出し部分見てもどれが呼び出されてるのかわからない。
> 呼び出し先の処理は実際に実行するまでどれになるか不明。
実行するまで決まらないもの(例えばユーザーの設定によって決まるもの)を
実行する前にわかることってあると思うの? >>324
フォローありがとう。
たぶん、私の想像しているファクトリーと違うこと言いそう...。 >>325
なんのために「お前が今言った」って書いたと思ってんのさw
ググって見つかる「ファクトリー」と
お前が言った「ファクトリー」は違うとしか思えないから、
「お前定義のファクトリー」を聞いたんだが。
お前定義のファクトリーはお前にしかわからん。
んで、お前定義のファクトリーはどういうものさ? 俺のオブジェクト指向しかオブジェクト指向と認められていないよ >>326
IF文で分岐すれば少なくともその部分の処理は特定できる
多態したら実際の呼び出し先がライブラリ中に無数にある継承クラスのどれになるか
全部データから辿って判断しなきゃいけなくなるだろ
悪夢だ インスタンスの生成と処理を別のクラスで行うパターンのファクトリーとして書いたが。 > IF文で分岐すれば少なくともその部分の処理は特定できる
それだと、コードの中に全ての対応するモジュール名が記述されることになる。
それだと、外部プロジェクトで拡張するプラグインの仕組みが作れない >>331
このコードを見てそう思った?
インスタンスの生成はどのクラスで、
処理はどのクラスだと思った?
コードちゃんと読んでる? >>322
ポリモーフィズムには動的なものだけじゃなく静的なものもあるよ
それはトレードオフの判断であって動的だから悪いってことではない >>332
だからって何もかも多態可能にする必要ないだろ! そんな実装に密接した話してんのもなんか胡散臭ぇ
オブジェクト指向設計ではないのか? >>333
それが隠されているように見えた。
両方Strage方を帰しているので
Superクラスが前後に略されているのかなとかチラッと考えた もっと具体的に質問しようか?
以下のコード、
>(3)ポリモーフィズムが可能
>Storage s = new Usb();
>...
>s = new SDCard();
>
>SDカード・USBの違いを区別することなくアクセス可能。
>s.read(ファイル);
登場人物は、StrageとUsbとSDCardしかいない。
質問1 インスタンスの生成を行ったのは、StrageとUsbとSDCard のうち
どれだと思ったのですか?
質問2 処理を行ったのは、StrageとUsbとSDCard のうち
どれだと思ったのですか?
それそれ、3択の中から1つを選ぶだけの簡単な質問だよ。
(それ以外の答えがあるというなら、それで答えてもいいけど) >>335
> だからって何もかも多態可能にする必要ないだろ!
誰が何もかも多態可能にするって言ったんだ? 設計の話してるときコードを出さないと話ができない人は
オブジェクト指向云々かんぬん以前にレベルが低いよ
そこはガチで低いはずなので素直に忠告を聞いてほしいと思う >>337
> Superクラスが前後に略されているのかなとかチラッと考えた
あなたが想像した「省略されてるSuperクラス」とはどのようなものですか?
”あなたが想像した"ものを聞いてるので
これもググっても出ません。 >>338
1)Usb();
2)SDCar(); >>340
ちゃんと理解してる人は、コードを出すことも出来る。
今は、ちゃんと理解してる人(俺なw)と
ちゃんと理解してない人の会話
ちゃんと理解してない人は「コードを出さないと話ができないレベルが低い人」なのだから
コードを要求することで、それがはっきりするわけよ。
俺がコードを出して話をしてるんじゃなくて、相手が理解してるかどうかを図るために
「せめてコードぐらいは出せるよな?w」という考えで要求してるの >>343
ファクトリーは「あるクラス」を使って「別のクラス」を生成するということは知ってますか? なんというか、もう、色々お察しがついてしまいました。
オブジェクト指向を否定的に捉える前にオブジェクト指向のお勉強をされることをおすすめします。
特に、Java、C#、Python、js等はオブジェクト指向のパラダイムを思いっきり取り込んでいるので、開発を楽するためにも、勉強をされることをお勧めします。 >>344
ちゃんこちゃんこうるせぇな
設計の話してるときにコード持ってくるアホなんて
まともな会社なら相手にしねぇよ >>347
質問に答えてよw
まあ想像できるから、さっさと追い詰めるけどw
>Storage s = new Usb();
>...
>s = new SDCard();
このコードはどう見ても、Usbクラス(お前がファクトリークラスだと思ってるもの)から
SDCardクラスを生成してません >>346
直訳すると
テメーは気に入らないからオブジェクト指向が理解できていない(認定)
ということでよろしいですか? >>346
で、>>343 は違うの?
サンプルコードの前後が省かれていてよく分からんのに
いきなりポリモーフィズムとか言われて流したらなにがまずいの >>349
これ見て両方Storage返して
…のかなでUsb();の処理は終わって、
sをSDCard();で使いまわして
s.read(ファイル名)していると思ったが >>351
何がまずいって、ポリもーフィーズムとわかるのに十分なコードなのに
それがわからずにファクトリーを思い浮かべてしまったお前の頭がまずいw
どう見てもファクトリーのコードではないのに、なんでファクトリーだと思ったのか? >>352
だから(ファクトリークラスを使わずに)sを使いまわしてるだけのコードですよねw >>353
周辺とか…の部分は
色々あると想像しろと
>>354
両方クラうでなくStorageを返しているじゃない 明確にしようとコードを出すはずだったのに目的も不明確なまま
デザパタ1パターンをオブジェクト指向の全てとしてコードをあげてしまって失敗した感じ?
な、コードなんて出す奴問答無用でバカだろ
テメーらは早く死ね雑魚 > 両方クラうでなくStorageを返しているじゃない
うん? だから ”ファクトリーを使わずに" Storageを返してますよね?
今の焦点はなんであんたがファクトリーだと思ったかなんですが?w このコードがファクトリーで最後にsリターンしてんじゃね >>357
正直言うとぱっと見たときは両方ファクトリかな?
と思ったが、戦後に何があるんだろうとも思った >>359
このコードはポリモーフィズムの例ですって書いたものを見て
これはファクトリーの例だなって思ったとしたら頭がおかしいw 今日もオブジェクト指向戦士は安定のバカだな
自分が何を主張しようとしてるのか全く不明 >>360
その理屈だと、
Interface i = new Klass()
というオブジェクトをnewするだけのよくあるコードをみたら
それは全部ファクトリだなとお前は思うと言ってるのと同じことだぞw
やっぱりファクトリーをわかってないw >>362
そう、だからすごい違和感があって流したんだよ >>365
その違和感の原因がなにかわかってる?
お前がポリモーフィズムをわかってないからだよ。
書かれたコードを見ても(俺はすぐに分かったが)お前はわからない。
わからない上に、どうてみてもファクトリーじゃないのに
ファクトリーだと思ってしまった。 >>351
ちょっとショックのあまりにいくつかスルーしましたが...
ポリモーフィズムというのは、Java案件をこなすプログラマーにとって常識中の常識だからです。Javaじゃなくても、現役C++、C#、Python、js等の案件をこなすプロがポリモーフィズムを知らなかったらビックリします。要はオブジェクト指向プログラマーの常識中の常識なのです。 >>362
Factoryパターンはポリモーフィズムを利用する最たる例だぞ >>366
まぁたしかに慣れもあるが俺はこういう書き方でポリモーフィズムを使ったことはないな
というか使わない そんなもんだよここはとくに3vnN9KRUが揚げ足を取ったり話を発散させるから
諦めが肝心だよ まず、持論を語るやつは
どういう手順で何を主張しようとしてるのか明確にしろよな
結局、相手の揚げ足をとりたいだけだったりしてすげーバカがいる 曖昧な言葉を使ったり、自分すら理解できない言葉を使うのはどうかと思いますけどね。
だから質問しまくる羽目になるわけで。 >>367
あの3行でSuperクラスの変数?にFactoryで生成したインスタンスを=しているのかなとか
色々想像したことがそんなのおどろくべきなのか? >>368
だから?
Factoryパターンはポリモーフィズムを利用する最たる例ならなおさら
このコードをファクトリーだと思ったなら、
ポリモーフィズムだって思うはずでしょw
実際はファクトリーじゃないわけだが >>375
あなた、もういいです。
自分の非を決して認めない人だとわかりました。
大体、オブジェクト指向のメリットって何と聞いて私の挙げたメリットを、それはOOPのメリットではないと言いつつ、メリットはスコープがーとか言い出す辺りで大分、不信感は抱いておりました。
現代における開発経験量が丸わかりです。 で、これも想像だが
@Override
public void read (…)
なんだろうな
人の頭の中のことまで創造させて、違う違う言ってたってしょうがないだろ >>369
つまりお前が言ってることはこういうことだよ。
お前「俺はこういう書き方でポリモーフィズムを使ったことがないから
これがポリモーフィズムだとわからなかった。」
そりゃ無知なら間違えても当然。
お前の問題だ。 そもそもポリモーフィズムってオブジェクト指向できたときに無かったよな?
それをメインに据えたい意図は何かあるの? >>377
いやほんと、カプセル化を初めオブジェクト指向は害のある使い方が流布しているから
気をつけたほうがいいよ
有効な使い方に制限するのがなかなか難しい
>> 379
最初はホントに単なるファクトリに見えて、は?って思ったw >>369
> まぁたしかに慣れもあるが俺はこういう書き方でポリモーフィズムを使ったことはないな
じゃあ、どういう書き方でポリモーフィズムを使った?
コード書いてみてよw >>381
お前が一番、間違ったオブジェクト指向をしてるんだがなw 今日思ったこと
オブジェクト指向にはまるやつは大概頭が混乱してる >>382
だから多態はなるべく使わないって書いたじゃない。
スパークラスに共通のメソッドを書いてサブクラスでメソッドをOverrideとかは
必要な場合に使う
方がない動的言語では、それがそのまま多態になっちゃうんだけれどもさ >>386
自分が多態を使わない=多態になれてないのに
多態を語るから、恥をかくんだよ
自分、多態よくわかりません。で終わっとけよw >>387
つかわねぇから語ってねぇってw
ホント妄想猛々しいな >>386
> スパークラスに共通のメソッドを書いてサブクラスでメソッドをOverrideとかは
> 必要な場合に使う
意味不明。必要がない場合に使うわけ無いだろ。
誰しも、必要な場合にしか使ってないぞ?
何を言ってるんだろうか >>389
いやいや機能上必要がなくても共通化の名の下
すごく乱用されている >>388
必要な場合には使うよね?
お前が言ってることは
多態が必要なときには使うが、
お前「俺の仕事では多態を使うようなことはしない」
って言ってるだけだろ >>390
> すごく乱用されている
お前の周りの話だろ?w >>392
俺の周りは確かに一時期ひどかった。
今でも原理主義者がいる
その多OSSのコードも決して珍しくはない。
継承を多用したもののはひどいものが多い >>393
だから単にお前の周りが酷いだけじゃんw >>380
そもそも、最初のオブジェクト指向...アランケイの提唱するオブジェクト指向で、現代におけるオブジェクト指向とはまったく違う代物だったみたいですよ。
まぁ、この時代の事情はあまり知らないですが。
最近はオブジェクト指向の話題をする際にアランケイのオブジェクト指向を指す人はまず、いないと思います。
歴史的背景は私も詳しくはないですが...プログラミング言語の進化と共に色んな設計概念が増えていっただけなのかなと思います。
※勝手な思いこみ説明なんで間に受けないでね。
他にも良いオブジェクト指向向けの機能はあるので、メインなのかは疑問ですが...オブジェクトの使い勝手をより一層便利にするからじゃないですかね。 >>391
javaで多態はほんとにめったというかぜんぜん使わない
javaはまれにしかやらないけど、主にpythonなどが多いので
そもそも型がない
したがって派生クラスで上書きした共通関数使えば、
もうそれが多態といえるのかもしれないけど、
継承もなるべく使わない >>395
見たいじゃねぇよ、勝手にひとりあるきしまったく別物になった
メッセージ VS 型クラスとメソッド
全然別だよ >>396
だからさ、ちゃんと「俺は」って書いてくんない?
「俺は」javaで多態はほんとにめったというかぜんぜん使わない
「俺は」javaはまれにしかやらないけど、「俺は」主にpythonなどが多いので
「俺の世界には」そもそも型(Pythonのクラス)がない
したがって「俺の世界では」派生クラスで上書きした共通関数使えば、
もうそれが多態といえるのかもしれないけど、
「俺は」継承もなるべく使わない
お前の話なんか知るかw なんで私は噛みつかれたのでしょう( ;´・ω・`) 『シコシコ』という擬音はどうでもよい。問題は、
自我 チンポ
↓ ↓ チンポ=自我
チンポ 自我
オブジェクト指向では、この三種類が考えられるということだ。
>チンポ=自我
散歩している時、自分もチンポも所在地は同一である。
https://i.imgur.com/WTKeavj.jpg
夏目くんの場合は、チンポが自我を圧倒し、体が自然に滝川さんの股間に近づいていったのだ。
『笑ってごまかすな!!』
と言われても、夏目くんは何と言えば良かったのだろう?
『チンポが自我を超えてしまった』を簡略化して、チンポがシコシコする!
チンポがシコシコしていると(チンポが自我を超越していると)、息もハァハァになる。
チンポがシコシコしている(チンポが自我を超越している)と、顔もアヘ顔になる。
つまりその顔は『チンポの一部』つまりチンポの皮と同じということ。
博士号の肩書きがあっても、STAP細胞のそれは間違いであり科学者として失格。
チンポと自我の関係について、それが間違いということなら、俺も科学者を自称するのを止めよう。
しかしながらあの夏目くんは、笑ってごまかす以外に何と申し上げたら良かったのか。 こいつのせいで、Pythonに型やクラスがないと
勘違いされるのは困るから、ちゃんと書いておくな
Python チュートリアル
https://docs.python.org/ja/3/tutorial/classes.html
9. クラス
> Python のクラスは、C++ と Modula-3 のクラスメカニズムを混ぜたものです。
> Python のクラス機構はオブジェクト指向プログラミングの標準的な機能を全て提供しています。Python のクラスは、C++ と Modula-3 のクラスメカニズムを混ぜたものです。Python のクラス機構はオブジェクト指向プログラミングの標準的な機能を全て提供しています。
9.5. 継承
> 言うまでもなく、継承の概念をサポートしない言語機能は "クラス" と呼ぶに値しません。
9.5.1. 多重継承
> Python では、多重継承 (multiple inheritance) の形式もサポートしています。 別に噛み付いちゃいねえけど
オレオレオブジェクト指向論者は
メッセージやアクター理論などど型クラス+メソッド+継承のOOPSを
混同してむちゃくちゃな議論をするやからが多いから、ついかいた >>404
>オレオレオブジェクト指向論者は
>メッセージやアクター理論などど型クラス+メソッド+継承のOOPSを
>混同してむちゃくちゃな議論をする
でもオブジェクト指向は俺の股間に付いているだろう? >>398
えー、お前のも一般的なの?
アランケイさんのお言葉
wikipediaより
すべてはオブジェクトである。
オブジェクトはメッセージの受け答えによってコミュニケーションする。
オブジェクトは自身のメモリーを持つ。
どのオブジェクトもクラスのインスタンスであり、クラスもまたオブジェクトである。
クラスはその全インスタンスの為の共有動作を持つ。インスタンスはプログラムにおけるオブジェクトの形態である。
プログラム実行時は、制御は最初のオブジェクトに渡され、残りはそのメッセージとして扱われる。
だってさ >>403
クラスはアルさ、なに言ってんだ。
それからデータに型はあるさ
変数に型はないよ いれたデータに型が紐つく
そういう言語もいっぱいあって、C++やJavaninai柔軟性を示すんだよ
動的型付けってしなねぇのかよ
rubyではダックタイプとかいう >>406
上の方に書いたるだろ?
それは
> 現代におけるオブジェクト指向とはまったく違う代物 >>407
変数に型がある/ないことが
今の話にどう関係があるんですか? ■ このスレッドは過去ログ倉庫に格納されています