qt vs swing

koly

Нашел статью с некоторыми интересными необщепринятыми фактами.
Оригинал тут: http://citforum.ru/programming/application/java_qt.shtml
Сравнение Qt и Java
A Comparison of Qt and Java
Автор: Matthias Kalle Dalheimer
Перевод: Andi Peredri
В этой статье сравнивается эффективность использования C++/Qt и Java/AWT/Swing для разработки программного обеспечения с пользовательским графическим интерфейсом.
1. Что мы сравниваем?
При выборе средств для разработки крупного программного проекта необходимо учесть множество различных аспектов, наиболее важнейшим из которых является язык программирования, потому что он в значительной степени определяет другие доступные средства. Например, для разработки пользовательского графического интерфейса разработчикам необходима GUI-библиотека, предоставляющая готовые элементы интерфейса, такие, как кнопки и меню. Так как выбор GUI-библиотеки оказывает большое влияние на разработку проекта, часто ее выбор осуществляется первым, а язык программирования определяется из числа доступных для этой библиотеки языков. Обычно, язык программирования определяется библиотекой однозначно.
Другие компоненты средств разработки, такие, как библиотеки доступа к базам данных или библиотеки коммуникаций, также должны быть приняты во внимание, но они не оказывают такого влияния на разработку проекта, как библиотеки GUI.
Целью этой статьи является сравнение C++/Qt и Java/AWT/Swing. Чтобы это сделать наиболее точно, мы сначала сравним языки программирования, то есть C++ и Java, а потом две GUI-библиотеки: Qt для C++ и AWT/Swing для Java.
2. Сравнение C++ и Java
Часто при обсуждении преимуществ и недостатков различных языков программирования дебаты сводятся к аргументам, основанным скорее на личном опыте и предпочтениях, чем на объективных критериях. Конечно же, при выборе языка программирования личные предпочтения и опыт разработчика должны быть учтены, но так как эти критерии субъективны, они здесь не принимаются во внимание. Вместо этого мы будем рассматривать продуктивность программирования, производительность работы приложения и эффективность использования памяти, потому что эти критерии могут быть определены количественно и могут быть исследованы с научной точки зрения, хотя мы также учтем информацию, полученную из опыта разработки проектов в нашей компании.
2.1. Продуктивность программирования
Продуктивность программирования определяет, насколько эффективно (т.е. быстро и точно) программист с определенным опытом и знаниями может решить поставленную перед ним задачу, используя заданный язык программирования. Так как оклад разработчика является главной составляющей стоимости разработки любого программного проекта, продуктивность программирования имеет большое значение. Также в определенной степени продуктивность программирования определяется доступными инструментальными средствами.
Отличительной особенностью Java в сравнении с другими языками программирования общего назначения является обеспечение высокой продуктивности программирования, нежели производительность работы приложения или эффективность использования им памяти.
Для этого Java наделена некоторыми дополнительными возможностями. Например, в отличие от C++ (или C программист не должен в явном виде "освобождать" (возвращать) выделенную память операционной системе. Освобождение неиспользуемой памяти (сборка "мусора") автоматически обеспечивается средой выполнения Java в ущерб производительности и эффективности использования памяти (см. далее). Это освобождает программиста от утомительной задачи по слежению за освобождением памяти - главного источника ошибок в приложениях. Одна эта возможность языка должна значительно увеличить продуктивность программирования в сравнении с C++ (или C).
Однако проведенное исследование показывает, что на практике сборка "мусора" и другие возможности Java не оказывают большого влияния на продуктивность программирования. Одна из классических моделей оценки программного обеспечения CoCoMo, предложенная Barry Boehm, предопределяет стоимость и сроки разработки программного продукта на основе стоимостных коэффициентов, которые учитывают такие факторы, как суммарный опыт программирования разработчика, опыт программирования на заданном языке, желаемая надежность программы и т.д. Boehm пишет, что независимо от уровня используемого языка, начальные трудозатраты всегда высокие. Подобная методика подсчета использовалась в другом исследовании, проведенном C.E.Walston и C.P.Felix, IBM, Метод измерения и оценки программирования (A method of programming measurement and estimation) .
Оба приведенных здесь исследования появились задолго до создания Java, но несмотря на это, они демонстрируют общий принцип: сложность языка программирования общего назначения по сравнению с другими аспектами, такими как квалификация разработчика, не оказывает существенного влияния на полную стоимость разработки проекта.
Существует более позднее исследование, которое явно включает Java и которое подтверждает эту гипотезу. В Эмпирическом сравнении C, C++, Java, Perl, Python, Rexx и Tcl (An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl) Lutz Prechelt из университета Karlsruhe описывает проведенный им эксперимент, в котором студентам информатики поручили выполнить определенный проект и выбрать для его реализации, руководствуясь личными предпочтениями, один из языков программирования: C, C++ или Java (остальные языки были рассмотрены в другой части исследования). Собранные данные показали почти одинаковые результаты для C++ и Java (C был на третьем месте по многим параметрам). Эти результаты подтверждаются нашим собственным опытом: если программисты вольны в самостоятельном выборе языка программирования (чаще руководствуясь при этом своим опытом программисты с равным опытом работы (например, измеренным в годах) достигают одной и той же продуктивности. Второй интересный аспект, который бы мы хотели отметить (но который не имеет формального экспериментального подтверждения заключается в том, что менее опытные разработчики достигают лучших результатов с Java, разработчики со средним опытом разработки достигают одинаковых результатов с обоими языками программирования, опытные разработчики достигают лучших результатов с C++. Эти наблюдения могут быть объяснены тем, что для C++ доступны более совершенные средства разработки; и этот факт тоже должен быть принят во внимание.
Интересный способ определения продуктивности программирования предлагает метод функциональных единиц (Function Point разработанный Capers Jones. Функциональная единица - это метрика программного обеспечения, которая зависит лишь от его функциональности, а не от конкретной реализации. Эта метрика позволяет использовать в качестве критерия оценки продуктивности программирования число строк кода, необходимых для обеспечения одной функциональной единицы, в свою очередь, уровень языка определяется числом функциональных единиц, которые могут бы

Hastya

Забавная статейка. А в каком году писалась, интересно?
с вероятностью 80% Java-программы используют на 32 MB (или 297%) памяти больше

Имеющиеся средства разработки для Java часто уступают по возможностям своим C++ -аналогам.

LOL
Qt позволяет программисту использовать для управляющей функции любое имя, в то время, как Swing обязывает использовать в качестве имени valueChanged

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

Вот ржач. Интересно, автор правда так делал? получилось ли у него?

kokoc88

Не без ляпов, но в целом довольно правильная статья.

psihodog

Не без ляпов, но в целом довольно правильная статья.
да ну... имхо, под предлогом сравнения ГУИ-библиотек, кто-то решил опустить жаву.
Особенно это повеселило:
Так как выбор GUI-библиотеки оказывает большое влияние на разработку проекта, часто ее выбор осуществляется первым, а язык программирования определяется из числа доступных для этой библиотеки языков.

psihodog

И вот это ещё:
Второй интересный аспект, который бы мы хотели отметить (но который не имеет формального экспериментального подтверждения заключается в том, что менее опытные разработчики достигают лучших результатов с Java, разработчики со средним опытом разработки достигают одинаковых результатов с обоими языками программирования, опытные разработчики достигают лучших результатов с C++.
Типа, Жава -- это язык для чайников. Настоящие профи пишут на С++.
Интересно, откуда они взяли этот "аспект", если он "не имеет формального экспериментального подтверждения"? %)

kokoc88



Типа, Жава -- это язык для чайников. Настоящие профи пишут на С++.
Интересно, откуда они взяли этот "аспект", если он "не имеет формального экспериментального подтверждения"? %)
По факту любая задача, которая решается эффективно на Джаве, может быть эффективнее решена на С++. Но только если ты знаешь, как правильно решить такую задачу на С++, что зачастую очень нетривиально. По веремени разработки Джава будет в 1.2-1.5 раза быстрее. Новички плохо пишут на С++ и делают много ошибок, которые потом ОЧЕНЬ трудно исправить. На Джаве гораздо тяжелее делать такие ошибки. Поэтому новички будут лучше писать на Джаве, а С++ будет эффективен только в руках опытного программиста. Подтверждение таким выводам я нашёл только в этом году при работе над проектом, который совмещает С++, Java, C# и HTML/JS. Со мной работают как люди с опытом менее года, так и более 5-ти лет.

enochka1145

Насквозь лживая статья. Автор - ламер полный, где-то чего-то поднахватавшийся.
И почему это AWT сравнивают с Qt? Давайт-кае посравниваем SWT/JFace/Workbench (Eclipse RCP) с каким-нибудь MFC 1.0 или пусть даже с OWL 1.0
Как обычно, автор не понимает, что каждой задаче - свой инстумент. Точнее - набор инструментов, это у автора ГУИ определяет язык всего крупного проекта (так в первом абзаце).

bastii

а кто-нибудь WPF уже смотрел?

otets-mihail



В Java закрытие произойдет лишь во время следующего цикла работы сборщика мусора.
афтар яву в глаза видел, интересно?
Оставить комментарий
Имя или ник:
Комментарий: