Бьерн Страуструп. Язык программирования С++. Специальное издание (2011) (1004033), страница 182
Текст из файла (страница 182)
Иначе — организационный паралич и уход наиболее способных личностей из обеих групп. Обе группы должны помнить, что самые ярые консерваторы — это вчерашние ярые радикалы. Получив возможность приобрести новый опыт без унижения, ведущие проектировщики и программисты станут наиболее успешными и разумными сторонниками перемен. Их здравый скептицизм, знание запросов конечных пользователей и умение справляться с организационными барьерами бесценны. Ратующие за скорые и бескомпромиссные изменения должны понять, что переход к новым технологиям требует постепенного привыкания.
А те, у кого нет никакого стремления к переменам, должны поискать иные сферы приложения талантов, а не вести арьергардные бои в условиях, когда необходимость перемен обьективно диктуется новыми условиями достижения успеха. 23.5.4. Гибридное проектирование Внедрение новых методов работы всегда болезненно. Потрясение для организации и работающих в ней людей могут быть значительными. В частности, резкие перемены, когда через день опытные разработчики «старой школы» превращаются в неэффективных новичков «новой школы», абсолютно неприемлемы. В то же время, серьезные цели редко когда достигаются без серьезных изменений, которые связаны с определенным риском.
Язык С++ разрабатывался таким образом, чтобы минимизировать этот риск, позволяя постепенно вовлекать новые средства. Очевидно, что наибольших выгод 844 Глава 23. Общий взгляд на разработку программ. Проектирование от С++ можно добиться, применяя абстракцию данных, обьектно-ориентированное программирование и объектно-ориентированное проектирование, но не столь очевидно, что скорейший способ добиться этого — радикально порвать с прошлым. Иногда такой резкий переход возможен.
Но чаще бывает так, что желание перемен сдерживается заботой о том, как такой переход совершить управляемым образом. Учтите следующие соображения: Проектировщикам и программистам нужно время для того, чтобы приобрести новые навыки. ° Нужно, чтобы старый код работал совместно с новым кодом. ° Старый код нужно продолжать поддерживать. ° Незавершенные старые проекты нужно завершить (в срок).
° Инструменты для новых технологий должны быть адаптированы в текущую среду разработки. Все это естественным образом порождает гибридный стиль проектирования и программирования, хотя у разработчиков и не было такого намерения. Легко недооценить первые два из перечисленных пунктов. Поддерживая разные парадигмы программирования, язык С++ помогает организациям совершить плавный переход к новым методам работы из-за того, что: ° Изучая язык С++, программисты могут одновременно выполнять работу. ° Язык С++ дает значительные выгоды даже в условиях недостаточного инструментального окружения.
° Фрагменты программы на С++ могут отлично сочетаться с фрагментами, написанными на С и других традиционных языках. ° Язык С++ имеет большое подмножество, совместимое с языком С. Центральная идея заключается в том, что программист может постепенно переходить к С++ от традиционных языков, сохраняя традиционный (процедурный) стиль программирования. Затем можно будет воспользоваться абстракцией данных. И, наконец — когда язык С++ и связанные с ним инструменты будут тщательно изучены — можно переходить к объектно-ориентированному и обобщенному программированию. Отметим, что использовать хорошо разработанные библиотеки намного легче, чем спроектировать их и реализовать, поэтому даже новички могут пользоваться преимушествами абстракции данных уже на самых ранних стадиях в целом длительного перехода.
Возможность постепенного изучения языка С++, объектно-ориентированного программирования и объектно-ориентированного проектирования поддерживается возможностью смешивать код на С++ с кодом на других языках, которые не поддерживают абстракцию данных и объектно-ориентированное программирование (524.2Л). Многие интерфейсы вполне можно оставить процедурными, так как превращение их во что-нибудь более сложное не даст мгновенных преимуществ. Часто библиотеки так и организованы, и поэтому использующий их программист может оставаться в неведении о настоящем языке реализации библиотеки. Применение библиотек, написанных на С, являлось для языка С++ первой н самой важной формой повторного использования кода.
Следующая стадия (нужная там, где требуется более изощренная техника программирования) — представить процедуры, написанные, например, на С или 23.6. Аннотированная библиография 845 23.6. Аннотированная библиография Поскольку настоящая глава лишь поверхностно затрагивает сложнейшие вопросы проектирования программ и управления процессом их разработки, я привожу здесь краткую аннотированную библиографию.
Более полную аннотированную библиографию можно найти в [Воос]з, 1994]. Вгисе Апдегвоп апд Кап][т Ооваапк Ал йегшгяе Веяйп Майе! гог ЯеизаЬ1е ОЬ|есг-Опепгео' оо~фиаге. Ргос. ООРЯ.А'90. Оггава, Сапата. Описание модели итеративного проектирования на конкретном примере и обсуждением опыта его применения. Огану Воос]з: 06/ес(-Опелгеп' Ала!уз!т апй 27еаяп кйгЬ Арр!кагюлк Веп]аш[п/Сшпш[пйв. 1994. !БВХ 0-8053-5340-2. Детальное рассмотрение всех аспектов проектирования вместе с графическими инструментами и практическими примерами, поддержанными кодом на С++.
Превосходная книга настоящая глава обязана ей многим. В ней содержатся более глубокие трактовки вопросов, затронутых в данной главе. Огас1у Воос[з: ОЬ|есг Яо!и!гола Веп]аш[п/Сшпгл[пйв. 1996. !БВХ 0-8053-0594-7. Описание процесса разработки объектно-ориентированных систем с точки зрения менеджмента. Содержит подробные примеры на С++. Ггебепс[г Р. Вгоо[гз, 3гз Т[зе Мут[пса! Мал-Мопг[з. Аг]ойвоп-%ев1еу.1982.
Переиздана с дополнениями в 1997. !БВ!ч 0-201-83595-9. Эту книгу нужно перечитывать каждую пару лет — прививка от высокомерия. И хотя она немного устарела в техническом плане, это абсолютно не касается человеческого и корпоративного факторов, а также вопросов масштабирования. Ггедепск Р. Вгоо[св, 3г.: Ато Я!гег Вийе(.
1ЕЕЕ Согпрщег, Чо[. 20, ]4о. 4. Арп! 1987. Суммирующее изложение подходов к разработке программ промышленного масштаба с предостережениями против веры в «серебряную пулю», [Апдегвоп, 1990] [Воос]з, 1994! [Воос!з, 1996! [Втопив, 1982] [Вгоо[св, 1987] Гопгап, в виде интерфейсных классов С++, инкапсулирующих структуры данных и функции. Простейший пример такого повышения семантики от «структуры данных плюс функции» к абстрактным данным служит строковый класс из 81! .12: там инкапсуляция С-строк и строковых функций стандартной библиотеки языка С позволила создать абстрактный строковый тип, пользоваться которым и проще, и удобнее. Аналогично, любой пользовательский или встроенный тип можно внедрить в иерархию классов (823.5.1).
Это позволяет проектам на С++ эволюционировать в направлении абстракции данных и классовых иерархий, несмотря на то, что в них используется некоторое количество кода на процедурных языках, не поддерживающих перечисленных концепций, и даже в направлении готового продукта, который можно будет использовать в проектах на процедурных языках. 846 Глава 23. Общий взгляд на разработку программ. Проектирование [Сорйеп, 1995) [ОеМагсо, 1987) [Оапцпа, 1994) [)асоЬзоп, 1992] [Кегг, 1987] [[ля[сот, 1987) [Мап1п, 1995] [Меуег, 1988) [Раг[цпзоп, 1957) )ашез О. Сорйеп апс) Ооц8)аа С. Бсйсп!с)т (ес)!!осз): Ропе«п йщпа8ез о~" Рпзхгагп Юез18п. АсЫ!зоп-%ез!еу, 1995. !БВЬ[ 0-201-60734-4.
Т. Ое Магсо апс[ Т. Б1мег: Реор1ея а«е, Оогзес Ноиае РиЫ)зЬ[п8 Со. 1987. Одна из немногих книг, которые фокусируются на человеческом факторе в производстве компьютерных программ. Каждый менеджер должен с ней ознакомиться. Удобна для непринужденного чтения. Антибиотик от глупости. ЕпсЬ Оапцпа, е!. а1: 1)ез18п Раггегпк АсЫ[зоп-%ез1еу. 1994. !ЯВИ 0-201-63361-2. Практический каталог технологий изготовления гибкого программного обеспечения с широкими возможностями повторного использования.
Подробно рассматриваются нетривиальные примеры вместе с кодом на С++. Ьаг )асоЬзоп е!. а!.: О[уесг-0«1епгесу Еорлгаге Еп81пееггп8. АсЫ!эзп-Юез!еу. 1992. !БВХ 0-201-54435-0. Глубокое практическое описание разработки программ промышленного уровня с упором на примерах использования (пае сазез). К сожалению, содержит примеры на устаревшем варианте С++ от 1987 года. Коп Кегг: А МагеггаЫгс алеся о1" гйе 5оГлоаге «Еп81пее«1п8г Апа[о8у. 1п 8!ОР[.АЬ] Хот!сез, Матей 1987.
Рассмотрение разных аналогий в данной и последующих главах основано на этой статье и личных беседах с ее автором. ВагЬага 1. а[сота 2)ага А6«пгасггоп апс[ Н~егагс)су. Ргос. ООРЯА'87 (АсЫепйип). Ог!апс)о, Р!ог!с!а. Рассматривается вопрос о том, как с помощью наследования можно скомпрометировать абстракцию данных. Отметим, что стандарт С++ располагает специальными средствами, помогающими избежать подобного рода проблем. КоЬеП С Мацш: [Зев!8п[п8 ОЬ]ест-Ог!ептес! С+ + Арр!ссайопз !3з[п8 гйе ВоосЬ МетЬос[.
Ргеп!!се-На!1. 1995. !БВХ 0-13-203837-4. Показывает, как можно систематическим образом выполнять переход от постановки задачи к коду на С++. Представляет альтернативные решения и принципы выбора между ними. Более практична и более конкретна по сравнению с другими книгами по проектированию. Содержит примеры программ на С++. Вепгапс) Меуег: ОЬ]ес! Опеп!ес1 Бойтчаге Сопмпзссюп. Ргепйсе На!!. 1988.
Стр. 1-64 и 323-334 этой книги содержат хороший взгляд на обьектно-ориентированные программирование и проектирование, а также множество здравых практических советов. Остальная часть книги описывает язык Е!)Те1. С Ь[. Раг)пазов: Раг)сгпзоп у Еая апс[ ог)сег 51ис[1ез [п Асугпгпгьтгагюп. Ноц8Ьтоп М!ГВ!и. Вожоп. 1957. Одно из самых забавных и язвительных описаний тех проблем, которые несут с собой административные процессы. 847 23.7. Советы [БЬ[аег, 1988] Б.
БЬ[аег апд Б. 1. Ме!1оп ОЦесг-Опелгег! Яузгетз Аяа!ут апг! 067есг ЦГесус1ек Уоцгдоп Ргеза. 18ВХ 0-13-629023-Х апд 0-13-629940-7. Представляет взгляд на анализ, проектирование и программирование, отличающийся от представленного в нашей книге. Однако делает это с применением терминологии, похожей на нашу. [Бпус[ег, 1986[ А1ап Бпудег: Епсарзц!айоп анси [пЬепгапсе 1п ОЬ1есГ-Ог[епГед Ргойгатт!п8 [ апйцайек Ргос.