Java по сравнению с C++ для создания GUI, которому [закрыли] бэкенд C++

У меня в настоящее время есть бэкенд C++, который я должен соединить с GUI, и так как я никогда не создавал GUI прежде, я был смущен на том, где запустить.

Я - удобное написание кода в C++ и Java, таким образом, я предпочел бы, чтобы мой GUI был на одном из тех языков. Кроме того, GUI должен быть довольно независимым от операционной системы по Windows и Linux (и надо надеяться, следовательно Mac).

Теперь я понимаю, что, если я использую Java, чтобы сделать это, мне будут нужны некоторые обертки, чтобы сделать это - но я также услышал (строго секундная стрелка), что запись GUI в C++ является болью.

Я не хочу переписывать слишком много своего кода бэкенда в Java (кто делает??) и я надеялся на вход на:

  • Любой язык предлагает серьезные преимущества/недостатки по сравнению с другим?
  • Насколько серьезный переносящаяся проблема, и сколько перезаписи вошло бы, если бы я использовал Java.
  • Есть ли какие-либо определенные ресурсы, я должен посмотреть на это, люди думают, было бы релевантно?

Спасибо и аплодисменты все :)

23
задан OscarRyz 8 July 2010 в 20:50
поделиться

9 ответов

Вы говорите, что уже знаете C ++ и Java, и что никогда раньше не создавали графический интерфейс. Это означает:

  • независимо от того, выберете ли вы графический интерфейс Java или C ++, вам нужно будет научиться обращаться с фреймворком графического интерфейса.
  • если вы выбрали Java, вам также необходимо научиться взаимодействовать между ними. languages ​​

Таким образом, изучение C ++ экономит вам одну вещь, которую нужно выучить. Что ж, всегда полезно чему-то научиться, но может быть плохой идеей изучать две новые концепции одновременно. В любом случае, обучение может быть меньшим бременем, я полагаю, что здесь требуется много реальной работы, даже когда вы используете такие инструменты, как SWIG.

Возможно, вы захотите узнать, проще ли написать графический интерфейс на Java или на C ++. Это зависит от выбранного фреймворка. Для Java у вас есть AWT и Swing, которые являются частью дистрибутива Java по умолчанию, а также есть SWT, который, например, используется Eclipse. Для C ++ существует множество наборов инструментов, наиболее популярными из которых являются Qt, GTK и wxWidgets, и все три поддерживают все основные платформы. Большинство этих инструментов графического интерфейса "C ++" также имеют привязку к Java или даже порт Java, так что вы можете использовать их также и с Java.

До сих пор я использовал Swing, Qt и несколько других, которые не помогают в вашей ситуации (UI, поставляемый с Borland C ++ Builder и WinForms на .NET). По сути, концепции одинаковы для всех этих фреймворков, и я не обнаружил, что ни один из них сложнее или проще другого. Единственным исключением может быть Java, потому что я никогда не заставлял эти LayoutManager работать, хотя другие наборы инструментов имеют эквиваленты LayoutManager, которые легко освоить. Но, может быть, это только я.

Люди также скажут вам, что графические интерфейсы Java всегда уродливы и не подходят для хост-системы. Что ж, большинство графических интерфейсов Java действительно таковы, но ИМХО, это не из-за Java, а из-за плохого программирования. Требуются две строки кода, чтобы позволить приложению Swing адаптироваться к внешнему виду ОС, и большинство программистов просто не прикладывают достаточно усилий в свои графические интерфейсы Java, чтобы скопировать и вставить эти две строки ... вы можете представить, сколько они заботятся об остальном дизайне своего графического интерфейса.

Для вашей текущей ситуации я бы порекомендовал C ++ GUI, но если вы знаете, как выглядят ваши планы на будущее, и если вы знаете, что будете делать Java GUI всю оставшуюся жизнь, тогда, вероятно, можно начать это сейчас. и приложить дополнительные усилия.

И если вы выберете C ++ для графического интерфейса, люди будут рассказывать вам разные вещи, которые будут тянуть вас в любом направлении. У всех трех больших переносимых фреймворков есть свои плюсы и минусы, но я не верю, что среди них есть лучший или худший. Я бы порекомендовал Qt просто потому, что я уже использовал его, но если бы я был счастлив использовать вместо него GTK или wxWidgets, я бы, вероятно, предложил это.

12
ответ дан 29 November 2019 в 01:10
поделиться

Я не могу много сказать о связи Java и C++, но я предлагаю вам взглянуть на Qt. Это библиотека C++ для многих вещей, таких как доступ к файлам и сети, но наиболее известна она для разработки графических интерфейсов. Она также имеет хорошую IDE, в которой вы можете создавать графические интерфейсы с помощью перетаскивания. Я бы также сказал, что Qt не зависит от ОС, как это бывает для библиотек GUI.

4
ответ дан 29 November 2019 в 01:10
поделиться

В зависимости от ваших потребностей простой веб-интерфейс может быть самым простым когда у вас нет существующего кода внешнего интерфейса. Вставьте крошечный веб-сервер в свое приложение и откройте браузер на « http: // localhost: 12345 » (или на том, какой порт вы в конечном итоге используете).

8
ответ дан 29 November 2019 в 01:10
поделиться

Посмотрите Qt .

По моему опыту, всегда сложно общаться между двумя разными языковыми средами. Если у вас есть нетривиальное приложение для создания следующего, часто возникают проблемы: -

  • Обработка ошибок.
  • Управление памятью.
  • Многопоточность и синхронизация Семантика.

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

Например : - Рассмотрите возможность передачи Java Строка из графического интерфейса в серверную часть C ++.По сути, мы должны извлечь символы из объекта Java String и сделать их доступными для разработчика C ++ без утечки памяти, которая их хранит. Это пример основной проблемы (есть и другие аспекты, такие как кодировка, в которой должны быть возвращены символы).

34
ответ дан 29 November 2019 в 01:10
поделиться

Написать графический интерфейс на C ++ не сложнее, чем на Java.

Существует множество кроссплатформенных библиотек графического интерфейса. GTK, gtk--, FoX, WX и т. Д. Я бы не рекомендовал Qt, так как это не совсем C ++ (использует расширенную версию языка, требующую специального препроцессора перед компиляцией). К тому же, если вы не хотите раздавать свой продукт, это стоит целого состояния.

Кстати, слово «отсюда» используется не так.

2
ответ дан 29 November 2019 в 01:10
поделиться
  1. Обертывание - это не перезапись, это просто адаптер, позволяющий совместить оба языка. Это прямолинейно
  2. Поскольку вы, похоже, не закрепили язык, я бы выбрал .NET Gui (с C ++ CLR), у вас будет графический интерфейс, который не зависит от машины, и вы можете легко общаться со своим существующий код.

Для новичков WinForms может быть проще, но попробуйте использовать WPF, это самый современный вариант разработки графического интерфейса в мире .NET.

Лично я бы использовал C # /. NET для GUI и использовал DLL-оболочку C ++ CLR. Но это не единственное решение.

Под Linux лучшей реализацией .NET является MONO . Все приложения WinForms, которые я разработал (не самые безумные), работали без изменений. С C ++ / Qt вам придется перекомпилировать для каждой целевой ОС.

-1
ответ дан 29 November 2019 в 01:10
поделиться

Не используйте Java для создания графических интерфейсов пользователя, если не требуется независимость от платформы. Пользовательский интерфейс будет медленным, а совместимость с C ++ будет затруднительной.

Для создания собственного графического интерфейса на C ++ вы можете использовать GTKmm вместе с такой библиотекой, как Boost или QT. Кроме того, эти библиотеки доступны для большинства платформ (GNU / Linux, Windows, OS X), поэтому ваше приложение можно перекомпилировать где угодно.

править: используйте GLADE для быстрого создания GUI и заполнения сигнальных слотов кодом C ++ в GTKmm.

-1
ответ дан 29 November 2019 в 01:10
поделиться

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

Я работал с Qt, Swing и SWT, и обычно использовал как C++, так и Java-код со всеми этими инструментами. Взаимодействие между языками может добавить дополнительные затраты/риски. Однако иногда эти затраты оправданы, учитывая другие преимущества.

Если по какой-то причине вы выберете Java front end, обратите внимание на JNA и SWIG.

1
ответ дан 29 November 2019 в 01:10
поделиться

Давайте будем честными. Когда дело доходит до портативных графических интерфейсов, C ++ просто не используется.

Java имеет последовательный, переносимый, широко используемый, тщательно документированный, зрелый инструментарий с графическим интерфейсом пользователя. В C ++ есть куча недоработанных библиотек OSS, которые почти не работают, ни одна из них не является по-настоящему переносимой, плюс некоторые дорогие коммерческие библиотеки, которые не работают со всеми целями, на которые они претендуют, работают неравномерно по оставшимся целям и инвертируют управление, чтобы вы застряли в своих странных рамках.

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

1
ответ дан 29 November 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: