Насколько я понимаю, интерес к ворчалке о книге Буча
возник либо у тех, кто его еще не читал, либо у тех,
кто уже пытался прочесть его книгу. Вряд ли человеку,
прочитавшего ООА&П на одном дыхании, интересно, что я
думаю об этом авторе. Поэтому моя ворчалка об этой
книги будет предназначена для 2 классов читателей -
тем, кто слышал, что Буч - это круто, или как еще
говорят Буч - это классика, и тем, кто уже имеет некое
начальное представление в этой области. Всем более
продвинутым - предлагаю прислать для следующего выпуска
свое мнения о Буче.
"Буч - это круто!" Круто в чем?
"Буч - это классика!" Классика чего?
Если Вы еще только учитесь программировать, или даже
собираетесь, отложите учебник конкретного языка и
слухайте здесь.
Вы давно выучились? И объекты это лажа? - а в блок
схемах не путаетесь? Я почти не использую объекты
(слишком велики для моей задачи накладные расходы), но
я использую и ООА, и ООП (это не Программирование, а
ПРОЕКТИРОВАНИЕ)
Вы уже учились, когда без объектов и шагу нельзя сделать?
И для понимания, рисуете картинки. Ну это уже ближе...
Когда люди только учились писать формальные алгоритмы
для будущих программ, каждая новая задача - была новым
открытием. Но чем больше было написано программ, тем
чаще это уже не творческая задача - надо всего лишь
повторить чье-то решение, но чуть-чуть его изменив. И
это не вопрос повторного использования кода (многие
полагают, что это миф), а дублирование придуманного
ранее поведения программы. Ведь у мылера под дос и
мылера под винды общего кода может и не быть, а вот
принцип работы у Голого Деда и Мыша почти один и тот
же. Да и в менее похожих по целевому назначению задач,
какие-то элементы могут быть одинаковы.
Если вспомнить математику, то ведь введение икса как
обозначение неизвестного позволило не только решать все
типичные задачи однотипно и чуть ли не в уме, но дало
толчок к возможности быстро решать и другие более
сложные задачи, используя ту же последовательность
действий. Полагаю, что для Вас очевидно эквивалентность
уравнений 5х+7=3 и 10y-8=0, хотя в первом случае речь
может идти об яблоках, а во втором о космических
кораблях. Это дало толчок математике и стало легко
решать и более сложные задачи, икс в степенях, системы
уравнений и т.д. и т.п. Причем области, где стали
использовать икс, называют и арифметикой, и алгеброй, и
геометрией.
Ну так здесь все то же самое. Часть новой системы
обозначений назвали UML (ю-ме-эль как говорят продавцы
в Питере) Unified Modeling Language, то бишь
стандартизированный язык моделирования, другую часть -
OCL (Object Constraint Language - язык объектных
ограничений). А вот области где применяются эти
обозначения называют
Объектно-ориентированным анализом (ООА)
Объектно-ориентированным проектированием (ООП)
Так вот использование этого языка позволяет буквально
на нескольких листах бумаги записать что же и как
должна делать Ваша программа, причем записать так, что
даже не кодировщик понимает эту запись. У Вас еще нет
кода, но Вы в состоянии полностью описать
функционирование системы, при этом у Вас есть не только
общий язык с заказчиком, но и готовый каркас к
программе. Самое любопытное, что UML полезен не только
для глобальных программ, но я с удовольствием делаю
заметки на нем для своих домашних прожек. Такая запись
на одном листе заменяет глобальный словесный
комментарий и позволяет буквально за 10 минут
вспомнить, что я тут года два назад вообще делала, и
как все (объекты, функции, переменные) называются.
Теперь, когда все поняли классике чего идет речь.
Разберемся, а в чем классичность-то Буча?
Вернемся к математике, когда придумали заменять
неизвестное буквой, ведь не сразу догадались
использовать буквы и для известных значений, две разные
буквы для двух разных неизвестных. В общем вариантов
было много, прежде чем все стали писать уравнения в
привычном для нас виде. Так и в записи моделирования
было много вариантов, даже у нас госты были. Но так
получилось, что именно Буч подвел черту и свел воедино,
все варианты обозначений в наиболее приемлемом для всех
виде именно в этой книге.
С одной стороны, книга Буча - реферат по тому, что
было. Очень большая библиография - если кого-то
интересует история вопроса. А с другой стороны, Буч
предложил обобщенный эталон, ставший фундаментом
современному UML-у.
И поэтому те, для кого развитие языков моделирования до
UML-а не глубокая старина, как для меня, конечно
восприняли книгу на ура. Там расписано то, что они как
псы понимали, но сказать не могли.
Плюс есть еще один психологический момент, почему
"старики" млеют от книги Буча. Эта книга написана тем
языком, которым написаны многие советские справочники.
И для нас, избалованных легкостью общения, это язык
очень формален и очень тяжел для чтения. Мы же
привыкли, если человек знает, то он обязана рассказать
это с легкостью для понимания, чтобы мы снова над этим
не думали, тяжело ворочая гранит науки, а чтобы взяли
эта знание и пошли дальше, не тратить ресурсы на уже
прогрызаный гранит.
Таким образом, хотя Буч и классика, но если для Вас
проектирование и анализ нечто новое, то в качестве
азбуки эта книга не подходит. Но вот еже ли у Вас есть
какое-то отрывочное представление об анализе и
проектировании, но про объектное, то вероятно Буч для
Вас будет самое то.
На тот момент, когда чуть ли не каждый встречный мне
начал талдычит про Буча, с объектами я уже была на ты,
а вот про проектирование и тем более анализ как об
дисциплине слыхом не слыхивала. И то, что Буч был
первой книгой для меня в этой области сильно попортило
мне жизнь, ибо отбило интерес весьма сильно, а
понимания значимости еще не было.
И только через год листая от нечего делать "моделирование
мира в состояниях" Шлеера и Меллора, мне снова
захотелось попытаться разобраться. Возможно это не
лучший букварь, если кто что посоветует - буду рада.
Так вот Буча после Шлеера и Меллора я рискнула взять в
руки примерно через год. И с большим удивлением
обнаружила, что это не худенькая книга не является
чем-то цельным. На самом деле это небольшая
фундаментальная книженция, которую, оказывается, я
почти осилила в первый заход и набор статей
совершенно разного уровня и качества.
К фундаментальному ядру относится часть первая и по
стилю можно отнести пятую главу второй части. Хотя
собственно диаграммы скорее относится к методикам
анализа, нежели к языку. Но в пятой главе собственно и
вводятся обозначения. Что касается первой части, то
здесь много философии, в смысле дзена анализа,
проектирования и кодирования, а не в значении философии
на философском факультете. Очень много истории и воды
по поводу того, чем же в основе различаются классы и
объекты этих классов. Еще совсем недавно различия между
объектом, классом и метаклассом было камнем
преткновения для многих. А нынче молодые программисты
делают большие глаза, когда им говоришь, что в бинарном
коде никаких объектов и нету :-)
Однако, если в целом разобрались с UML-ом, но есть
непонятки с какими-то отдельными моментами, то стоит
посмотреть как Буч сделал пюре по этому вопросу. Но не
ожидайте что, эту книгу Вы сможете читать влет как
Тестирование из прошлой ворчалки. Плюс к этому нельзя в
этой книге ко всему относится как к догме, много воды
утекло, что-то трактуется не так, обозначать стали по
другому и т.п. UML как язык продолжает развиваться.
Кстати глава 6 и 7 из второй части очень сильно
перекликается с уже упомянутым Тестированием, только у
Буча это весьма конспективно и не претендует на
полноту. Так заметки на полях.
Так что Буча можно и не читать? Я бы так не сказала.
Часть третья - это пять статей посвященным пятерки
практических применений UML на конкретных примерах.
К сожалению мне не удалось пока прочесть ни одной книги
про паттерны, так что пусть меня поправит те, кто читал
и Буча, и о паттернах.
Так вот когда с теорией вроде как разобрался, хочется
на чем-то не очень крупном, но более привычном чем
система парников понять как как и в какой
последовательности все ООА и ООП делается. Поэтому 5 не
очень похожих друг на друга задач самое то.
Но у Буча это не разжевка для чайника, типа запустил
прогу, нажал эту кнопку, ту кнопку, получил что-то. Это
записки к общему наброску уже сделанного проекта. Но не
сверх детальная запись конечного варианта, а пояснения
к своему первому наброску, отражающего исключительно
суть задачи. Причем поясняется не очевидные вещи, а
скорее всего то, что для самого автора было наиболее
сложными для решения проблемами.
Вообще, думаю уже понятно, что третья часть с анализом
этих 5 задачи мне больше всего и понравилось. Возможно,
если бы я в первый раз начала читать эту книгу Буча
именно со статей, у меня бы не было столь сильного
неприятия к этому автору.
Что мне еще понравилось в этой книге, это послесловие,
имеющее слабое отношение собственно к ООА и ООП. Здесь
дан историко-генетический обзор языков программирования.
Названия некоторых языков я даже и не слыхивала. И хотя
автор в рассмотрении доходит до 1990 года, у меня
сложилось впечатление, что автор больше заботило
размножение языков на рубеже 80-х. Например, развитие
Паскаля фактически не отражено, в отличии от более
молодого С и тем паче С++.
А теперь я Вас чуть-чуть поднапрягу и попрошу кликнуть: