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

オブジェクトのタイプを宣言するためのテンプレート。

4
「クラスの代わりにマップを使用してデータを表現する」-リッチヒッキー
でリッチヒッキーことで、このビデオ、Clojureの作成者、彼はJavaで行ったように、代わりにそれを表現するためにクラスを使用してのデータを表現するためにマップを使用することを助言します。単にマップとして表されている場合、APIユーザーはどのように入力キーを知ることができるのか、私はそれがどのように改善できるのか理解していません。 例: PersonAPI { Person addPerson(Person obj); Map<String, Object> addPerson(Map<String, Object> personMap); } 2番目の関数では、APIユーザーはどのようにして人を作成するための入力を知ることができますか?
19 java  design  class  clojure  map 

1
Pythonでtkinter GUIをプログラミングするときにクラスを使用する理由
私は主にPythonでプログラミングし、TkinterでいくつかのGUIをプログラミングしました。これまでに見たすべてのチュートリアルでは、GUIのクラスを定義して使用することを推奨していますが、GUIはクラスなしで手順のみを使用して問題なく実行されます。 クラスを使用する理由 私の観点からは、単純に余分な複雑なレイヤーと不要なコードであるように思えます。
19 python  gui  class 

2
Pythonのクラスとモジュール
Pythonにはre、特定のアクションセットを実行する多くのモジュール(など)があります。このモジュールの関数を呼び出して結果を取得することができ、モジュール全体としてその背後にある考えがあります(この場合、正規表現を処理します)。 クラスはほとんど同じことを行うように見えますが、モジュールよりもかなり多くのプロパティを使用するようです。 モジュールとクラスとの違いは何ですか?(私はモジュールをサブクラス化できないことを知っていますが、それはそれですか?)モジュールの代わりにクラスを使用する必要があるのはいつですか?
19 class  modules 

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

4
クラスファイルとインターフェイスファイルを整理するにはどうすればよいですか?
OK ..すべての議論の後、私が扱っている具体的な例をより良く反映するために質問を少し変更しています。 私は2つのクラスModelOneとを持っていますModelTwo。これらのクラスは同様のタイプの機能を実行しますが、互いに無関係です。しかし、私はCommonFunc両方ModelOneで実装されているいくつかのパブリック機能を含む3番目のクラスをModelTwo持っていDRYます。2つのモデルはModelMainクラス内でインスタンス化されます(それ自体はより高いレベルなどでインスタンス化されますが、このレベルで停止しています)。 私が使用しているIoCコンテナはMicrosoft Unityです。私はそれの専門家であるふりはしませんが、インターフェイスのクラスとコンテナをクラスに登録し、具体的なクラスが必要な場合は、特定のインターフェイスに一致するオブジェクトをIoCコンテナに尋ねることです。これは、Unityからインスタンス化するすべてのオブジェクトに対して、一致するインターフェイスが必要であることを意味します。各クラスは異なる(重複しない)機能を実行するため、これは、インターフェイスとクラス1の比率が1:1であることを意味します。しかし、それは私が書くすべてのクラスのためにインターフェースを慎重に書いているという意味ではありません。 したがって、コード的には2になります。 public interface ICommonFunc { } public interface IModelOne { ICommonFunc Common { get; } .. } public interface IModelTwo { ICommonFunc Common { get; } .. } public interface IModelMain { IModelOne One { get; } IModelTwo Two { get; } .. } public …

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

6
フレンドクラスを使用したC ++の単体テストプライベートメソッド
これは議論の余地があることを知っていますが、これが私にとって最良の選択肢であると仮定しましょう。私はこれを行うための実際のテクニックは何なのかと思っています。私が見るアプローチはこれです: 1)テストするメソッドのクラスのフレンドクラスを作成します。 2)friendクラスで、テストされたクラスのプライベートメソッドを呼び出すパブリックメソッドを作成します。 3)friendクラスのパブリックメソッドをテストします。 上記の手順を説明する簡単な例を次に示します。 #include <iostream> class MyClass { friend class MyFriend; // Step 1 private: int plus_two(int a) { return a + 2; } }; class MyFriend { public: MyFriend(MyClass *mc_ptr_1) { MyClass *mc_ptr = mc_ptr_1; } int plus_two(int a) // Step 2 { return mc_ptr->plus_two(a); } private: …

