Бьерн Страуструп.
Язык программирования С++
294
повлияем на использование ее класса и на взаимоотношения этого класса с другими. Объекты из
класса, имеющего хотя бы одну виртуальную функцию, требуют нетривиального распределения
памяти, если сравнить их с объектами из таких языков как С или Фортран. Класс с хотя бы одной
виртуальной функцией по сути выступает в роли интерфейса по отношению к классам, которые "еще
могут быть определены", а виртуальная функция предполагает зависимость от классов, которые "еще
могу быть определены" (см. $$12.2.3)
Отметим, что стратегия минимализма требует, пожалуй, больших усилий со стороны разработчика.
При определении набора операций больше внимания следует уделять тому, что надо сделать, а не
тому, как это делать.
Иногда полезно классифицировать операции класса по тому, как они работают с внутренним
состоянием объектов:
-
Базовые операции: конструкторы, деструкторы, операции копирования.
-
Селекторы: операции, не изменяющие состояния объекта.
-
Модификаторы: операции, изменяющие состояние объекта.
-
Операции преобразований, т.е. операции порождающие объект другого типа, исходя из
значения (состояния) объекта, к которому они применяются.
-
Повторители: операции, которые открывают доступ к объектам класса или используют
последовательность объектов.
Это не есть разбиение на ортогональные группы операций. Например, повторитель может быть
спроектирован как селектор или модификатор. Выделение этих групп просто предназначено помочь в
процессе проектирования интерфейса класса. Конечно, допустима и другая классификация.
Проведение такой классификации особенно полезно для поддержания непротиворечивости между
классами в рамках одного компонента.
В языке С++ есть конструкция, помогающая заданию селекторов и модификаторов в виде функции-
члена со спецификацией const и без нее. Кроме того, есть средства, позволяющие явно задать
конструкторы, деструкторы и функции преобразования. Операция копирования реализуется с помощью
операций присваивания и конструкторов копирования.
Достарыңызбен бөлісу: