Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Совершенный код. Мастер-класс - Макконнелл С.

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 212 213 214 215 216 217 < 218 > 219 220 221 222 223 224 .. 426 >> Следующая

}
t ransaction->Complete(); delete transaction;
}
В системах любого размера оператор switch можно заменить
вызовом специального метода фабрики объекта, который может
повторно использоваться в любом месте, где нужно создать
объект типа Transaction. Если бы этот код принадлежал такой
системе, то он мог бы стать еще проще:
Пример хорошего кода, использующего полиморфизм и фабрику
объекта (C++)
TransactionData transactionData;
Transaction *transaction;
while ( !TransactionsComplete() ) {
// Читаем транзакционную запись и выполняем транзакцию.
transactionData = ReadTransaction();
transaction = TransactionFactory.Create( transactionData );
transaction->Complete(); delete transaction;
}
ГЛАВА 19 Общие вопросы управления 447
Чтобы вам было понятно, код метода TransactionFactory- .
Create0 представляет собой простую адаптацию оператора switch
из предыдущего примера:
Пример хорошего кода для фабрики объекта (C++)
Transaction *TransactionFactory::Create(
TransactionData transactionData ) {
// Создаем объект транзакции на основе ее типа, switch (
transactionData.Туре ) { case ( TransactionType_Deposit ):
return new Deposit( transactionData ); break;
case ( TransactionType_Withdrawal ):
return new Withdrawal transactionData ); break;
case ( TransactionType_Transfer ):
return new Transfer( transactionData ); break;
default:
// Обрабатываем неизвестный тип транзакции.
LogTransactionError( "Unknown Transaction Type",
transactionData ); return NULL;

Перепроектируйте глубоко вложенный код Некоторые эксперты
утверждают, что операторы case в объектно-ориентированном
программировании практически всегда сигнализируют о плохо
факторизованном коде и должны использоваться как можно реже
(Meyer, 1997). И показанное преобразование из операторов case,
вызывающих методы, к фабрике объекта с вызовами полиморфных
методов - один из таких примеров.
Обобщая, можно сказать, что сложный код - это признак того,
что вы недостаточно хорошо понимаете свою программу, чтобы
сделать ее простой. Глубокая вложенность - это знак,
предупреждающий о том, что нужно добавить вызов метода или
перепроектировать сложную часть кода. Это не значит, что вы
обязаны переписать весь метод, но у вас должна быть веская
причина не делать этого.
Сводка методик уменьшения глубины вложенности
Далее перечислены способы, позволяющие уменьшить вложенность.
Рядом указаны ссылки на разделы этой книги, в которых эти
способы обсуждаются:
¦ повторная проверка части условия (этот раздел);
¦ конвертирование в блоки if-then-else (этот раздел);
Перекрести шт Допшжи- тельные полезные улучшения тт тгщрШ шю
см, * главе 24.
448 ЧАСТЬ IV Операторы
¦ преобразование к оператору case (этот раздел);
¦ факторизация глубоко вложенного кода в отдельный метод (этот
раздел);
¦ использование объектной и полиморфной диспетчеризации (этот
раздел);
¦ изменение кода с целью использования статусной переменной
(раздел 17.3);
¦ использование сторожевых операторов для выхода из метода и
пояснения номинального хода алгоритма (раздел 17.1);
¦ использование исключений (раздел 8.4);
¦ полное перепроектирование глубоко вложенного кода (этот
раздел).
Термин "структурное программирование" был введен в
исторической статье "Structured Programming", представленной
Эдсжером Дейкстрой на конференции НАТО по разработке ПО в 1969
году (Dijkstra, 1969). С тех самых пор термин "структурный"
применялся к любой деятельности в области разработки ПО,
включая структурный анализ, структурный дизайн и структурное
валяние дурака. Различные структурные методики не имели между
собой ничего общего, кроме того, что все они создавались в то
время, когда слово "структурный" придавало им большую
значимость.
Суть структурного программирования состоит в простой идее:
программа должна использовать управляющие конструкции с одним
входом и одним выходом. Такая конструкция представляет собой
блок кода, в котором есть только одно место, где он может
начинаться, и одно - где может заканчиваться. У него нет
других входов и выходов. Структурное программирование - это не
то же самое, что и структурное проектирование сверху вниз. Оно
относится только к уровню кодирования.
Структурная программа пишется в упорядоченной,
дисциплинированной манере и не содержит непредсказуемых
переходов с места на место. Вы можете читать ее сверху вниз, и
практически так же она выполняется. Менее дисциплинированные
подходы приводят к такому исходному коду, который содержит
менее понятную и удобную для чтения картину того, как
программа выполняется. Меньшая читабельность означает худшее
понимание и в конце концов худшее качество программы.
Главные концепции структурного программирования, касающиеся
вопросов использования break, continue, throw, catch, return и
других тем, применимы до сих пор.
Три компонента структурного программирования
В следующих разделах описаны три конструкции, составляющие
основу структурного программирования.
Предыдущая << 1 .. 212 213 214 215 216 217 < 218 > 219 220 221 222 223 224 .. 426 >> Следующая