2009-08-25 4 views
3

Ich fange an, an meinem ersten großen Projekt anzufangen. Es wird ein Programm ähnlich wie Rosetta Stone sein. Es wird ein Programm sein, das zum Erlernen einer Fremdsprache verwendet wird und in Java mit Swing geschrieben ist. In meinem Programm plane ich, dass der Benutzer heruntergeladene Kurse auswählen kann, von denen er lernen kann. Ich werde in der Lage sein, einen Englischkurs zu erstellen, da ich ein englischer Muttersprachler bin. Ich möchte jedoch, dass Menschen, die andere Sprachen sprechen, in der Lage sind, auch Kurse für Benutzer zu schreiben (dies ist ein wesentlicher Teil, damit mein Programm funktioniert).Java; Laufzeit-Interpretation; Strategien, Plugins hinzuzufügen

Da ich möchte, dass die Benutzer Sprachkurse herunterladen können, die sie wollen, ist es nicht möglich, sie in das Programm zu schreiben. Die Kurse mussten während der Laufzeit interpretiert werden. Da ich möchte, dass andere mit meiner Arbeit zusammenarbeiten (dh Kurse machen), muss ich es ihnen leicht machen.

Was wäre der beste Weg, dies zu tun?

Die Idee, die ich habe, ist eine strikte leere Kursumriss (hart-codiert) mit einer einfachen XML-Datei, die den Text und die Sounds zu verwenden. Der Nachteil ist, dass es den Autor extrem einschränkt. Verschiedene Sprachen müssen möglicherweise mit dem Erlernen verschiedener Teile beginnen.

Alle Ratschläge zum vorliegenden Problem und zum Projekt als Ganzes werden sehr geschätzt. Alle Links zu relevanten Ressourcen oder Informationen werden ebenfalls sehr geschätzt.

Denken Sie für Ihre Zeit und Mühe,

Joseph Pond

+0

+1 Interessantes Thema. Könnten Sie versuchen, die Frage/die Fragen besser sichtbar zu machen? .. .Ist es über Strategien zu .. hinzufügen ... Plugins? .. Könnten Sie ein wenig die Programmierfrage hervorheben? – OscarRyz

Antwort

1

Wenn Sie das von Grund auf neu machen (Wills Idee ist nicht schlecht), würde ich zuerst das Dateiformat festlegen, in dem der Sprachkurs am einfachsten erstellt werden könnte. Es könnte XML, Klartext sein oder ein anderes Format, mit dem Sie selbst kommen.

Sie werden wahrscheinlich ein wenig Flexibilität im Sprachformat benötigen, da Sie tatsächlich Dinge wie Fragen und Antworten angeben können. XML ist ein Schmerz wegen all der zusätzlichen Terminatoren, aber es gibt eine gute Menge an Metadaten. Wenn Sie XML dafür mögen, können Sie Ihre Sprachdatei in YML definieren, es gibt Ihnen die Daten von XML, verwendet aber Leerzeichen anstelle von spitzen Klammern.

Sie möchten wahrscheinlich auch Ihre Datei in der Sprache definieren, für die sie erstellt wurde, so dass Sie möglicherweise englische Wörter als Schlüssel benötigen. Wenn Sie kein Englisch möchten, müssen Sie möglicherweise sowohl XML als auch YML überspringen und ein eigenes Dateiformat erstellen - möglicherweise, wenn das Layout und/oder spezielle Symbole den Fluss und die "Funktionalität" definieren.

Sobald Sie das Dateiformat definiert haben, müssen Sie sich keine Sorgen mehr darum machen, etwas hart zu codieren ... Sie werden es nicht können, da es bereits in der Datei enthalten ist.

Plug-in-Funktionalität wäre auch gut ... Hier enthält Ihre Definitionsdatei auch Informationen, die Ihnen sagen, welche Klasse (reflektiv) zu instanziieren und zum Parsen/Anzeigen der Daten zu verwenden. Auf diese Weise können Sie neue Arten von Fragen hinzufügen, indem Sie einfach eine neue JAR-Datei bereitstellen.

Wenn das verwirrend ist, tut mir leid, das ist schwierig in einem einseitigen Forum, weil ich nicht in dein Gesicht schauen kann und sehe, ob du mir folgst oder ob ich überhaupt in die richtige Richtung gehe. Wenn du denkst, dass ich auf dem richtigen Weg bin und mehr Details haben möchte (ich habe schon ein bisschen von dem Zeug gemacht), kannst du gerne eine weitere Frage (oder eine E-Mail-Adresse) in einem Kommentar hinterlassen und ich würde mich freuen um es mit dir weiter zu besprechen.

+0

Ich würde gerne versuchen, mein eigenes Dateiformat zu erstellen, da ich dies eher für eine Lernerfahrung halte. Ich wäre sehr dankbar, wenn Sie bereit wären, ein wenig tiefer zu gehen. Meine E-Mail-Adresse ist Joseph dot M dot Pond (gmail) –

5

einfach, sollten Sie Ihr Programm auf einem System wie Eclipse RCP oder der NetBeans-Plattform basieren. Beide Systeme befassen sich bereits genau mit diesem Problem, und beide sind für diese Aufgabe völlig ausreichend. Sie sind nicht nur für IDEs.

Es ist ein größerer erster Schritt, da Sie eine dieser Plattformen jenseits einfach nur Swing lernen müssen.

Aber sie lösen das Problem, und ihre allgemeine Organisation und Technik wird Ihrem Programm trotzdem gut dienen.

Erfinden Sie dieses Rad nicht neu, sondern lernen Sie stattdessen eines davon kennen.

1

Wenn ich dies tun würde, würde ich ernsthaft darüber nachdenken, Eclipse EMF zu verwenden, um die "Sprache" für die Definition von Kursen zu modellieren. EMF ist zunächst etwas entmutigend, aber es gibt Ihnen:

  • Ein High-Level-Modell, das auf eine Vielzahl von Arten eingegeben/bearbeitet werden kann.
  • Ein automatischer Mechanismus zum Serialisieren von "Instanzen" (d. H. Kursen) nach XML. (Und Sie können mit der Serialisierung basteln, wenn Sie möchten.)
  • Automatisch generierte Java-Klassen für In-Memory-Darstellungen Ihrer Instanzen. Diese bieten APIs, die auf Ihr Modell abgestimmt sind, ein generisches, das dem EMF-Äquivalent der Java-Reflektion entspricht, aber basierend auf EMF-Modellklassen anstelle von Java-Klassen.
  • Ein automatisch generierter Baumeditor für Ihre "Instanzen".
  • Hooks für die Implementierung Ihrer eigenen Einschränkungen/Validierungsregeln, um zu sagen, was ein gültiger "Kurs" ist.

Related Eclipse-Plugins bieten:

  • Mappings zu textbasierten Sprachen mit der Erzeugung von Parsern/unparsers
  • Mappings zu grafischen Sprachen; z.B. Notationen Boxen/Pfeile/etc
  • Verschiedene fortgeschritteneren Persistenzmechanismen mit
  • Vergleiche/differenzierenden, Modell-zu-Modell-Transformationen, Einschränkungen in OCL, etc

ich verwendet habe, EMF in ein paar ziemlich große Projekte, und der Hauptpunkt, der mich dazu bringt, mehr zurückzukommen, ist die Leichtigkeit der Modellentwicklung ... verglichen mit dem Aufbau alles auf einer niedrigeren Abstraktionsebene. Wenn mein Modell (Sprache) erweitert/geändert werden muss, kann ich mit dem EMF Model Editor die notwendigen Änderungen vornehmen, den Code neu generieren, meinen eigenen Code erweitern, um mit den Erweiterungen die richtigen Sachen zu machen, und ich bin ziemlich fertig (Modulo-Konvertierung von gespeicherten Instanzen).