7
シングルトン、抽象クラス、インターフェースの役割は何ですか?
私はC ++でOOPを勉強しており、これら3つの概念の定義を知っていても、それをいつどのように使用するかを本当に理解できません。 このクラスを例に使用してみましょう。 class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string parameter){this->name=parameter;} void set_age (int parameter){this->age=parameter;} string get_name (){return this->name;} int get_age (){return this->age;} }; 1. シングルトン クラスが1つのオブジェクトのみを機能させるという制限はどのように機能しますか? CANあなたは持っているだろう、クラス設計ONLY 2のインスタンスを?それとも3? WHEN /必要な推奨シングルトンを使用していますか?それは良い習慣ですか? 2. 抽象クラス 私の知る限り、純粋な仮想関数が1つしかない場合、クラスは抽象になります。だから、追加 virtual void print ()=0; しますよね? なぜあなたは、そのオブジェクト必要とされていないクラスが必要でしょうか? …

5
継承とnull値の追加プロパティ
オプションのフィールドを持つクラスの場合、継承またはnull許容プロパティを使用する方が良いでしょうか?この例を考えてみましょう: class Book { private String name; } class BookWithColor extends Book { private String color; } または class Book { private String name; private String color; //when this is null then it is "Book" otherwise "BookWithColor" } または class Book { private String name; private Optional<String> color; //when isPresent() …
12 java  inheritance  class  null 

5
サブクラス型を要求しないようにするための優れた設計方法は何ですか?
プログラムがオブジェクトのクラスを知る必要がある場合、通常は設計上の欠陥を示しているので、これを処理するための適切なプラクティスを知りたいと読みました。Circle、Polygon、Rectangleなど、さまざまなサブクラスを継承するShapeクラスを実装しています。また、CircleがPolygonまたはRectangleと衝突するかどうかを知るためのさまざまなアルゴリズムがあります。次に、Shapeの2つのインスタンスを取得し、一方が他方と衝突するかどうかを知りたいと仮定します。そのメソッドでは、どのアルゴリズムを呼び出すべきかを知るために衝突しているオブジェクトがどのサブクラスタイプであるかを推測しますが、これは悪いデザインや練習?これが私が解決した方法です。 abstract class Shape { ShapeType getType(); bool collide(Shape other); } class Circle : Shape { getType() { return Type.Circle; } bool collide(Shape other) { if(other.getType() == Type.Rect) { collideCircleRect(this, (Rect) other); } else if(other.getType() == Type.Polygon) { collideCirclePolygon(this, (Polygon) other); } } } これは悪いデザインパターンですか?サブクラス型を推測せずにこれをどのように解決できますか?

3
`Employee`クラスはどのように設計されるべきですか?
私は従業員を管理するためのプログラムを作成しようとしています。ただし、Employeeクラスの設計方法を理解することはできません。私の目標は、Employeeオブジェクトを使用してデータベース上の従業員データを作成および操作できるようにすることです。 私が考えた基本的な実装は、この単純な実装でした: class Employee { // Employee data (let's say, dozens of properties). Employee() {} Create() {} Update() {} Delete() {} } この実装を使用すると、いくつかの問題が発生しました。 ID従業員のは、私は、新しい従業員を記述するためのオブジェクトを使用するのであれば、何があるだろう、データベースによって与えられていないID既存の従業員を表すオブジェクトはながら、まだ格納するだろう持っていますID。そのため、オブジェクトを説明するプロパティと、オブジェクトを説明しないプロパティがあります(SRPに違反していることを示すことができますか?新しいクラスと既存の従業員を表すのに同じクラスを使用しているため...)。 Create一方、この方法は、データベース上の従業員を作成することになっているUpdateとは、Delete既存の従業員(ここでも、上で動作するようになっているSRP ...)。 「作成」メソッドにはどのようなパラメーターが必要ですか?すべての従業員データまたはEmployeeオブジェクトのための数十のパラメーター? クラスは不変であるべきですか? どのようにUpdate動作しますか?プロパティを取得してデータベースを更新しますか?または、「古い」オブジェクトと「新しい」オブジェクトの2つのオブジェクトを取り、それらの違いでデータベースを更新しますか?(答えは、クラスの可変性に関する答えと関係があると思います)。 コンストラクターの責任は何ですか?必要なパラメーターは何ですか?idパラメーターを使用してデータベースから従業員データを取得し、プロパティを設定しますか? それで、あなたが見ることができるように、私は私の頭の中に少し混乱を持っています、そして、私は非常に混乱しています。そのようなクラスがどのように見えるべきかを理解してください。 このような頻繁に使用されるクラスが一般的にどのように設計されているかを理解するためだけに、意見を望まないことに注意してください。

4
ネストされたクラス:便利なツールまたはカプセル化違反?
だから、私はこれらを使用すべきかどうかについて、まだフェンスの上にいます。 カプセル化の極端な違反を感じますが、コードの柔軟性を高めながら、ある程度のカプセル化を達成できることがわかりました。 以前のJava / Swingプロジェクトでは、ネストされたクラスをある程度使用していましたが、C#で他のプロジェクトに移動したため、使用を避けています。 ネストされたクラスについてどう思いますか?

3
クラスコンストラクターにデータ(対動作)を挿入するとはどういう意味ですか、なぜそれが悪い習慣と見なされているのですか?
私はレモヤンセンの「Learning TypeScript」という本を読んでいます。1つのセクションで、作成者は、Modelクラスの作成方法を含む非常に単純な概念実証MVCフレームワークの作成方法を説明し、次のように述べています。 モデルには、使用するWebサービスのURLを指定する必要があります。ModelSettingsという名前のクラスデコレータを使用して、使用するサービスのURLを設定します。コンストラクターを介してサービスURLを注入することもできますが、クラスコンストラクターを介して(動作ではなく)データを注入することは悪い習慣と見なされています。 私はその最後の文を理解していません。特に、「データを挿入する」とはどういう意味かわかりません。過度に単純化された例を使用したJavaScriptクラスのほとんどすべての導入では、データがパラメーターを介してコンストラクターに導入(「注入」)されているようです。例えば: class Person { constructor(name) { this.name = name; } } 私は確かにname行動ではなくデータと考えています。この種の例には、コンストラクタパラメータとして普遍的に含まれており、これが悪い習慣であるという言及は決してありません。したがって、上記の引用にある「データ」または「注入」などの意味を誤解していると思います。 JavaScript / TypeScriptでデコレーターをいつ、どこで、どのように使用するかについての説明を含めることができます。私は、コンセプトが私が求める理解に密接に関連していると強く信じています。ただし、さらに重要なこととして、クラスコンストラクターを介してデータを挿入することの意味と、それがなぜ悪いのかをより一般的に理解したいと思います。 上記の引用をより詳しく説明すると、これは状況です。Modelこの例では、NASDAQ用とNYSE用の証券取引モデルを作成するために使用されるクラスが作成されます。各モデルには、生データを提供するWebサービスまたは静的データファイルのパスが必要です。この本は、コンストラクター・パラメーターではなく、デコレーターをこの情報に使用する必要があると述べており、次のようになります。 @ModelSettings("./data/nasdaq.json") class NasdaqModel extends Model implements IModel { constructor(metiator : IMediator) { super(metiator); } ... } 単にコンストラクタのパラメータとしてではなく、デコレータを介してサービスURLを追加する必要がある理由を理解していません。たとえば、 constructor(metiator : IMediator, serviceUrl : string) {...

5
C ++コードでクラスの相互依存を解決するにはどうすればよいですか?
私のC ++プロジェクトには、2つのクラスとがParticleありContactます。でParticleクラス、Iは、メンバ変数有するstd::vector<Contact> contactsのすべての連絡先含まParticleオブジェクトを、対応するメンバ関数をgetContacts()とaddContact(Contact cont)。したがって、「Particle.h」には「Contact.h」を含めます。 ではContact、クラス、私はのためのコンストラクタにコードを追加したいContactことが呼び出すParticle::addContact(Contact cont)ように、contacts両方のために更新されてParticleいる間でオブジェクトContactオブジェクトが追加されています。したがって、「Contact.cpp」に「Particle.h」を含める必要があります。 私の質問は、これが許容できる/適切なコーディングプラクティスであるかどうかであり、そうでない場合は、達成しようとしていることを実装するためのより良い方法は何ですか(簡単に言えば、新しい連絡先のたびに特定の粒子の連絡先のリストを自動的に更新します)創造された)。 これらのクラスは、NetworkN個の粒子(std::vector<Particle> particles)とNc個の接触(std::vector<Contact> contacts)を持つクラスによって結合されます。しかし、私は次のような関数を使用できるようにしたかったのです。この場合、クラスにparticles[0].getContacts()そのような関数があっても大丈夫ですParticleか、またはこの目的のためにC ++でより良い関連付け「構造」があります(別のクラスで使用されている2つの関連クラスの) 。 私はこれにどのように取り組んでいるのか、ここで視点のシフトが必要かもしれません。2つのクラスはNetworkクラスオブジェクトによって接続されているため、接続情報をNetworkオブジェクトによって完全に制御するのが一般的なコード/クラス編成ですか(パーティクルオブジェクトはその連絡先を認識してはならず、その結果、getContacts()メンバーを持つべきではありません)関数)。次に、特定の粒子が何に接触しているかを知るために、Networkオブジェクトを介して(たとえばを使用してnetwork.getContacts(Particle particle))その情報を取得する必要があります。 Particleオブジェクトがその知識を持つこと(つまり、NetworkオブジェクトまたはParticleオブジェクトのいずれかを介して、その情報にアクセスするための複数の方法があること)は、あまり一般的ではない(おそらく推奨されない)C ++クラス設計でしょうか)?


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