|
|
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
Гости SoftwarerВ джаве - я обязан при этом писать лишние слова, то есть просто не понял, а если вот так: Говорю же: обязан писать лишние слова. И, кстати, не Exception, а Throwable - через написанное Вами куча исключений отлично провалится. Это, кстати, очень показательный момент, поскольку повсеместная ошибка программирования на Java. Случается следующее: пользователь нажимает кнопку, в обработчике происходит что-нибудь типа VerifyError, NullPointer итп, оно проваливается сквозь такой catch - и в результате с точки зрения пользователя "программа молча ничего не сделала, словно и не нажимал", а где-нибудь в stdout появляется сообщение об ошибке. Это - почти худший из возможных вариантов поведения программы в такой ситуации. Хуже только "молча падать". ГостиЗапарили уже засирать языки. Хм. С моей точки, "засирать" - это начать обсуждение "на дельфе не писал, но DBGrid виснет". Безусловно, любые темы сравнения флеймовы, но при корректном подходе в них можно найти пользу - и я стараюсь удерживаться именно в этих рамках. Гости Каждый пишет на том на чем нравится. Я бы сказал - на том, что требуется исходя из задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 15:56 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
softwarer В "идеологичном" C++ такое нельзя написать синтаксически да, потому что передача параметров в конструкторы идет через список инициализации членов... причина - проблемы реализации множественного наследования. Извини, но это называется слышал звон... Единственное на что повлияло наличие множественного наследования так это на необходимость указывать все суперклассы по имени (вместо super или base). В джаве это - не обусловлено совершенно ничем. Угу, я уже писал чем это обусловлено. Конструктор - это НЕ виртуальная функция - ни в C++ ни в C# ни в java... И еще - конструкторы ВСЕГДА выполняются в строгом порядке от суперкласса к подклассу! Поэтому ты и не можешь написать свой код - так как когда выполняется код из super - твое присвоение еще не отработало! Просто в sun решили упростить синтаксис и убрать список инициализации как отдельную языковую конструкцию - и все - надо смотреть в корень. Ты говоришь, что знаешь еще 10 языков, в которых принято другое поведение - я знаю только один - это VFP - да и то просто в силу виртуальности ВСЕХ методов его классов. Теперь насчет try { Something; } catch { SomethingWrong; } Я никогда не писал на pascal'e, а ты видно на C++. Если без долгих разговоров - C++ - это главный идеологический предшественник и java и C# - так вот в нем для обработки всех исключений без указания их классов используется конструкция try { Something; } catch (...) { SomethingWrong; } и мне, например, она кажется более наглядной чем вариант pascal'я - хотя я далек от мысли что это как-то влияет на выразительность всего языка... Понимаешь - ты сам своим тоном вынуждаешь отвечать жестко. С самого начала ты не расположен дискутировать. Например, пишешь про конструкторы в С++, и при этом используешь фразу про "проблемы реализации множественного наследования" - ну и какие там проблемы с его реализацией? Так зачем же так писать? и так везде - тебе вообще не кажется, что критиковать такую платформу как java по синтаксису catch'а - это ну как критиковать машину по форме руля. Так что я не люблю ерничать - просто отвечать пока не на что ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 16:18 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
softwarer Родной, ну нельзя же так - уже даже не смешно Вот иерархия классов относящихся к проблеме http://java.sun.com/docs/books/tutorial/essential/exceptions/throwable.html Так кто виноват в использование Exception так где надо Throwable? Sun? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 16:28 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
softwarer Говорю же: обязан писать лишние слова. И, кстати, не Exception, а Throwable - через написанное Вами куча исключений отлично провалится. Это, кстати, очень показательный момент, поскольку повсеместная ошибка программирования на Java. Случается следующее: пользователь нажимает кнопку, в обработчике происходит что-нибудь типа VerifyError, NullPointer итп, оно проваливается сквозь такой catch - и в результате с точки зрения пользователя "программа молча ничего не сделала, словно и не нажимал", а где-нибудь в stdout появляется сообщение об ошибке. Это - почти худший из возможных вариантов поведения программы в такой ситуации. Хуже только "молча падать". Никогда не говорил, что я знаю жабу на зубок, но не пойти ли вам уважаемый софтварер и подучить оную? На этом форуме полно старых тредов по поводу какой язык лучше, какой хуже. Ни один из них ни к чему не привел. Каждый как писал на своем любимом ЯП, так и пишет, только пара-тройка "деятельных" товарищей с барабаном в руках всё продолжает бестолковый флейм (кстати, теперь я тоже в этих рядах оказался, ну и *** с ним). По поводу мистического "проваливания", кто мешает ловить конкретное исключение и не париться? Не вижу причин почему я не могу указать в кэтч блоке подкласс Throwable - Exception. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 16:30 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
"Вернёмся же к нашим баранам!" Люди, не затевайте ещё одну holly war! Ведь тема топика была не о Delphi vs. Java, а о корпоративных приложениях на Яве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2004, 11:13 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
funikovyuri причина - проблемы реализации множественного наследования. Извини, но это называется слышал звон... Единственное на что повлияло наличие множественного наследования так это на необходимость указывать все суперклассы по имени (вместо super или base). Далеко не только на это. Последствия множественного наследования очень сложны и запутанны. Думаю, ты понимаешь причину ошибки "объект не инициализирован", которая будет зафиксирована, если ты попробуешь, например, передать параметром super поле класса. В случае множественного наследования - объект может быть "частично инициализированным". Соответственно, логика усложняется, появляются вопросы, на которые нет разумного ответа. Скажем (из головы): идет наследование "ромбом" (то есть от класса А унаследованы B и C, от B и C унаследован D). В A есть некоторое поле. Будет ли оно считаться "инициализированным", если вызван конструктор B, но еще не вызван конструктор C? Если нет - почему оно доступно в конструкторе B, но недоступно после конструктора B? Если да - почему полем объекта-предка можно крутить до вызова конструктора (последнего конструктора) этого объекта-предка? Промежуточные выкладки - еще более усложняют логику в этом месте. Конечно, можно принять какую-то схему разрешения подобных вопросов - но она будет недопустимо сложной. Именно поэтому - или, точнее, в том числе и поэтому - приняли решение выделить, по сути, отдельный, принудительно упрощенный блок инициализации. И в данном случае это совершенно правильное решение. funikovyuri В джаве это - не обусловлено совершенно ничем. Угу, я уже писал чем это обусловлено. Конструктор - это НЕ виртуальная функция Виртуальность конструктора совершенно не при чем. Ты упираешь на виртуальные конструкторы дельфы - но они вовсе не обязаны быть виртуальными. В дельфе они могут быть виртуальными - не более того. Единственное отличие - дельфа разрешает доступ к полям объекта до вызова конструктора предка. Что, может быть, неидеологично - не буду спорить. Конструктор - практически обычная функция, основной особенностью которой является "неинициализированное" состояние объекта на входе. Поэтому компилятор совершенно справедливо блокирует действия с этим объектом, да и справедливо не дает вызвать конструктор инициализированного объекта - тут дельфа действует хуже. Что касается локальных переменных и внешних объектов - манипуляции с ними до инициализации ничуть не страшны. Рассмотри следующий псевдокод: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Давай предположим, что "тело конструктора суперкласса" вычисляет какую-нибудь локальную или глобальную переменную. Имеет право? Имеет. Вопрос: что изменится (с точки зрения среды выполнения, реализации), если это вычисление выполнится не внутри тела, а непосредственно до него? Таким образом, по реализации вопросов нет. Что касается идеологии - идеологично было бы запихнуть конструктор туда же, куда и в C++. Или - реализовать выполнение похожим на общую логику выполнения программного кода. А так - унаследовали глупость из C++, назвав ее "упрощение синтаксиса". funikovyuri- ни в C++ ни в C# ни в java... И еще - конструкторы ВСЕГДА выполняются в строгом порядке от суперкласса к подклассу! И что из этого? funikovyuriПоэтому ты и не можешь написать свой код - так как когда выполняется код из super - твое присвоение еще не отработало! Давай разберем тут чуть поподробнее. Ниже я напишу код и псевдокод, в который он компилится: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. И вот теперь объясни - почему следующий код нельзя трактовать как следующий же псевдокод: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. funikovyuriПросто в sun решили упростить синтаксис и убрать список инициализации как отдельную языковую конструкцию - и все - надо смотреть в корень. Давай смотреть в корень. Суть твоего объяснения - в том, что код { some_action; super(); ... } реально должен был бы быть выполнен как { super(); some_action; ...} - потому что super() фактически, как и в C++, выполняется в отдельном блоке инициализации класса, до "тела конструктора", которые ты пишешь. Это так. Но ты называешь это упрощением синтаксиса? Лично я полагаю это неуместным запутыванием ситуации. funikovyuriТы говоришь, что знаешь еще 10 языков, в которых принято другое поведение Цитату, пожалуйста. funikovyuri- я знаю только один - это VFP - да и то просто в силу виртуальности ВСЕХ методов его классов. Да при чем тут виртуальность? В дельфе виртуальность конструкторов проявляется только в одном: можно написать конструкцию, аналогичную следующему а-ля java-коду: Код: plaintext 1. 2. и при этом будет вызван конструктор класса MyObject (если он виртуальный). В джаве ты делаешь абсолютно то же самое через newInstance - разве что в дельфе ты при этом можешь еще и передать параметры, а в newInstance, если не изменяет память - нет. funikovyuriЯ никогда не писал на pascal'e, а ты видно на C++. Увы, мимо - я писал на C++. funikovyuri- без указания их классов используется конструкция try { Something; } catch (...) { SomethingWrong; } В C++ - да. А что, мне пора обновлять компилятор? Этот код откомпилируется в джаве? Или все-таки в джаве приходится писать catch (Throwable t)? funikovyuri- и мне, например, она кажется более наглядной чем вариант pascal'я Хм. Ты предлагаешь перейти к сравнению паскаля с C++? Не хотелось бы. Лично мне - нравится вообще без всего, но это вопрос привычки. Вариант "как в C++" меня в целом устроил бы. Но в моем компиляторе такое не проходит. И в руководствах тоже вроде не упоминался такой вариант. funikovyuriПонимаешь - ты сам своим тоном вынуждаешь отвечать жестко. С самого начала ты не расположен дискутировать. Понимаешь ли, ты подключился к разговору с середины. Начался он с того, что некто покинувший нас начал говорить образцово неграмотные глупости про дельфу - почему я и начал "отвечать ему жестко". На что-то ты ответил со стороны, на что-то, вероятно, я отвечал, где-то перенеся на тебя общий фон разговора. За последнее, если было так - прощу прощения. funikovyuriНапример, пишешь про конструкторы в С++, и при этом используешь фразу про "проблемы реализации множественного наследования" - ну и какие там проблемы с его реализацией? Кажется, расшифровал. Впрочем, если тебя не устроит такая версия - можем продолжить обсуждение или зафиксировать несогласие. На самом деле я больше не уверен в некоторых других своих словах - например, в том, что в JDK 1.5 не появилось таки нормальной табличной модели для ResultSet-ов. funikovyuriТак зачем же так писать? и так везде - тебе вообще не кажется, что критиковать такую платформу как java по синтаксису catch'а - это ну как критиковать машину по форме руля. Хм. Ответ на это состоит из двух отдельных мыслей - учти. 1. Лично я привык отделять мух от котлет. То есть для меня "великолепная машина, но с неудачным рулем" - вполне разумная характеристика. 2.1 Некий человек сказал, что "бэт сайтов" не видит - причем в контексте довольно неграмотных попыток назвать плохие стороны дельфы. 2.2. Я назвал несколько "бэт сайтов" джавы - именно в контексте "хорошая вещь для своих задач, но имеет и недостатки". 2.3. Вы (мои оппоненты, извини, не хочется читать еще раз весь тред, чтобы найти поименно) обратили внимание на одну из деталей одного из названных мной недостатков. 2.4. Теперь ты говоришь, что я критикую джаву по этой детали - ты уверен, что это корректно? Я готов заявить, что если бы это был единственный недостаток джавы - она была бы абсолютно, немыслимо великолепным продуктом. Но ряд таких мелочей - то, что реально раздражает, суммарно являются существенным (для меня) недостатком. 2.5 Я понимаю точку зрения "я привык именно так и неудобным кажется все остальное". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2004, 18:00 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
funikovyuriТак кто виноват в использование Exception так где надо Throwable? Sun? Sun виноват в том, что из функций, объявленных без throws, беспроблемно вылетает Throwable. Это - нарушение контракта; понятие "контракт", надеюсь, знакомо. Дополнительная мелочь - отсутствие формы безусловного catch - приводит к более тяжелым последствиям этой ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2004, 18:06 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
Frame RelayВедь тема топика была не о Delphi vs. Java, а о корпоративных приложениях на Яве. А по сути уже все сказано. Если корпоративное приложение должно быть вебовским - писать его на джаве вполне разумно. И пишут. Для написания gui-клиентов java - не лучший выбор. Поэтому.. скажем так, не видел продуктов этого жанра, и вряд ли много увижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2004, 18:09 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
softwarer Не напомнишь, в какой версии JDK появилась такая крайне сложная и необычная процедура, как "максимизировать окно"? А в какой нельзя было максимизировать окно? Великолепно проработаны - пока не начинаешь использовать. Скажем, тривиальная такая задачка: имея строку "A / B / C", сгенерировать cоответствующий пункт меню (то есть - найти/создать подменю A, в нем найти/создать подменю B, в нем создать пункт C). Посмотри для интереса - сколько идиотских действий при этом нужно совершить. Ни одного. Все действия осмысленны. Если бы так.. exception while event dispatching - и стек в консоль. Помню, видел не раз. Не всегда есть возможность пробрасывать exception вверх, в надежде, что кто-то его обработает, особенно если оно происходит в thread'е созданном внутри метода, который давно уже завершён. Исключение говорит о том, что существует ошибка - либо в приложении, либо в библиотеке. Разработчик зная об ошибке может её найти и исправить. Проблем ноль. Поэтому в "стеке в консоль" нет ничего мистически не постижимого. Я очень рад, что thread'ы не молча умирают из-за не обработанной исключительной ситуации, а сообщают об этом. При этом - стоит помнить, что исключение запросто выпадает даже из подпрограмм, в которых никаких throws нет. А потому, практически единственный путь защититься - писать безусловный catch в каждой функции. Единственный путь защититься - это понимать, что пишешь. И проверять, действительно ли ты понимаешь или нет. Значит, невнимательно слежу за развитием. Ссылочку можно - типа, ключевое слово? Может, и break-и в switch-е уже не нужны? http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html Без break из switch теряет часть своей функциональности. Imho, вместо того, что бы плодить два разных switch'a - убрать его целиком. Да, причина кроется в том, что этот JDK-шный класс попытались использовать как-то так, как автор не предполагал. И если бы оттуда вылетел разумный Exception - все было бы как надо. А если идет такая хрень - увы. За всю свою практику, не встречал случаев, что бы из библиотечных классов просто так вылетали NPE. Для меня NPE чертовски разумное исключение. Исходный код jdk классов всегда перед галазами. Соглашения об использовании методов там же. Не вижу ваших больших проблем... В чем-то, наверняка так. Странно, однако, что я пользовался как минимум десятком языков, разумеется, далеко не все детально изучал - и только джава создала такое впечатление. Не удивительно. Все "остальные языки" - одинаковы по сути. Java - это не язык - это платформа программирования. java это не только синтаксис, это ещё архитектура библиотек. Не соглашусь. Размер и сложность кода прямо влияет на читаемость и все вытекающие из нее параметры - количество мелких ошибок, сложность отладки и сопровождения. Возмём группу из 10 мальких методов, про которых ясно что и как они делают и один большой собранный из этих 10. По вашему последний метод одифицировать/исправлять легче? А то, что все 10 методов можно использовать повторно внутри класса то же ерунда? Ну тогда не соглашайтесь. На читаемость влияет не кол-во открывающих и закрывающих скобок, сам код. Элегантно втиснутый в 5 строчек код на который надо потратить "два часа", что бы понять что он делает - вот это пример не читаемости, а не "лишняя" пара скобок и разбитый на логические составляющие метод. Хм. Я как-то написал выражение, которое на Java требовало 14 открывающих и закрывающих скобок. На дельфе аналогичное потребовало бы четырех. Это уже не имеет отношения к рефакторингу :) Это уже ни к чему не имеет отношения. Программист - это не стенаграфистка, которая без останова выдаёт 200 символов кода в минуту. Что касается рефакторинга - сам по себе он хорош. Но от того, что это выражение можно выделить в отдельную функцию (не имеющую абсолютно никакого самостоятельного смысла), большого выигрыша нет. Да и маленького тоже. Рефакторинг - это не выделение произвольных кусков кода в методы. Будем говорить о рефакторинге? Не удивлен. Каждый из нас смотрит сквозь призму своих задач - а задачи подбираются под используемый инструмент :) Моя задача проектировать/писать хороший код. Через неё и смотрю. Лучшего инструмента для этого, чем java не видел :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2004, 16:15 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
softwarerРаз уж вспомнил: каким именно паттерном языка объясняется невозможность написать Код: plaintext 1. Почему я обязан писать что-то типа (Throwable t), если мне совершенно неинтересен этот t? Через весь язык проходит идея простоты. Язык не должен заставлять думать над своим синтаксисом. Думать нужно о том, что делаешь. Поэтому в java нет этих бессмысленных (по существу) упрощений синтаксиса, которые есть в том же C++. Если пишешь catch, то будь добр написать, что именно ты ловишь, Error, RuntimeException или Exception или всё сразу. Нет ничего более ужасного, чем Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Или каким паттерном объясняется, что код Код: plaintext 1. 2. 3. 4. 5. работает, а код Код: plaintext 1. 2. 3. 4. 5. 6. не компилится? Это правило следует из того же принципа простоты, о котором уже шла речь. Оно позволяет избежать всякого рода трудностей в последовательности инициализации переменых класса, исключает ошибки связанные с обращением к унаследованным полям, до их корректной инициализации и т.д. Легко нарушить контракты суперкласса, если начать дёргать его методы до того, как класс полностью инициализирован. Программист не должен думать о том, как будет интерпретирован компилятором или, в случае java, виртуальной машиной его код, это должно быть очевидно. Из Java убранны потенциально опасные конструкции, по сравнению с тем же C++, где из воз и маленькая тележка. Объяснения чего ещё требуются? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2004, 16:43 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
softwarer Sun виноват в том, что из функций, объявленных без throws, беспроблемно вылетает Throwable. Это - нарушение контракта; понятие "контракт", надеюсь, знакомо. Дополнительная мелочь - отсутствие формы безусловного catch - приводит к более тяжелым последствиям этой ошибки. Нарушает контракт только программист, который пишет код думая, что throws это и есть контракт. Каждый метод каждого класса из состава jdk снабжён исчерпывающим описанием своего поведения. Остальное есть в описании самого класса. Вот простой пример. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. SecurityException и ExceptionInInitializerError - не должны быть перечисленны в throws. Потому что это RuntimeException и Error. Если не знаешь как их правильно обработать - не обрабатывай, т.к. проблему всё равно не решишь, а только закапаешь её по глубже, что бы потом коллегам было "интреснее" работать. Если их не отлавливать на основании, что их нет в throws - то это не проблемы Sun'a, а проблемы мозга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2004, 17:05 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsА в какой нельзя было максимизировать окно? Таки я буду учить Вас пользоваться источниками по java? http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Frame.html#setExtendedState(int) . Там написано - с какой. Заодно стоит оценить осмысленность названия метода :) NotGonnaGetUsНи одного. Все действия осмысленны. Блаженны верующие. Но попробуйте таки сделать - думаю, уверенности поубавится. NotGonnaGetUsЯ очень рад, что thread'ы не молча умирают из-за не обработанной исключительной ситуации, а сообщают об этом. Я, кажется, писал, как надо "сообщать". Вы можете продолжать утверждать, что "по сравнению с умиранием молча jdk ведет себя разумно". Согласен - но только по сравнению с умиранием молча. NotGonnaGetUsЕдинственный путь защититься - это понимать, что пишешь. И проверять, действительно ли ты понимаешь или нет. До тех пор, пока код целиком твой - безусловно. Когда используется большой массив чужого кода - обычно невозможно детально разобраться в нем прежде чем начинать работу. Дальше - все очень просто. Есть, например, кнопочка, нажав на которую, я получаю необходимый try..catch вокруг функции - с отловом тех ошибок, которые она может вернуть. Очень удобно. Вот только ряда ошибок там нет - и с твоей точки зрения, это правильно. Ну.. допустим, правильно. Я этого не понимаю и вряд ли пойму. http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html Не прошло и десяти лет.. И то хлеб, спасибо за информацию. Imho, вместо того, что бы плодить два разных switch'a - убрать его целиком. Имхо, надо было сразу сделать нормальный case. Сейчас, безусловно, уже поздно что-то менять. За всю свою практику, не встречал случаев, что бы из библиотечных классов просто так вылетали NPE. Хм. Посмотри на несколько топиков в сторону от этой темы :) Увидишь :) Для меня NPE чертовски разумное исключение. Для меня оно - признак ламерства. Разумным исключением будет "не сделано то-то", "не инициализировано то-то" или любая другая разумная и четкая проверка. Исходный код jdk классов всегда перед галазами. Это, безусловно, большой плюс - как, кстати, и в дельфе, если продолжать сравнения. Без этого в java было бы вообще невозможно работать. Соглашения об использовании методов там же. Хм. С моей точки зрения, NPE допустим разве что если я явно передаю null как параметр функции, ожидающей not null - да и то, лучше бы таки явное исключение. Насчет соглашений.. Что ты имеешь в виду? Искать по исходникам, что необходимо, чтобы метод отработал? Не вижу ваших больших проблем... Больших - нет. А вот дорогая - есть. Называется "время, которое приходится тратить на эту муть, а не на дело". В чем-то, наверняка так. Странно, однако, что я пользовался как минимум десятком языков, разумеется, далеко не все детально изучал - и только джава создала такое впечатление. Не удивительно. Все "остальные языки" - одинаковы по сути. Java - это не язык - это платформа программирования. java это не только синтаксис, это ещё архитектура библиотек. Не соглашусь. Размер и сложность кода прямо влияет на читаемость и все вытекающие из нее параметры - количество мелких ошибок, сложность отладки и сопровождения. Возмём группу из 10 мальких методов, про которых ясно что и как они делают и один большой собранный из этих 10. По вашему последний метод одифицировать/исправлять легче? А то, что все 10 методов можно использовать повторно внутри класса то же ерунда? Ну тогда не соглашайтесь. На читаемость влияет не кол-во открывающих и закрывающих скобок, сам код. Элегантно втиснутый в 5 строчек код на который надо потратить "два часа", что бы понять что он делает - вот это пример не читаемости, а не "лишняя" пара скобок и разбитый на логические составляющие метод. Хм. Я как-то написал выражение, которое на Java требовало 14 открывающих и закрывающих скобок. На дельфе аналогичное потребовало бы четырех. Это уже не имеет отношения к рефакторингу :) Это уже ни к чему не имеет отношения. Программист - это не стенаграфистка, которая без останова выдаёт 200 символов кода в минуту. Что касается рефакторинга - сам по себе он хорош. Но от того, что это выражение можно выделить в отдельную функцию (не имеющую абсолютно никакого самостоятельного смысла), большого выигрыша нет. Да и маленького тоже. Рефакторинг - это не выделение произвольных кусков кода в методы. Будем говорить о рефакторинге? Не удивлен. Каждый из нас смотрит сквозь призму своих задач - а задачи подбираются под используемый инструмент :) Моя задача проектировать/писать хороший код. Через неё и смотрю. Лучшего инструмента для этого, чем java не видел :)[/quot] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2004, 11:35 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
во, блин... когда ж этот флэйм прекратится? коллеги, не пройти ли вам в просто треп? -- FUCK THE iNET!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2004, 11:43 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsЧерез весь язык проходит идея простоты. Язык не должен заставлять думать над своим синтаксисом. Возьми тот же break в switch - я бы никак не назвал его "идеей простоты". Собственно, ассемблер тоже не заставляет думать над своим синтаксисом - но не думаю, что это идеал простоты :) NotGonnaGetUsПоэтому в java нет этих бессмысленных (по существу) упрощений синтаксиса, которые есть в том же C++. Ладно, это, видимо, философский вопрос. То есть я считаю, что это нужно, ты считаешь, что это не нужно - давай запишем в "моменты, относительно которых не придем к единому мнению". NotGonnaGetUsНет ничего более ужасного, чем....Так никогда и не узнаешь, где ошибка, И опять ты применяешь тот же прием: берешь образцово плохой пример применения обратной идеи и на нем пытаешься объяснить, чем плоха вся идея. Что ужасного в варианте Код: plaintext Нет, не спорю - я привык к дельфе, где текст ошибки можно получить в таком вот безусловном catch-е - но нем не менее, он нужен не всегда. Типичный пример - отсутствие в API возможности проверить некий факт иначе чем попытавшись сделать нечто, типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. NotGonnaGetUsЭто правило следует из того же принципа простоты, о котором уже шла речь. Оно позволяет избежать всякого рода трудностей в последовательности инициализации переменых класса, исключает ошибки связанные с обращением к унаследованным полям, до их корректной инициализации и т.д. Не позволяет. Я все равно могу попытаться употребить поле класса, например, как параметр в вызове super, я могу даже - тоже наследие C - написать что-то типа Код: plaintext 1. Так что - компилятор все равно обязан проверять, являются ли i и j в примере выше полями класса, либо разрешенными к присваиванию сущностями - статиками, локальными переменными... И непонятно, почему "принцип простоты" позволяет это все внутри скобок но не позволяет абсолютно то же самое до скобок. NotGonnaGetUsЛегко нарушить контракты суперкласса, если начать дёргать его методы до того, как класс полностью инициализирован. Именно поэтому меня вполне устраивает подход C++, где вызов конструкторов вынесен отдельно. Не возникает вопроса, почему я не могу объявить там локальную переменную :) Тут - неудачно скопировали. "Половину оттуда, половину отсюда". NotGonnaGetUsПрограммист не должен думать о том, как будет интерпретирован компилятором или, в случае java, виртуальной машиной его код, это должно быть очевидно. Хм. Джава слишком много взяла из C, чтобы это требование выполнялось. NotGonnaGetUsИз Java убранны потенциально опасные конструкции, по сравнению с тем же C++, где из воз и маленькая тележка. Ой. Ну если говорить о потенциально опасных конструкциях - давай снова вспомним тот же switch. Насколько я помню, он считается настолько опасным, что современные компиляторы C выдают warning на отсутствие break. А java - по крайней мере, у меня - глотает без проблем. NotGonnaGetUsОбъяснения чего ещё требуются? :) Почему, если они выдвинули такие принципы, они так очевидно их нарушили? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2004, 12:01 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
Чего мне бы хотелось от Явы: 1. Возможность писать шаблоны на базовые типы. 2. Возможность использывания алиасов типов и класов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 02:46 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
Nightwish2. Возможность использывания алиасов типов и класов. А это для чего? Убирать конфликты имен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 15:38 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
Не напомнишь, в какой версии JDK появилась такая крайне сложная и необычная процедура, как "максимизировать окно"? Хех... Давно было. Знакомый как-то на работу новую ушел на UNIX - так получилось. До этого сидел тока на Win только. Комментарии сродни этим были: что за дерьмо - дисков (A:, B:, C:, D:, ...) нету, почему не сделать "стандартно" A - это дисковод, С: - это типа первый диск; а то одни каталоги - что за бред, какой больной это придумал... и т.д. в таком же духе. Не сделали - значит были проблемы реализации на всех платформах. И опять ты применяешь тот же прием: берешь образцово плохой пример применения обратной идеи и на нем пытаешься объяснить, чем плоха вся идея. Что ужасного в варианте try { ... куча всего ... } catch { sendAlarmToAdmin (logOfExecution); } Нет, не спорю - я привык к дельфе, где текст ошибки можно получить в таком вот безусловном catch-е - но нем не менее, он нужен не всегда. Типичный пример - отсутствие в API возможности проверить некий факт иначе чем попытавшись сделать нечто, типа boolean isFloat (String s) { try { Float.strToFloat (s); return true;} catch { return false; } } Скажу что плохого - для Java :) То что строка в некорректном формате ловится через NumberFormatException. А если на вход функции подадут строку размером в пару десятков мегов или по случайному совпадению - они всегда случайные почему-то - у тебя закончится память в системе, то это не NumberFormatException а OutOfMemoryError. Что есть вещи немножко (имхо) разные. Только не будем уж про вероятности таких событий и т.д. - ок? :) Они случаются - нечасто, но бывают реально . Имхо все же если человек пишет он должен точно знать что именно его код делает и что именно происходит. Отсюда NPE и т.д. - но это не есть норма языка. С таким же успехом можно в Делфи накатать приложение вообще без обработки исключений - и ничего, компилятор не поперхнется. Если человек индус или аргентинец (ну это из собственного опыта :)) то тут уже ничего не исправишь - пишет он на Делфи или Java не имеет никакой разницы. В том же духе по большинству остальных вещей - просто для того чтобы понимать язык, на нем писать нужно (достаточно много - пока оно (понимание) не придет). Ну а не придет - так поговорки можно перефразировать в духе "к умному придет, а дураку и не надо" :) А просто так сравнивать с позиции другого языка нет смысла - немного другие паттерны, немного другие принципы. Вроде все близко и все же как-то не так. Лично я ничего не имею против Делфи - сам на нем писал достаточно. Вообще на Java кода кривого пишется - ема ё. Те же Exceptions - ну приходят люди и просто сами не знают что с ними делать :) - в лог и типа что-то там по дефолту присвоить, но, есть у меня смутное подозрение, что в том же Делфи или C++ они их просто даже и не обрабатывали бы - а тут, как говорится, компилятор обязывает - вот и приводит их это в ступор :). А GUI на яве нормальный есть. Посмотри к примеру что пишут на SWT - в частности тот же eclipse - более чем приемлемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 02:50 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
hgst было. Знакомый как-то на работу новую ушел на UNIX - так получилось. До этого сидел тока на Win только. Комментарии сродни этим были: что за дерьмо - дисков (A:, B:, C:, D:, ...) Я работал на unix-ах. Есть вещи, которые мне в них не нравятся, есть вещи объективно убогие - но "таких" вопросов не возникало. hgstНе сделали - значит были проблемы реализации на всех платформах. С трудом представляю, но дело не в этом. Вспомни изначальное утверждение -java не лучший инструмент для gui-интерфейса. А объективные ли это проблемы или дыра разработчиков - какая юзеру разница, если он хочет получить окно на весь экран, а я не могу ему такого выдать? (вернее, выдать-то могу, только часть окна уходит под таскбар). hgstСкажу что плохого - для Java :) То что строка в некорректном формате ловится через NumberFormatException. А если на вход функции подадут строку размером в пару десятков мегов Если мне нужно ловить "строку в неверном формате" - ты прав. А вот в варианте "мне нужно значение, а какая ошибка мешает ее получить - пофиг" - наплевать мне на все самые немыслимые исключения, которые мешают. Мне нужно что-то делать - скажем, использовать значение по умолчанию, чтобы автономный сервер не перестал работать из-за такой ерунды. Согласен, в варианте "конкретное сообщение об ошибке неважно" это бывает редко. Но тоже бывает. Например, одна из моих программ уже почти год крутится без нормального администратора - она-то может сообщать о проблемах, только что-то мало-мальски нетривиальное все равно никто не исправит :) hgstИмхо все же если человек пишет он должен точно знать что именно его код делает и что именно происходит. Его код - да. Стандартный код, который он вызывает, должен быть надежным. Если последовательностью нормальных в принципе вызовов можно получить NPE - это плохо. hgstС таким же успехом можно в Делфи накатать приложение вообще без обработки исключений - и ничего, компилятор не поперхнется. Можно. Мало того, простое приложение такого рода в дельфе будет нормально работать. Вопрос в том, что в дельфе получить NPE от стандартного кода можно только специально, зная как работают компоненты и потратив сколько-то сил. В джаве для этого достаточно не разобраться в деталях, как они работают. Если человек индус или аргентинец (ну это из собственного опыта :)) то тут уже ничего не исправишь - пишет он на Делфи или Java не имеет никакой разницы. hgstно, есть у меня смутное подозрение, что в том же Делфи или C++ они их просто даже и не обрабатывали бы - а тут, как говорится, компилятор обязывает - вот и приводит их это в ступор :). В той же дельфе необработанное исключение выскочит на экран - что не очень хорошо, но и не очень плохо. В джаве оно попадет в консоль, где его никто не увидит, если не знает, что туда надо смотреть. С точки зрения пользователя - "я нажал кнопку, и ничего не произошло". Это - почти худший вариант. Хуже только молча падать. hgstА GUI на яве нормальный есть. Посмотри к примеру что пишут на SWT - в частности тот же eclipse - более чем приемлемо. Может быть, соглашусь с этим. Но "мало" - означает "трудно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 19:25 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
не буду ничего писать, т.к. модер отмодырит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 07:23 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
А.Грасоff™ говорит правильно. 2 Softwarer: Если чудовищные силы заставляют пользоваться чужими библиотеками, к которым нет документации и из которых NPE сыпятся во все стороны, тут конечно ничего не скажешь - беда. Так же, как ничего не скажешь, если придётся пользоваться глючащими либами в delphi. -- У java есть "одна" проблема - её нельзя понять просто познакомившись с синтаксисом, она отличается от других языков. Но разве может такая мелочь смутить человека знающего 10 ЯП или всю жизнь писавшего на С и переползшего на С++, так и не поняв зачем? Конечно нет! Чего стоит перл (не помню автора) про то, что объекты в java передаются в методы по значению, с иллюстрацией на примере String. Таким людям бесполезно объяснять, что все контракты касательно вызовов методов описаны в javaDoc's. Что исключения это лишний повод не зарывать ошибки в глубину кода. Что Swing не синхранизирован и при написании гуи только программист ответственнен за ошибки в event dispatcher thread. Что не перехваченные исключения можно обработать любым удобным способом, а не только по дефолту про дампить в консоль. И т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 02:35 |
|
||
|
Кто-нибудь пишет корпоративные приложения для БД на Java?
|
|||
|---|---|---|---|
|
#18+
Блин, не удержался таки :) Пара слов в похвалу Java при сравнении с Delphi. Буквально вчера увидел у коллеги на мониторе такой вот код (Delphi): Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2004, 15:15 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=32810779&tid=2153319]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 402ms |

| 0 / 0 |
