РЕЦЕНЗИИ
Иан Грэхем. Объектно-ориентированные методы. Принципы и практика. - М.: ИД "Вильямс", 2004. - 880 с.
Есть книги, которые надолго оставляют у читателя ощущение восторга, как от встречи с умным, опытным, тонким, доброжелательным, все понимающим собеседником. Такое случилось со мной при чтении этой неожиданно попавшей ко мне книги. Впрочем, известно, что нужные книги обычно приходят к своему читателю удивительно вовремя.
Труд Иана Грэхема представляет собой обзор всей области объектных технологий: OOP, OOD, OOA и OODBMS. Затрагиваются также некоторые смежные технологии. Хотя объектно-ориентированное направление в программировании достаточно сильно проработано, нельзя сказать, что в нем все сделано, - исследования еще не завершены. Есть множество вопросов, которые необходимо решить, например, желательно ввести понятие истории объектов, что позволит снять множество проблем. Не все четко определено самоидентификацией объекта и т. д. В своей статье "ООП: каким его хотелось бы видеть" (PC Week/RE, N6/2004, с. 42) я предложил ввести понятия OOP+ и OOP-. Изучение этой замечательной книги было продиктовано, в частности, желанием посмотреть, в чем я был прав, а в чем заблуждаюсь.
Напомню, программирование можно разделить на процедурное и декларативное. Первое, в свою очередь, делится на функциональное, структурное и ООП. Возможно, ООП в чем-то оказалось технологичнее других направлений, так как основные его преимущества (повторная используемость компонентов и расширяемость), вообще говоря, достигаются и в других технологиях, например, посредством библиотек функций в процедурных ЯВУ. Однако сама парадигма объектов и объектно-ориентированного метода более наглядна для нашего андроидного мышления, и поэтому неслучайно все большее проникновение объектно-ориентированных методов в инструментарий искусственного интеллекта. С прагматической точки зрения, наверное, все же самое большое достоинство ООП кроется в возможности безболезненного для программ изменения данных, на что сейчас, по утверждению автора книги, расходуется до 16% средств в области ИТ.
В предисловии Иан Грэхем справедливо пишет, что "книга представляет собой целостный, исчерпывающий, независимый от конкретного языка программирования обзор всех аспектов объектной технологии (ООТ), причем как с точки зрения менеджера, так и с точки зрения программиста-разработчика. Наибольшее внимание уделяется концептуальному моделированию".
Интересно, что автор считает, что "ядро современных информационных технологий составляют объектные методы, искусственный интеллект и модели данных, причем рассматриваемые не по отдельности, а в неразрывной связи". Невозможно с этим не согласиться!
Как я неоднократно отмечал, архитектура нынешних компьютеров мало приспособлена для поддержки объектной ориентированности, поэтому, реализуя эту поддержку на обычных процессорах, приходится жертвовать некоторой частью производительности системы. Нынешняя мода на разработку боевых и домашних роботов, возможно, сдвинет этот вопрос с мертвой точки, где он застрял со времен создания корпорацией Intel процессора iAPX 432.
Этот объемный труд содержит десять глав, три приложения, словарь терминов, обширную и по большей части бесполезную в России западную библиографию, предметный указатель.
К сожалению, у меня нет возможности в этой рецензии даже кратко рассказать об основных темах, поэтому я лишь перечислю их.
Так, в первой, очень важной главе рассматриваются основные понятия ООТ и вводится терминология. Вторая глава посвящена преимуществам ООП. По мнению автора, главное из них - не повторное использование компонентов, а облегчение сопровождения разработанного ПО. Почти половина всех запросов на внесение изменений в систему связана со сменой требований. Верно и то, что нисходящая декомпозиция задачи приводит к тому, что и модули, и объекты становятся зависимыми от приложения. Поэтому повторное использование требует определенных изменений в самом процессе разработки и дополнительных затрат. Поскольку общие затраты на ПО сейчас достигли триллионов долларов, то экономия даже долей процента на сопровождении - это уже миллиарды. Данная глава полезна для осознанного выбора базовых технологий для проекта.
В третьей главе дан обзор наиболее заметных объектно-ориентированных языков программирования из примерно сотни существующих. В четвертой главе рассматривается применение ООТ в распределенных системах, а в пятой - в базах данных. Начиная с шестой главы, отведенной ОО-анализу и проектированию, остальная часть книги посвящена использованию ООТ в проектировании программных систем, в частности, таким важным темам, как архитектура систем, шаблоны, компоненты, требования и управление проектом. В десятую главу собраны три приложения.
Мелкие придирки, обычные в рецензиях на переводные книги, относятся к переводу терминологии: UML - именуется в книге "универсальным языком программирования", тогда как общепринято называть его "унифицированным языком программирования". Термин class-oriented, переводимый как классово-ориентированный, наверное, стоило бы перевести как "основанный на использовании классов, классориентированный". Фамильярное "верхушка стека" лучше бы заменить на уважительное "вершина стека", вместо "вытолкнуть из стека" - "извлечь из стека" (как обратное к "поместить") и т. д.
Книга рассчитана на широкий круг читателей, не имеющих профессиональной подготовки в области теоретических компьютерных наук, но заинтересованных в том, чтобы наилучшим образом применять ООТ на практике. Я очень рекомендую ее также студентам, изучающим программирование, аспирантам и преподавателям вузов, поскольку она из разряда тех немногих базовых книг, которые обязательно должен прочитать каждый программист, желающий глубоко овладеть своей профессией.