アカウント名:
パスワード:
A:それを書いた事があるとその言語の経験者を名乗れるから。
と思っていた事もありました。今じゃ「書いた」じゃなくて「読んだ」ぐらいで経験者を名乗る奴もいるからなあ。
# せめてホワイトボード上で書けるぐらいには知っておけよ…
オブジェクト指向で書いてるけどオブジェクト指向を説明しろっていわれたら各処理を部品化して交換可能にすることとしか出てこなくって体で理解しているのであって頭で理解できてねぇって気がついた
構造体に関数がくっついてるだけでしょ。
ポリモーフィズムはオブジェクト指向の必須要素ではないと思うなあ。最低限、構造体に関数がくっついていればオブジェクト指向できると思うが。(データ構造とアルゴリズムの非分離)カプセル化はさらに必須ではないな。カプセル化できないC++がオブジェクト指向を標榜してたりするし。
構造体に関数がくっついて実現されるのはデータ抽象化というやつです。カプセル化もそうです。
オブジェクト指向というからには、データ抽象化でないなにか(ポリモーフィズム)があるということなんですよ。
オブジェクト指向プログラミングは、オブジェクト指向言語を使わなくても可能ですし、オブジェクト指向言語を使ったからといってオブジェクト指向プログラミングになるとは限らないというのが世間の常識です
そのとおりですが、何の反論にも同意にもなってませんね。何が言いたいのだろう?
オブジェクト指向「言語」の話なんて誰もしてないよ。オブジェクト指向とかデータ抽象化の話をしています。
ポリモーフィズムって言語の話でしょうが
> オブジェクト指向プログラミングは、オブジェクト指向言語を使わなくても可能ですし
止めて。絶対に止めて。それでどれだけ死にそうになった事か。
ポリモーフィズムが多くの場合、強い有害だと分かったからの話です。継承をするとは、構造を継承するのですが、圧倒的大多数の設計では、変更とは構造の変更で有り、ミスマッチが生じます。たいていの場合、同じ外見のクラスを複製して別名にするのがベストプラクティスです。 実用上、「近所」を一級の存在としたことだけで十分だと言え、それ以上は、言い過ぎの有害と分かったのです。 ポリモーフィズムではリスコフさんは先駆者でしょうけれど、そうで無い、たいていの場合のベストプラクティスのパターンでは、もっと前に先行の影響力のある研究がなされており、その内容は単なる専門学校で前から教えられていると思います。
横から失礼しますが、すくなくとも似たようなクラス間でのコード共通化のためだけにポリモーフィズムを使うのは間違いですよね。現にinterfaceではコードは排除されてます。
そんなのは継承を選ぶべきではない場面で、継承を選んだという設計ミスでしょ。継承で機能拡張することを前提に設計してないクラスを、無理に継承しようとした場合の問題。親クラスの設計が悪いなら、親クラスを先ず修正するべきです。
継承を使うべき場面なんてほとんど無いということです。継承は汎用性の高いクラスライブラリの設計で用いるべき技術であって、一般のアプリレベルで使っても、良くて自己満足、悪けりゃ大怪我ですよ。一般のアプリで継承をメンテするコストは割に合いません。
それは流石にない。単純にあなたの環境に、まともな設計ができる普通のレベルのエンジニアがいないだけ。レベルの低過ぎる初学者しかいないような環境を持ち出して、それが一般的かのように話されても困る。
interfaceは問題ありません。コード共有の手段として継承を用いることが問題なのです。
継承より移譲を用いるべきだという話を聞いたことがありませんか?
IFの実装しかできないVB6がぼこぼこにたたかれてたしなぁ
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall
Q:なぜ世の中にHello Worldが存在するのか (スコア:1)
A:それを書いた事があるとその言語の経験者を名乗れるから。
と思っていた事もありました。
今じゃ「書いた」じゃなくて「読んだ」ぐらいで経験者を名乗る奴もいるからなあ。
# せめてホワイトボード上で書けるぐらいには知っておけよ…
Re: (スコア:0)
オブジェクト指向で書いてるけどオブジェクト指向を説明しろっていわれたら
各処理を部品化して交換可能にすることとしか出てこなくって
体で理解しているのであって頭で理解できてねぇって気がついた
Re: (スコア:1)
構造体に関数がくっついてるだけでしょ。
Re: (スコア:0)
ポリモーフィズムこそ必須成分。
それがなければ単なるカプセル化、モジュール化に過ぎない。
Re:Q:なぜ世の中にHello Worldが存在するのか (スコア:0)
ポリモーフィズムはオブジェクト指向の必須要素ではないと思うなあ。
最低限、構造体に関数がくっついていればオブジェクト指向できると思うが。(データ構造とアルゴリズムの非分離)
カプセル化はさらに必須ではないな。カプセル化できないC++がオブジェクト指向を標榜してたりするし。
Re:Q:なぜ世の中にHello Worldが存在するのか (スコア:1)
構造体に関数がくっついて実現されるのはデータ抽象化というやつです。
カプセル化もそうです。
オブジェクト指向というからには、データ抽象化でないなにか(ポリモーフィズム)が
あるということなんですよ。
Re: (スコア:0)
オブジェクト指向プログラミングは、オブジェクト指向言語を使わなくても可能ですし、オブジェクト指向言語を使ったからといってオブジェクト指向プログラミングになるとは限らないというのが世間の常識です
Re: (スコア:0)
そのとおりですが、何の反論にも同意にもなってませんね。
何が言いたいのだろう?
オブジェクト指向「言語」の話なんて誰もしてないよ。
オブジェクト指向とかデータ抽象化の話をしています。
Re: (スコア:0)
多くの技術力に乏しいソフトウェア開発の現場ではそれを指してオブジェクト指向と呼んでいる。
オブジェクト指向いらないおじさんの本当の主張は、
オブジェクト指向をしたくないということでない(そもそもオブジェクト指向が何かよく分かんないし)。
オブジェクト指向言語を使わなくてもデータ抽象はできるし、データ抽象の原則を崩したいときに言語仕様がその障害になるからオブジェクト指向言語(またはそのような言語の機能)を使いたくない
ということ
Re: (スコア:0)
ポリモーフィズムって言語の話でしょうが
Re: (スコア:0)
> オブジェクト指向プログラミングは、オブジェクト指向言語を使わなくても可能ですし
止めて。絶対に止めて。それでどれだけ死にそうになった事か。
Re: (スコア:0)
構造体に関数がくっついてるのは関数テーブルを動的に変更したいからでしょ
例えば、Cで構造体の頭に関数テーブル置いて関数ポインタ入れておいて自力でポリモーフィズムするってのは、まれによくあるデザインパターンではあるけど
ポリモーフィズムがいらないならそんな面倒臭いことせず、関数と構造体の定義を近所に置いとくだけにして普通に関数呼んだ方がずっと分かりやすい。
Re: (スコア:0)
ポリモーフィズムが多くの場合、強い有害だと分かったからの話です。
継承をするとは、構造を継承するのですが、圧倒的大多数の設計では、変更とは構造の変更で
有り、ミスマッチが生じます。
たいていの場合、同じ外見のクラスを複製して別名にするのがベストプラクティスです。
実用上、「近所」を一級の存在としたことだけで十分だと言え、それ以上は、言い過ぎの
有害と分かったのです。
ポリモーフィズムではリスコフさんは先駆者でしょうけれど、そうで無い、たいていの
場合のベストプラクティスのパターンでは、もっと前に先行の影響力のある研究が
なされており、その内容は単なる専門学校で前から教えられていると思います。
Re: (スコア:0)
横から失礼しますが、すくなくとも似たようなクラス間でのコード共通化のためだけにポリモーフィズムを使うのは間違いですよね。現にinterfaceではコードは排除されてます。
Re: (スコア:0)
そんなのは継承を選ぶべきではない場面で、継承を選んだという設計ミスでしょ。
継承で機能拡張することを前提に設計してないクラスを、無理に継承しようとした場合の問題。
親クラスの設計が悪いなら、親クラスを先ず修正するべきです。
Re: (スコア:0)
継承を使うべき場面なんてほとんど無いということです。継承は汎用性の高いクラスライブラリの設計で用いるべき技術であって、一般のアプリレベルで使っても、良くて自己満足、悪けりゃ大怪我ですよ。一般のアプリで継承をメンテするコストは割に合いません。
Re: (スコア:0)
それは流石にない。
単純にあなたの環境に、まともな設計ができる普通のレベルのエンジニアがいないだけ。
レベルの低過ぎる初学者しかいないような環境を持ち出して、それが一般的かのように話されても困る。
Re: (スコア:0)
interfaceは問題ありません。コード共有の手段として継承を用いることが問題なのです。
継承より移譲を用いるべきだという話を聞いたことがありませんか?
Re: (スコア:0)
IFの実装しかできないVB6がぼこぼこにたたかれてたしなぁ