コードの再利用の観点からオブジェクトを配信しましたか?


17

私は、オブジェクトがコードの再利用に関して配信されていないと言ったことをよく耳にします。同意しますか?あなたは彼らがそうではないと信じているなら、なぜですか?


4
私は誰もそれを言うのを聞いたことがありません
...-TheLQ

2
@the実際に誰かがそれを言うのを聞いたとは思わないが、読んだ。
ジョージマリアン

OOPの利点は再利用性だけではありません。
誰も

2
「コードの再利用という観点からオブジェクトを配信しましたか?」->当時のOOP営業担当者を信じていた場合のみ(60年代だったか?私は忘れている)
スティーブンエバーズ

回答:


18

いいえ、必ずしもそうではありません。

オブジェクトは、より優れたセマンティクス、コード/機能の編成、そしておそらく使いやすさを実現します。

適切に設計されたライブラリは、オブジェクト自体ではなく、コードの再利用を約束します。


はい、そうです。しかし、オブジェクトは、ライブラリを再利用しやすくするオプションを提供することで、ライブラリ設計者を支援しましたか?私は彼らが持っていると主張するだろうし、したがってオブジェクト改善された再利用をもたらした。
ジュール

@Jules私も、議論のためだけに議論するのが好きです。オブジェクトによってライブラリの設計が容易になったとは言いません。私はあなたのツールを適切に使用することが適切な結果につながると主張しています。
ジョージマリアン

7

正直なところ、「コードの再利用」が本当に後を追うものであるかどうかはわかりません(少なくとも後でなければなりません)。私の哲学は「ソフトウェアコンポーネント」です。これは、優れたインターフェイスを介した保守性の向上と、不要な結合の回避を意味します。「コードの再利用」は、時にはそれから外れることの1つです。不必要に重複したコードは、物事を間違った方法で整理したことを示し、もちろん維持するのが苦痛です。

質問にもう少し直接答えるために、自分自身の繰り返しを避けるための非常に良いツールのコレクションがあります:継承、特性、委任、高階関数など。あなたが私に尋ねると、彼らはそれを少し使いすぎる傾向があります。たぶん、そこから「OO sucks」バイブの一部が生まれます:継承が自然な権利を持たない場所でスタックしていることを見つける:)


コードの再利用を使用すると、コードの品質を犠牲にすることを避けることができたときに、間違いを目指すためのものです
Casebash

1
ただし、コードの再利用はそれ自体の目的ではありません。再利用は、カップリングの別の言葉です。そのため、再利用には慎重に取り組む必要があります。多くの開発者がこれを忘れているようです。彼らは分離されたシステムを望んでいますが、向きを変えて、どこでも既存のクラスを使用しようとします。
アンディ

5

いいえ、「オブジェクト」はコードの再利用を簡単または一般的にしていません。モジュラープログラムでコードの再利用を妨げる同じ懸念事項(汎用APIの設計、テスト、文書化には、1回限りのルーチンを書くよりもかなり多くの先行作業が必要です。なしのマスター-再利用することを意図したロジックは、実際に使用される用途に最適化されていない可能性があります)OOプログラムに適用します。不適切に設計されたオブジェクトモデルは、再利用可能な再利用を妨げる可能性がありますコード。

OOは、多くの問題に対する便利な抽象概念ですが、80年代から90年代の誇大宣伝には注意してください。寝ている間にワッフルを作る以上に、私たちの貿易の根本的な問題を魔法のように解決することはありません。


5

すべてのオブジェクトが再利用されることを期待していませんが、多くの異なるプロジェクトで再利用するオブジェクトがたくさんあります。また、1つのプロジェクトで再利用されるオブジェクトもあります。多くの場合、同じビジネスオブジェクト(またはデータ転送オブジェクト)およびClick-Onceデスクトップアプリ、Webアプリ、電話アプリからのビジネスロジックオブジェクトをすべて同じプロジェクトで使用します。

OOが再利用で配信しないと聞いたことはありますか?そして、理由は何でしたか?おそらく彼らのオブジェクトの設計は、彼らをそのような状況に追いやったのでしょう...


4
さまざまな記事。また、個人的な経験から、オブジェクトを再利用可能にすることは非常に簡単ではありません
-Casebash

3

一部のプログラマは、任意の言語とスタイルでコピーして貼り付けます。

本当に優れたプログラマーは、ほぼすべての言語でほとんどのコピーアンドペーストを回避できます。

オブジェクト指向のパターンは再利用を促進する傾向があると思います。私は、非OOスタイル(データが安っぽいORMのためにコードから分離されていた)で書かれたJavaコードを見てきましたが、再利用は本当に悲惨でしたが、OOでは同じプログラマーが設計でより良い仕事をしました(および再利用)。

また、セッター/ゲッター、switchステートメント、匿名の内部クラス、巨大な関数など、非ooパターンまたはooアンチパターンを使用する場合、コードの再利用が低下し、ボイラープレートが上昇することを確認しました...

追伸 前の段落で問題が発生することはわかっているので、少し説明します。

セッターとゲッターはオブジェクトのメンバーを操作できるためオブジェクト指向の問題を引き起こします(オブジェクトはそのOWNメンバーを操作する必要があります)これにより、セッター/ゲッターの周りの機能をコピーする必要がある他のクラスにクラスで動作するコードが配布されます。これはプロパティにも当てはまります。プロパティが簡単だからといって、すべての状況で「良い」とは限りません。

匿名内部クラスのコードはまったく再利用できず、人々は多くのこと(リスナーなど)が本格的なクラスであり、そうあるべきであることを忘れています。これはクロージャーにも当てはまります。リスナーのようなものを実装するために匿名内部クラスを使用した場合、メソッドまたは独自のクラスにコードを抽出して代わりに呼び出すよりも、実装をコピーして貼り付けるだけの可能性が高くなります。クロージャーは、再利用性を向上させることもできます。クロージャーの使用方法によって異なります。

多くの場合、利用可能な機能により、コードの構造が決まります。オブジェクト指向は、すべてのコードとそれがどのように相互作用するかを視覚化することに関してはさらに強力ですが、それは別の質問です。


2

オブジェクトには、階段を登る人や他のフィットネス機器が減量できるよりも、コードを再利用する能力がありません。開発者はツールを適切に使用するように動機付けられなければなりません。

ソフトウェアチームがテスト済みコードの再利用に、すべての詳細を頭に入れておくよりも高い価値を置くと、はるかにきめの細かいオブジェクトとメソッドが見られるため、コードの再利用が増えます。


2

はい

OOPは、コードを再利用するためのより多くの方法を提供します

番号

特効薬はありません

場合によります

あなたがそれに入れたもの、そして見返りにあなたが期待したものに!


1

はい。優れたオブジェクト指向プログラミングは、懸念の分離、低い結合、高い凝集性、および情報の隠蔽を促進します。これらはすべて、再利用可能なコードにとって重要です。

OOPの主な利点は、再利用ではなくモジュール性と変更可能性であると主張しますが、それは別の質問です。


4
オブジェクトはコードをより良くすることに同意しますが、残念ながら私のオブジェクトのこのような大部分は再利用できません。多くの場合、オブジェクトを再利用可能にすることは、状況を単純化しすぎることを意味します
-Casebash

2
@casebase +1ただし、オブジェクトを再利用可能にすることは、状況(オブジェクト)を過度に複雑化することを意味すると思います。
ジョージマリアン

すべてが再利用可能になるわけではありません。ほとんどのことはしません。ただし、低結合、情報隠蔽などはすべて再利用の前提条件であり、オブジェクトはそれを促進します。
フィッシュトースター

2
@Fishtoaster:車を動かすことは仕事をするための前提条件であり、傾斜した車道がそれを促進していると言うこともできます。技術的には真実ですが、エッジケース以外で違いを生む可能性は低いです。再利用が必要であり、再利用が必要な場合は、オブジェクト指向か否かを取得します。そうしないと、前提条件を満たしていても偶然に発生しません。
Shog9

@氏。C-私はあなたの主張に従っているかどうかわかりません。私は単に、OOPが促進するもの(モジュール性など)によってライブラリのようなものを簡単に作成できると述べていました。関心事を分離するなどしてコードを再利用可能にする方法はたくさんあります。OOPは1つ、優れたメソッド設計はもう1つ、適切な問題分解はまだ1つです。
フィッシュトースター

1

オブジェクトを使用するとコードの再送信が可能になりますが、そのための手法はほとんどありません。コードの再利用は、継承、ポリモーフィズム、オーバーロード、テンプレートなどのオブジェクト関連の技術を通じて促進されると思います。


1

はい、彼らはそうです、スーパークラスのクリアから拡張する(継承する)能力はコードの再利用に貢献します、私は誰かがそうでなければ議論する方法がわかりません。あなたは単にクラスを拡張し、スーパークラスの残りを使用しながら1つのメソッドをオーバーライドできますが、これがコードの再利用を支援していない場合、私は何がわからない


0

これまでのところ、彼らはコードの再利用の約束を果たしましたか?はい、OOPを念頭に置いて作成されたプログラムが設計パターンを賢く適用する場合。それ以外の場合、ほとんどありません。しかし、アドビシステム、グーグルなどがC ++またはJavaまたはその他のOOP言語で作成する大規模な非自明なプログラムの人気を見ると、OOPが段階的に廃止されるまでには長い道のりがあると思います。その時間は、この質問をするのにはるかに適しており、新しいパラダイムの基礎を提供するのに役立つ可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.