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

13
OOPのオブジェクトはエンティティを表す必要がありますか?
オブジェクトはエンティティを表す必要がありますか? エンティティ私のような何かを意味Product、Motor、ParkingLotなど、物理的、あるいは明確な非物理的な概念オブジェクト-だけでなく、いくつかのコアデータは明らかにオブジェクトに属していると、定義されているもの、およびいくつかの関数/メソッドコアデータを明確に操作します。 たとえば、aのオブジェクトDemon、それ自体のエンティティ、想像上のオブジェクト、おそらく物理的ではなくエンティティを持つことができます オブジェクトは、メソッドのコレクション、共通の目標に結び付く共通のプロシージャセットになりますか? 例:クラスを呼び出すことができるMotorOperationsか、MotorActionsそこには実体ではありませんが、クラス内のメソッドは次のようなことを行う場合には、 getMotorDataFromHTMLForm() getMotorManufacturers() selectMotorFromUserRequirements($ requirements) canMotorCanHandleOperatingConditions($ conditions) computePowerConsumptionForMotor($ id) クラスは通常、オブジェクトの中心となるデータ+データの操作として定義されます。そのため、Motorモーターの仕様に関連するいくつかのモーター変数があり、それらのデータを組み合わせて何かを生成する操作があります。 私の場合、データを操作するクラスとクラスを通過するデータを持っているようなもので、一時的なクラススルーデータ以外に「モーター操作」を中心としたデータはありません。 質問 クラスはエンティティのないオブジェクトを表すことができますか?そうでない場合、なぜそれらは悪い/不完全/非OOP中心ですか?OOPに合わせて概念的に変更/改善する必要がある方法はありますか?

8
「神のオブジェクト」が間違っていることを証明または反証するにはどうすればよいですか?
問題の概要: 長い話を簡単に言えば、私はコードベースと開発チームを引き継ぎました。私はこれを置き換えることは許されておらず、God Objectsの使用は大きな問題です。今後、リファクタリングをしてもらいたいのですが、「もっと簡単だから」、God Objectsを使ってすべてをやりたいチームから押し戻されています。これは、リファクタリングが許可されないことを意味します。私は長年の開発経験、これらのことを知るために雇われた新しいボスなどを押し返しました。また、サードパーティのオフショア会社が営業担当者を説明しました。これは現在、役員レベルと会議です明日であり、長期的にはより安くなると思うので、多くの技術的な弾薬を使ってベストプラクティスを提唱したいと思います(そして、個人的にはサードパーティが心配していることだと感じています)。 私の問題は技術レベルからのものであり、長期的にはよく知っていますが、超短期間と6か月の期間には問題があります。 1人(ロバートC.マーティン、別名ボブおじさん)の、1人のデータ(1人のみ)(ロバートCマーティン)が十分な議論をしていないと言われているように。 質問: 「神」オブジェクト/クラス/システムのこの使用は明らかに悪いと言っている分野の有名な専門家が直接引用できるリソース(タイトル、発行年、ページ番号、引用)は何ですか?最も技術的に有効なソリューションの場合)? 私がすでに行った研究: ここにはたくさんの本があり、「god object」と「god class」という言葉の使用についてインデックスを検索しました。奇妙なことに、ほとんど使用されておらず、たとえば、私が持っているGoF本のコピーは使用されません(少なくとも私の目の前のインデックスによると)が、下の2冊の本で見つけましたが、もっと欲しい私は使えます。 ウィキペディアのページで「God Object」と現在の参照リンクの少ないスタブを確認したので、個人的には有効とは見なされない環境ではあまり使用できないと言うことには個人的に同意します。引用された本はまた、私がこれらの技術的ポイントを議論している人々によって有効であるには古すぎると考えられています。 「オブジェクトは使いやすい」。私は個人的にこの声明が間違っていると信じていますが、それが何であれ真実を証明したいと思います。 ロバートCマーティンの「C#のアジャイルの原則、パターン、および実践」(ISBN:0-13-185725-8、ハードカバー)では、266ページに「神のクラスが悪い考えであることを誰もが知っています。システムのすべてのインテリジェンスを単一のオブジェクトまたは単一の機能に集中させること。OODの目標の1つは、動作を多数のクラスおよび多数の機能に分割および分散することです。-そして、とにかく時々神のクラスを使用する方が良いことを時々言い続けます(例としてマイクロコントローラーを引用)。 ロバートCマーティンの「クリーンコード:アジャイルソフトウェアクラフツマンシップハンドブック」136ページ(およびこのページのみ)で、「神のクラス」について説明し、「クラスは小さくなければならない」ルールの違反の主な例として呼び出しています彼は138ページから始まる単一責任原則の推進に使用しています。 私が抱えている問題は、すべての参考文献と引用が同じ人(ロバートC.マーティン)から来ており、同じ一人の人/情報源から来ていることです。彼はただ一つの見解であるため、「神クラス」を使用しないという私の願望は無効であり、ソフトウェア業界の標準的なベストプラクティスとして受け入れられないと言われています。これは本当ですか?ボブおじさんの教えを守ろうとすることで、技術的な観点から間違ったことをしているのでしょうか? 神のオブジェクトとオブジェクト指向プログラミングおよび設計: これについて考えるほど、OOPを勉強するときに学ぶことが多くなり、明示的に呼び出されることはありません。良いデザインへのその暗黙は私の考えです(私が学びたいので、自由に訂正してください)、問題は私がこれを「知っている」ことですが、誰もがそうではありません。統計的にほとんどの人はプログラマーではないため、実際にはほとんどの人が統計的に無知であるにもかかわらず、私は事実上それを普遍的な真実と呼んでいます。 結論: 彼らが技術的な主張をしており、真実を知り、実際のエンジニア/科学者のような引用でそれを証明できるようにしたいので、引用する最良の追加結果を得るために何を検索するのか迷っています私は、神のオブジェクトを使用したコードの個人的な経験のために、神のオブジェクトに偏っています。どんな援助または引用も深く感謝されるでしょう。

6
classキーワードなしで「オブジェクト指向」プログラミングを実装できますか?
銀行の「口座」の抽象化を提供したいとします。functionPythonでオブジェクトを使用する1つのアプローチを次に示します。 def account(): """Return a dispatch dictionary representing a bank account. >>> a = account() >>> a['deposit'](100) 100 >>> a['withdraw'](90) 10 >>> a['withdraw'](90) 'Insufficient funds' >>> a['balance'] 10 """ def withdraw(amount): if amount > dispatch['balance']: return 'Insufficient funds' dispatch['balance'] -= amount return dispatch['balance'] def deposit(amount): dispatch['balance'] += amount return dispatch['balance'] …

1
オブジェクト変換の設計パターン(Java)
ときどきファクトリーとMVC以外にデザインパターンを使用することはあまりないので、もっと使い始めたいです。 このケースでのデザインパターンの使用について、あなたの意見が欲しいという具体的なケースがあります。 私のアプリケーションでは、さまざまな状況でかなり頻繁にオブジェクトを変換する必要があります。GWTを使用しており、Hibernate POJOはシリアル化できず、回線経由で送信できないため、Hibernate POJOをDTOに変換する必要がある場合があります。 別の状況では、Solrによるインデックス作成のためにJavaオブジェクトをSolrInputDocumentに変換する必要があるかもしれません。 このためにデザインパターンを使用する必要があるかどうかを知りたいです。「オブジェクトの変換」は、パターンによって柔軟/抽象的な方法で処理できる一般的なタスクのようですが、実際にはどうなるかわかりません。 パターンがなければ、CourseToSolrInputDocument(CourseはアプリケーションのHibernateエンティティです)など、変換のタイプごとに個別のクラスを作成するだけです。またはCourseToCourseDTO。これらの各変換クラスにconvert()は、ソースオブジェクトを入力として受け取り、出力オブジェクトを返す単一の静的メソッドが呼び出される場合があります。 しかし、それは実際にはパターンではありませんか?そこで、ジェネリックを使って何かから始めて、Converterインターフェイスを実装するこのクラスを作成しました。しかし、どういうわけか、愚かなtgoがジェネリックインターフェイスを作成していると感じています。 public class CourseToSolrInputDocument implements Converter<Course, SolrInputDocument> { @Override public void convert(Course source, SolrInputDocument destination) { //To change body of implemented methods use File | Settings | File Templates. } } したがって、ここでの本当の質問は、汎用オブジェクト変換に適用されるパターンがありますか?また、あなたのアプローチは何ですか?また、変換ごとのクラス型アプローチを使用するよりも利点は何ですか?

11
同じオブジェクトへの2つの参照が必要になるのはいつですか?
特にJavaでは、他の言語でも同様です。同じオブジェクトへの2つの参照がいつ役立つのでしょうか。 例: Dog a = new Dog(); Dob b = a; これが役立つ状況はありますか?でa表されるオブジェクトとやり取りしたいときはいつでも、これが使用するのに好ましいソリューションになるのはなぜaですか?

5
状態のないインスタンス化可能なクラスが非常に多いのはなぜですか?
C ++とJavaの世界には、状態のないインスタンス化可能なクラスがたくさんあります。 私は本当に人々がそれをする理由を理解することはできません。C++の無料の関数で名前空間を使用するか、Javaのプライベートコンストラクタと静的メソッドのみを持つクラスを使用できます。 私が考えることができる唯一の利点は、後で特定の状況で異なる実装が必要だと判断した場合、ほとんどのコードを変更する必要がないことです。しかし、それは時期尚早な設計の場合ではありませんか?それが適切になった場合に/後でクラスに変えることができます。 これは間違っていますか?すべてをオブジェクト(つまり、インスタンス化されたクラス)に入れないと、OOPになりませんか?それでは、なぜC ++とJavaの標準ライブラリに非常に多くのユーティリティ名前空間とクラスがあるのですか? 更新: これまでの仕事で確かに多くの例を見てきましたが、オープンソースの例を見つけるのに苦労しています。それでも、私は人々がなぜそれをするのか、それがどれほど一般的であるのか疑問に思っています。

3
Javaで文字列を連結すると、メモリにいくつの文字列が作成されますか?
Javaの不変文字列について尋ねられました。文字列に多数の "a"を連結する関数を書くことを任されました。 私が書いたもの: public String foo(int n) { String s = ""; for (int i = 0; i < n; i++) { s = s + "a" } return s; } その後、ガベージコレクションが発生しないと仮定して、このプログラムが生成する文字列の数を尋ねられました。n = 3に対する私の考えは 「」 「a」 「a」 「aa」 「a」 「aaa」 「a」 基本的に、ループの各反復で2つの文字列が作成されます。ただし、答えはn 2でした。この関数によってメモリ内に作成される文字列は何ですか?その理由は何ですか?
17 java  strings  object 

4
JavaScriptの関数の謎を解決できません
私は、Javascriptのカーテンシーンの背後にあるものを理解しようとしています。組み込みオブジェクト、特にオブジェクトと関数、およびそれらの間の関係の作成を理解することに固執しています。 Array、Stringなどのすべての組み込みオブジェクトがObjectの拡張(継承)であると読んだとき、Objectは作成された最初の組み込みオブジェクトであり、残りのオブジェクトはそれを継承すると仮定しました。しかし、オブジェクトは関数によってのみ作成できることを知ったとき、それは意味がありませんが、関数も関数のオブジェクトにすぎません。鶏と鶏のジレンマのように聞こえ始めました。 他の非常に紛らわしいことは、console.log(Function.prototype)関数を印刷console.log(Object.prototype)するのに、印刷するときにオブジェクトを印刷する場合です。Function.prototype関数がオブジェクトであることが意図されていたのになぜですか? また、Mozillaのドキュメントによれば、すべてのjavascript functionはFunctionオブジェクトの拡張ですが、あなたconsole.log(Function.prototype.constructor)が再び関数である場合はそうです。では、何かを使用して自分自身を作成するにはどうすればよいでしょう(Mind = blown)。 最後にFunction.prototype、関数ですが、doesをconstructor使用Function.prototype.constructorして関数にアクセスできます。つまりFunction.prototype、prototypeオブジェクトを返す関数です

4
Javaのクラス変数とインスタンス変数の違いは何ですか?[閉まっている]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して詳細を追加し、問題を明確にします。 4年前に閉鎖されました。 私はJavaが初めてなので、クラス変数とインスタンス変数の違いを理解したいと思っています。 例えば: class Bicycle { static int cadence = 0; int speed = 0; int gear = 1; } インスタンス変数とクラス変数はどう違うのですか?ここでどの変数がクラス変数であり、どの変数がインスタンス変数ですか?これはスコープにどのように影響しますか?
16 java  class  object  instance 

1
java.utilパッケージのスタックのオブジェクト制約言語(OCL)
私は試験が近づいています。私は過去の論文を調べて、何が期待できるかを考えています。私は次のものに少しこだわっていて、誰かがいくつかの例の答えを出すことができれば本当に感謝します。 次の各操作(java.utilパッケージのStackクラスに含まれる)のOCLに前提条件と事後条件を記述します。 (1)ブールempty()-このスタックが空かどうかをテストします (2)E peek()-スタックから削除せずに、このスタックの最上部にあるオブジェクトを調べます (3)E pop()-このスタックの一番上のオブジェクトを削除し、そのオブジェクトをこの操作の値として返します (4)E push(E item)-アイテムをこのスタックの一番上にプッシュします ここで、Eはスタック内の要素のタイプを示します。 私の試みは次のとおりです: Boolean empty() pre: none post: self -> IsEmpty() = true //should this be result -> IsEmpty() = true because it returns a boolean value? E peek() pre: self -> NotEmpty() = true post: result = ??? // I …
10 design  languages  object  ocl 

5
構成クラス/構造:パターンまたはアンチパターン?代替案?
プログラムに新しい構成オプションを追加すると、多くの場合、オプションを実行する必要がある場所にオプションを取得するという点で、大量の波及効果が生じる可能性があります。私が認識しているこれに対処する3つの基本的な方法があります。 すべての構成設定を、プリミティブとして明示的に必要とするプログラムの部分に渡します。これは最も明示的な方法であり、物事を最も分離する方法です。欠点は、これが冗長であり、もろいことです。 最も頻繁に使用される構成設定をグローバル/静的にします。これは最も簡単な方法ですが、距離を置いてアクションを導入し、テスト性を妨げ、構成が本当にグローバルであると仮定します(常に1つの構成のみが必要である)。 プログラム全体またはプログラム内の主要な懸念事項のすべての構成オプションを含む構成クラス/構造体を作成し、これを明示的に渡します。これは、(1)より明確ではありませんが、(2)より明確です。1つの関数呼び出しのみの設定を変更する場合は、構成オブジェクトを複製して、この1つの値を変更できます。これは、テストと実際の両方で役立ちます。ただし、必要のない関数に大量の情報を渡す可能性があり、configクラス/構造体の値を変更すると、離れた場所でアクションが発生する可能性があります。 (3)パターンとアンチパターンのどちらを検討しますか?アンチパターンの場合、代わりに何をしますか?

3
単一のオブジェクトが複数の変数よりも優先されますか?
タイトルに意味を込めるのはかなり大変でしたが、コードに入れるのは簡単です。 C ++ これは int offset_x = 10; int offset_y = 40; ... element.move(offset_x, offset_y); これよりも優先されますか? Vector<int> offset(10, 40); ... element.move(offset.x, offset.y); (Vector std::vectorはとは異なり、2Dベクトルです。このクラスには、やのようにnormalize()、ここでは不要な多くのメソッドがあります。これscale()には、より基本的なPointクラスが必要ですか?) JavaScript これは var offsetX = 10; var offsetY = 40; ... element.move(offsetX, offsetY); これよりも優先されますか? var offset = {x: 10, y: 40}; ... element.move(offset.x, offset.y);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.