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

システムを、モジュール方式で制御および操作できるオブジェクトのセットとしてモデル化できるようにする方法論

6
OOP言語に偏った後、Cプログラマーとして考えるには?[閉まっている]
以前は、オブジェクト指向プログラミング言語(C ++、Ruby、Python、PHP)しか使用していませんでしたが、Cを学習しています。言語の概念のない言語で物事を行う適切な方法を見つけるのは難しいと感じています。 「オブジェクト」。CでOOPパラダイムを使用することは可能ですが、Cイディオマティックな方法を学びたいと思います。 プログラミングの問題を解決するとき、私が最初にすることは、問題を解決するオブジェクトを想像することです。非OOP命令型プログラミングパラダイムを使用する場合、これをどのステップに置き換えますか?

5
独自のメソッドまたは別のクラスを介してオブジェクトを保存しますか?
オブジェクトを保存および取得したい場合、別のクラスを作成してそれを処理する必要がありますか、それともクラス自体で行う方が良いでしょうか?それとも両方を混ぜるか? OODパラダイムに従って推奨されるのはどれですか? 例えば Class Student { public string Name {set; get;} .... public bool Save() { SqlConnection con = ... // Save the class in the db } public bool Retrieve() { // search the db for the student and fill the attributes } public List<Student> RetrieveAllStudents() { // this …

6
「関数とデータ間の密結合」が悪いのはなぜですか?
この引用は、「Clojureの喜び」のp。32、しかし誰かが先週の夕食で私に同じことを言って、私はそれを他の場所でも聞いた: [A]オブジェクト指向プログラミングの欠点は、関数とデータの間の密結合です。 アプリケーションで不要な結合が悪い理由を理解しています。また、オブジェクト指向プログラミングであっても、可変状態と継承を避けるべきだと言っています。しかし、なぜクラスに関数を貼り付けるのが本質的に悪いのかはわかりません。 つまり、クラスに関数を追加すると、Gmailでメールにタグを付けたり、ファイルをフォルダーに貼り付けたりするように思えます。それはあなたが再びそれを見つけるのを助ける組織的なテクニックです。いくつかの基準を選択してから、同じようなものをまとめます。OOP以前は、プログラムはファイル内のメソッドのかなり大きな袋でした。つまり、関数をどこかに配置する必要があります。整理してみませんか? これが型に対するベール攻撃である場合、関数への入力および出力の型を制限することは間違っていると言うだけではありませんか?それに同意できるかどうかはわかりませんが、少なくともプロとコンタイプの安全性に関する議論には精通しています。これは、ほとんど別の懸念のように思えます。 確かに、時々それを間違え、機能を間違ったクラスに置きます。しかし、他の間違いと比較すると、これは非常に小さな不便さのようです。 そのため、Clojureには名前空間があります。OOPのクラスに関数を貼り付けることは、Clojureの名前空間に関数を貼り付けることとどのように異なりますか?クラスの関数は、必ずしもそのクラスのメンバーだけで動作するとは限らないことを忘れないでください。java.lang.StringBuilderを見てください。これは、すべての参照型で動作するか、オートボクシングを通じて、すべての型で動作します。 PSこの引用は、私が読んだことのない本を参照しています:Multiparadigm Programming in Leda:Timothy Budd、1995。

7
ソロジュニアデベロッパーとして進捗状況を確認するにはどうすればよいですか[終了]
私は現在、ソロのプライマリ開発者として、2人の会社で働いています。上司がクライアントを取得し、いくつかのpngデザインテンプレートをモックアップして、私に引き渡します。 このシステムはうまく機能しており、本当に楽しんでいます。 私が取り組んでいるプロジェクトの種類は、中小企業向けであり、通常はCMSシステムが必要です。最初から開発し、カテゴリ、タグ、製品などを追加/編集/削除するためにクライアント用にカスタマイズしたバックエンドを構築し、渡されたデザインテンプレートに従ってフロントエンドに出力します。時間が経つにつれて、ショッピングカート/注文機能やその他の一般的なeコマースタイプの機能により、プロジェクトの複雑さが増しました。 繰り返しますが、このシステムは正常に機能しており、本当に楽しんでいます。 私の問題は、プログラマーとしての個人的な成長です。プログラミングブログを読んだり、stackexchangeをチェックしたり、提案されたプログラミング本(現在のところ「The Pragmatic Programmer」で、これまでのところ本当に良い)を読んだり、脳のエクササイズ(lumosity.comとkhanacademy math問題)をしたり、たくさんの運動やその他の個人的な発達型の活動。 私は、フィードバック、批評を見逃していると感じずにはいられません。私の上司は素晴らしく、私の仕事に関して賞賛を決してneverしませんが、残念ながら彼は私のコードをチェックするのに忙しいか、正直なところ、彼の専門分野の1つではないと考えているため、フィードバックを提供できません。 私は何を間違っているのか、何を正しくしているのかを知りたい。コントローラーにそれほど多くのロジックを配置する必要がある場合、コードを十分に変調していますか? だから私がやったことは、小さな「家族予算」アプリを開発し、私が現在知っている方法と同じくらいきれいにそして効果的にそれをやろうとしたことです。 私が知りたいのは、このアプリを提出できる場所があり、ベテランの開発者にフィードバックを提供してもらうことです。「codereview.stackexchange」のような私のコードのサブセクションだけでなく、私が批判したいのは私のワークフロー全体です。 これは多くの質問であり、主なアドバイスはチーム内で仕事を探すことだと思います。これは確かに後の方で検討しますが、今のところは現在の仕事を続けたいと思います。雇用状況、しかしあまりにも多くの悪い習慣を開発したくない。 わかりやすくするためにさらに情報を提供できるかどうか、またはこのタイプの質問にこれが適切な場所でない場合は、事前に謝罪します。私はこのコミュニティがよりよく考えられた応答を促進すると感じたので、redditを使用したくありませんでした。

5
IDまたはオブジェクトを渡しますか?
ドメインエンティティを取得するビジネスロジックメソッドを提供する場合、パラメーターはオブジェクトまたはIDを受け入れる必要がありますか?たとえば、これを行う必要があります: public Foo GetItem(int id) {} またはこれ: public Foo GetItem(Foo foo) {} オブジェクト全体を渡すことをお勧めしますが、オブジェクトを取得し、IDのみを知っているこの場合はどうでしょうか?呼び出し元は空のFooを作成してIDを設定する必要がありますか、それともメソッドにIDを渡すだけですか?IDを除いて、着信Fooは空になるため、GetItem()メソッドにIDを送信するだけでFooを作成し、IDを設定する必要があるという呼び出し側の利点はありません。

9
オブジェクト指向コードを書くとき、私は常にデザインパターンに従うべきですか?
オブジェクト指向プログラムに考えられる設計パターンはありますか?これは、最近、のDoorクラスの実装を見たためですLock。これはテストの一部であり、答えは、コードがNull Objectパターンに従っていることです。 class Lock { public: virtual void close() = 0; virtual void open() = 0; virtual bool is_open() const = 0; virtual ~Lock() { } }; class DummyLock : public Lock { private: DummyLock(); DummyLock(const DummyLock&) = delete; DummyLock& operator=(const DummyLock&) = delete; private: void close() { } void …

11
コンストラクターのみのサブクラス:これはアンチパターンですか?
私は同僚と議論をしていましたが、最終的にはサブクラス化の目的に関して直感が矛盾することになりました。私の直感では、サブクラスの主な機能がその親の限られた範囲の値を表現することであれば、おそらくサブクラスであってはならないということです。彼は反対の直観を主張しました:サブクラス化はオブジェクトがより「特定的」であることを表し、したがってサブクラス関係がより適切であるということです。 私の直感をより具体的に言うと、親クラスを拡張するサブクラスがあるが、サブクラスがオーバーライドする唯一のコードがコンストラクターである場合(そう、コンストラクターは一般に「オーバーライド」しないことを知っています。本当に必要だったのは、ヘルパーメソッドです。 たとえば、このやや現実的なクラスを考えてみましょう。 public class DataHelperBuilder { public string DatabaseEngine { get; set; } public string ConnectionString { get; set; } public DataHelperBuilder(string databaseEngine, string connectionString) { DatabaseEngine = databaseEngine; ConnectionString = connectionString; } // Other optional "DataHelper" configuration settings omitted public DataHelper CreateDataHelper() { Type dataHelperType = DatabaseEngineTypeHelper.GetType(DatabaseEngine); DataHelper …

11
抽象クラス/メソッドは廃止されていますか?
以前は、多くの抽象クラス/メソッドを作成していました。その後、インターフェイスの使用を開始しました。 現在、インターフェイスが抽象クラスを廃止していないかどうかはわかりません。 完全に抽象クラスが必要ですか?代わりにインターフェースを作成してください。いくつかの実装を含む抽象クラスが必要ですか?インターフェイスを作成し、クラスを作成します。クラスを継承し、インターフェイスを実装します。追加の利点は、一部のクラスが親クラスを必要とせず、インターフェイスを実装するだけであることです。 それでは、抽象クラス/メソッドは廃止されていますか?

17
プログラミングスキルに自信を持たせるにはどうすればよいですか?[閉まっている]
プログラミングは私にとって異質ではありません。私は最初にマークアップ(HTML、今は笑わないでください)を12歳のときに始め、13歳のときに少しBASICを使いました(この時点でフローチャート、擬似コードについて多くを知っていました)が、その後、高校での生物学。したがって、C、Javaなどの言語の「実際の」プログラミング知識を逃していました。UG BEのCSを取り上げました(BSに似ていますが、より理論的な方法です)。私は自分でCとC ++を(程度は低いが)学びました(私の教授は完全な痛みであり、クラスはコードジョックでいっぱいでした(学校で既に学んでいたため、クラスに注意を払わず、私のようなより低い定命の者にクラスに注意を払わせてください))、素晴らしい加算または乗算プログラム(今では幼稚園児でさえも) 私の主な問題は、限られたプログラミングスキルに常に不十分で首を絞められ、コードジョックに軽視されていることです(信じられませんが、私はこのサイトに何年も前に出会ったことがありますが、実際に投稿する勇気を築くことができただけです)質問)そして、時にはその無能さをめぐってさえ落ち込んでいます。ほとんどの人は、プログラミングは必ずしも言語ではなく、その人の心の状態と問題/問題を解決するために使用する技術に関するものだと言います。私はそのような感情に同意しますが、そのような「心の状態」を獲得することはできますか?そのような場合、「プログラミング/コーディング」にどのようにアプローチする必要があり、「Zen」を達成するための最も設定された方法と手順がある場合コーディング」。どうすればいいですか?また、ある聖人がこの虐げられた$#!^の一部を指導したいと思っても害はありません。 PS私は自分の時間の価値があると考える人に永遠に感謝し、ボーナスとして彼らの後に出荷する私の最初のソフトウェアの名前を付けます。(私が1つを出荷するようになったら、つまり) TL; DR:「プログラミング/コーディング」を実際に学んだことはありません。私が試みても問題を解決できません。助けて!

5
メソッドを呼び出すことができると定義するよりも、メソッドをオーバーライドできると定義する方が強いコミットメントはありますか?
から:http : //www.artima.com/lejava/articles/designprinciples4.html エーリッヒガンマ:10年経った今でも、それは真実だと思います。継承は、動作を変更するクールな方法です。しかし、サブクラスは、オーバーライドするメソッドが呼び出されるコンテキストについて簡単に推測できるため、脆弱であることがわかっています。私がプラグインするサブクラスコードが呼び出される暗黙的なコンテキストのため、基本クラスとサブクラスの間には密接な結合があります。構成には、より良い特性があります。結合は、いくつかの小さなものをより大きな何かにプラグインするだけで減少し、大きなオブジェクトは小さなオブジェクトをコールバックします。APIの観点から、メソッドをオーバーライドできることを定義することは、メソッドを呼び出すことができることを定義することよりも強力です。 私は彼が何を意味するのか理解していません。誰か説明していただけますか?

2
無制限の量のパラメーターを取るメソッドが、より少ないパラメーターでオーバーロードを定義することが多いのはなぜですか?
たとえばSystem.IO.Path.Combine、.NET のメソッドには次のオーバーロードがあります。 Combine(params String[]) Combine(String, String) Combine(String, String, String) Combine(String, String, String, String) 最後の3つのポイントは何ですか? 最初のものはそれらをすべてカバーしますが、よく見るとparamsキーワードを使用しています。Combine(String, String).NET 4までの唯一のバージョンであったため、下位互換性の議論はバリアントのみを対象としています。

8
オブジェクトの機能は、実装するインターフェースによってのみ識別されるべきですか?
C#のis演算子とJavaのinstanceof演算子を使用すると、オブジェクトインスタンスが実装しているインターフェイス(または、より基本的にはその基本クラス)で分岐できます。 インターフェイスが提供する機能に基づいた高レベルの分岐にこの機能を使用することは適切ですか? または、オブジェクトが持つ機能を記述するためのインターフェースを提供するために、基本クラスがブール変数を提供する必要がありますか? 例: if (account is IResetsPassword) ((IResetsPassword)account).ResetPassword(); else Print("Not allowed to reset password with this account type!"); 対 if (account.CanResetPassword) ((IResetsPassword)account).ResetPassword(); else Print("Not allowed to reset password with this account type!"); 機能の識別にインターフェイス実装を使用することには落とし穴がありますか? この例は単なる例でした。もっと一般的なアプリケーションについて考えています。

8
オブジェクト指向プログラミングを実際に使用するのはいつですか?[閉まっている]
私は基本的に文字列を操作するプログラムをPythonで書いていますが、OOPの原則を使用してそれを行うべきかどうか疑問に思っていました。クライアントは、彼はコードを気にかけず、ただやりたいと言っていました。 私はオブジェクト指向のコードは定義によるクリーナーではなく、逆にオブジェクト指向でないコードは定義によるくだらないものではないことを知っています。私が尋ねている質問は、多少意見に基づいているかもしれませんが、私が知らないいくつかのルールがあるかもしれません。 何をすべきかについてのさらなる情報: .csvファイルを解析し、構成ファイルに基づいてデータを処理します(列は異なる場合があります-列の数や保持するデータなど) 上記の処理されたデータを使用して、新しいカスタム形式のデータ(または上記の値のいくつかに基づいた複数のファイル)を作成します 最後にフォーマットされたデータを使用して、XMLファイルを作成します。 XMLコンテンツに基づいてXMLファイルを複数に分割します アプリケーションはCLIベースでなければなりません もちろん、イベントの記録、CLI引数の解析などのような他のこともあります。 さて、これはまったく大きな/ハードなアプリケーションではなく、ほぼ終了していますが、開発プロセス全体を通して、OOPを使用して行うべきかどうかを自問し続けました。 したがって、私の質問は次のとおりです。アプリケーションでOOPを使用するタイミングをどのように知り、決定しますか。

5
Java Swingクラスをいつ拡張する必要がありますか?
継承の実装に関する私の現在の理解では、IS-A関係が存在する場合にのみクラスを拡張する必要があります。親クラスがさらに異なる機能を持つより具体的な子タイプを持つことができるが、親で抽象化された共通要素を共有する場合。 私のJava教授が私たちにすべきだと勧めていることのために、私はその理解に疑問を抱いています。彼は、JSwing私たちがクラスで構築しているアプリケーションのために 一つは、すべての拡張する必要がありますJSwingクラス(JFrame、JButton、JTextBox(部品サイズ、部品ラベルなどのような)別のカスタムクラスに、など)と、それらに関連するGUIカスタマイズを指定します これまでのところこれでいいのですが、彼はさらに、すべてのJButtonが独自のカスタム拡張クラスを持つべきであり、唯一の識別要素はラベルであるとアドバイスしています。 たとえば、GUIに2つのボタンOkayとCancelがある場合。彼は、以下のように拡張することを推奨しています。 class OkayButton extends JButton{ MainUI mui; public OkayButton(MainUI mui) { setSize(80,60); setText("Okay"); this.mui = mui; mui.add(this); } } class CancelButton extends JButton{ MainUI mui; public CancelButton(MainUI mui) { setSize(80,60); setText("Cancel"); this.mui = mui; mui.add(this); } } ご覧のとおり、唯一の違いはsetText機能にあります。 それでは、この標準的な慣習はありますか? ところで、これが議論されたコースは、Javaのベストプログラミングプラクティスと呼ばれています [教授からの返信] そこで私は教授と問題について話し合い、答えに挙げられているすべての点を挙げました。 彼の正当性は、サブクラス化がGUI設計標準に従って再利用可能なコードを提供することです。たとえば、開発者が1つのウィンドウでカスタムボタンOkayとCancelボタンを使用している場合、同じボタンを他のウィンドウにも配置する方が簡単です。 理由はわかりますが、それでも継承を利用してコードを脆弱にしているだけです。 後で、開発者はボタンを誤って呼び出して変更setTextする可能性がありOkayます。その場合、サブクラスは単に迷惑になります。

5
別のクラスのClassCollectionを作成することをお勧めしますか?
Carクラスがあると言いましょう: public class Car { public string Engine { get; set; } public string Seat { get; set; } public string Tires { get; set; } } 駐車場に関するシステムを作成しているとしましょう。私は多くのCarクラスを使用するので、クラスを作成しCarCollectionますFindCarByModel。 public class CarCollection { public List<Car> Cars { get; set; } public Car FindCarByModel(string model) { // code here return new Car(); …

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