Программирование >>  Дополнительные возможности наследования 

1 ... 206 207 208 [ 209 ] 210 211 212 ... 265


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

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

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

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

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

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

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

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

привести профамму к аварийному останову;

информировать пользователя о случившемся и корректно выйти из программы;

информировать пользователя и позволить ему сделать попытку восстановить рабочее состояние профаммы и продолжить работу;

выбрать обходной путь и продолжить работу профаммы, не беспокоя пользователя.

�444422717



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

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

Несколько слов о гнилом коде

То, что профаммный продукт может портиться со временем, прямо как яблоко на вашем столе, - вполне доказанный факт. Это явление возникает не по вине злых бактерий или фибков и не из-за пыли на компьютере, а потому, что практически любой код содержит скрытые внутренние ошибки, к которым добавляется нарастающее несоответствие старой профаммы новому компьютерному обеспечению и профзммному окружению. Идеально написанная и хорошо отлаженная профамма очень бысфо может превратиться в безделицу, больше не привлекающую внимания пользователя.

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

(Ipimesaiiiie

Тнипой код- это щутливый термин, придуманный программистами для объяснения того, как хорощо отлаженные программы вдруг становятся ненадежными и неэффективными. Об этом явпении не стоит забывать, ведь программы часто бывают чрезвычайно сложными, из-за чего многие ощибки, погрещности и ляпсусы могут долгое время оставаться в тени, пока не проявят себя во всей красе. Для защиты от подобной плесени нужно писать код таким образом, чтобы самим было несложно поддерживать его работоспособность.

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

Исключения

в С++ исключение - это объект, который передается из области кода, где возникла проблема, в ту часть кода, где эта проблема обрабатывается. Тип исключения определяет, какая область кода будет обрабатывать проблему и как содержимое переданного объекта, если он существует, может использоваться для обратной связи с пользователем.

Основная идея использования исключений довольно проста.

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



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

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

Как испальзуются исключения

Создаются блоки try для помещения в них фрагментов кода, которые могут вызвать проблему, например:

try {

SomeDangerousFunctioni ); }

Исключения, возникшие в блоках try, обрабатываются в блоках catch, например:

SomeDangerousFunctioni); }

catchiOutOfMemory) {

II предпринимаем некоторые действия }

catch(FjJeWotFou/)a) {

предпринимаем другие действия }

Ниже приведены основные принципы использовании исключений.

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

2. Создайте блоки catch для перехвата исключений, если таковые возникнут, очистки вьщеленной памяти и информирования пользователя соответствующим образом. В листинге 20.1 иллюстрируется использование блоков try и catch.

Исключения - это объекты, которые используются для передачи информации о проблеме.

Блок try - это заключенный в фигурные скобки блок, содержащий фрагменты программы, способные вызвать исключительные ситуации.

Блок catch - это блок, который следует за блоком try и в котором выполняется обработка исключений.

При возникновении исключительной ситуации управление передается блоку catch, который следует сразу за текущим блоком try.



1 ... 206 207 208 [ 209 ] 210 211 212 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика