|
Программирование >> Структурное программирование
I Глава 6 Замечания по технике программирования 6.1. Важно писать программы, которые легко понимать и поддерживать. Изменения являются скорее правилом, чем исключением. Программисты должны предвидеть, что их коды будут изменяться. Как мы увидим, классы способствуют модифицируемости программ. 6.2. Клиенты класса используют класс, не зная внутренних деталей его реализации. Если реализация класса изменяется (например, с целью улучшения производительности), интерфейс класса остается неизменным и исходный код клиента класса не требует изменений. Это значительно упрощает модификацию систем. 6.3. Функции-элементы обычно короче, чем обычные функции в программах без объектной ориентации, потому что достоверность данных, хранимых в данных-элементах, идеально проверена конструктором и функциями-элементами, которые сохраняют новые данные. 6.4. Клиенты имеют доступ к интерфейсу класса, но не имеют доступа к реализации класса. 6.5. Объявление функций-элементов внутри определения класса и описание функций-элементов вне этого определения отделяет интерфейс класса от его реализации. Это способствует высокому качеству разработки программного обеспечения. 6.6. Использование принципов объектно-ориентированного программирования часто может упростить вызовы функции за счет уменьшения числа передаваемых параметров. Это достоинство объектно-ориентированного программирования проистекает из того факта, что инкапсуляция данных-элементов и функций-элементов внутри объекта дает функциям-элементам право прямого доступа к данным-элементам. 6.7. Помещайте объявление класса в заголовочный файл, чтобы оно было доступно любому клиенту, который захочет использовать класс. Это формирует открытый интерфейс класса. Помещайте определения функций-элементов класса в исходный файл. Это формирует реализацию класса. 6.8. Клиенты класса не нуждаются в доступе к исходному коду класса для того, чтобы использовать класс. Однако, клиенты должны иметь возможность связаться с объектным кодом класса. 6.9. Информация, важная для интерфейса класса, должна включаться в заголовочный файл. Информация, которая будет использоваться только внутри класса и которая не является необходимой для клиентов класса, должна включаться в неоглашаемый исходный файл. Это еще один пример принципа наименьших привилегий. 6.10. С-Н- способствует созданию программ, не зависящих от реализации. Если, изменяется реализация класса, используемого программой, не зависящей от реализации, то код этой программы не требует изменения, но может потребоваться его перекомпиляция. 6.11. Делайте все данные-элементы класса закрытыми. Используйте открытые функции-элементы для задания и получения значений закрытых данных-элементов. Такая архитектура помогает скрыть реализацию класса от его клиентов, что снижает число ошибок и улучшает модифицируемость программ. 6.12. Разработчики классов используют доступ типа public, protected или private, чтобы обеспечить скрытие информации и принцип наименьших привилегий. 6.13. Разработчик класса не обязательно должен снабжать каждый элемент закрытых данных функциями get и set; такие возможности должны быть обеспечены, только тогда, когда это имеет смысл, и лишь после тщательного обдумывания разработчиком класса. 6.14. Задание данных-элементов класса закрытыми, а функций-элементов класса открытыми облегчает отладку, так как проблемы с манипуляциями данных локализуются в рамках либо функций-элементов класса, либо друзей класса. 6.15. Функции-элементы можно разбить на ряд категорий: функции, которые читают и возвращают значения закрытых данных-элементов; функции, которые устанавливают значения закрытых данных-элементов; функции, которые реализуют возможности класса; функции, которые выполняют для класса различные вспомогательные операции, такие, как задание начальных значений объектам класса, присваивания объектам класса, преобразования между классами и встроенными типами или между классами и другими классами, выделение памяти для объектов класса. 6.16. Если функция-элемент класса уже обеспечивает все или часть функциональных возможностей, требуемых конструктором (или другой функцией-элементом), вызывайте эту функцию-элемент из конструктора (или другой функции-элемента). Это упрощает сопровождение программы и уменьшает вероятность ошибки при изменении реализации кода. 6.17. Задание закрытых данных-элементов и управление доступом к ним, особенно доступом к записи данных-элементов, посредством открытых функций-элементов помогает гарантировать целостность данных. 6.18. Доступ к закрытым данным посредством функций записи и чтения не только защищает данные-элементы от присваивания им неправильных значений, но и отделяет клиентов класса от внутреннего представления данных-элементов. Таким образом, если внутреннее представление этих данных по каким-либо причинам (обычно из-за требований сокращения объема памяти или повышения производительности) изменяется, достаточно изменить только функции-элементы, а клиентам не требуется вносить никаких изменений, пока остается неизменным интерфейс функций-элементов. Однако, возможно, потребуется перекомпиляция клиентов данного класса. к) Говорят, что реализация класса скрыта от его клиентов или 1) Для введения определения класса можно использовать ключевые слова и . т) Элементы класса, указанные как , доступны везде в области действия объекта класса. 6.2. Найдите ошибку (или ошибки) в каждом из следующих пунктов и объясните, как их исправить. a) Допустим, что в классе Time объявлен следующий прототип. void ~Time(int); b) Следующий фрагмент является частью определения класса Time. class Time { public; прототипы функций private: int hour = 0; int minute = 0; int second = 0; c) Допустим, что в классе Employee объявлен следующий прототип. int Employee(const char *, const char *); Упражнения для самопроверки 6.1. Заполнить пробелы в следующих утверждениях: a) Ключевое слово начинает определение структуры. b) Элементы класса доступны посредством операции в сочетании с объектом класса или посредством операции в сочетании с указателем на объект класса. c) Элементы класса, указанные как , доступны только функциям-элементам класса и друзьям класса. d) является специальной функцией-элементом, используемой для задания начальных значений элементам данных класса. e) По умолчанию доступ к элементам класса - . f) Функция используется для присваивания значений закрытым данным-элементам класса. g) можно использовать для присваивания объекта класса другому объекту того же класса. h) Функции-элементы класса обычно делаются типа, а данные-элементы - типа. i) Функция используется для получения значений закрытых данных класса. j) Набор открытых функций-элементов класса рассматривается как класса.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |