|
Программирование >> Структурное программирование
Замечание по технике программирования 6.3 Функции-элементы обычно короче, чем обычные функции в программах без объектной ориентации, потому что достоверность данных, хранимых в данных-элементах, идеально проверена конструктором и функциями-элементами, которые сохраняют новые данные. Отметим, что данные-элементы класса не могут получать начальные значения в теле класса, где они объявляются. Эти данные-элементы должны получать начальные значения с помощью конструктора класса или им можно присваивать значения через функции. Типичная ошибка программирования 6.2 Попытка явно присвоить начальное значение данным-элементам в определении класса. Функция с тем же именем, что и класс, но со стоящим перед ней символом тильда (~), называется деструктором этого класса (наш пример не включает деструктор). Деструктор производит завершающие служебные действия над каждым объектом класса перед тем, как память, отведенная под этот объект, будет повторно использована системой. Подробнее мы обсудим конструкторы и деструкторы позже в этой главе и в главе 7. Заметим, что функции, которыми класс снабжает внешний мир, предваряются меткой public. Открытые функции реализуют все возможности класса, необходимые для его клиентов. Открытые функции класса называют интерфейсом класса или открытым интерфейсом. Замечание по технике программирования 6.4 Клиенты имеют доступ к интерфейсу класса, но не имеют доступа к реализации класса. Объявление класса содержит объявления данных-элементов и функций-элементов класса. Объявления функций-элементов являются прототипами функций, которые мы обсуждали в предыдущих главах. Функции-элементы могут быть описаны внутри класса, но хороший стиль программирования заключается в описании функций вне определения класса. Замечание по технике программирования 6.5 Объявление функций-элементов внутри определения класса и описание функций-элементов, вне этого определения отделяет интерфейс класса от его реализации. Это способствует высокому качеству разработки программного обеспечения. Отметим использование бинарной операции разрешения области действия (::) в каждом определении функции-элемента, следующем за определением класса на рис. 6.3. После того, как класс определен и его функции-элементы объявлены, эти функции-элементы должны быть описаны. Каждая функция-элемент может быть описана прямо в теле класса (вместо включение прототипа функции класса) или после тела класса. Когда функция-элемент описывается после соответствующего определения класса, имя функции предваряется именем класса и бинарной операцией разрешения области дейст- ВИЯ (::).Поскольку разные классы могут иметь элементы с одинаковыми именами, операция разрешения области действия привязывает имя элемента к имени класса, чтобы однозначно идентифицировать функции-элементы данного класса. Несмотря на то, что функция-элемент, объявленная в определении класса, может быть описана вне этого определения, эта функция-элемент все равно имеет областью действия класс, т.е. ее имя известно только другим элементам класса пока к ней обращаются посредством объекта класса, ссылки на объект класса или указателя на объект класса. Об области действия класса мы более подробно еще поговорим позднее. Если функция-элемент описана в определении класса, она автоматически встраивается inline. Функция-элемент, описанная вне определения класса, может быть сделана встраиваемой посредством явного использования ключевого слова inline. Напомним, что компилятор резервирует за собой право не встраивать никаких функций. Совет по повышению эффективности 6.3 Описание небольших функций-элементов внутри определения класса автоматически встраивает функцию-элемент inline (если компилятор решит делать это). Это может улучшить производительноаь, но не способствует улучшению качества проектирования программного обеспечения. Интересно, что функции-элементы printMilitary и printStandard не получают никаких аргументов. Это происходит потому, что функции-элементы неявно знают, что они печатают данные-элементы определенного объекта типа Time, для которого они активизированы. Это делает вызовы функций-элементов более краткими, чем соответствующие вызовы функций в процедурном программировании. Это уменьшает также вероятность передачи неверных аргументов, неверных типов аргументов или неверного количества аргументов. Замечание по технике программирования 6.6 Использование принципов объектно-ориентированного программирования часто может упростить вызовы функции за счет уменьшения числа передаваемых параметров. Это достоинство объектно-ориентированного программирования проистекает из того факта, что инкапсуляция данных-элементов и функций-элементов внутри объекта дает функциям-элементам право прямого доступа к данным-элементам. Классы упрощают программирование, потому что клиент (или пользователь объекта класса) имеет дело только с операциями, инкапсулированными или встроенными в объект. Такие операции обычно проектируются ориентированными именно на клиента, а не на удобную реализацию. Клиентам нет необходимости касаться реализации класса. Интерфейсы меняются, но не так часто, как реализации. При изменении реализации соответственно должны изменяться ориентированные на реализацию коды. А путем скрытия реализации мы исключаем возможность для других частей программы оказаться зависимыми от особенностей реализации класса. Часто классы не создаются на пустом месте . Обычно они являются производными от других классов, обеспечивающих новые классы необходимыми им операциями. Или классы могут включать объекты других классов 6.6. Область действия класс и доступ к элементам класса Данные-элементы класса (переменные, объявленные в определении класса) и функции-элементы (функции, объявленные в определении класса) имеют областью действия класс. Функции, не являющиеся элементом класса, имеют областью действия файл. При области действия класс элементы класса непосредственно доступны всем функциям-элементам этого класса и на них можно ссылаться просто по имени. Вне области действия класс к элементам класса можно обращаться либо через имя объекта, либо ссылкой на объект, либо с помощью указателя на объект. Функции-элементы класса можно перегружать, но только с помощью других функций-элементов класса. Для перегрузки функции-элемента просто обеспечьте в определении класса прототип для каждой версии перегруженной функции и снабдите каждую версию функции отдельным описанием. Типичная ошибка программирования 6.3 Попытка перегрузить функцию-элемент класса с помощью функции не из области дейавия этого класса. Функции-элементы имеют внутри класса область действия функцию: переменные, определенные в функции-элементе, известны только этой функции. Если функция-элемент определяет переменную с тем же именем, что и переменная в области действия класс, последняя делается невидимой в области действия функция. Такая скрытая переменная может быть доступна посредством операции разрешения области действия с предшествующим этой операции именем класса. Невидимые глобальные переменные могут быть доступны с помощью унарной операции разрешения области действия (смотри главу 3). Операции, использованные для доступа к элементам класса, аналогичны операциям, используемым для доступа к элементам структуры. Операция выбора элемента точка (.) комбинируется для доступа к элементам объекта с именем объекта или со ссылкой на объект. Операция выбора элемента стрелка (->) комбинируется для доступа к элементам объекта с указателем на объект. Программа на рис. 6.4 использует простой класс, названный Count, с открытым элементом данных х типа int и открытой функцией-элементом print, чтобы проиллюстрировать доступ к элементам класса с помощью операций выбора элемента. Программа создает три экземпляра переменных типа Count - counter, counterRef (ссылка на объект типа Count) и counterPtr (указатель на объект типа Count). Переменная counter Ref объявлена, чтобы как элементы. Такое повторное использование программного обеспечения значительно увеличивает производительность программиста. Создание новых классов на основе уже существующих классов называется наследованием и подробно обсуждается в главе 9. Включение классов как элементов других классов называется композицией и обсуждается в главе 7.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.012
При копировании материалов приветствуются ссылки. |