Подбельский В.В. Язык C#. Базовый курс. – М., Финансы и статистика, 2011.
Лекция 1. Особенности объектно-ориентированного программирования
Языки низкого уровня в самой большей степени (по сравнению со всеми остальными языками) заставляют программиста думать в терминах структуры компьютера, а не в структуре проблемы, которую он решает. Программист должен установить ассоциацию между машинной моделью и моделью проблемы, которая действительно должна быть решена в «пространстве проблемы», где проблема существует.
Альтернативой к моделированию машины является моделирование решаемой проблемы.
ООП позволяет описать проблему в терминах проблемы, а не в терминах компьютера, где работает решение.
Объектно-ориентированное программирование (ООП) - парадигма программирова-ния, в которой основными концепциями являются понятия объектов и классов.
В языках Процедурного Программирования (ПП) существуют и переменные, и массивы, и функции, и структуры, и объединения, которые можно назвать объектами, но создаются они с помощью базовых или производных типов данных, ключевых слов, определенных правил. А в языках ООП все является объектом: от констант и переменных «базовых типов» до данных агрегированных типов любой сложности. Типы в языке C# вводятся с помощью классов (а также перечислений, структур, интерфейсов, делегатов и массивов).
Класс — это тип, описывающий устройство объектов. Понятие «объект» подразумевает нечто, что обладает определённым состоянием и поведением. Кроме того, задается признак, по которому объекты одного класса можно отличить от других объектов этого же класса (объекты одного класса могут существовать одновременно).
Говорят, что объект — это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Объект описывается своим классом или с другой стороны класс описывает все возможные состояния объектов данного класса (то, что объект может знать) и его поведение (то, что он может делать).
Класс напоминает структуру в языке С, но в этой «структуре» присутствуют еще и методы – аналоги функций в языках ПП – именно методы и определяют поведение объекта, т.е. то, что этот объект может делать.
Объект – это ни в коем случае не функция, т.к. в языках ПП после того, как функция прекращает свою работу, участки памяти, выделенные для ее локальных переменных, считаются свободными. А объект после того, как его привели в активное состояние, работает в течение всего времени работы программы до тех пор, пока не будет уничтожен специальным образом.
Существует несколько определений «объекта»:
Опр_1. Объектом называется совокупность данных (полей), определяющих состояние объекта, и набор функций (методов), обеспечивающих изменение указанных данных (состояние объекта) и доступ к ним.
Опр_2. Объект – это инкапсуляция множества операций (методов), доступных для внешних вызовов, и состояния, запоминающего результаты выполнения указанных операций.
Обязательные признаки объектов:
различимость;
возможность одного объекта находиться в разных состояниях (в разное время);
возможность динамического создания объектов;
«умение» объектов взаимодействовать друг с другом с помощью обменов сообщениями;
наличие методов, позволяющих объекту реагировать на сообщения (на внешние для объекта воздействия);
инкапсуляция данных внутри объектов.
Таким образом, класс есть механизм, задающий структуру (поля данных) всех однотипных объектов и все методы, относящиеся к объектам.
Основные характеристики ООЯ (объектно-ориентированных языков):