Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.



abstract operation (абстрактная операция)

Операция, у которой отсутствует реализация в виде программного кода (есть спецификация, но нет метода). Реализация такой операции осуществляется любым классом-потомком.
См. abstract; generalizable element; inheritance; polymorphic.

Семантика

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

Нотация

Название абстрактной операции записывается курсивом (рис. 4). Кроме того, ключевое слово abstract можно поместить в список свойств, после сигнатуры операции.

Рис. 4

Обсуждение

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

Алфавитный указатель