Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
admiteddly, проблема включает Кобол, который делает любой ответ характерным для Ваших потребностей, если Вы сказали, что "у нас есть старое приложение VB" или старое приложение C, затем опция № 3 всегда является правильным способом пойти.
я работал в 3 компаниях, которые решили пойти для опции № 2. 2, обанкротился, пытаясь заплатить за новую систему, только получая доход от старого, 3-е очень приблизилось действительно.
другой фактор к opetion № 3 - то, что Вы добираетесь для хранения всего старого bugfixes, у Вас есть doen за эти годы. Каждый переписывать всегда представляет все больше ошибок, частично потому что Вы захотите сделать переписывание быстро, частично потому что Вы будете писать это на новом, незнакомом языке, и частично потому что весь новый код имеет ошибки.
Осуществляют рефакторинг и заменяют логические блоки старого приложения, в конечном счете у Вас будет хороший новейший. Начните с GUI получать самый безопасный подход к новому. Кроме того, к тому времени, когда Вы закончили переписывать приложение в чем-то новом, что-то еще более новое будет самым прохладным, и Ваше новое приложение будет устаревшим, и Вы будете отправлять тот же вопрос снова и снова!
Я поддержал бы старое приложение, но затем, я - программист Кобола....
Другое решение могло быть:
Переводят код на современный язык по Вашему выбору.
Как правило, который включил бы несколько больших блоков:
основное преимущество этого подхода состоит в том, что он сохранит все противные бизнес-угловые случаи, были закодированы за эти годы в кодовой базе. Большая проблема с с нуля переписывает, то, что они отбрасывают все это накопленное знание.
Другое преимущество состоит в том, что это поворачивает раздражающую проблему (поддерживающий приложение Кобола) в забавная проблема (автоматизированный языковой перевод), таким образом, у Вас есть шанс нанять хорошего программиста с проектом.
Комментарий Jim Denver
Разве не будет очень трудно записать переводчика, которые переводят в код, который несколько читаем и удобен в сопровождении? Наша проблема состоит в том, что приложение КОБОЛа является maintenence кошмаром. Мы не хотим, чтобы это стало тем же кошмаром на другом языке.
я не могу сказать, как трудно это будет. Легче, если код, с которого Вы запускаете, обычен. Но в любом случае Вы закончите с "КОБОЛом, записанным в $LANG". Это - просто начальная точка возрастающего, переписывает, пока кошмар обслуживания не фиксируется.
Это - просто альтернатива для "перезаписи с нуля", и "поддерживают в КОБОЛе". Могло бы просто случиться так, что значение накопленного знания в кодовой базе является меньше, чем ожидаемая стоимость возрастающей очистки.
Честно, помогая "портировать" приложение от ColdFusion 5 до PHP к ColdFusion 8, которые, как я сказал бы, идут с № 1. Оставьте старое приложение на месте и разработку замораживания. Встретьте с клиентом и спецификацией, каковы новые возможности, в дополнение к тому, как старая система работает / предполагаемая работать и представить хороший документ требований. Это просто оставляет конструкцию и детали дизайна, которые можно затем разумно выбрать лучший язык и платформу для приложения.
, Где я работаю теперь, мы на самом деле поддерживаем старое приложение CF при создании замены приложение.NET. Можно ли вообразить код, который парни.NET оказываются перед необходимостью писать после того, как они заканчивают основное приложение? Вот почему я рекомендую заморозить разработку.
Я твердо уверенным обновления унаследованных приложений к ультрасовременной технологии (очень к тревоге моего менеджера). Это должно всегда быть поэтапным подходом и только предпринятый, если это необходимо. Попытайтесь поддерживать в рабочем состоянии унаследованное приложение и обслуживание, это - цель, но создайте мелкие детали его в более новой технологии, и со временем постепенно сокращайте старый код и заменяйте его более новым кодом. Я всегда удостоверяюсь, что располагаю по приоритетам их в преимуществе/стоимости для бизнеса сначала.
, Если приложение слишком плотно ткут затем, оно кажется, что необходимо нанять некоторых сценаристов КОБОЛа, чтобы помочь вытащить изолированные сервисы, таким образом, можно удержать от использования их, когда Вы готовы.
Примечание это: иногда ошибки и причуды в исходном унаследованном коде служат цели, на которую бизнес полагается, так опасаться фиксировать ошибки, на которые позже полагается другой код.
Перемещать приложение постепенно?
там способ, которым можно соединить интерфейсом с другим кодом к КОБОЛу и постепенно переписывать компоненты как пузырь изменений через? Вы никогда не можете избавляться от всего этого, но это действительно имеет значение?
Переписывающий существующий код обычно является плохой идеей. Это будет очень опасно (например, рискнет повреждать некоторую плохо понятую функциональность, на которую кто-то полагается), и израсходуйте много времени, не достигая ничего полезного, которое видимо большинством заинтересованных сторон.
не предполагают, что компетентный программист не сможет изучить КОБОЛ, если потребность возникнет - один язык программирования во многом как другой. Если Вы нанимаете кого-то компетентного в (говорят), что C++ или Java, они смогут изучить КОБОЛ.
Я поддержал бы старый код и добавил бы новую функциональность к нему с помощью части большого материала от Microfocus/AcuCOBOL. Можно сделать приложения для GUI и назвать.NET и материал Java прямо из кода "прежней версии".
, Почему повреждение бэкенд, если это работает на Вас? Хранение рабочего бэкенда и замена усталого фронтенда являются решением, которое компания, на которую я работаю, начинает использовать.
, Таким образом, я предполагаю, что моим выбором была бы опция № 3, потому что существует решение там как этот.
Опции № 2 и № 3 являются Вашим лучшим выбором. Если Ваше приложение КОБОЛа хранит, это - данные в DB SQL или некотором другом нормальном формате, к которому можно легко получить доступ с современного языка, который является самым дешевым/самым легким решением.
В противном случае затем наличие кто-то штатный для реализования критических новых опций, в то время как Вы восстанавливаете, был бы необходим. Но я все еще предложил бы просить, чтобы все ограничили новые возможности в старой кодовой базе только к действительно критическим.
КОБОЛ Поддержания, в конечном счете, только собирается стать более трудным. Чем дольше Вы ожидаете, тем тяжелее это будет.
Соблюдают 80/20 правило. Садятся с клиентом и пишут спецификации для 20% приложения, которое получает 80% использования. Запишите это в современной системе. Затем или сохраните старую систему для количества уменьшения особых случаев или постепенно сократите ее, поскольку Вы излагаете в деталях новую систему.
не пытаются переписать старый код 100%. Это просто глупо. Лучший вариант развития событий - Вы, имеют полный порт устаревшей системы. Худший вариант развития событий - Вы, записывают много времени и денег, чтобы иметь неудавшуюся новую систему, и Вы все еще застреваете со старой системой.
Использование время и усилие улучшить систему, не просто портируют его. После портирования самых важных частей используйте время для пересматривания особых случаев.
Будьте тщательной попыткой полного, переписывают. Существует много примеров этого спутывания для многих компаний-разработчиков программного обеспечения. Netscape главный пример
Это - изменение Опции 3:
Микрофокус обеспечивает инструмент под названием Сервер для предприятия, который позволяет КОБОЛу взаимодействовать с веб-сервисами.
, Если у Вас есть программа A КОБОЛа и другая программа B КОБОЛа и вызовы B через интерфейсный раздел, инструмент позволяет, Вы для представления B соединяете интерфейсом с разделом как с веб-сервисом.
Для программы A, Вы затем генерируете клиентский прокси, и A может теперь назвать B через веб-сервис.
, Конечно, потому что B теперь имеет веб-сервис, который любой другой тип программы (командная строка, Приложение Windows, Java, ASP и т.д.) может теперь также назвать им.
Используя этот подход, можно "грызть далеко в краях" для перемещения GUI в современный, подход на базе браузера с помощью чего-то как ASP, все еще используя механизм бизнеса КОБОЛа.
И после того как у Вас есть достойный набор веб-сервисов, они могут использоваться для любой новой разработки, которая дает возможность отодвигания от КОБОЛа в долгосрочной перспективе.
Компания, которую я знаю, много лет боролась с одним и тем же вопросом; в конце концов они отказались от приложения COBOL и перешли на SAP. Это был огромный проект, на завершение которого потребовалось несколько лет, но он сработал хорошо.
В COBOL замечательно то, что требования к данным прописаны прямо в верхней части кода. Также помогает то, что COBOL был разработан для написания с использованием (относительно) простого делового английского языка (TXTSPKers не нужны).
Конечно, если ваша газонокосилка старше некоторых из ваших программистов, забудьте о том, чтобы они читали исходный код. Они просто будут слишком много ныть.
Недостаточно данных для определения правильного курса.
Хотя многие люди вмешались с соответствующими ответами в конкретных обстоятельствах, правильный ответ действительно зависит от деловой ситуации, в которой находится ваша компания .
Такие вещи, как существующие дорожные карты, обязательства по доставке, контракты на обслуживание, время до запуска новых функций и т. Д., Определят, что лучше всего в вашей ситуации.
Тем не менее, ответ многих технологов будет быть №1, в то время как ответ многих деловых людей будет №4. Не зная ничего, кроме того, что было представлено, я бы подтолкнул команду к тщательному исследованию № 3, поскольку это, вероятно, самый низкий риск. №1 имеет подтвержденный послужной список неудач, а №2 - это просто №1 с меньшими ресурсами. # 4, вероятно, не является долгосрочным решением, ЕСЛИ вы не закончили
А как насчет использования одного из сторонних приложений, которые принимают cobol и конвертируют его в C #, например:
http://www.softwaremining.com/index.jsp
Или перенос это должно быть проще на COBOL.net, тогда все, что вы добавляете, может быть на одном из других языков .net.
Если вы используете OpenVMS, BridgeWorks может помочь вам создать веб-приложение с использованием вашего старого кода с небольшими изменениями.
] Я сам осуществил миграцию старой системы на новую (хотя и в гораздо меньшем масштабе).[
] []Для системы клиент/сервер мы достаточно успешно использовали подход "постепенной замены" (#2) (небольшая, написанная собственными силами система отчетности). На самом деле мы сделали это с изюминкой, используя "проксирование":[
] [] Такой подход придал много гибкости и позволил реализовать новые вещи, не касаясь старого кода. Переналадка продолжалась более года, и последние части приложения были перенесены на новую систему только потому, что старый сервер работал на выделенном, стареющем оборудовании, которое должно было быть отключено.[
] []Я фактически спустился в серверную комнату, чтобы лично отключить старый сервер, когда все было перенесено. Это было забавно :-).[
] [] По сути, этот подход "постепенного перехода" также позволил нам внедрить некоторые протоколы в новую систему, чтобы решить, какой функционал используется как часто. Таким образом, часть старой функциональности сервера могла быть утилизирована, так как оказалось, что клиенты ее больше не используют. Это было существенным преимуществом "проксирования".[
].