一部の書籍やサイトでは、オーバーロードがオブジェクト指向プログラミングの特徴であるかのような記述が見受けられるのですが、私はそれに疑問を感じます。
オーバーライドはクラス・継承に関わるためOOP特有のものであると思うのですが、オーバーロードはクラスとは全く切り離して考えられるからです。
確かにオーバーロードはクラスを作るときに有用な技術ではありますが、例えばC言語のような非オブジェクト指向言語でオーバーロードが使えたとしても、それなりに機能するはずです。
ひょっとしたら
「オーバーロードもオーバーライドもポリモーフィズムだろう」
↓
「ポリモーフィズムといえばオブジェクト指向」
のような話の展開でしょうか(いや、さすがに無理があるか…)。
皆様はどうお考えでしょうか。
ご意見お聞かせ下さい。
No.1ベストアンサー
- 回答日時:
おっしゃるとおり、オーバーロード・オーバーライドは非オブジェクト指向言語にもありました。
オーバーロード・オーバーライドは、「異なった関数(メソッド)を同じ名前で呼び出せる・・・引数の型・数によって実際に呼び出される関数が選ばれる」というトーンですが、ポリモーフィズムは、「1つの関数(メソッド)が引き渡される引数の型・数に応じて動作を変える」というトーンだと思います。
やはり、オーバーロードがオブジェクト指向言語特有のものであるという記述は誤りなのですね。
私自身勉強不足のため、オーバーライドも非オブジェクト指向言語に存在するというのは初耳でしたが。別の名前空間(?)で同じインターフェイスの関数が定義されている、というようなものでしょうか。そうやって考えると、OOPの説明にポリモーフィズムという言葉を用いるのはおかしいことになりますね。
ありがとうございました。
No.4
- 回答日時:
No.3です。
さきの回答を書き込んだあとで「オブジェクト指向という言葉は何を指しているのか?」って解らなくなって、再度「オブジェクト指向でなぜつくるのか」を読み返してしまいました。つまり、オブジェクト指向が、システム開発のマネジメントやプログラム要求仕様書作成などのレベルを指し示すのか、実際のプログラミングのレベルを指すのか?ということです。
で、本書は12章のゴールに「オブジェクト指向は優れたソフトウエアを作るための手段」と書かれています。
つまり、「オブジェクト指向」は設計書を書いたりまとめたりする技術ではなく、「ソフトウエア作成を楽にする技術」なんですね。「要求仕様書だけオブジェクト指向で作成する」なんて無いし、また要求仕様書に要求される内容はそんなものではないですね。
C++に装備されたソフトウエア作成に有用な機能で、「これはオブジェクト指向の仲間と強弁すればできるよね?」っていうものもあるでしょうけど、現場からすれば、「そんな分類はそっちで勝手にやってくれ!」ってことなのかもしれません。
そして、最近は「オブジェクト指向」って文字を雑誌等で見る機会が減った気もします。同時に「オフショア開発」や「開発マネジメント」関係の記事をよく目にするようになった気がします。
で、「プログラマよりも高収入のSEをめざす」「プログラマはレベルの低い初心者のすること」「設計だけやってプログラムはインドに任せる」という風潮が強くなった気がします。ヨーロッパのルネッサンス期に「学問は実用的であってはいけない」という常識がありましたが、それをまねると、「ソフトウエア業界で上級であるには、プログラマであってはいけない」ってことかもしれません。
ここまで考えて納得しました。
「プログラムを自分で作らない人にとって、オブジェクト指向は無関係である」
「楽して儲ける」あるいは「同じ苦労するなら高収入のポジション」って考え、プログラミングやデバッグで深夜・休日出勤して頑張るより、SEやマネージャになって、デタラメや抜けがあってもコンパイラから怒られることの無い仕様書作りを仕事にしたほうがいいってことなんでしょう。
そして世の中の風潮が、そちらがメインになるなら「プログラム作成技術なんて奴隷がピラミッドの石を効果的に輸送する技術のようなもので、関心は全く無い」ってなるのも当然なんでしょう。
ですので、最初にもどって「オーバーロードはオブジェクト指向プログラミングの枠組みかどうか?」という議論も、プログラミングに無縁な「評論家」にとっては意味あるものでしょうが、現場のプログラマにとっては、そんな議論は無意味なことだと思います。
(この質問が無意味ってわけではありませんよ、いろいろ考えるきっかけになりました)
P.S.
大手IT企業で、「仕様書だけ作って、海外にプログラミングをまかせる」って職場にいた人の話を聞くと、それはそれは大変だそうです。プログミングは「製造工程」ではなく「設計工程の一環」であり、その工程から何度かのフィードバックは必須なんですからね。そしてソフトを発注する顧客の立場になれば、「バグの問い合わせに答えられるSEは、インドに居ます」って会社よりも、「ソースコードのどの行も私の頭に入っています!」って答えてくれる人のいる会社に仕事はお願いしたいですね。海外に発注して、バックドアを埋め込まれて、クレジット情報を人質に身代金要求されたって事件もあったようですしね。
再度の回答、ありがとうございます。
>現場のプログラマにとっては、そんな議論は無意味なことだと思います
確かにそうかもしれませんが。
ただ私としては、これからOOPを知ろうという人に対して、オーバーロードをOOPの1ファクターとして語ってしまいかねないと感じてしまったので、それはちょっと問題があるのではないかと。混乱させてしまうかもしれませんしね。
それに、評論家と対談できる程の知識・考察が必要があるかは別として、ある程度正しい認識をしていた方が、ベターなソースコードを書けるようになるために回り道をしないで済むような気もします。
それにしても、
>バックドアを埋め込まれて、クレジット情報を人質に身代金要求された
そんな事件があったとは…。
No.3
- 回答日時:
>>一部の書籍やサイトでは、オーバーロードがオブジェクト指向プログラミングの特徴であるかのような記述が見受けられるのですが
それは、単に著者が、「オブジェクト指向プログラミング」をちゃんと理解していないだけではないかと思います。以前は自動車とトラック・自家用車の継承図を描いて「継承こそオブジェクト指向」っていうような記述の記事や書籍もあったわけですが、今は、「オブジェクト指向でなぜつくるのか」という本など「オブジェクト指向」にたいする正しい解説をした書籍も多いので、誤解した方は減ってきているのではないでしょうか?
発行日の古い書籍に、そういう記述が多いのでは?
なお、似たような誤解の例として、「C++はオブジェクト指向言語だから難しい」っていう認識もあります。もっとストレートにいえば、「C++はオブジェクト指向言語である」という誤解です。
C++は、例外処理、演算子の多重定義、リファレンス、テンプレート、名前空間といったオブジェクト指向とは全く関係ない特徴を多く持っています。これらは、全くオブジェクト指向とは関係ないですが、C++のプログラムをC++らしく作るには、いずれも重要な項目です。
ですので、これらC++の機能を見て「オブジェクト指向言語であるC++は難しい」って誤解されている可能性が大きい気がします。
オブジェクト指向だから難しいのではなく、前にあげた多くの機能と、Lisp言語系の思想が影響していると思えるテンプレート機能が手続き型言語に慣れた人(私も含めて)に、C++の理解を難しくさせているのではないかと思っています。
やはり筆者の誤りでしたか。今後、こういう記述がなくなることを願います。
>「C++はオブジェクト指向言語である」という誤解
それは私も感じます。
C++をやっているのにテンプレートを知らない人(昔の私もそうでしたが)が私の周囲にいますし。複数の要素がミックスされた言語の筈なんですが…。「C++はオブジェクト指向のC」とでも誰かが吹聴してるのでしょうか?
ありがとうございました。
No.2
- 回答日時:
「ユーザ定義」というところを無視すれば, B から見れば C だって十分「演算子のオーバーロード」をしているんですけどね....
ちなみに Fortran90 では, ユーザ定義の型に対し演算子のオーバーロードをすることができます. Fortran90 におけるユーザ定義型は「オブジェクト指向言語のような継承はできない」という点で C の構造体とほぼ等価で, この点だけをとると「演算子をオーバーロードできる C」のような感じになります. ということで, 「オブジェクト指向でない, かつオーバーロード可能な言語」は実在します.
まあ, Fortran90 だと「ユーザ定義の新しい演算子」が作れてしまうんですが....
Cのオペレータオーバーロードは私も考えていました。組み込み型に対して行われていますもんね。
Fortran90は私は使用したことがないのですが、なるほど、まさにオーバーロード可能は非オブジェクト指向言語ですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java オブジェクト指向プログラミングの実践本を紹介してください 3 2022/09/19 04:56
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/05/21 02:41
- Visual Basic(VBA) Excel VBA オブジェクトマクロ 使用指定について お詳しい方教えてください。 共通エクセルフ 2 2023/03/14 17:26
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- アニメ 今の高校生以上に向けたアニメ(例オーバーロードやソードアートオンラインやチェンソーマンや呪術廻戦)は 1 2023/05/20 00:31
- Visual Basic(VBA) クラス デフォルトプロパティの作り方 1 2022/10/23 11:41
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- 予備校・塾・家庭教師 フリーランスで英語指導をされている方、お詳しい方などにお聞きしたいです。 自室にて知人の中高生の子供 2 2022/06/22 09:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクリプスのプログラミングに...
-
JavaとAndroidアプリ(Java)違...
-
プログラミングの質問です 5の...
-
Javaに向いてない人はどんな人...
-
同期関数とawaitの違い
-
プログラミングの技術向上について
-
Java じゃんけん プログラミング
-
JavaScriptとC言語の違いについ...
-
JAVA超初心者におすすめの本教...
-
Macでゲーム制作
-
C++でおすすめの書籍はありますか
-
Basicというプログラミング言語...
-
ウェブサイトのアクセスログに...
-
vba クリップボードクリアにつ...
-
JSPファイルで生じるエラーをど...
-
複素関数はどこはあんまりやら...
-
Javaでのエラーについて
-
IISワーカープロセスが原因でCP...
-
VBAの「for i=1 to cells(…」...
-
ロールバックの逆の言葉は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクリプスのプログラミングに...
-
JavaとAndroidアプリ(Java)違...
-
JAVA基礎の課題で自動販売機
-
OpenGLでの楕円の描き方
-
vectorクラスについて。
-
スキル高めのIT技術者になぜ左...
-
JavaScriptとC言語の違いについ...
-
プログラミングを学びたいと思...
-
大学の授業のプログラミング、...
-
Javaに向いてない人はどんな人...
-
Java新人研修の課題についてア...
-
関数のヘルプ
-
プログラミングの基礎について...
-
オーバーロードはオブジェクト...
-
プログラミングの質問です 5の...
-
プログラミング プラネタリウム
-
Cに慣れてしまった人、どのよう...
-
Macでゲーム制作
-
プログラミングのプの字も知り...
-
C言語をマスターするまでの時間
おすすめ情報