3

初めての大規模なプロジェクトに着手しています。ロゼッタストーンによく似たプログラムになります。JavaでSwingを使って書かれた外国語学習用のプログラムになります。私のプログラムでは、ユーザーがダウンロードしたコースを選択して学習できるようにする予定です。私は英語のネイティブ スピーカーなので、英語のコースを作成できます。ただし、他の言語を話す人にも、ユーザーが使用するコースを作成できるようにしてほしい (これは、私のプログラムが機能するために不可欠な部分です)。

ユーザーが必要な言語のコースをダウンロードできるようにしたいので、プログラムにハードコーディングすることは問題外です。コースは実行時に解釈する必要がありました。また、他の人に私の作品に協力してもらいたいので (コースを作成するなど)、彼らが簡単にできるようにする必要があります。

これを行うための最良の方法は何ですか?

私が思いついたアイデアは、使用するテキストとサウンドを詳述する単純な xml ファイルを使用して、厳密に空のコース アウトライン (ハードコード) を作成することです。これの欠点は、作成者を非常に制限することです。異なる言語は、異なる部分を学ぶことから始める必要があるかもしれません。

当面の問題とプロジェクト全体に関するアドバイスをいただければ幸いです。関連するリソースや情報へのリンクも大歓迎です。

あなたの時間と労力を考えて、

ジョセフポンド

4

3 に答える 3

5

簡単に言えば、Eclipse RCP や Netbeans プラットフォームなどのシステムに基づいてプログラムを作成する必要があります。これらのシステムはどちらも、すでにこの問題を正確に処理しており、このタスクには完全に適しています。それらは IDE だけのものではありません。

Swing だけでなく、これらのプラットフォームのいずれかを学習する必要があるため、これは大きな第一歩です。

しかし、彼らは問題を解決し、彼らの全体的な構成とテクニックはあなたのプログラムにうまく役立ちます.

この車輪を再発明するのではなく、代わりにこれらの 1 つを学んでください。

于 2009-08-26T00:06:02.133 に答える
1

もし私がこれを行っていたら、コースを定義するための「言語」をモデル化するために Eclipse EMF を使用することを真剣に検討するでしょう。EMF は最初はかなり困難ですが、次のような利点があります。

  • さまざまな方法で入力/編集できる高レベルのモデル。
  • 「インスタンス」(コースなど) を XML にシリアル化するための自動メカニズム。(そして、必要に応じてシリアライゼーションをいじることができます。)
  • インスタンスのメモリ内表現用に自動生成された Java クラス。これらは、モデルに合わせて調整された API を提供します。これは、Java リフレクションに相当する EMF である汎用 API ですが、Java クラスではなく EMF モデル クラスに基づいています。
  • 「インスタンス」用に自動生成されたツリー エディター。
  • 有効な「コース」とは何かを示す独自の制約/検証ルールを実装するためのフック。

関連する Eclipse プラグインが提供するもの:

  • パーサー/アンパーサーの生成によるテキストベース言語へのマッピング
  • グラフィック言語へのマッピング。例:ボックス/矢印/などを使用した表記
  • より高度なさまざまな持続メカニズム
  • 比較/差分、モデルからモデルへの変換、OCL の制約など

私はいくつかの大規模なプロジェクトで EMF を使用してきましたが、私が何度も戻ってくる主なポイントは、モデルの進化の容易さです...すべてを低レベルの抽象化で構築する場合と比較して. モデル (言語) を拡張/変更する必要がある場合は、EMF モデル エディターを使用して必要な変更を加え、コードを再生成し、カスタム コードを拡張して拡張機能を使用して適切な処理を行うだけで、ほぼ完了です (格納されたインスタンスのモジュロ変換)。

于 2009-08-26T01:16:06.403 に答える
1

これをゼロから行うことに決めた場合 (Will の考えは悪くありません)、私が最初に行うことは、言語コースを作成するのに最も簡単なファイル形式を作成することです。それは、XML、プレーンテキスト、またはその他の形式である可能性があります。あなたは自分で思いつきます。

質問や回答などを実際に指定できるようにする必要があるため、おそらく言語形式にある程度の柔軟性が必要になるでしょう。XML はターミネータが余分にあるので面倒ですが、十分な量のメタデータが得られます。そのための XML が好きな場合は、YML で言語ファイルを定義することを検討してください。XML のデータが得られますが、山かっこの代わりに空白区切り文字が使用されます。

おそらく、ファイルが作成された言語でファイルを定義したいので、英語の単語をキーとして必要とする場合と必要としない場合があります。英語が必要ない場合は、XML と YML の両方をスキップして、独自のファイル形式を考え出す必要があります。おそらく、レイアウトや特殊記号がフローと「機能」を定義する場所です。

ファイル形式を定義したら、何もハードコーディングすることを心配する必要はありません...それはすでにファイルに含まれているため、できません。

プラグイン機能もいいでしょう...これは、定義ファイルに、どのクラスをインスタンス化して (リフレクティブに) データを解析/表示するために使用するかを示す情報も含まれている場所です。このようにして、新しい jar ファイルを配信するだけで、新しいタイプの質問を追加できます。

これが紛らわしい場合は、申し訳ありませんが、一方通行のフォーラムでは難しいことです。なぜなら、あなたの顔を見ても、あなたが私をフォローしているかどうか、または私が正しい方向に進んでいるかどうかさえ確認できないからです。私が正しい方向に進んでおり、詳細が必要だと思われる場合は (以前にこのようなことを少し行ったことがあります)、コメントにフォローアップの質問 (または電子メール アドレス) を残してください。さらにあなたとそれについて話し合うために。

于 2009-08-26T00:18:05.403 に答える