РЕЦЕНЗИИ

Климова Л. М. Delphi 7. Основы программирования. Решение типовых задач. Самоучитель. М.: Кудиц-образ, 2004. - 480 с.    

Различного рода учебные пособия пользуются в книжных магазинах устойчивым спросом. Трудно переоценить роль хорошего учебника даже для студентов очного обучения, не говоря уже о тех, кто занимается самообразованием. К сожалению, нередко в этой категории попадаются и весьма посредственные издания.

Рецензируемую книгу я при всем желании признать удачной не могу. Более того - она вполне способна посеять определенную неразбериху в головах начинающих программистов. И причина, как мне кажется, заключается в том, что у автора, возможно, есть трудности с предметом, о котором взялась писать. Приведу несколько примеров.

"...целочисленные и вещественные типы Object Pascal не изменились по сравнению с такими же типами языка Pascal" (с. 10). Вообще-то во всех 32-разрядных версиях Delphi размер типа Integer - 4 байта, а не 2, как в обычном Паскале, да и новый тип появился, о котором автор не упоминает вообще, - Cardinal.

"Тип данных Boolean используется для хранения значений с одной значащей цифрой 1 (True - истинно) или 0 (False - ложно)" (с. 11). В Паскале Boolean - это специальный тип данных, не являющийся числовым (хотя в памяти хранятся, конечно, числа - но ведь программист их "не видит"), а вот в Си такого типа нет, поэтому там логические значения представляются в числовом виде.

"Объект может содержать другой объект. Например, объект формы может содержать объект кнопки. В этом случае объект-владелец ответственен за создание и уничтожение объекта, который он содержит. Объект может быть ассоциирован с другим объектом, т. е. содержать ссылку на другой объект. Он может вызывать его методы и использовать его поля, но не создавать и уничтожать другой объект. Обычно ссылки на другие экземпляры передаются через параметры" (с. 15-16). Если уж на то пошло, то внутри объекта могут храниться только ссылки на другие объекты, но никак не сами объекты... И вообще, переменные типа "класс" на самом деле являются указателями на экземпляры классов, о чем совершенно справедливо автор говорит в других местах.

"Object Pascal Delphi поддерживает 4 типа методов: переопределяемые (override), виртуальные (virtual), динамические (dynamic) и абстрактные (abstract)" (с. 18). Вообще-то в Delphi реально существуют только два "полноценных" типа методов: статические и виртуальные. Ключевые слова virtual и dynamic определяют виртуальные методы, имеющие различия лишь для компилятора (разные методы хранения адресов методов и способов их вызова на уровне машинного кода), но совершенно одинаковые по поведению, с точки зрения программиста. Ключевое слово override просто сообщает компилятору, что данный метод перекрывает одноименный виртуальный метод из класса-предка. Ну а абстрактные методы - это просто заготовки методов, которые обязательно должны быть перекрыты в классах-потомках. Кстати, весьма забавно, что сразу после процитированного предложения автор говорит о статических методах :).

"В процессе выполнения программы ошибки могут возникать в результате... недопустимых значений или операций над переменными программы (например, деление на нуль). Для обработки этих ситуаций в Delphi есть средство RTTI - информация типа на этапе выполнения приложения" (с. 90). Какое отношение RTTI имеет к обработке деления на нуль, как и к другим видам, из книги непонятно, что и неудивительно, поскольку никакого отношения она к этому не имеет вообще.

"Невизуальные компоненты не присутствуют на форме во время исполнения приложения, а вызываются по запросу (меню, диалоги) или используются методами приложения без их визуализации (таймер)" (с. 170). Что ж, насчет таймера согласен. Но вот меню и диалоги... Раз они отображаются не всегда, значит, они невизуальные компоненты? Вспоминается дверь, которая у Митрофанушки была то существительным, то прилагательным - в зависимости от того, была или не была она приложена к косяку :).

При желании подобных перлов можно без особого труда найти на пяток рецензий. Однако не все в книге так плохо: о том, какие кнопки нужно нажать и что сделать мышкой, чтобы добиться определенного результата, сказано совершенно верно. Однако учебник программирования должен в первую очередь говорить не о том, что нужно сделать, а зачем и почему это нужно. Зазубрить синтаксис Паскаля несложно, научиться конструировать формы и получать доступ к базам данных - тоже. А вот научиться самому проектировать программу, грамотно разбивать ее на классы (или, наоборот, избегать "объектной ориентированности" там, где она не нужна) - совсем другое дело, причем куда более важное. К сожалению, именно этому автор и не учит. Правда, в самом начале она говорит, что данная книга является продолжением первой, посвященной программированию под DOS в среде Borland Pascal 7.0.

Но, как оказалось, и первая книга учит синтаксису языка и способам работы в интегрированной среде Borland Pascal, но никак не объективно-ориентированному программированию. А ведь в ВР есть прекрасная библиотека классов для создания пользовательского интерфейса - Turbo Virsion! Она предоставляет отличную возможность увидеть ООП "изнутри" - ведь здесь невозможно избежать ручного программирования, от которого почти полностью избавляет среда визуального проектирования Delphi. Но нет - автор в этой весьма толстой (528 с.) книге даже не упоминает о Turbo Vision, а в качестве примера библиотеки классов говорит о... VCL - библиотеке визуальных компонентов Delphi!

Единственную ценность в обеих книгах, на мой взгляд, могут представлять только задачи - да и то не все. В целом же профессионалам эти книги не нужны, а для новичков, по моему мнению, - мало пригодны.

Версия для печати