33. Предпочитайте минимальные классы монолитным
33. Предпочитайте минимальные классы монолитным
Резюме
Разделяй и властвуй: небольшие классы легче писать, тестировать и использовать. Они также применимы в большем количестве ситуаций. Предпочитайте такие небольшие классы, которые воплощают простые концепции, классам, пытающимся реализовать как несколько концепций, так и сложные концепции (см. рекомендации 5 и 6).
Обсуждение
Разработка больших причудливых классов — типичная ошибка новичка в объектно-ориентированном проектировании. Перспектива иметь класс, который предоставляет полную и сложную функциональность "в одном флаконе", может оказаться очень привлекательной. Однако подход, состоящий в разработке небольших, минимальных классов, которые легко комбинировать, на практике по ряду причин оказывается более успешен для систем любого размера и сложности.
• Минимальный класс воплощает одну концепцию на соответствующем уровне детализации. Монолитный класс обычно включает несколько отдельных концепций, и использование только одной из них влечет за собой излишние накладные расходы (см. рекомендации 5 и 11).
• Минимальный класс легче понять и проще использовать (в том числе повторно).
• Минимальный класс проще в употреблении. Монолитный класс часто должен использоваться как большое неделимое целое. Например, монолитный класс Matrix может попытаться реализовать и использовать экзотическую функциональность — такую как вычисление собственных значений матрицы — даже если большинству пользователей этого класса требуются всего лишь азы линейной алгебры. Лучшим вариантом будет реализация различных функциональных областей в виде функций, не являющихся членами, которые работают с минимальным типом Matrix. Тогда эти функциональные области могут быть протестированы и использованы отдельно только теми пользователями, кто в них нуждается (см. рекомендацию 44).
• Монолитные классы снижают инкапсуляцию. Если класс имеет много функций-членов, которые не обязаны быть членами, но тем не менее являются таковыми (таким образом обеспечивается излишняя видимость закрытой реализации), то закрытые члены-данные класса становятся почти столь же плохими с точки зрения дизайна, как и открытые переменные.
• Монолитные классы обычно являются результатом попыток предсказать и предоставить "полное" решение некоторой проблемы; на практике же такие действия почти никогда не приводят к успешному результату.
• Монолитные классы сложнее сделать корректными и безопасными в связи с тем, что при их разработке зачастую нарушается принцип "Один объект — одна задача" (см. рекомендации 5 и 44).
Ссылки
[Cargill92] pp. 85-86, 152, 174-177 • [Lakos96] §0.2.1-2, §1.8, §8.1-2 • [Meyers97] §18 • [Stroustrup00] §16.2.2, §23.4.3.2, §24.4.3 • [Sutter04] §37-40
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Минимальные системные требования
Минимальные системные требования Radmin — довольно скромная программа, если речь идет о требованиях к аппаратной части компьютера. Ее можно запускать даже на машине с 386 процессором, имеющей 8 Мбайт оперативной памяти. Другими словами, если вы смогли установить на
28. Предпочитайте канонический вид ++ и --, и вызов префиксных операторов
28. Предпочитайте канонический вид ++ и --, и вызов префиксных операторов РезюмеОсобенность операторов инкремента и декремента состоит в том, что у них есть префиксная и постфиксная формы с немного отличающейся семантикой. Определяйте операторы operator++ и operator-- так, чтобы они
34. Предпочитайте композицию наследованию
34. Предпочитайте композицию наследованию РезюмеИзбегайте "налога на наследство": наследование — вторая по силе после отношения дружбы взаимосвязь, которую можно выразить в С++. Сильные связи нежелательны, и их следует избегать везде, где только можно. Таким образом,
36. Предпочитайте предоставление абстрактных интерфейсов
36. Предпочитайте предоставление абстрактных интерфейсов РезюмеВы любите абстракционизм? Абстрактные интерфейсы помогают вам сосредоточиться на проблемах правильного абстрагирования, не вдаваясь в детали реализации или управления состояниями. Предпочтительно
48. В конструкторах предпочитайте инициализацию присваиванию
48. В конструкторах предпочитайте инициализацию присваиванию РезюмеВ конструкторах использование инициализации вместо присваивания для установки значений переменных-членов предохраняет от ненужной работы времени выполнения при том же объеме вводимого исходного
55. Предпочитайте канонический вид присваивания
55. Предпочитайте канонический вид присваивания РезюмеПри реализации оператора operator= предпочитайте использовать канонический вид — невиртуальный с определенной сигнатурой.ОбсуждениеПредпочтительно объявлять копирующее присваивание для типа T с одной из следующих
81. Предпочитайте операции с диапазонами операциям с отдельными элементами
81. Предпочитайте операции с диапазонами операциям с отдельными элементами РезюмеПри добавлении элементов в контейнер лучше использовать операции с диапазонами (т.е. функцию insert, которая получает пару итераторов), а не последовательность вызовов функции для вставки
84. Предпочитайте вызовы алгоритмов самостоятельно разрабатываемым циклам
84. Предпочитайте вызовы алгоритмов самостоятельно разрабатываемым циклам РезюмеРазумно используйте функциональные объекты. В очень простых случаях написанные самостоятельно циклы могут оказаться более простым и эффективным решением. Тем не менее, вызов алгоритма
Минимальные требования к машине
Минимальные требования к машине Минимальные требования зависят от того, как вы планируете использовать систему. Вы можете запустить сервер и разрабатывать схемы баз данных на персональном компьютере с минимальной конфигурацией- даже на "быстром" 486 или на Pentium II с 64 Мбайт
Отложенные классы как частичные интерпретации: классы поведения
Отложенные классы как частичные интерпретации: классы поведения Не все отложенные классы так близки к АТД как STACK. В промежутке между полностью абстрактным классом, таким как STACK, в котором все существенные компоненты отложены, и эффективным классом, таким как FIXED_STACK,
Минимальные требования к компьютеру
Минимальные требования к компьютеру Программа Uranus не отличается большими размерами, не требует большого количества оперативной памяти и места на диске, имеет достаточно небольшие требования к платформе.Необходимыми для правильной работы программ Uranus восьмых и девятых
Минимальные требования к компьютеру
Минимальные требования к компьютеру Для установки программы Zet 8 вам потребуется:? Процессор Pentium-75. Это минимальный вариант. Для наиболее удобного использования рекомендуется Pentium-800.? Оперативная память 16 Мбайт RAM (рекомендуется 128 Мбайт RAM).? Видеорежим 800?600 High Color (16
Минимальные требования к компьютеру
Минимальные требования к компьютеру Для обеспечения нормальной работы процессора и программ семейства Almagest компьютер должен обладать как минимум следующими требованиями:? IBM Pentium 100 (процессор с рабочей частотой не ниже 100 MHz);? Минимум 32 Мбайт оперативной памяти (RAM);? CD-ROM;?