Я знаю, что это частично субъективно, но надо надеяться с достаточными специфическими особенностями я могу получить хороший ответ.
Я надеюсь разрабатывать приложение учета, предназначенное для определенного сегмента рынка (думайте Quickbooks, но настроил). Большая часть приложения будет доступными для редактирования таблицами, которые связаны с данными DB и некоторым основным созданием отчетов и графической функциональностью.
Это должно быть межплатформенным (OS X и Windows).
Это будет взаимодействовать через интерфейс с локальным DB. (SQLite или Derby или безотносительно)
Скорость не является "огромной" проблемой. Это должно быть довольно быстро реагирующим (я не знаком со скоростью Java по сравнению с C/C++).
Я сузил его действительно к между C++ с QT и Java. Я только знаю очень мало суммы Java, но работу с C++ регулярно. Однако Java до сих пор появляется к лучшему полному решению, и сумма книг/документации огромна, который является плюс.
Первое, что я должен сказать, это «здесь нет правильного ответа».
Java может делать именно то, что вы хотите. Инструментарий GUI после многих лет переделки стал очень продвинутым.Существует также множество инструментов, фреймворков и расширений, которые можно использовать, чтобы сделать графический интерфейс очень продвинутым.
В Java также есть отличная структура подключения к БД. С помощью инструментов объектно-реляционного сопоставления (ORM) (Hibernate и др.) Довольно легко получить данные из БД, поместить их в объекты, манипулировать ими и вернуть их в базу данных. Инструменты ORM также упрощают подключение объектов данных непосредственно к графическому интерфейсу пользователя и использование правил в этих объектах для защиты данных от повреждения.
Кросс-платформенная поддержка вам очень поможет. Единственная большая проблема - наличие на машине среды выполнения Java для файлов. Есть способы обойти это (лучше всего, чтобы установщик поместил это туда).
Как отмечали некоторые другие, веб-приложение может работать нормально. Я считаю, что RubyOnRails очень продуктивен, и вы можете запускать его на JRuby на обеих платформах или с любым родным Ruby. Вам нужно будет заняться безопасностью, но это не должно быть большой проблемой.
Если вы не знаете Java, вы также можете попробовать Mono. Вы можете создавать с его помощью приложения WindowsForms и запускать их как на Mac, так и на Windows, или если вы идете по веб-маршруту и используете ASP.NET в Mono. Я все еще думаю, что RubyOnRails даст вам более короткое время разработки, чем ASP.NET, но это вариант.
Что ж, если вы хорошо знаете C ++, то это причина номер один, чтобы использовать его. QT - очень хороший инструментарий, и вы будете работать с ним гораздо продуктивнее, чем с Java (как вы хорошо знаете C ++). Кроме того, благодаря этому опыту у вас больше шансов сделать приложение лучше.
Так что, если вы не отчаянно хотите получить опыт работы с Java (а в настоящее время это уже не такой большой плюс, как раньше), придерживайтесь C ++ / QT и развивайте некоторые кроссплатформенные навыки.
Лично, если бы я собирался создать новое приложение с нуля и хотел бы узнать что-то новое, это было бы веб-приложение с некоторыми новыми полезностями HTML5 / js. Причудливые веб-функции, скорее всего, станут будущим для приложений, а не для толстых клиентов для настольных ПК (и будут удобны для большего количества мобильных платформ).
Если вам нужна кроссплатформенность, Java - неплохой вариант.
Помните, что для целей бухгалтерского учета используйте тип данных, подходящий для сумм. Double / Reals / Floats и т. Д. По сути представляют числа, такие как двоичная дробь, умноженная на показатель степени, что приводит к ошибкам округления. Сообщается, что для Java BigDecimal работает хорошо.
Возможно, это вас заинтересует
, хотя я хотел бы, чтобы другие заявили, что разработали его с нуля как веб-приложение.
Нет совпадений? Только в локальной базе данных? Я нахожу это удивительно ограничивающим для нового программного проекта. Удивительно, что вы не думаете о графическом интерфейсе браузера AJAX с задней частью веб-сервиса.
EDIT: Скорость не является проблемой, и вы думаете, что вам может понадобиться перенести его в Интернет? Начните работать в интернете и избавите себя от головной боли.
Чтобы ответить на вопрос 2, с Java может быть немного неудобно. числа с плавающей запятой, но в версиях 1.5 и 1.6 он стал намного лучше. Если вы все же пойдете по пути Java, убедитесь, что у вас самая последняя доступная версия.
Затронутые проблемы довольно хорошо объяснены в этой статье: http://www.ibm.com/developerworks/java/library/j-math2.html .
Я бы предложил Groovy, а не Java. Это своего рода Java++, в том, что почти все в Java также в Groovy, но Groovy предоставляет ряд преимуществ в дополнение к этому. Язык Groovy предоставляет ряд вспомогательных методов. Правильно выполняет математику по умолчанию (нет двойных математических задач).
Что касается web vs desktop, вы можете использовать Grails для web и Griffon для desktop. Опять же, Гроовый базируется.
Для IDE, если вы выбираете Groovy, то либо IntelliJ (хотя для работы в Интернете, это дорого), либо SpringSource Tool Suite, который является производной Eclipse. В основном Eclipse с рядом плагинов, включая Groovy.
-121--3049985-Когда я добавляю строку динамически, я использую insertRowsAtIndexPaths: вот пример функции
- (void) allServersFound {
// called from delegate when bonjourservices has listings of machines:
bonjourMachines = [bonjourService foundServers]; // NSArray of machine names;
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
int i = 0;
for (NSArray *count in bonjourMachines) {
[tempArray addObject:[NSIndexPath indexPathForRow:i++ inSection:0]];
}
[[self tableView] beginUpdates];
[[self tableView] insertRowsAtIndexPaths:(NSArray *)tempArray withRowAnimation:UITableViewRowAnimationNone];
[[self tableView] endUpdates];
[tempArray release];
}
-121--4180713- Я бы определенно рекомендовал использовать C++ и Qt. Особенно при использовании Qt Creator или Qt Designer для создания макета пользовательского интерфейса.
Если вам нужно или вы действительно хотите использовать Java (или язык JVM), я бы использовал Qt Jambi. В любом случае Qt является (IMHO) намного превосходящей платформой независимо от используемого языка. Если бы вы раньше не занимались разработкой Swing или SWT, я бы дал вам два часа, прежде чем вы почувствуете, что едите пулю.
Я бы посоветовал Groovy, а не Java. Это своего рода Java ++, поскольку почти все в Java также находится на Groovy, но Groovy предоставляет помимо этого ряд преимуществ. Язык Groovy предоставляет ряд вспомогательных методов. По умолчанию вычисляет правильно (нет проблем с двойной математикой).
Что касается Интернета и рабочего стола, вы можете выбрать Grails для Интернета и Griffon для рабочего стола. Опять же, на основе Groovy.
Для IDE, если вы выберете Groovy, то либо IntelliJ (хотя для работы в Интернете это дорого), либо SpringSource Tool Suite, который является производным от Eclipse. В основном Eclipse с рядом плагинов, включая Groovy.
Когда я добавляю строку динамически, я использую insertRowsAtIndexPaths: вот пример функции
- (void) allServersFound {
// called from delegate when bonjourservices has listings of machines:
bonjourMachines = [bonjourService foundServers]; // NSArray of machine names;
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
int i = 0;
for (NSArray *count in bonjourMachines) {
[tempArray addObject:[NSIndexPath indexPathForRow:i++ inSection:0]];
}
[[self tableView] beginUpdates];
[[self tableView] insertRowsAtIndexPaths:(NSArray *)tempArray withRowAnimation:UITableViewRowAnimationNone];
[[self tableView] endUpdates];
[tempArray release];
}
-121--4180713- Еще один метод использует инструкцию LOOP:
mov cx, 3
myloop:
; Your loop content
loop myloop
Команда цикла автоматически уменьшает cx и переходит только в том случае, если cx! = 0. Существуют также варианты LOOPE и LOOPNE, если требуется выполнить дополнительную проверку для раннего завершения цикла.
Если вы хотите изменить cx во время цикла, обязательно поместите его в стек перед контентом цикла и выскочите после:
mov cx, 3
myloop:
push cx
; Your loop content
pop cx
loop myloop
-121--1732648- Очевидно, что нет одного решения, но есть pro's и недостатки для обоих решений, и даже есть третье решение: Java с Qt.
Во-первых, мой опыт работы с C++ и Qt уже несколько лет, так что может быть не так точно, и мой интерес к разработке Java GUI закончился один или два года назад, когда я увидел инструменты для разработки. Обычно я работаю на Java, но не с Swing.
При этом основным отличием Java от C++ является развертывание. Java всегда зависит от установленной среды Java, а C++ немного более автономен. Я бы отдал небольшое предпочтение C++ в этом отношении, если вы можете управлять развертыванием на двух платформах.
Что касается разработки графического интерфейса пользователя, инструменты Qt были очень хорошими и стали только лучше. Рамка также очень близко соответствует процессу GUI и естественно подходит для такого рода работы. Свинг кажется немного более низким уровнем и требовал значительного количества кода шаблона. И я не знаю никаких действительно хороших инструментов развития сам, хотя я слышал хорошие вещи мантисс.
Если вы считаете, что Java - это способ развертывания или бэкэнд-логики, но инструменты GUI для Qt слишком хороши, чтобы их игнорировать, проверьте вопрос stackoverflow о Java Swing или Java Qt . Стоит почитать.
В вашем конкретном случае я бы пошел с C + +/Qt, как у вас есть опыт работы с C++, и не все это тривиально, чтобы правильно построить приложение Java Swing.
Я разрабатываю инструмент с графическим интерфейсом пользователя на Java с использованием NetBeans, и пока у меня не было проблем. Не полагайтесь полностью на редактор графического интерфейса NetBeans, я использую его только для создания диалоговых окон и панелей. Я испытал, что если вы пойдете по пути MVC, станет намного проще использовать редактор графического интерфейса NetBeans. После этого вы можете полностью оставить конструктивную часть NetBeans. Посмотрите новую демонстрацию SwingSet3 и решите, хватит ли вам элементов управления Java Swing (с точки зрения внешнего вида и доступных элементов управления GUI). Также обратите внимание на компоненты SwingX , некоторые из них действительно потрясающие и хорошо выглядят, такие как ShadowBorder, TitlePanel и т. Д. Я определенно предлагаю вам использовать JXTable для ваших таблиц вместо JTable. Учитывая популярность Java, я не думаю, что проблема BigDecimal еще не решена. Что касается БД, Java поставляется в комплекте с собственной полной функцией JavaDB , которая действительно имеет небольшой размер - всего 2,5 МБ. Это пригодится, если вы не хотите устанавливать тяжелые СУБД, такие как MySQL. Это также будет еще один уровень абстракции. IMHO - ваши клиенты вряд ли увидят использование какой-либо внешней БД. Никогда не обманывайтесь тем, что переносимость означает, что ваше программное обеспечение Java будет автоматически работать на разных платформах. Это определенно потребует дополнительных усилий, но если вы поработаете над своим первоначальным дизайном и создадите свое программное обеспечение, сохраняя различные платформы (не только ОС, но и настольный компьютер / веб и т. Д.) На затылке, его будет легко немного подправить. немного, чтобы сделать его полностью портативным. Пойдите по пути MVC, это не повредит. Мои 2 цента.