Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП (Заочно).docx
Скачиваний:
1
Добавлен:
27.09.2019
Размер:
58.56 Кб
Скачать

Важные классы (типы данных)

Некоторые классы объектов используются очень широко. Средства работы с ними можно изучать непосредственно по справочной документации. К таким классам относятся: DateTime, TimeSpan, String и StringBuilder. Документация доступна по ссылкам:

http://msdn.microsoft.com/ru-ru/library/system.timespan.aspx

http://msdn.microsoft.com/ru-ru/library/system.datetime.aspx

http://msdn.microsoft.com/ru-ru/library/system.text.stringbuilder.aspx

http://msdn.microsoft.com/en-us/library/system.string.aspx

Обратите внимание на методы String.Format и StringBulder.AppendFormat. Подобных этим методам довольно много и ознакомившись с ними вы успешно сможете пользоваться их аналогами в других случаях.

Обобщенные контейнеры

Важную роль играют обобщенные контейнерные классы или контейнеры. Среди них выделяют последовательные, такие как List, Queue, Stack и LinkedList и ассоциативные, такие как Dictionry, HashSet. Документация доступна по ссылкам:

http://msdn.microsoft.com/ru-ru/library/xfhwa508.aspx

http://msdn.microsoft.com/ru-ru/library/6sh2ey19.aspx

http://msdn.microsoft.com/ru-ru/library/bb359438.aspx

http://msdn.microsoft.com/ru-ru/library/7977ey2c.aspx

http://msdn.microsoft.com/ru-ru/library/3278tedw.aspx

http://msdn.microsoft.com/ru-ru/library/he2s3bh7.aspx

Сведения о свойствах различных контейнеров нужно восстановить из курса САОД.

Статические методы и свойства

Когда мы применяли методы к объектам, например, во фрагменте 7 при рисовании объектов. Когда мы пишем:

ф.Нарисуйся();

То метод ‘Нарисуйся’ получает в качестве неявного параметра объект ‘ф’, который указан перед именем метода. В этом случае метод может использовать данные объекта для выполнения действий (и это важно, что бы нарисовать нужную фигуру).

Но бывают методы и данные, которые не связаны с конкретным объектом, а связаны лишь с классом в целом. К таким методам относится метод Main в консольных приложениях, метод Format класса String и многие другие.

Объявляются статические методы и данные с добавлением ключевого слова static. При этом, обычные методы имеют доступ к статическуим методам и данным, а статические методы не связываются с объектами. Их вызов выглядит, например, так:

String.Format (…);

Т.е. вместо объекта слева указывается имя класса.

Рассмотрим такой пример

public class Demo

{

public static int N{get; set; } // Статическое свойство N

public Demo() {N++;} // Конструктор

~Demo() {N--;} // Деструктор

}

Здесь N – общее для всех объектов класса Demo свойство. Каждый объект увеличивает его при создании (конструктор) и уменьшает при разрушении (деструктор). Таким образом, мы можем в любой момент узнать, сколько объектов данного класса существует в программе.

Это и есть основное применение статических методов и свойств – предоставить единую точку взаимодействия. Например, как Main – точка начала работы любой программы. Она может быть только одна.

Обработка исключений

При выполнении программы часто возникают ситуации, в которых следование основному алгоритмы невозможно. Например, нужно разделить одно число на другое, а знаменатель равен 0. Нужно вызвать метод объекта, а ссылка на него равна null и т.п.

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

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

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

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

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

Синтаксически это оформляется так:

try

{

… Охраняемый код

}

catch (ExceptionA e)

{

… Обработка исключений типа ExceptionA

}

catch (ExceptionB e)

{

… Обработка исключений типа ExceptionB

}

catch (Exception e)

{

… Обработка исключений всех потомков класса Exception

}

finally

{

… Обязательное исполнение, не зависимо от того, возникало ли исключение в процессе работы программы

}

Фрагмент 11. Пример структуры оператора try-catch-finally.

Работает эта схема так. Во всех случаях, когда выполнение действия не возможно, система генерирует Исключение – объект потомок класса Exception. Если исключение возникло в блоке try, то оно перехватывается последующими обработчиками (catch - поймать). Перехват выполняется последовательно до первого совпадения. В нашем случае сначала проверяется не может ли возникшее исключение быть приведено к типу ExceptionA. Если может, то выполняется соответствующий блок catch и на этом обработка исключения заканчивается. Если текущее исключение не может быть приведено к ExceptionA, то проверяется возможность приведения к ExceptionB и т.п. К типу Exception приводятся все исключения, так что если очередь до него дойдет, то все исключения будут перехвачены.

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

Блок finally может присутствовать ии отсутствовать. Если он присутствует, то он выполняется всегда, не зависимо от того, возникало ли исключение в охраняемом коде.

После блока try должен идти хотя бы один блок catch или finally, иначе это будет трактоваться как синтаксическая ошибка.

Исключения генерирует не только .Net framework. Это может делать и сам программист. Вброс исключения в систему обработки ошибок выполняется оператором

throw new MyException(“Сообщение об ошибке”);

Подробнее познакомиться с применением try-catch-finally можно по ссылке: http://msdn.microsoft.com/ru-ru/library/dszsf989.aspx

Хорошая практика применения системы обработки исключений требует выполнения следующего правила: “Если исключение перехвачено, то его нужно обязательно обработать”. Обработка зависит от вида программы. Серверные программы, как правило, делают запись в лог о причине и месте возникновения исключения и продолжают работу. Программы, работающие с пользователем, часто сообщают об ошибке пользователю. Но нельзя оставлять блок обработки пустым. Это приведет к тому, что возникшие исключения не будут иметь видимых проявлений, но программа работать правильно не будет!

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]