Кроссплатформенное приложение.Нужны предложения - PullRequest
1 голос
/ 03 июля 2010

Мне нужно разработать приложение для работы на Mac, Windows и * nix.Приложению придется иметь дело с довольно большими объемами данных и отображать большие графики (поэтому требуется некоторое 2-мерное рисование).Должен ли я пойти на Java?WxWidgets?Разработать версию для каждой платформы?О, и просто из любопытства, если бы я хотел создать это приложение для Интернета, насколько вы думаете, насколько это возможно?Любое предложение с благодарностью.

Спасибо

Ответы [ 7 ]

5 голосов
/ 03 июля 2010

Второй голос за Java и Swing.Кросс-платформенные преимущества выходят далеко за рамки виджетов, вам нужно будет поддерживать только один набор библиотек поддержки для всех трех платформ.Java также обеспечивает низкоуровневый доступ к 2D-рисованию и имеет ряд доступных библиотек графиков и диаграмм.

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

1 голос
/ 03 июля 2010

Это зависит. Для Java (и других кроссплатформенных фреймворков) дело в том, что на Mac она выглядит не совсем правильно. Скорее всего, пользователи Mac будут жаловаться на то, что пользовательский интерфейс не выглядит и ведет себя прямо на своей платформе.

У меня был большой опыт, чтобы приложения wxWidgets выглядели «хорошо» на Mac, а в некоторых случаях вообще работали, и моя грубая цифра в том, что вам нужно 20% ваших усилий, чтобы заставить его работать / чувствовать себя правильно Mac. Но это может быть сделано. (Даже если вы не заботитесь о том, как чувствуют себя ваши пользователи Mac, все равно выделите время на то, чтобы взглянуть на Mac - и на все другие платформы, на которых вы развернули приложение wxWidgets - вероятно, будут ошибки только при запуске вашего приложения.

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

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

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

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

Тогда есть Интернет. За последние несколько лет была проведена интересная работа по созданию графиков в веб-пространстве. Возможно, ваши потребности (большие объемы данных, графики) перевешивают то, что доступно, или вам нужно беспокоиться о развертывании сервера и (скажем) о том, чтобы не отставать от сложных запросов на вычисления от ваших пользователей. Может быть, веб-подход работает очень хорошо - только одно место для развертывания программного обеспечения и т. Д. И т. Д.

Я думаю, что все сводится к тому, какая инфраструктура содержит инструменты для работы с графикой и данными. У wxWidgets есть графическая структура, которая приходит на ум: wxPlot (и я думаю, что есть еще одна). Также есть пример от NVIDIA, как использовать их Scene Graph SDK с помощью wxWidgets. Платформенное приложение для Mac может использовать Core Plot . Существуют различные графические платформы для Интернета.

Или, может быть, QT или Mono имеют лучшие графические способности, или что-то другое, от чего зависит ваше приложение, так что в итоге вы идете по этому пути.

1 голос
/ 03 июля 2010

Я использовал Eclipse RCP для моих проектов с открытым исходным кодом. Прелесть использования этого в том, что пользовательский интерфейс вашего приложения получит естественный внешний вид, иными словами, если вы запустите свое приложение в Windows 7, вы получите такой прозрачный внешний вид, а если вы запустите в Mac, вы получите гладкий и соблазнительный вид серая полоса. На мой взгляд, это намного лучше, чем Swing. Я также раньше занимался Swing и AWT.

С Eclipse RCP ОЧЕНЬ легко настроить приложение для работы в разных операционных системах, просто проверьте, какая ОС вам нужна, и Eclipse RCP сгенерирует для вас файл (ы) приложения для конкретной ОС.

Тадаа ....:)

Редактировать

Некоторые полезные ссылки: -

Веб-сайт Eclipse RCP

Простой учебник

1 голос
/ 03 июля 2010

Swing не плохо, Java - серьезный вариант.Однако Swing действительно выглядит как Swing в каждой операционной системе, даже с System Look and Feel.Он не будет выглядеть нативно, независимо от того, как сильно вы пытаетесь.

Qt - это хорошая платформа C ++ более высокого уровня, которая, хотя и не является нативной, выглядит довольно нативно / достойно на всех системах.Модель виджета отличная, а функциональность полная (например, она включает в себя полное ядро ​​WebKit).

0 голосов
/ 03 июля 2010

Ключевым моментом здесь является то, сможете ли вы без труда создать веб-приложение, чтобы пользователь использовал браузер, а ваш код работал на сервере? Если можешь, то иди к этому. Это даст вам как можно больше контроля.

Если нет, то наиболее безболезненным способом создания многоплатформенных приложений является Java с Swing. Все остальные требуют установки дополнительного программного обеспечения («О, вам тоже нужен Python?») Или запуска собственных библиотек («OpenGL, хорошо, вам нужно this dll»). Сохраняй это простым.

Демонстрация Sun о том, что можно сделать с помощью Java2D, доступна по адресу http://java.sun.com/products/java-media/2D/samples/index.html - поиграйте с апплетом и ссылками на плагин.

0 голосов
/ 03 июля 2010

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

Если вы хорошо структурируете свое приложение, то, пока вы пишете обработку данных в переносимом, стандартном коде и вкладываете большую часть своих усилий в презентацию в кроссплатформенный API-интерфейс, количество хрома, которое вам нужно округлитьего можно легко абстрагировать и сделать платформо-зависимым и управляемым данными.В основном для каждой платформы создайте контекст gl и поместите в него все необходимые меню - объем работы по настройке «кроссплатформенного» решения, чтобы оно выглядело нормально на разных платформах, не намного меньше, чем объем работ по созданию простого Chrome.на нескольких платформах - большая часть усилий продумана, а не кодируется.Это, конечно, не применяется, если вы используете много виджетов, а не приложение на основе представления.

0 голосов
/ 03 июля 2010

Я бы также добавил Mono в качестве опции.

  • C # - хороший язык для работы с
  • Есть несколько IDE на выбор
  • множество библиотек с открытым исходным кодом , таких как GTK # для графики и даже поддержка SIMD , которые могут быть полезны, если у вас много данных для обработки, и они поддаются само собой к этому виду оптимизации.
  • Возможность разработки внешнего интерфейса в ASP.NET или Moonlight для более богатого пользовательского опыта
...