Подтвердить что ты не робот

Java против С++ для создания графического интерфейса, который имеет С++-бэкэнд

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

Мне удобнее писать код на С++ и Java, поэтому я бы предпочел, чтобы мой графический интерфейс был на одном из этих языков. Кроме того, графический интерфейс должен быть достаточно независимым от ОС по сравнению с Windows и Linux (и, надеюсь, отсюда Mac).

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

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

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

Спасибо и приветствует все:)

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

Написание графического интерфейса в С++ больше не больно, чем выполнение на Java.

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

Кстати, это не то, как используется слово "следовательно".

Ответ 6

Пусть все будут честными. С++ просто не на карте, когда речь идет о портативных графических интерфейсах.

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

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

Ответ 7

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

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

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

Ответ 8

Как насчет затмения? Выглядит хорошо и хорошо работает на всех платформах. Я предполагаю, что большая часть eclipse - это Java.

Ответ 9

Почему вы не изучаете собственный С++ GUI, например WINAPI или X11. Затем вы делаете консольное программное обеспечение совместимым с одним из них, например, winhq, cygwin или другими совместимыми с открытым исходным кодом или эмулируемым программным обеспечением. Поскольку вы никогда не разрабатывали GUI на С++. Не идите на Java, потому что делайте более загруженный размер в ОЗУ. Если у вас большой размер ОЗУ. Eclipse может использовать 500 МБ ОЗУ при запуске без открытия проекта.

Ответ 10

  • Обертка не переписывается, а просто адаптер, чтобы оба языка встречались. Это прямолинейно.
  • Как вы, кажется, не исправлены на языке, я бы выбрал .NET Gui (с С++ CLR), у вас будет GUI, который не зависит от машины, и вы можете легко общаться с существующим кодом.

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

Я лично использовал С#/.NET для графического интерфейса пользователя и использовал DLL-оболочку CLR CLR. Но это не единственное решение.

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

Ответ 11

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

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

edit: используйте GLADE для быстрого создания графического интерфейса и заполнения слотов сигналов кодом С++ в GTKmm.