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

このタグは、ハードウェアアブストラクション(Windowsが異なるハードウェア上でも同じAPIを使用する方法など)、またはソフトウェアによってユーザーレベルのプログラムから現実が分離されているその他の方法のいずれかを参照して使用します。これはエミュレーションには使用しないでください。

1
コンピューティングのレベルを理解する
すみません、私の混乱した質問のために。ポインタを探しています。 これまで私はほとんどアプリケーション層でJavaとPythonを使用しており、オペレーティングシステムとハードウェアについては漠然とした知識しかありませんでした。コンピューティングの低レベルについてもっと理解したいのですが、どういうわけか本当に圧倒されます。大学では、マイクロプログラミング、つまりプロセッサがASMコードを実装するためにどのように配線されているかについてのクラスを受講しました。これまでは、「低レベル」について学べば、これ以上の仕事はできないといつも思っていました。 私の質問の1つは、ハードウェアが開発者からほぼ完全に隠される可能性があるのはなぜですか。オペレーティングシステムはハードウェアのソフトウェアレイヤーであると言っても正確ですか?1つの小さな例:プログラミングで、L2キャッシュまたはL3キャッシュとは何かを理解する必要に遭遇したことはありません。典型的なビジネスアプリケーション環境の場合、アセンブラーや下位レベルのコンピューティングを理解する必要はほとんどありません。現在、ほとんどすべてのテクノロジースタックが存在するためです。これらの低レベルの全体のポイントは、高レベルへのインターフェースを提供することだと思います。一方で、たとえばこのグラフィックスコンピューティング全体など、下位レベルがどの程度の影響を与える可能性があるのでしょうか。 したがって、一方で、この理論的なコンピュータサイエンスブランチがあり、抽象的なコンピューティングモデルで機能します。ただし、複雑なモデル、証明の検証などのカテゴリで役立つ考えを見つけた状況にもめったに遭遇しませんでした。私は、NPと呼ばれる複雑なクラスがあり、それらを解決するのがある程度不可能であることを知っています。多数のN。欠けているのは、これらのことを考えるためのフレームワークのリファレンスです。私には、めったに相互作用しないさまざまな種類のキャンプがあるようです。 過去数週間、私はセキュリティ問題について読んでいました。ここでは、どういうわけか、さまざまなレイヤーの多くが一緒になっています。攻撃とエクスプロイトはほとんど常に下位レベルで発生するため、この場合は、OSIレイヤーの詳細、OSの内部動作などについて知る必要があります。

6
いつ抽象コードを記述し、いつ具体化するのか?
私はおもちゃのプロジェクトとして小さなツールに取り組んでおり、2つのディレクトリの違いを示し、どのファイル/ディレクトリが追加、削除、変更されたかなどを示しています。 私はこれらの変更を、それがファイルであるかディレクトリであるかを区別せずに、単に「ChangeItem」オブジェクトとして表現しようとしていました。しかし、それらをツリーに表示する方法、子供の親が誰であるかを知る方法など、多くの問題が発生しました。また、非常に直感的ではありませんでした。 次に、ディレクトリの変更とファイルの変更の間で変更を分割します。これにより、コーディングが非常に簡単になり、何が起こっているのかを理解することが容易になりました。これで、ディレクトリ内のすべてのファイルを選択するなど、はるかに簡単になりました。 私の質問は、抽象化を使用するか、コードでより具体的にするかをどのようにして知ることができるかです。抽象化が多すぎるか少なすぎるかをどのように判断できますか?

3
既存の抽象クラスとそのパラメーターのリファクタリング
私が持っているabstract class A抽象メソッドを宣言しているがdoStuff。現在、を継承しAて実装するクラスが多数ありますdoStuff。 クラスのインスタンスはAFactory、ユーザー入力に基づいて実行時に初期化されます。元々、すべてのクラスには同じ単一のパラメーター(ユーザー入力)がありました。しかし今、私はAニーズを継承する新しいクラスだけである追加のパラメーターを持っています。 だから私はそれを次のロジックで分解します: ユーザー入力(AFactoryもちろん使用)に基づいてインスタンスを生成するインタープリタークラスは、この追加のパラメーターを認識していませんでした。 それをクラスインタープリタクラスにプッシュしようとすると、本当に厄介なことになります。それは、いつファクトリーに渡すかを知らなければならず、そもそもファクトリーを持つという全体の目的に反するためです。 それを何かに使うかもしれないと期待して盲目的にファクトリーに送ることも、かなり醜いようです。 私の現在の解決策:一方、にリファクタリングA.doStuff(Param param)することにしましたA.doStuff(AParams params)。 AParams必要なパラメータをすべて保持doStuffでき、興味がない場合は無視できます。これは私にとっても少し厄介なようで、WIN32APIで構造体を送信することを抑制します。この構造体は、醜く役に立たない多くのパラメーターを保持する可能性があり、私はそれが好きではありません。 この問題に取り組むよりエレガントな方法はありますか?それとも私が見落とし、これを解決したいくつかのデザインパターン? 注: Java 1.7を使用しています クラスの名前は、理論上の設計上の問題を強調するためにばかげていますが、実際には、わかりやすく意味のある名前が付けられています。 私はかなり多くのことを検索しましたが、(このコードをXスローしている理由とは対照的に)特定の抽象的な理論的な問題をWebで検索するのは非常に難しいことがわかったExceptionので、とにかく尋ねることにしたので、これが複製。 編集1: 明確化:サブクラス固有の引数をdoStuffメソッドに渡す必要があります。 編集2: 私はKilian Fothの意図を完全には理解していなかったので、問題をよりよく説明し、解決策を理解するのに役立つJava疑似コードをいくつか書きました。そう: これは私の問題の骨組みです。 これは私のソリューションの骨組みです。 これは キリアンフォスの解決策かもしれないと思いますが、よくわかりません。

4
再利用可能なオブジェクトの抽象メソッドとインスタンス変数
再利用できるように手直ししているJavaコードがかなりあります。問題は、プロジェクト固有の部分が多く、アプリケーションプロジェクトとコードベースプロジェクト間の結合のレベルが高くなることです。 抽象メソッドの使用を実装するクラスを使用して子クラスからリソースを取得する以下の状況と、インスタンス変数を宣言するだけの状況と比較してください。 抽象メソッド: public abstract class SuperBaseClass { public abstract int getNumberOne(); public abstract String getStringOne(); public abstract String getStringTwo(); public printStuff() { Log.i("IntAndTwoStrings", String.format("%i %s and %s", getNumberOne(), getStringOne(), getStringTwo())); } } public class ReusedAppClass extends SuperBaseClass { public int getNumberOne() { return 1; } public String getStringOne() { …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.