double arrow

Инкапсуляция. В самом общем смысле класс – это тип, определяемый пользователем

Классы

В самом общем смысле класс – это тип, определяемый пользователем. Но зачем в программировании вообще нужны какие-то типы? Дело в том, что когда программист объявляет в своей программе какую-то переменную (например, с названием Х), то компьютер должен выделить память соответствующего размера для хранения значения этой переменной. Но, чтобы выделить память, компьютер должен знать – сколько ее нужно выделить. Эту информацию и несет в себе тип. Именно поэтому при объявлении переменной необходимо указывать ее тип. Например, int Х. Но информация о типе необходима не только для этого. Она нужна еще и для того, чтобы определить набор операций, которые можно выполнять над объявленными данными. Например, переменные типа int (целое) можно использовать со всеми арифметическими операциями. Можно складывать, вычитать, умножать и делить целые числа. А теперь представим себе переменную с типом указателя на целое (int *X). Следует отметить, что указатель как и обычная переменная целого типа может иметь внутреннее представление в виде целого числа. Однако, указатель не допускает выполнения операций, возможных при работе с целыми числами. Например, нельзя перемножать два указателя друг с другом. Такое действие не имеет смысла и поэтому не реализовано в типе указателя. Таким образом, когда в программе объявляются переменные разного типа, то компьютером не только выделяется память для них, но это еще и позволяет установить – какие операции можно выполнять с переменными объявленного типа. То есть, указание типа переменной позволяет определить:

  • Какой объем памяти необходим для размещения соответствующего объекта данных;
  • Какие операции или функции можно выполнять над объектом.

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

Класс – это обобщенное понятие, определяющие характеристики и поведение некоторого множества объектов, называемых экземплярами класса. «Классический» класс содержит данные, определяющие свойства объектов класса, и методы, определяющие их поведение. Для Windows-приложений в класс добавляется третья составляющая – события, на которые может реагировать объект класса.

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

Объект (экземпляр класса).

Реализация (instantiation) в ООП означает факт создания экземпляра (он же объект) некоторого класса.

Как правило, экземпляр класса представляет собой некий особый опознаваемый предмет, блок или сущность (реальную или абстрактную), имеющую важное функциональное назначение в данной предметной области. Поэтому будем называть объектом понятие, абстракцию или любую вещь с четко очерченными границами, имеющую смысл в контексте рассматриваемой прикладной проблемы. Введение объектов преследует две цели:

  • понимание прикладной задачи (проблемы);
  • введение основы для реализации на компьютере.

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

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

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

Атрибут - это значение, характеризующее состояние объекта (экземпляра) класса. Примеры атрибутов. Среди атрибутов различаются постоянные атрибуты (константы) и переменные атрибуты. Постоянные атрибуты характеризуют объект в его классе (например, номер счета, категория, имя человека и т.п.). Текущие значения переменных атрибутов характеризуют текущее состояние объекта (например, баланс счета, возраст человека и т.п.); изменяя значения этих атрибутов, мы изменяем состояние объекта.

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

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

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

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

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

Существуют следующие наиболее распространенные виды операций:

· Модификатор - изменяет состояние объекта путем записи или доступа (операция записи).

· Селектор - дает доступ для определения состояния объекта без его изменения ( операция чтения).

· Итератор - организация доступа к частям объекта в определенной последовательности.

· Конструктор - инициализация объекта

· Деструктор – освобождение памяти, занимаемой его составными частями.


Сейчас читают про: