タグ付けされた質問 「oop」

オブジェクト指向プログラミングは、「オブジェクト」を使用したプログラミングパラダイムです。つまり、データフィールドとメソッド、およびそれらの相互作用で構成されるデータ構造です。

10
クラスのプライベートフィールドの変更を防ぐにはどうすればよいですか?
私がこのクラスを持っていると想像してください: public class Test { private String[] arr = new String[]{"1","2"}; public String[] getArr() { return arr; } } 今、私は上記のクラスを使用する別のクラスがあります: Test test = new Test(); test.getArr()[0] ="some value!"; //!!! これが問題です。クラスのプライベートフィールドに外部からアクセスしました。どうすればこれを防ぐことができますか?この配列を不変にするにはどうすればよいですか?これは、すべてのゲッターメソッドでプライベートフィールドにアクセスするために上に移動できることを意味しますか (グアバなどのライブラリは必要ありません。これを行う正しい方法を知る必要があるだけです)。
165 java  arrays  oop  class 

11
pImplイディオムは実際に実際に使用されていますか?
私はHerb Sutterの「Exceptional C ++」という本を読んでいます。その本で、pImplイディオムについて学びました。基本的には、のprivateオブジェクトの構造を作成し、classそれらを動的に割り当てて、コンパイル時間を短縮します(また、プライベート実装をより適切に非表示にする)。 例えば: class X { private: C c; D d; } ; 次のように変更できます: class X { private: struct XImpl; XImpl* pImpl; }; CPPでの定義: struct X::XImpl { C c; D d; }; これはかなり興味深いようですが、これまでこの種のアプローチを見たことがありません。これまでに取り組んだ企業や、ソースコードを見たオープンソースプロジェクトでも見たことがありません。それで、このテクニックが実際に実際に使用されているのだろうか? どこでも使用できますか、それとも注意して使用しますか?また、この手法は、パフォーマンスが非常に重要な組み込みシステムでの使用をお勧めしますか?
165 c++  oop  pimpl-idiom 


8
Pythonのオブジェクト属性を反復する
私はいくつかの属性とメソッドを持つpythonオブジェクトを持っています。オブジェクト属性を反復処理したい。 class my_python_obj(object): attr1='a' attr2='b' attr3='c' def method1(self, etc, etc): #Statements すべてのオブジェクト属性とその現在の値を含むディクショナリを生成したいのですが、動的な方法で生成したいので(後で別の属性を追加した場合でも、関数を更新することを覚えておく必要はありません)。 PHPでは変数をキーとして使用できますが、Pythonのオブジェクトはスクリプトを使用できません。このためにドット表記を使用すると、私の目的ではないvarの名前で新しい属性が作成されます。 物事をより明確にするために: def to_dict(self): '''this is what I already have''' d={} d["attr1"]= self.attr1 d["attr2"]= self.attr2 d["attr3"]= self.attr3 return d ・ def to_dict(self): '''this is what I want to do''' d={} for v in my_python_obj.attributes: d[v] = self.v return …

17
正しいメソッドを持っているよりもインターフェイスにもっとありますか
だから私がこのインターフェースを持っているとしましょう: public interface IBox { public void setSize(int size); public int getSize(); public int getArea(); //...and so on } そして私はそれを実装するクラスを持っています: public class Rectangle implements IBox { private int size; //Methods here } IBoxインターフェイスを使用したい場合、実際にはそのインスタンスを作成できません。 public static void main(String args[]) { Ibox myBox=new Ibox(); } 正しい?だから私は実際にこれをしなければならないでしょう: public static void main(String args[]) { …

9
関数型プログラミング言語と命令型プログラミング言語の違いは何ですか?
C#、Visual Basic、C ++、Javaなどのオブジェクト指向プログラミング(OOP)言語を含むほとんどの主流言語は、主に命令型(手続き型)プログラミングをサポートするように設計されていますが、Haskell / goferのような言語は純粋に機能的です。これらの2つのプログラミング方法の違いは何ですか? プログラミングの方法を選択することはユーザーの要件に依存することはわかっていますが、関数型プログラミング言語を学ぶことが推奨されるのはなぜですか?

22
Cでのオブジェクト指向
Cである種の醜い(しかし使用可能な)オブジェクト指向を可能にする気の利いたプリプロセッサハック(ANSI C89 / ISO C90互換)のセットは何ですか? 私はいくつかの異なるオブジェクト指向言語に精通しているので、「C ++を学ぶ!」のような答えを返さないでください。私は「ANSI Cによるオブジェクト指向プログラミング」(注意:PDF形式)と他のいくつかの興味深い解決策を読みましたが、主にあなたの解決策に興味があります:-)! Cでオブジェクト指向コードを記述できますか?も参照してください。
157 c  oop  object 

8
JavaScriptで子クラスから親メソッドを呼び出す方法は?
私は問題の解決策を見つけるために過去数時間を費やしてきましたが、それは絶望的なようです。 基本的に、私は子クラスから親メソッドを呼び出す方法を知る必要があります。これまでに試したすべてのものは、親メソッドを機能させなかったり、上書きしたりすることになります。 次のコードを使用してJavaScriptでOOPを設定しています。 // SET UP OOP // surrogate constructor (empty function) function surrogateCtor() {} function extend(base, sub) { // copy the prototype from the base to setup inheritance surrogateCtor.prototype = base.prototype; sub.prototype = new surrogateCtor(); sub.prototype.constructor = sub; } // parent class function ParentObject(name) { this.name = name; } …

10
プライベートフィールドがインスタンスではなく型に対してプライベートであるのはなぜですか?
C#(および他の多くの言語)では、同じタイプの他のインスタンスのプライベートフィールドにアクセスすることは完全に正当です。例えば: public class Foo { private bool aBool; public void DoBar(Foo anotherFoo) { if (anotherFoo.aBool) ... } } ようにC#の仕様(セクション3.5.1、3.5.2)プライベートフィールドへのアクセスのタイプではなく、インスタンス上で述べています。私はこれについて同僚と話し合っており、(同じインスタンスへのアクセスを制限するのではなく)このように機能する理由を考え出そうとしています。 考えられる最良の引数は、クラスがプライベートフィールドにアクセスして別のインスタンスとの等価性を判断する可能性がある等価性チェックです。他に理由はありますか?それとも、このように機能しなければならない、または何かが完全に不可能であることを絶対に意味するいくつかの黄金の理由?


13
デリゲートとは何ですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 この質問を改善する デリゲートの実際の役割は何ですか? 私はインタビューで何度もこの質問をされてきましたが、インタビュアーが私の答えに満足したとは思いません。 誰かが私に最良の定義を一文で実用的な例を挙げて教えてもらえますか?
152 oop  delegates 

18
メソッドの連鎖-なぜそれが良い習慣なのか、そうでないのか?
メソッドチェーンは、別のメソッドに対して結果を呼び出すためにオブジェクト自体を返すオブジェクトメソッドの慣行です。このような: participant.addSchedule(events[1]).addSchedule(events[2]).setStatus('attending').save() 可読コード、または「滑らかなインターフェース」を生成するため、これは良い習慣と考えられています。ただし、私にとっては、オブジェクト指向自体が意味するオブジェクト呼び出し表記が壊れているように見えます。結果のコードは、前のメソッドの結果に対するアクションの実行を表していないため、通常、オブジェクト指向コードが機能すると予想されます。 participant.getSchedule('monday').saveTo('monnday.file') この違いにより、「結果のオブジェクトを呼び出す」というドット表記の2つの異なる意味が作成されます。チェーンのコンテキストでは、上記の例は実際にはスケジュールを保存することを目的としていますが、参加者オブジェクトの保存として読み取られます。 getScheduleが受け取ったオブジェクト。 ここでの違いは、呼び出されたメソッドが何かを返すことを期待する必要があるかどうかです(この場合、呼び出されたオブジェクト自体がチェーンに返されます)。ただし、これらの2つのケースは、表記法自体と区別できません。呼び出されるメソッドのセマンティクスのみから区別できます。メソッドチェーンが使用されていない場合、メソッド呼び出しが前の呼び出しの結果に関連する何かに作用することを常に知ることができます-チェーンを使用すると、この仮定が破られ、実際のオブジェクトが何であるかを理解するためにチェーン全体を意味的に処理する必要があります本当に呼ばれています。例えば: participant.attend(event).setNotifications('silent').getSocialStream('twitter').postStatus('Joining '+event.name).follow(event.getSocialId('twitter')) ここで、最後の2つのメソッド呼び出しはgetSocialStreamの結果を参照していますが、前のメソッド呼び出しは参加者を参照しています。コンテキストが変化するチェーンを実際に作成することは悪い習慣かもしれません(そうですか?) 。 私には、メソッドチェーンが表面的には読み取り可能なコードを生成する一方で、ドット表記の意味をオーバーロードすると、さらに混乱が生じるだけのようです。私はプログラミングの第一人者とは思わないので、私が犯したのは自分のせいだと思います。だから:私は何が欠けていますか?どういうわけか間違った方法チェーンを理解していますか?メソッドチェーンが特に優れているケースや、特に悪いケースはありますか? 補足:この質問は、質問として隠された意見の声明として読むことができることを理解しています。ただし、そうではありません-チェーンが優れたプラクティスと見なされている理由を理解したいのですが、それが本来のオブジェクト指向表記を壊すと考えるときにどこが間違っているのでしょうか。

12
継承と集約[終了]
現在のところ、この質問は、Q&A形式には適していません。私たちは回答が事実、参考文献、専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 オブジェクト指向システムでコードを最適に拡張、拡張、再利用する方法については、2つの考え方があります。 継承:サブクラスを作成して、クラスの機能を拡張します。新しい機能を提供するために、サブクラスのスーパークラスメンバーをオーバーライドします。スーパークラスが特定のインターフェースを必要とするが、その実装にとらわれない場合は、メソッドを抽象/仮想にして、サブクラスに「空白埋め」を強制します。 集約:他のクラスを取得してそれらを新しいクラスに結合することにより、新しい機能を作成します。他のコードとの相互運用性のために、この新しいクラスに共通のインターフェイスをアタッチします。 それぞれのメリット、コスト、結果は何ですか?他の選択肢はありますか? この議論は定期的に出てきますが、まだスタックオーバーフローで質問されているとは思いません(いくつか関連する議論があります)。また、Googleでの良い結果が驚くほど不足していることもあります。

14
「結合が低く凝集力が高い」とはどういう意味ですか
声明の理解に問題がありlow in coupling and high in cohesionます。私はグーグルでこれについて多くを読みましたが、それでも理解するのは難しいと感じています。 私が理解しているのHigh cohesionは、特定の機能を実行するために特化したクラスが必要であることです。これが正しいと思いますか?クレジットカードのみの検証に特化したクレジットカード検証クラスのように。 それでも、低カップリングの意味がわかりませんか?
151 oop  ooad 

4
ActiveRecord属性メソッドをオーバーライドする
私が話していることの例: class Person < ActiveRecord::Base def name=(name) super(name.capitalize) end def name super().downcase # not sure why you'd do this; this is just an example end end これは機能しているようですが、ActiveRecord :: Base docsの属性メソッドのオーバーライドに関するセクションを読んだだけで、read_attributeおよびwrite_attributeメソッドの使用を提案しています。上記の例で私がやっていることに何か問題があるに違いないと思いました。そうでなければ、なぜこれらのメソッドを属性メソッドをオーバーライドする「正しい方法」として祝福するのでしょうか?彼らはもっと醜いイディオムを強制しているので、それには正当な理由があるに違いない... 私の本当の質問:この例には何か問題がありますか?

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