問題タブ [abstraction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
encapsulation - 抽象化 VS 情報隠蔽 VS カプセル化
ソフトウェア開発における抽象化と情報隠蔽の違いは何ですか?
私は混乱しています。抽象化は、詳細な実装を隠し、情報を隠して、何かの詳細全体を抽象化します。
更新:これら 3 つの概念に対する適切な答えを見つけました。そこから取られたいくつかの引用については、以下の別の回答を参照してください。
css - CSS から離れた抽象化
多くのフレームワークは、HTML (カスタム タグ、JSF コンポーネント システム) を抽象化して、その特定のやかんを簡単に処理できるようにしようとしています。
CSS に同様の概念が適用されているものはありますか? クロスブラウザの魔法の束を実行し、変数のようなものをサポートし (なぜその色が欲しいたびに #3c5c8d を入力しなければならないのですか)、計算フィールドをサポートします (CSS と JS に「コンパイル」されます) など。
あるいは、私はこれについて正しく考えていますか? 非常に丸い穴に非常に正方形のブロックを押し込もうとしていますか?
.net - OS 呼び出しをクロスプラットフォームで動作させるための .NET OS 抽象化レイヤーはありますか?
あらゆるプラットフォーム (PC、Linux、Mac) で動作する .NET アプリを書きたいと思っています。UI 機能はほとんどがバックグラウンド サービスであるため、私はあまり気にしていません。MONO について聞いたことがあります。MONO を使用すると、Mac と Linux で実行される .NET アプリを作成できますが、Windows 用にコンパイルするとサービスとして実行され、Linux 用にコンパイルするとサービスとして実行される単一のアプリを作成できるようになりたいと考えています。 UNIX と同等のものとして実行します。また、レジストリに物を保存して、それを機能させたいと思っています。このような真に OS に依存しないコードを書く方法はありますか? ...そして、それを Web 上で実行するべきだとは言わないでください。:)
language-agnostic - 複雑なものにアプローチするには?
プロジェクトに不可欠なコードの特定の部分を知っていますが、それを完了するにはおそらく多くの時間がかかりますか? その部分に取り組む代わりに、他の何か (おそらくそれほど重要ではない) に取り組みたい、またはコーディングをまったくしたくないと感じたことはありますか? あなたが避けようとする獣を、あなたが知っているすべての怠惰なトリックを使用して、その避けられない実装を遅らせようとしていますか?
さて、私は怠惰なだけかもしれませんが、常にそのようなコードを処理しなければなりませんでした。書きたくないことを書いてください (そして、楽しみのために書いていて、お金をもらっていないのであれば、さらに悪いことです!)。有用な結果や動作の兆候が得られる段階に移行するのに多くの時間がかかる大規模なシステム。どうやってそのようなコーディングを始めますか? ほとんどの人は、おそらく分割統治法や同様のアーキテクチャ手法を提案するでしょうが、これはあなたがそれをどのように行うかではありません。それはあなたがそれをやり始める方法についてです。あなたがとる一番最初のステップは何ですか?
database - 抽象化を維持しながら、フォーマットされたテキストをDBに保存する
データを他の場所で使用できるように抽象化のレベルを維持しながら、フォーマットされたテキストのブロック(改行、タブ、リストなど)をデータベース(特定のものはありません)にどのように保存してWeb(XHTML)に表示しますか?アプリケーションまたはWebサイトの構造が将来変更される場合はどうなりますか?
architecture - 「ただやり遂げるだけ」ではなく、抽象化と柔軟性を評価してもらうにはどうすればよいでしょうか?
問題を解決したい人が、公式のインターフェースをスキップして、基礎となる実装の詳細に直接アクセスしたい場合、私は時々苦労します。
彼らは、そうすることで問題をより迅速に解決できると主張しています。そうすることで、アーキテクチャがより緊密に結合され、新しい要件が出現しても変更が困難になると私は主張します。
現在の設計に費やされたすべての作業、設計の哲学、および柔軟性の価値、壊れやすいコードを維持および変更しようとするコスト、カプセル化とデータの隠蔽、階層化されたアーキテクチャの価値、および堅牢であることを指摘します。仕様の小さな変更は、コードの小さな変更につながります。そして彼らは「しかし、これはもっと簡単だろう」と言います。
これらの人々をどのように扱いますか?
.net - エンタープライズ アプリケーションでのデータ接続レイヤーとプレゼンテーション レイヤーの抽象化
ユーザー インターフェイス用の複数のプラットフォーム (つまり、ASP.net webapp、Windows アプリケーション、そしていずれはモバイル アプリ) とバックエンド データベース用の複数のプラットフォーム (つまり、SQL Server、XML、Oracle) を組み込むエンタープライズ アプリケーションを構築しています。さらに必要なことは、これらのバックエンド DB が集中化されて Web 経由でアクセスされるか、クライアント コンピューター上でローカライズされ、場合によっては中央サーバーと同期されることです。
ユーザー インターフェイス レイヤーとデータ レイヤーを抽象化して、さまざまな UI と DB のさまざまな選択肢の間でプラグアンドプレイの適応性をより簡単に作成できるようにする方法について、誰かアドバイスをいただけますか? たとえば、あるケースでは、インターネットを介して中央サーバーで実行されている Web アプリがあり、Windows アプリを介してローカライズされたコピーを実行しているリモート マシンがある場合があります。スケジュールされた間隔で、すべてのマシンを同期して、すべてのマシンがほぼリアルタイムのデータを取得できるようにする必要があります。
また、関連するさまざまな接続文字列を処理するためのアドバイスも必要です。これにより、1 つのアプリで変更する必要がある設定は「ローカル」または「リモート」だけになり、必要な接続文字列が決定されます。
computer-science - あらゆる問題を解決する間接性のレベル
コンピュータサイエンスにおける「間接性のレベルがすべての問題を解決する」という言葉はどういう意味ですか?
c# - 単一パラダイム OOP は抽象化の逆転につながりますか?
この概念に慣れていない人のために説明すると、抽象化の反転は、高レベルの構造の上に低レベルの構造を実装することであり、不必要な複雑さと不必要なオーバーヘッドの両方が追加されるため、一般的に悪いことと見なされています。もちろん、これはやや不正確で主観的な定義です。
あなたの意見では、Java や C# など、すべてがクラスの一部である必要があり、ポインターのようなものが公開されていない単一パラダイムの OOP 言語でのプログラミングは、必然的に抽象化の逆転につながりますか? もしそうなら、どのような場合に?
performance - 最悪の抽象反転
今日のプログラミングで見られる抽象化の逆転の最悪の例は何ですか?
この概念に慣れていない方のために説明すると、抽象化の反転は、高レベルの構造の上に低レベルの構造を実装することです。より正確には、コンストラクト A と B があるとします。B は A の上に実装されていますが、A はどこにも公開されていません。したがって、下位レベルのコンストラクト A が本当に必要な場合は、そもそも B が A に関して実装されている場合、B の上に A を実装することになります。http://en.wikipedia.org/wiki/Abstraction_inversionを参照してください。