Джава; Интерпретация времени выполнения; Стратегии для добавления плагинов - PullRequest
3 голосов
/ 26 августа 2009

Я начинаю свой первый большой проект. Это будет программа, очень похожая на Rosetta Stone . Это будет программа для изучения иностранного языка, написанная на Java с использованием Swing. В моей программе я планирую, чтобы пользователь мог выбирать загруженные курсы для изучения. Я смогу создать курс английского языка, так как я являюсь носителем английского языка. Однако я хочу, чтобы люди, говорящие на других языках, могли также писать курсы для пользователей (это важная часть работы моей программы).

Поскольку я хочу, чтобы пользователи могли загружать курсы языков, которые им нужны, жестко запрограммировать их в программе не может быть и речи. Курсы нужно было интерпретировать во время выполнения. Кроме того, поскольку я хочу, чтобы другие сотрудничали с моей работой (например, создавали курсы), я должен облегчить им задачу.

Каков наилучший способ сделать это?

Идея, которую я выдвинул, заключается в том, чтобы иметь строго пустой набросок курса (жестко запрограммированный) с простым XML-файлом, в котором подробно описываются текст и используемые звуки. Недостаток этого состоит в том, что это чрезвычайно ограничивает автора. Разные языки могут начинаться с изучения разных частей.

Будем весьма благодарны за любые советы по данной проблеме, а также по проекту в целом. Любые ссылки на любые соответствующие ресурсы или информацию также будет принята с благодарностью.

Думаю, что вы потратили время и силы,

Джозеф Понд

Ответы [ 3 ]

5 голосов
/ 26 августа 2009

Проще говоря, вы должны основывать свою программу на такой системе, как Eclipse RCP или Netbeans Platform. Обе эти системы уже имеют дело именно с этой проблемой, и обе идеально подходят для этой задачи. Они не только для IDE.

Это большой первый шаг, так как вам нужно будет изучить одну из этих платформ, помимо простого Swing.

Но они решают проблему, и их общая организация и техника в любом случае будут хорошо служить вашей программе.

Не изобретайте это колесо, просто изучите одно из них.

1 голос
/ 26 августа 2009

Если бы я делал это, я бы серьезно подумал об использовании Eclipse EMF для моделирования «языка» для определения курсов. Начать с EMF довольно сложно, но это дает вам:

  • Модель высокого уровня, которую можно вводить / редактировать различными способами.
  • Автоматический механизм для сериализации "экземпляров" (т.е. курсов) в XML. (И вы можете повозиться с сериализацией, если захотите.)
  • Автоматически сгенерированные классы Java для представления ваших экземпляров в памяти. Они предоставляют API-интерфейсы, настроенные на вашу модель, общие, которые являются EMF-эквивалентом отражения Java ... но основаны на классах модели EMF, а не на классах Java.
  • Автоматически сгенерированный редактор дерева для ваших "экземпляров".
  • Хуки для реализации ваших собственных ограничений / правил проверки, чтобы сказать, что является действительным "курсом".

Предложение по плагинам Eclipse:

  • Отображения в текстовые языки с генерацией парсеров / разборщиков
  • Отображения на графические языки; например обозначения с использованием коробки / стрелки / и т. д.
  • Различные более продвинутые механизмы персистентности
  • Сравнения / разности, преобразования модель-модель, ограничения в OCL и т. Д.

Я использовал EMF в нескольких крупных проектах, и главное, что заставляет меня возвращаться к чему-то большему, - это простота эволюции модели ... по сравнению со сборкой всего на более низком уровне абстракции. Если моя модель (язык) должна быть расширена / изменена, я могу внести необходимые изменения с помощью редактора EMF Model, восстановить код, расширить свой пользовательский код, чтобы сделать правильные вещи с расширениями, и я в значительной степени готов ( преобразование сохраненных экземпляров по модулю).

1 голос
/ 26 августа 2009

Если вы настроены делать это с нуля (идея Уилла неплохая), то я бы сначала определил формат файла, в котором проще всего создать языковой курс. Это может быть XML, открытый текст или какой-то другой формат, который вы придумаете сами.

Вам, вероятно, понадобится некоторая гибкость в языковом формате, потому что вы действительно захотите указать такие вещи, как вопросы и ответы. XML - это боль из-за всех лишних терминаторов, но он дает большое количество метаданных. Если вам нравится XML для этого, вы можете рассмотреть возможность определения вашего языкового файла в YML, он предоставляет вам данные XML, но использует угловые скобки вместо пробелов.

Возможно, вы также хотите определить свой файл на том языке, для которого он создан, поэтому вы можете захотеть или не захотеть использовать английские слова в качестве ключей. Если вам не нужен английский, вам, возможно, придется пропустить и XML, и YML и придумать свой собственный формат файла - возможно, когда макет и / или специальные символы определяют поток и «функциональность».

После того как вы определили формат файла, вам не придется беспокоиться о жестком кодировании чего-либо ... вы не сможете, потому что он уже будет в файле.

Функциональные возможности плагина также были бы хорошими ... Здесь ваш файл определения также содержит информацию, которая говорит вам, какой класс создавать (рефлексивно) и использовать для анализа / отображения данных. Таким образом, вы можете добавлять новые типы вопросов, просто поставляя новый файл jar.

Если это сбивает с толку, извините, это сложно в одностороннем форуме, потому что я не могу смотреть на ваше лицо и посмотреть, следите ли вы за мной или я даже иду в правильном направлении. Если вы думаете, что я на правильном пути и хотите больше подробностей (я уже делал кое-что из этого раньше), не стесняйтесь оставлять в комментарии дополнительный вопрос (или адрес электронной почты), и я был бы рад чтобы обсудить это с вами дальше.

...