Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 181
Текст из файла (страница 181)
Гибридное проектирование Введение в организацию новых методов работы может быть болезненным. Потрясения для организации и работающих в ней людей могут быть значительны. В частности, резкие перемены, когда на следующий же день опытные работники «старой школы превращаются в новичков в «новой школе», как правило, неприемлемы. Однако серьезные цели редко достигаются без перемен, а значительные перемены„как правило, связаны с риском. С++ разрабатывался для того, чтобы снизить риск, позволяя постепенно привыкать к нововведениям. Хотя и очевидно, что величайшие выгоды от С++ достигаются посредством абстракции данных, объектно-ориентированного программирования и обьектно-ориентированного проектирования, совсем пе очевидно, что скорейший способ для достижения этих целей — радикально порвать с прошлым. Порой такой «чистый» разрыв достижим.
Но чаще желание улучшений смягчается — или должно смягчаться — тревогой о том, как справиться с переходом. Учтите следу|ощие соображения: Проектировщикам и программистам нужно время, чтобы приобрести новые навыки. Новые программы должны взаимодействовать со старыми. Старые программы нужно сопровождать (часто неопределенно долго). 23.5. Менеджмент 791 Работу над существующими проектами и программами нужно завершить 1в срок).
° Средства, поддерживающие новые приемы, нужно приспособить к местному окружению. Этн факторы естественным образом ведут к гибридному стилю проектирования— даже там, где у проектировщиков нет такого намерения. Первые два пункта легко недооценить. Поддерживая несколько парадигм программирования, С++ облегчает переход организации на новые методы благодаря следующим обстоятельствам: ° Во время изучения С++ программисты могут продолжать продуктивно работать. ° С++ мажет принести значительные выгоды в бедном инструментами окружении.
° Фрагменты программ на С++ могут взаимодействовать с кодом на С и других традиционных языках. ° С++ имеет большое совместимое с С подмножество. Идея заключается в том, ~то программист может перейти к С++ от традиционных языков, понемногу осваивая С++, и в то же время сохраняя традиционный (процедурный) стиль программирования. Потом можно воспользоваться абстракцией данных. И наконец — когда язык и связанные с ним средства освоены — можно переходить на объектно-ориентированное и обобщенное программирование. Заметьте, что хорошо разрзоотанную библиотеку гораздо легче использовать, чем проектировать и реализовать, поэтому новичок может воспользоваться передовыми методами абстрагирования даже на ранних стадиях освоения. Идея постепенного обучения объектно-ориентированному проектированию, объектно-ориентированному программированию и С«+ поддерживается возможностями С++ смешивать программы на С++ с кодом на языках, не поддерживающих тс средства С++, которые касаются абстракции данных и объектно-ориентированного программирования Я 24.2.1).
Многие интерфейсы можно просто оставить процедурными, поскольку превращение нх во что-нибудь более сложное не принесет непосредственных выгод. Для многих библиотек это уже сделано поставщиком библиотеки, так что программист на С++ может остаться в неведении о действительном языке реализации. Использование библиотек, написанных на таких языках, как С, явилось для С++ первой и очень важной формой повторного использования. Следующая стадия — необходимая только там, где действительно нужна более изощренная техника — представить процедуры, написанные на языках С и Рогггап, в виде классов, инкапсулировав структуры данных и функции в интерфейсные классы С++.
Простой пример возвышения семантики от уровня «процедуры плюс структура данных» до уровня абстракции данных — это строковый класс из 9 11.12. Там инкапсуляция представления символьных строк в стиле С и стандартные функции С для работы со строками используются лля того, чтобы создать строковый тип, гораздо более простой в использовании.
Подобный прием можно использовать, чтобы «втиснуть» встроенный или отдельный тип в иерархию классов Я 23.5.1), Это позволяет проектам на С++ развиться до использования абстракции данных и иерархии классов в присутствии программ, написанных на языках, в которых эти концепции отсутствуют, и даже при том ограничении, что к результирующей программе должны обращаться из процедурных языков. 792 Глава 23.
Разработка и проектирование 23.6. Аннотированная библиография дуктов и с соответствус краткую аннотировапн фию можно найти в [Во [Апс1егьоп, 1990) [ВоосЬ, 1996) [Вгоойю 1987) Эта глава лишь касается проблем, связанных с проектированием программных проощими проблемами менеджмента. По этой причине я привожу ую библиографию. ?засширенную аннотированную библиогра- осЬ, 1994). Вгисе Апс[егзогс апс[ Яащиг Оозза[п: Ап Иегаггае Юех!8п Мос?е! !ог КеихаЫе О?уес7- Опепсес! 5о!'Гааге.
Ргос. ООРЯ?.А'90, Оттава, Канада, Описание модели итеративного проектирования и перепроектирования со специфическими примерами и обсуждением опыта. [ВоосЬ, 1994] Огас[у ВоосЬ: О?уесг-Опепгес! Апа!ух!х апс! Оез!8п ш!й Арр!?си!тапсе Бещапйп7'Сишпипйз. 1994. 18ВХ 0-8053-5340-2. Содержит подробное описание проектирования, особых методов проектирования с графическими обозначениями и несколько подробных примеров проектирования, выраженных на Сезз Это превосходная книга, которой данная глава многим обязана.
Она предоставляет более глубокий взгляд на многие вопросы, затронутые в данной главе. Огас[у ВоосЬ: О?уесг .уо!иг!опх. Вещасп[пссСишп1!пйз, 1996. 18ВХ 0-8053-0594-7. Описывает разработку обьектно-ориентированных систем с точки зрения проблем менеджмента. Содержит подробные примеры программ на Сэ"-.
[Вгоо1сю 1982) Егес[ Вгоойз: ТЬе МусЬ!са! Мап МопсЬ. АИ1зоп-Ъ'ез!еу. 1982 Эту книгу все должны перечитывать каждые пару лет. Предостережение от высокомерия. Книга немного устарела в техническом отношении, но ничуть не утратила своей актуальности в том, что относится к человеческому фактору, ор~анизациям и масштабированию. Переиздана с дополнениями в 1997,?ЯВХ 1-201-83595-9. Егес[ Вгоойз: Хо 81!лег ВиНеи 1ЕЕГ Сосприсег, Уо!. 20, Хо. 4, Арг1! 1987. Краткое изложение подходов к разработке программ промьип.ленного масштаба с очень нужными предостере>кенпями против веры в чудесные средства (псеребряные пули>), [Сор!!еп, 1995) )яснев О.
Сор![еи апс? Ооой!аз С. 8Ьиз[с[с (ес[!согз): Раггегп ?агциайез оу" Ргойгат Оез!8п. АИ!зоп-%ез!еу. 1995. 1ЯБХ 1- 201-60734-4. [Санина, 1994) Гпс Папина, ес, а1с Оез!8п Ра!геках АсЫсзоп-'1Ъ'ез!еу. 1994. 18ВХ 0-2-1-63361-2. Перечень практических приемов для создания адаптируемого программного обеспечения с возможностью повторного использования, содержит нетривиальные хорошо обьясненные примеры. В книге можно найти много примеров кода на С++. [?)еМагсо, 1987) Т. Ое Массо апс[ Т.
?йзсег: Реор!емаге. Оогзес Пензе 1зиЫ[зйп8 Со. 1987. Одна из немногих книг, уделяющих большое внимание роли людей в производстве программного продукта. 23.6. Аннотированная библиография 793 ЦасоЪзоп, 1992[ [Кегг, 1987[ [?лз!согг, 19871 [Магг!и, 1995] [Раг!с! пзоп, 1957! [Меуег, 19881 [ВЫаег, 1988[ [Внушает, 19861 Обязательна для всех руководителей.
Написана достаточно гладко для чтения перед сном. Противоядие от многих глупостей. 1чаг [асоЪзоп ена!е ОЬ7есг-Опепгег7 Яо)гтггаге Еп8гггеепп8. Ае[е!!зоп-'гггеэ1еу. 1992. !ЯВ!з! 0-201-54435-0, Полное и практическое описание разработки промышленных программ с упором на случаи использования Я 23.4.3.1).
Не совсем правильно оценивает С, +, описывая его в варианте «урожая 1987 гэн Кол Кегг: А Масепа)гзггс 'гггеге оу ГЬе Воутпгаге «Ел8гпееппд» Апа!обу. !и 51ОР) АЪ) 14ог!сез, МагсЪ 1987. Использование аналогий в даннон и следующей главах многим обязано этой статье и изложенным в ней представлениям, а также предшествующим беседам с Роном.
ВагЪага Ъ!з!сота !)ага Абеггасггоп алгу Иегагсйу. Ргос. ОО РЯБА'87 (Аг!е[епе[цш). Ог1апе[о, Г1огЫа. Обсуждение того, как использованием наследования можно скомпрометировать абстракцию данных. Отметим, что С+- имеет специальные средства для избежания подобных проблем Я 24,3А). роЪегс С. Магг!в: Юезгдпглб ОЬ1есг-Огтепгей С+-'; АРР1гса1гопз Схгпг! гйе Воосй Меейое[. Ргеггт!се-Иай. 1995. !ЯВЬ! 0-13- 203837-4.
Показывает, как достаточно систематическим образом переходить от постановки задачи к коду на С«+. Представляет альтернативные проекты и принципы выбора между ними. Более практична и конкрстна, чем большинство других книг по проектированию. Содержит подробные примеры программ на С "-. С. Х. РагЫпзоп; Рагтггпзоп'з Еаш апгг огйег огигггез гп Агйптмгга1гогг, Ноц8Ыоп М!Я!и. Возгоп. 1957. Одно из самых забавных и язвительных описаний тех бед, которые несет с собой административный процесс.
Вегггапд Меуег: ОЬ)есГ Опептеа Ео)Гшаге Сопзптгстгоп. Ргепь!се НаП. 1988. Стр. 1-64 и 323-324 дают хорошее представление об одном взгляде на объектно-ориентнрованное программирование и проектирование и содержат много здравых практических советов, Остальная книга описывает язык Г!!1е1. Наблюдается тенденция запутать Е!1[е! универсальными принципами. Я. ЯЫаег апс1 Я. [. Мейог: ОБ[ест-Оггепгег7 5узгепгз Апа!узгз агггг' 06/есс Егеесус1ех. "г'овгз!оп Ргезз. 1ЯВХ 0-13-629023-Х апг[ 0- 13-629940-7.
Представляет взгляд на анализ, проектирование н программирование, сильно отличающийся от того, что изложен здесь и воплощен в С+ +, но делает это с использованием терминологии, делающей этот взгляд похожим на наш. А1ап Япус[ег: Впсарт!аггоп алга 1лйегйаггсе гп ОЬуесг-Опепгег4 Рпгбгагпгпгп8 Еапдиадек Ргос. ООРЯ.А'86. Ротс!апе[, Оге8ол. Ве- Глава 23. Разработка и проектирование 794 роятно,первоехорошееописаниевзаимосвязимеждуинкапсуляциейинаследованием. Содержиттакжеинтересноеобсуждение некоторых понятий множественного наследования. [Ъ'!г!з-Вгос[г, 1990] ВеЬесса 'Ьг!г[з-Вгос]с, Вйап ЮП[«егзоп, апг[ Ьапгеп ЪИепег: Вез!8п!п8 ОЬ)есс-Ог!епсеб Во[си аге. Ргепс!се НаП.
1990. Описывает метод антропоморфическо1о проектирования, основанный на ролях с использованием СКС-карточек (С]аззез, Кезропз!ЬП! г!ез, апг! СоПаЬогайоп, классы, ответственности и сотрудничество). Если не сам метод, то по крайней мере текст имеет склонность к ЯшаПгай. Русские переводы: [ВоосЬ,1994] Г. Буч. Обьектио-ориентирование«й анализ и проектирование с примерами приложеиийнп С" +,2-е издание. СПб.