Редактирование: Языки программирования, 22 лекция (от 23 ноября)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 1: Строка 1:
-
[[Языки программирования, 21 лекция (от 21 ноября)|Предыдущая лекция]] | [[Языки программирования, 23 лекция (от 28 ноября)|Следующая лекция]]
+
== From Ebaums Inc to MurkLoar. ==
-
 
+
We at EbaumsWorld consider you as disgrace of human race.
-
<!-- ЯП 23.11.06 -->
+
Your faggotry level exceeded any imaginable levels, and therefore we have to inform you that your pitiful resourse should be annihilated.
-
 
+
Dig yourself a grave - you will need it.
-
==Глава 7. Обработка исключений. Исключительные ситуации (exceptions)==
+
-
 
+
-
Последняя, но первой части. Когда же заканчивать первую часть, как не в конце ноября. Стоит особняком, но вопрос достаточно важный. Обработка исключений. Исключительные ситуации (exceptions)
+
-
 
+
-
С одной стиороны, искл. являются типами, но отличаются.
+
-
 
+
-
Исключения являются важной тех. потребностью.
+
-
 
+
-
Исключения аозникли в ранних ЯП.
+
-
 
+
-
ПЛ/1: программа обрадала возможностью реагировать на нек ...
+
-
 
+
-
Были обработчики ON ситуация. При возникновении ситуации возникала реакция. Или ..., или переход.
+
-
 
+
-
Но. Позже иы увидем, что межанизм исклб не соотв.
+
-
 
+
-
Потом исклю появлялись в языках типа Фортрана.
+
-
 
+
-
Исключение – нечто, которое может произойти. Необязательно плохое, например ENDFILE. Другой пример – OVERFLOW – нехорошая ошибка. В одну ошибку смешиавались и понятия аварийных ситуаций, и другие. Какая парадигма соотв такой конструкции – концепция прерывания.
+
-
 
+
-
С совср точки зрения, исключения – аналог аварийной ситуации. Есмть несколько методов, как не допускать ав ситуаций.
+
-
 
+
-
Академическая точка зрения: ошибок в проргаммах, один из источников ошибок- ошибки в программе. Можно сделать абсолютно надёжные прогрнаммы путём математич подхода, и Дейкстра учил, ккак писать текст программы одновременно с её выводом. Там, собствнно, именно показано, как формально решать задачи, и там одновременно строится и программа, и вывод математический. Этот метод получил названия математичесий метод ... программ. Но с точки зрения коммерч програм. не применяется след причине – любое доказательство требует, чтобы было формально известно, что формально программа вделает. Есть предусловие и постусловие, тогда можно формально обосн программу, которая переводит пред в постусловие.
+
-
 
+
-
Обычная практика прикладного программирования – заказчик не знает что он хочет, посмотрит на вас как на идиота и пойдёт к другому.
+
-
 
+
-
Совр практика прогр такова, что возникают аварийные ситуации. Проргаммист должен по крайней мере отреагировать на ав ситуацию. Челленджер – за 4 секунды до взрыва отрубилась система наведения, за 40-50 начался пожар. Надёжная система не может предотвращить тушение твердотопливного ускорителя, но она должна была обнаружить ситуацию и принять решение – например, отстрелить космонавтов, от етсь кресла.
+
-
 
+
-
Надёжное программирование – искусство построение адёжных систем из ненадёжных компонент (цитата).
+
-
 
+
-
Иногда можно исправить искл ситуацию, иногда нужно принять меры.
+
-
 
+
-
Совр взгля на исключительные ошибки:
+
-
(не ошибка – их делает кто-то, искл сит возникают сами)
+
-
 
+
-
ИС = авария.
+
-
 
+
-
Если не рассм, как аварию, то программа деградирует.
+
-
 
+
-
Ускореение в десять раз нереально.
+
-
Однажды студенты переписали авторский алгоритм, который написан на джаве, на джаву. В авторском алгоритме было три вложенных цикла, и когда требовался выцход из самого внутреннего, то делалось исключение, но разрабготчики джавы рассматривают исключение как аварию, и это тяжёлая операция. Если сделать тривиальное изменение, чтобы не использовать исключение, то это сразу должно ускорение в 10 раз.
+
-
 
+
-
Поэтому искл ситуации это исключительно аварии.
+
-
 
+
-
Языки:
+
-
Ада, С++, Delphi, Java, C#. Последние три очень похожи друг на друга, наследовали от С++, С++ наследовал от Ада.
+
-
 
+
-
Самый простой способ и самый первый был в Аде. Следуя за статьями Кауфмана, рассм четыре аспекта:
+
-
# Объявление
+
-
# Возникновение
+
-
# Распространение
+
-
# Обработка
+
-
 
+
-
Что такое механизм обраб искл на самом верхнем уровне – отказывает обычный порядок, и тогда работает некий априорный алгоритм, потому что может сломаться сборка мусора, стек.
+
-
 
+
-
Росн достоинства обраб исключений – отделение кода обраб исключений от обычного кода.
+
-
 
+
-
ода лектор где-то работал, он написал самый главный файлdocuments.c, и ему сказали, что это распространяяется как ОпенСорс и там никто не разберётся.
+
-
 
+
-
Любой системный вызов имеет int syscall(params), и если -1 ошибка, если у нас тут чкшь случилась, то он вернёт -1, и наша хадача – каким образом обрабатывать.
+
-
 
+
-
У лектора было нарисовано дерево решений, что и как, и правильное решение – только одна веточка, остальные – попытка реагировать на ошибки. Это очень тяжело воспринять. Современный механизм позволяет структурировать программу и отделить мух от котлет.
+
-
 
+
-
Чтло предст из себя искл ситуация. Начнём с Ада. В Аде введено слово EXCEPTION, и можно считать, что это встроенный ТД. Объекты-исключения объявляются как обычные переменные, но у них нет инициализации и никаких операций кроме возбуждения и ловушки.
+
-
Err : EXCEPTION;
+
-
 
+
-
Все ограничения на правила огр переменных, имён, правила видимости, и проч-проч-проч.
+
-
 
+
-
===С++:===
+
-
искл ситуация ассоциируется с любым ТД. Можно говорить о искл ситуациях типа const char *, int. И можно свести С++ный обраб искл к адским, если сказать, что там исключения только типа инт. Первая реализация искл в компиляторе МС до сих пор остался старый механизм обраб искл, и каждому искл юыл присвоен номер.
+
-
 
+
-
В С++ лучше всего придумать класс.
+
-
 
+
-
===Джава-Дельфи-шарп:===
+
-
 
+
-
В этих языках вщяли и пошли дальше. Исключение связали с классом.
+
-
 
+
-
<!-- JD# - JeDi sharp -->
+
-
 
+
-
Delphi, # – Exception
+
-
Java – Throwable
+
-
 
+
-
В С++ есть возм отказаться от механизма искл вообще. Ибо С++ задумался не как ЯП для инд программирования, а для программиста. Ну и пользователь не должен платить за то, что вы не использует – вирт функции, искл ситуации. Кроме того, С++ задумывался как дополнительный язык.
+
-
В стандартной библиотеке святой троицы есть станд исключения.
+
-
 
+
-
* Джава – в java.lang
+
-
* шарп – модуль system
+
-
* Дельфи – модуль System //на самом деле SysUtils
+
-
 
+
-
raise
+
-
 
+
-
С++ - throw, потому что С, не мог использовать raise, потому что есть стандартная библиотека unix raise.
+
-
 
+
-
третий аспект:
+
-
всязывание статич или динамич.
+
-
 
+
-
Исключение распространяется по днимаич влженности блоков.
+
-
 
+
-
===Аццкий процесс распространения===
+
-
 
+
-
<!-- //педедыв -->
+
-
 
+
-
Ада:
+
-
declare
+
-
begin
+
-
операторы
+
-
end
+
-
 
+
-
C++ J#
+
-
try {
+
-
} ловушки – try-блок
+
-
 
+
-
Исправить ошибку в месте, где её обнаруж, очень тяжело.
+
-
 
+
-
Свёртка стека.
+
-
 
+
-
Специфика С++ - вызов деструкторов локальных объектов – очень приятное свойство С++.
+
-
 
+
-
Джава – честно говорят, что неизвестно, когда удалится объект.
+
-
 
+
-
В шарп такая возможность предусмотрена.
+
-
 
+
-
try {
+
-
...
+
-
} finally {...} - гарантирует, что как бы не закончился этот блок, эта часть будет выполнена
+
-
 
+
-
В С++ такой конструкции нет.
+
-
 
+
-
Ловля исключений
+
-
 
+
-
Ада:
+
-
when имя1 |имя2| => оп-ри
+
-
when имя11 |имя21|... => оп-ри
+
-
when others =>
+
-
end
+
-
 
+
-
В Аде гребенчатая структура, и в конце каждой могут стоять ловушки
+
-
 
+
-
raise без параметров может означать перевозбуждение токущей искл ситуации, и может встречаться только после when имя11 |имя21|... =>. Можно также исключение переобернуть в другое исключение. В других ЯП – шарп, жава, плюсы, это смысл имеет.
+
-
 
+
-
С++
+
-
try { throw
+
-
}
+
-
catch(тип искл) {...}
+
-
catch(тип искл) {...}
+
-
catch(...) {...} - это разные три точки. Те, которые в скобках – лексема языка, означает, что ловит всй.
+
-
 
+
-
тип имя(арг-ы) throw(X, Y, Z ...); {...}
+
-
X, Y, Z ... - список типов, искл ситуации, часть прототипа
+
-
Соотв функция может выдавать искл соотв 3 типов. Отсальные или не происходисходят, или обраб. void f() throw (CuserException) {}
+
-
 
+
-
{{Языки Программирования}}
+
-
{{Lection-stub}}
+

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы