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

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

7
オブジェクト指向に必要な機能は何ですか?
言語またはライブラリが「オブジェクト指向」として定義されるために、言語またはライブラリが提供しなければならない機能とは正確には何なのかと思います。オブジェクト指向は、缶は、多かれ少なかれ、中に達成されることを何かである任意のまともな機能を備えた汎用プログラミング言語?それとも、オブジェクト指向プログラミングをサポートしていることを具体的に宣伝している言語でのみ達成できるものですか? たとえば、次のCコードを見てください。 SDL_Surface* screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE); SDL_FreeSurface( screen ); またはここで説明したコード。 さて、上記のコードは継承、ランタイムポリモーフィズム(?)、仮想関数などを使用していません。しかし、私にはほとんどOOPのようです。 オブジェクト指向は、オブジェクト、クラス、構造体など、プログラミング言語またはライブラリによって提供される特別なパターンや機能を必要としない、作成および破壊可能なデータ構造に基づくコードを単に記述しているのですか?

4
オブジェクトの作成は、暗黙的または明示的にファイルを作成する必要がありますか?
私は、ある形式のファイルを読み取り、別の形式のファイルを作成することを唯一の目的とするオブジェクトを作成しています。 オブジェクトの初期化中に出力ファイルを暗黙的に作成するのが最善ですか、それともユーザーがこのファイルを作成するかを選択できるパブリックメソッドを用意するのが最善ですか?

3
オブジェクト指向の思考プロセスとは何ですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 私は過去数ヶ月間、ZendのMVC実装と組み合わせてOOPを研究してきました。私は一般的に、プログラミングにはかなり新しいですが、私は物事に必ず私が理解することを意味私のための「正しい」方法で、学ぶべきだと強く感じ、なぜ物事は彼らが道をやっているし。つまり、何かを行う方法(何かを言う、音楽など)を学ぶ上で、何かを行う方法を学ぶ最善の方法は、そもそもなぜそのように行われるのかを知ることであることがわかりました。 とにかく、私は自分のビジネスモデル(つまりMVCのM)を開発する方法を理解するのに非常に苦労してきました。OOPを一般的に理解していないからではないと判断しました。数ヶ月、私は概念を理解することは非常に難しいとは思いません。私が研究した例は、実際には非常に直感的です。私の問題は、私自身の問題をオブジェクト指向のソリューションに変換するプロセスにあると思います。本の例(私がこれまでに読んだもの)は明白すぎるため、問題をオブジェクトに変換するプロセスはそれほど難しくありません。私が見落としているのは、高レベルの抽象化されたプロセスです。すべてのオブジェクト指向ソリューションが最高レベルで回答する必要があるステップまたは質問のある種のリスト。 このようなプロセスを5ステップ以内で説明する必要がある場合、それらはどのようなもので、その理由は何ですか。問題をオブジェクト指向のソリューションに変換する最も効果的なプロセスは何ですか?

1
機能分解は本当にアンチパターンですか?
私が読んだ最悪のアンチパターンを読んでいるときに、この投稿のリンクをクリックして、アンチパターンに関するWebサイトにアクセスしました。 そして、http://sourcemaking.com/antipatterns/functional-decompositionのページは私に不思議に思いました。 このアンチパターンはどれほどひどいですか、それともアンチパターンですか?今日私はほとんどOOPプログラミングを行っていますが、Javaのような純粋なOOPのすべての言語や、それらがもたらす設計慣行にもまだ気が進まないためです。コードを書いている間も、関数型プログラミングにはいくつかの特徴があります。 そして、これは質問を持ち出しました、私はOOP + Functionalスタイルに固執することによって間違っていますか、それとも業界では一般的であり、実際にはそれほど悪いことではありませんか? 私が経験から知っていることは、OOP + Functionalスタイルは純粋なOOP開発者と完全には互換性がないということです。しかし、同時に、OOP開発者はOOP +機能開発に問題を抱えていますが、反対意見は、OOPソリューションは非常に頻繁に設計されすぎて使用が困難であり、私の経験から、少しも簡単ではなく、実際には非常に深刻なバグを隠すためにいくつかの盲点を導入しました。 したがって、これらのトピックについて同僚と話し合ったとしても、どの方法も実際には完璧ではないという結論に達しました。そして、私はまだ質問に答えられていません。 OOP問題は、同じスレッド内の別の投稿からのリンクによっても強化されました。リンクは、JavaスタイルのOOP http://chaosinmotion.com/blog/?p=622にあります。 では、関数型プログラミングとOOPを混合することに対する一般的な態度はどのようなものでしょうか。そして、開発者が達成するために努力すべきバランスは何ですか?

3
MVCモデルをDBから疎結合にしますか?
私はコードをテスト可能な状態に保ち、現在のMVCフレームワークの依存性注入戦略を採用することを決定しました。 しかし、デザインパターンのマスターとはほど遠いので、モデルをデータベースコネクタクラスから可能な限り疎結合に保つための適切な方法を理解するのに苦労しています。 これはどのように行うことができますか? この質問では物理的なコードを提供していなかったので、上記の問題を理解する方向に私を導くことができるいくつかのロジック/コードの例または情報に本当に感謝します。

2
UIプログラミングに適したパラダイム
これは、OOPはGUIプログラミングの正しいパラダイムではないと誰かが述べたOOPテクノロジーの死のコメントから来る、より具体的な質問(または実際には2つですが、それらは関連しています)です。 そことここでコメントを読んで、まだ学ぶべきことがあると感じています。どのプログラミングパラダイムが適切であると見なされ、なぜ他のパラダイムよりも優れているのでしょう(例として、例を示してください)。 タイトルと質問からtk-exampleを削除しました

8
OOPテクノロジーの死[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 アスペクト指向プログラミングについて何度も聞いたことがありますが、そのほとんどはプログラミングにおける「次世代」のテクノロジーであり、OOPを「殺す」予定です。 正しいですか?OOPは死ぬのでしょうか、それともその理由は何でしょうか?

5
あなたは他の言語パラダイムを学ぶことによってあなたのプログラミングスキルを向上させることができますか?
もしそうなら、問題が別のパラダイム/言語/テクノロジーにある場合でも、新しいパラダイムを学ぶことでプログラミング問題を解決するためのアプローチがどのように変わったのか教えていただけますか? 特定の方法で教えていただければ、X(つまり、JAVA / C#/ C ++)プログラミングスキルは、Y(つまり、Scheme / Prolog / Lisp)を学ぶことによってどのように改善されたのでしょうか。 また、優れたプログラマーになるために最も役立つパラダイムは何ですか? 私の経験は構造化された-OOP、命令的-手続き型であり、ある程度テンプレートメタプログラミングですが、私の目標は別の言語を学ぶことではなく、問題を解決するためのさまざまなアプローチを学ぶことです。 ありがとう!

5
一般化よりも構成を優先することをどうやって知ることが常に正しい選択でしょうか?
オブジェクトが物理的に存在するかどうかに関係なく、さまざまな方法でモデリングすることができます。多くの場合、一般化または合成を任意に使用できます。ただし、「一般化よりも構成を優先する」というGoFの原則により、構成を使用するようにガイドされます。したがって、たとえばラインをモデル化する場合、Point(一般化)を拡張する代わりに、タイプPoint(構成)の2つのメンバーPointAおよびPointBを含むクラスを作成します。これは、オブジェクトが通常ははるかに複雑であるにもかかわらず、モデル化するための構成または継承を任意に選択できる方法の単純化された例にすぎません。 これが正しい選択であることをどのように知ることができますか?少なくとも、それが間違っている場合に実行すべき大量のリファクタリングが存在する可能性があるため、問題になりますか?

6
オブジェクト指向システムで、クラスではなく(Cスタイルの)構造体を選択するとしたら、どこを選択すればよいでしょうか。
Cおよび他の多くの言語では、struct構造(または同様の方法)を作成するためのキーワードが提供されています。これらは(少なくともCでは)クラスのような単純化された観点からですが、ポリモーフィズム、継承、メソッドなどはありません。 Cスタイルの構造体を持つオブジェクト指向(またはマルチパラダイム)言語を考えてみてください。クラスではなく、どこで選びますか?現在、クラスはOOPでそれらの目的を置き換えるように見えるので、それらがOOPで使用されるとは思われませんが、オブジェクト指向プログラムのクラスよりも優先される可能性のある状況や、どのような状況にあるのでしょうか。そのような状況はありますか?

4
チェスエンジンの記述に使用するパラダイムはどれですか。
チェスゲームエンジンを作成する場合、どのプログラミングパラダイム(OOP、手続き型など)を使用し、なぜそれを選択するのでしょうか。チェスエンジンとは、現在のボードを評価し、コンピューターの次の動きを決定するプログラムの部分を意味します。 チェスエンジンを書くのは楽しいかもしれないと思ったので、質問します。それから、関数型プログラミングを学ぶためのプロジェクトとしてそれを使うことができると思いました。次に、いくつかの問題が機能的パラダイムにあまり適していないことに気付きました。それから、これは良い議論の餌になるかもしれないと私は思いました。

4
なぜそんなに多くのプログラマーがオブジェクト有病率レイヤーを絶対に嫌うのですか?
普及率は、バイナリシリアル化と先行書き込みログに基づいて、メモリ内オブジェクトモデルにACIDプロパティを提供する簡単な手法です。それはこのように動作します: スナップショットから始めます。オブジェクトモデルをシリアル化し、ファイルに書き込みます。 ジャーナルファイルを作成します。オブジェクトモデルへの呼び出しごとに、呼び出しとその引数をシリアル化します。 ジャーナルが大きくなりすぎた場合、シャットダウンしている場合、またはその他の理由で便利な場合は、チェックポイントを実行します。新しいスナップショットを書き込み、ジャーナルを切り捨てます。 クラッシュまたはパワーヒットからロールバックまたは回復するには、最後のスナップショットをロードし、ジャーナルに記録されたすべての呼び出しを再実行します。 この作業を行うために必要な予防策は次のとおりです。 可変オブジェクト参照をエスケープさせたり、普及層に入れたりしないでください。RPCを実行しているかのように、何らかのプロキシまたはOIDスキームが必要です。(これは初心者によくある間違いであり、「洗礼問題」と呼ばれています。) 呼び出しから到達可能なすべてのロジックは完全に確定的でなければならず、ビジネスロジックにとって意味のあるI / OまたはOS呼び出しを実行してはなりません。診断ログへの書き込みはおそらく問題ありませんが、システム時刻を取得したり、非同期デリゲートを起動したりすることは、通常はできません。これは、別のマシンまたは別の時間に復元された場合でも、ジャーナルがまったく同じように再生されるようにするためです。(ほとんどの普及コードは、トランザクションのタイムスタンプを取得するための代替時間呼び出しを提供します。) ライターの並行性は、ジャーナルの解釈にあいまいさをもたらすため、禁止されています。 それは... 人々はそれにあまり適していない*プロジェクトにそれを使用しようとした後、彼らのために悪い味を開発しましたか? クラウス・ヴエステフェルトの激しい支持 は人々を止めましたか? 命令型プログラミングモデルが好きな人は、I / Oを計算から分離することを嫌い、代わりに計算をI / Oおよびスレッド呼び出しでインターリーブすることを好みますか? 普及層は概念的にシンプルで、フレームワークの特性に密接に結びついているため、通常はプロジェクト用にカスタムロールされ、それにより、異質/非標準/危険なものになりますか? あなたがやらないように注意しなければならないことをまっすぐに保つのはあまりにも難しいですか? 初心者は、学校で書くことを学んだ2層データベース駆動型アプリとは異なるものに直面すると、爆発するように見えるだけですか?;) * RAM内データセット全体のフィットは、あなたは作家の同時実行を必要としない、とあなたは、データウェアハウスに、アドホッククエリ、レポート、またはエクスポートを行う必要はありません。SQLiteへの謝罪により、普及は保存ファイルの改善であり、Oracleの代替ではありません。

4
静的メソッドを介してオブジェクトを渡すことが有利なのはなぜですか?
オブジェクトでメソッドを呼び出すよりも、静的メソッドを使用してオブジェクトへの参照をパラメーターとして渡すほうが有利なのはなぜですか? 私の意味を明確にするために、次のクラスを検討してください。 public class SomeClass { private double someValue; public SomeClass() { // Some constructor in which someValue is set } public void incrementValue() { someValue++; } } 静的メソッドを使用したこの代替実装と比較して: public class SomeClass { private double someValue; public SomeClass() { // Some constructor in which someValue is set } public static …

1
オブジェクト指向プログラミングでは、関数型プログラミングと比較して単体テストが難しいのはなぜですか?
このシリーズを進めています。作者は、オブジェクト指向プログラミングでは状態が維持されるため、単体テストを書くのは難しいと述べています。彼はまた、関数型プログラミングは(常にではない)状態を維持しないので、単体テストを書く方が簡単だとも言っています。この問題を示す例は見当たりませんでした。これに該当する場合、オブジェクト指向プログラミングと関数型プログラミングの単体テストを比較する例を教えていただけますか?

1
多層プロジェクトでは、インターフェイスをどこに定義する必要がありますか?
3つのサブプロジェクト(データアクセスプロジェクト、ビジネスロジックプロジェクト、プレゼンテーションプロジェクト)で構成される多層プロジェクトがあります。インターフェイスをどこに定義すればよいですか?DALとBLLの両方で定義されたインターフェイスがあるはずだと思います。インターフェイスに基づく「テスト」データを使用してビジネスロジックレイヤーをテストする状況では、おそらく、インターフェイス? これをどのように配置すべきかに関するベストプラクティスまたはアイデアはありますか?

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