5

Gang of Fourのデザインパターンでは、少なくともいくつかのパターン、特にコンポジットとフライ級の例としてワードプロセッサを使用しています。

CまたはC++を使用する以外に、これらのパターンとそれに伴うオブジェクト指向のオーバーヘッドを実際に使用して、高性能のフル機能のワードプロセッサを作成できますか?

EclipseがJavaで書かれていることは知っていますが、あまり使用していないので、C++ベースのテキスト編集システムを備えたVisualStudioのように高速なのか洗練されているのかわかりません。


例としてC++とJavaのみを使用しました。問題は、ワードプロセッサやゲームなどのアプリケーションのように、メモリ内のオブジェクトを多数持つことのオーバーヘッドと関係があります。

デザインパターンは、パフォーマンスに何らかの打撃を与える可能性がある場合に通常指摘しますが、節約を犠牲にして抽象化を促進します。ワードプロセッサ、特にゲームは、金属にできるだけ近づけることで最大のメリットが得られます。

C ++で書かれていない高速なオブジェクト指向のワードプロセッサやテキストエディタを知っている人がいるかどうか、そしてパターンを使用してそれらを構築するのか、それとも多くの抽象化を放棄するのか、疑問に思っていました。

4

7 に答える 7

5

Flyweightは、実際には、固有の共有状態を持つ何千ものオブジェクトが存在する状況でリソースを節約する方法にすぎないため、C /C++よりも高級言語で役立つ可能性があります。おそらく、ドキュメントでグリフを使用するGoFの例は、このパターンを説明するための最良の選択ではありませんでした。

ただし、これらの基本的なパターンだけでなく、高性能のワードプロセッサを構築することには、さらに多くのことがあると思います。GoFに、これを正常に実行できることを除外するものがあるかどうかはわかりません。

一般に、Visual Studio(VS)は、Eclipseよりも高度で、パフォーマンスが大幅に向上しています。少なくとも、私が見たVSのバージョンです。Eclipseは、世の中で最も印象的なJavaアプリケーションの1つですが、RAMを大量に搭載した最近のマシンで非常にうまく動作します。

于 2008-08-19T03:54:14.223 に答える
3

さて、フライ級はワードプロセッサで使用するばかげたパターンです。IIRCでは、各文字がオブジェクトとして参照されていました[注:各グリフ用でしたが、OSが喜んで描画するため、まだクレイジーです]。ポインタが文字よりも幅が広く、間接参照に関連するすべての処理があるため、ワードプロセッサでその特定のパターンをそのように使用するのは気が狂います。

ワードプロセッサの設計に興味がある場合は、パターンを扱っていないが、ワードプロセッサの設計と設計上の考慮事項の基礎となるデータ構造のいくつかを調べている記事を見つけました。

デザインパターンは、純粋であるためではなく、あなたの生活を楽にするためにあることを覚えておいてください。パターンを使用する理由がなければなりません、それはいくつかの利点を提供しなければなりません。

于 2008-08-19T03:44:14.510 に答える
1

GoF とパターン全般のポイントは、物事を正しく「正しく」行う方法について説明することであり、必ずしも状況に応じて「正しく」行う必要はありません。パフォーマンスが問題で、適切なパフォーマンスを提供する名前付きパターンがないことがわかった場合は、おそらく独自の方法を正当化できます。しかし、パターンの十分な知識は、「賢明なデフォルト」を提供し、適切なパフォーマンスを提供するために必要なだけ、明快さ/ SoCなどを犠牲にすることをおそらく意味します.

規範から「逸脱している」と感じると、a) よく考え、b) 非慣用的なコードに適切にコメントするよう促されます。

パターンは重要な知識ですが、福音は何もなく、常に判断を下さなければなりません。

そうは言っても、パターンと最新のJDKを使用してまともなテキストエディターを作成できなかった理由は思いつきません

于 2008-10-11T00:14:04.180 に答える
0

この質問は、実際にはJavaとC ++のパフォーマンスに関するもののようです。これは、ガベージコレクションなどを備えた仮想マシンで実行するほどのオブジェクト指向ではありません。

JavaとC++のパフォーマンスに関するこのホワイトペーパーは、一読する価値があるかもしれません。

于 2008-08-19T03:36:03.387 に答える
0

覚えておかなければならないことの 1 つは、GoF の本が 90 年代初頭に書かれたことです。当時、普及している OS には豊富なグラフィック ライブラリがありませんでした。当時は Windows もまだ OS ではありませんでした。

IIRC GoF は 1994 年にリリースされました。1994 年でさえ、Windows 95 Beta が利用可能で (私の 486DX33 で実行されていました)、Windows 3.x はおよそ 1990 年から存在していました。

于 2008-08-19T05:23:31.593 に答える
0

Eclipse + netbeans + IntelliJ はすべて Java またはJVM (C++ ではない) で実行されるものでほぼすべて書かれています。これらの IDE の少なくとも 2 つで、エディター コードに時間を費やしたことがあるので、すべてが Java であることを保証できます (それも簡単ではありません)。

VS 2005 は Visual Studio での私の最後の経験でしたが、それでも Eclipse の方がはるかに応答性が高いと思いました (intelliJ は二重にウォームアップとインデックス作成の時間を与えられました)。

それがどのように関連しているかはわかりませんが、それは私の経験です。しかし、ビジュアル スタジオがまだ今日も C++ で書かれていることに驚いています。C# を使用することは Microsoft の利益になると思います。それ以外に何もなければ、自分のドッグ フードを食べるようなものではありません。

于 2008-08-19T06:23:14.330 に答える
0

はい、現在のマシンは十分に高速であり、それが可能な十分なメモリを備えています。Squeak を見ると、Smalltalk で記述された Smalltalk IDE が表示されます。これは、Java よりも大幅に低速ですが、それでも十分高速です。一方、HD ビデオ編集は、現在、低レベルのサポートが必要なものです。

于 2008-12-11T15:42:47.867 に答える