Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [Отзыв о книге] А. Васильев. "C#. Объектно-ориентированное программирование.

Ответить
Настройки темы
Разное - [Отзыв о книге] А. Васильев. "C#. Объектно-ориентированное программирование.

Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 995

Профиль | Сайт | Отправить PM | Цитировать


Изображения
Тип файла: jpg IMG103.jpg
(162.4 Kb, 31 просмотров)
Я откровенно не знал, как мне начать писать отзыв. Т.к. краткий вариант будет очень краток, а полный вариант, по скромным прикидкам, займет страниц 10-15 далеко не радужных по смыслу комментариев.

Что я могу сказать про книгу... Хорошая книга, примерно по ошибке на страницу.
Действительно. Редкая страница осталось без отметки на полях. А там где их нет, с лихвой компенсировалась ранее накопленными. (Особенно ближе к концу книги)
Единственное, что оправдывает предложенный стиль подачи материала -- это возрастная группа читателей -- 8-9 класс средней школы.
Книга не реализована полностью. Значительная часть работы выполнена, идеи положенные в основу изложения объектно-ориентированного программирования(ООП) имеют право на жизнь. Но предстоит дополнительная работа по улучшению материала и доведению его до правильности "по формальному признаку". Основная идея -- изучить ООП на основе примеров. Но реализация содержит массу логических ошибок.
Только сегодня узнал более подробную информацию об авторе. В 2008 году защитил докторскую диссертацию "Корреляционные свойства многокомпонентных жидкостей" по специальностям "01.04.02 - теоретическая физика" и "01.04.14 - теплофизика и молекулярная физика" . Докторская работа написана за 8 лет, что очень достойно.
Автор "физик", этим я склонен обусловить все допущенные им ошибки изложения материала.

Все. Хороший отзыв заканчивается. Дальше идет разбор ошибок.
Перечислю основные.
Красных строк нет как класс. Т.е. вообще нет! Даже не знаю, на кого списывать.
Лишние, пустые слова, я о них просто не говорю. Их -- много.
стр 40 "Текстовые значения (литералы) ..." пропущена буква.
Часто используется термин "утилита", без его определения. Вообще следует заметить, что с определениями в книге достаточно сложно. Нет приписки о том, что исходный код следует читать вместе с англо-русским словарем.
Еще чаще используется выражение -- военная хитрость.
Иногда встречается откровенное вранье.
стр 42. "Консоль -- это такое окно, выдержанное в темных тонах, которое вызывает ностальгию по старым добрым временам операционной системы MS-DOS". Добуквенно! Сбербанк рыдает, продажа билетов на самолеты, в театры и пр. встали намертво, кассы в магазинах остановлены и народ остался голодный, админы безутешны!
стр 60. "Перегрузка методов -- весьма полезный и перспективный механизм, который позволяет создавать очень гибкие и эффективные методы."
Я вот из этого что понять должен?!
стр 108 и далее. Блок схемы. Просто из рук вон плохо. Понятие составного оператора -- определено в примечании. Блок схемы не соотв. требованиям ГОСТ. В продолжении того, далее то тексту не одной схемы нет. Т.е. блок схемами определяются только операторы цикла, условия и многовариантного выбора case. Ссылки и другие понятия "кричащие" о блок-схеме, остались без них (какие-нибудь там делегаты и пр.).
стр 136. Совет про функции sin и cos. Ни слова про радианы!
стр 145. Появилась идея сначала рассказать об идее программы, а затем привести ее код. Да, кстати, на следующем примере это стало традицией("традиционно"), а затем, как и любая традиция -- умерла. (стр. 24 "Идея представлена в листинге 1.1." -- код хорошо документирован на C# ? (c))
стр 151. Красивое заблуждение про Стивена Хокинга и про соотношение кол-ва формул с читателями.
стр 152 phi = arcsin() противоречит стр 154 и коду phi = Math.Acos(cosinus).
стр 160. Дримз кам тру!
стр 170. Если число не является действительным, то нужно проверить ...
стр 187. Thin -> this
стр 193. Делегаты. "Чтобы все это легче было понять, можно провести некоторую аналогию. Объявление делегата сродни описанию класса, а реализация делегата(создание экземпляра делегата) соответствует созданию объекта класса. Итак, приступим к делу."Это просто шедевр! Всем все понятно стало?! P.S. Блок схем - нет.
стр 208. Новая единица измерения -- поинт. Я не шучу! "Координаты определяются в поинтах по отношения к левому верхнему углу формы."
стр 218. Два шедевра, даже без уточнения термина "гибкий программный код" и выводов о всезнайке - авторе книги(лекторе и т.п.)
стр 240. Таблица итерационных значений переменных цикла? Не, не! Не слышали!

Про логику создания классов -- отдельный разговор. Сдавай студент мне такую работу, ему бы пришлось долго объяснять что, как, зачем и почему.
Вообще с логикой в книге сложно. И это печально.

Ну и напоследок надо улыбнуться.
Надпись на последнем форзаце "Большое внимание уделяется созданию программ с графическим интерфейсом."
В прикрепленном файле я пальцами держу страницы, в которых используются консольные программы. Края книг посвящены целиком графике. (Справедливости ради, в середине книге есть небольшие вкрапления графического интерфейса). Вы что, издеваетесь!?

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:56, 24-09-2012

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4466
Благодарности: 995

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: txt C#_OSZone.txt
(42.1 Kb, 13 просмотров)

Главы 7,8, Вместо заключения

----------------------------
Глава 7.

стр. 242
Методы и классы во всей красе.
"Может создасться впечатление, что ничего интересного в C# уже не осталось. Конечно, это совсем не так. Часть наших иллюзий развеется в этой главе."
Последние два предложения можно смело вычеркнуть.

стр. 243
Человек читает "как есть", не перепрыгивая по тексту.
(Рассматривается программа для обмена значениями аргументов)

"Сразу отметим, что, хотя формально код (синтаксис) в листинге правильный, выполняется он не так, как можно было бы ожидать."
Т.е. мы уже заронили некоторое зерно сомнения. Отметим и прочтем листинг программы.

"// Статический метод для обмена значениями аргументов
//(выполняется, но долг свой не выполняет):
static void swap (int a, int b){"
Т.е. мы получаем локальные переменные a, b, при функции void, которая не возвращает результат.
Здесь же очевидно понятие "зона видимости переменных".
Я чего то не понимаю? Читаю дальше.

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

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

стр. 244-245
Идет объяснение почему void swap не работает.

стр. 244
"Но в глубине души мы понимаем, что, если бы это было действительно так, не было бы смысла рассматривать этот пример."
Я даже не знаю, какой оставить комментарий, чтобы выразить мое возмущение!

стр. 245
"Теперь нам легко объяснить специфическую работу метода swap()"
специфическую - лишнее слово.
Работа у метода не специфическая, он работает правильно - как написали, так и работает.

"Вот такая получается "война клонов"."
Предложение вычекнуть.

"В листинге 7.2 приведен пример программы с "исправленным" методом swap()."
Кавычки не нужны. Метод именно исправлен, т.к. первый вариант ошибочен.

стр. 246
"static void swap(ref int a,ref int b){"
ключевое слово ref ранее не упоминалось. Приходится сравнивать вызовы функции со стр. 243

стр. 247
(Благо разворот и сразу же вверху)
В "Совет" указаны изменения программы.
static void swap(ref int a,ref int b)
swap (ref a,ref b).

стр. 249
"Метод с таким названием традиционно используется нами для взаимовыгодных обменов."
Вычеркнуть.

Рис. 7.3
Проверка работы программы не очевидна. Приходится сверяться с исходным кодом на стр. 247-248 (не разворот)
Да, придирка.

стр. 250
"Если после этого запустить команду на выполнение, получим результат, как на рис. 7.4."
"команду" -> "программу"

"Совет" сделать "Примечание"
"Обратите внимание: по сравнению с предыдущим случаем в консольном окне изменились две последние строки."

стр. 265
Претензия.
Обработка исключительных ситуаций.
"Здесь подведем под этот процесс некоторую теоретическую основу."
И это в самом конце книги!

стр. 266
Придирка.
"В известном смысле эти классы описывают всевозможные типы ошибок."
Слово "всевозможные" меня несколько смущает.

стр. 268
Придирка.
Традиционно листинг не снабжен идеей.

стр. 269
"Запускается оператор из 20 циклов, и за каждый цикл выполняются некоторые нехитры действия: генерируются два целых случайных числа в диапазоне от 0 до 3 включительно."
Слова "выполняются некоторые нехитрые действия" можно опустить.

Совет.
"Результатом выражения rnd.Next(m, M+1) является случайное число в диапазоне от m до M."
Не явно. M+1 и M.

Придирка.
Абзац после "Совета"
Получается, что индекс может быть либо легитимным, либо выходить за пределы массива.
Слову легитимный определения дано не было.
Поясняющий рисунок был бы кстати.

стр. 270
Придирка, т.к. я читаю текст последовательно.
"Результат выполнения программы показан на рис. 7.10."
Т.е. идет утверждение в единственном числе.
"Рис. 7.10. Возможный результат выполнения программы ..."
Далее идет пояснение:
"Следует иметь в виду, что поскольку здесь мы используем случайные числа, то и результат выполнения программы также является случайным. Поэтому от запуска к запуску картинка будет меняться."
Первое предложение понятно. А второе уже нет. Меняется результат работы программы. Картинка - это вторая или трерья "производная" от программы. Программа просто отдает результат, за вывод "картинки" отвечают другие системы. Я могу пристать к заголовку и пути "file:///C:/Main/Books/Russian/Csharp_guide/examples/..."
У меня, например, такого пути нет.

Искусственное генерирование ошибки.
"Поскольку словами это объяснять все равно бесполезно, изучим програмный код в листниге 7.10."
Чего? Это получается я дурак и не пойму?

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

стр. 272
"Примечание" заменить на "!Важно"

"Результат (возможный) выполнения программы представлен на рис. 7.11." +
Найти 10 отличий со стр. 270

Примечание.
"Надо понимать, что сообщение Двойная ошибка! -- редкий гость в консольном окне."
Двойная ошибка! - взять в кавычки.

Придирка.
"Если случайные числа генерируются с равной вероятностью, то вероятность для каждого из событий "деление на нуль" и "выход за пределы массива" составляет 1/4."
Вероятность чего? Наверно вероятность наступления каждого из событий.

Придирка.
"Вероятность ... равна 7/16";
"А вероятность ... равняется 1/16"

"Математическое ожидание (оценка для среднего количества появления двойной ошибки) для 20 запусков цикла составляет 20/16=1,25, то есть чуть больше единицы."
Двойная ошибка - взять в кавычки.
20 запусков -> 20 итераций. В противном случае n*m
"оценка для среднего" -> "оценка среднего". Мне кажется "для" - лишний предлог.

стр. 273
Многопоточное прогаммирование.
"..., язык обладает набором утилит ..."

"Он важен тем, что создание потокак как такового означает создание объекта класса Thread."
Все запятые на месте?

стр. 274
Примечание убрать, сделав основным текстом.

стр. 275
"Рассмотрим программный код в листинге 7.11, в котором вся эта схема и реализована."
Во первых - где схема?
Во вторых, если схема описана словами в примечании на стр. 274, то см. выше.
Иначе я могу раснести в пух и прах весь код, и ничего мне за это не будет.

стр. 277
Сразу после "!Внимание"
"Метод goHare(), ... , от метода goFox() принципиально отличается лишь тем, что задержка времеи там в 2 раза меньше ... "
"Принципиально" - ничем!
Лишнее слово, вызывает раздражение.

стр. 278
"В конце выполнения программы командой Console.WriteLine("Главное не победа, а участие!") на экран выводится главный олимпийский принцип."
Который не имеет никакого отношения к проблеме "гонок" лисиц и зайцев!

"На рис. 7.12 показан возможный результат выполнения программы." +
см. стр. 272[/b]


----------------------------
Глава 8.
Приложения с графическим дизайном.

стр. 284 +
"Перед тем как приступить непосредственно к рассмотрению программного кода, сделаем несколько общих замечаний относительно организации программы. В частности несколько моментов, на которые следует обратить внимание при анализе программы:"
10 моментов, на почти 2 страницы текста.
Моменты "не провязаны" комментариями в тексте.
Может не заметил, т.к. листать 9 страниц исходника взад/вперед, держа в уме "моменты на 2х страницах" тяжело.
Поэтому по диагонали.
"private string[] FSz" - это бред. FSz мне не о чем не говорит.
"string[] fs = new string [maX-min+1];" Почему +1 ?
"private EventHendler[] BH;
private EventHendler RBH;
private EventHendler CBH;
private EventHendler TBH; "
Что я могу сказать? Молодцы!
BH - ButtonHandler, (Массив экземпляров делегатов для кнопок)
RBH - RadioButtonHandler, (Экземпляр для делегата кнопок-переключателей),
CBH - я не знаю, (Экземпляр делегата для опций)
TBH - Text BH по всей видимости. (Экземпляр делегата для текстового поля)
В скобках приведены соотв. комментарии из текста программы.

Далее честно не вчитывался.

стр. 301
Придирка.
Шрифт не жирный, а утолщенный.
Это специфическая тонкость, не помню где прочел или кто мне сделал замечание.

"Тесктовые массивы MN, FN, FS и BN определяют, соответсвенно, названия пунктов главного меню, названия шрифтов, названия стилей шрифтов и названия кнопок. Эти массивы играют важную роль. ..." и до примечания.
Во первых "говорящие названия" MN, FN, FS и BN - "эта пять"!
Во вторых, реализованы (кнопки, меню и пр.) нами, а не вообще. Соотв. важную роль массивам назначили мы, а не C# и Microsoft.

Примечание
"В теле метода на основе значения целочисленных полей min и max текстовый массив размера max-min+1."
Значение "+1" не раскрыто.

"Затем в операторе цикла индексная переменная i перебирает элементы ..."
Слово "перебирает" следует заключить в кавычки.
см. глава 4, 5, стр. 158, 197.

стр. 302
"Мы намеренно разнесли во времени и пространстве процесс создания графических элементов и регистрацию обработчиков для элементов интерфейса."
...
"Не сложно догадаться, что именно этим методом создается и возвращается в качестве результата главное меню формы."
"Метод в качестве результата возвращает объект класса MainMenu."
Точно здесь запятых не надо?

"В теле метода создается объект MyMenu класса MainMenu и массив mainMI объектов класса MainMenu. Это пункты главного меню."
Т.к. каждое предложение -- это законченная мысль, то "Это пункты главного меню" что за мысль?
Предложения объединить.

стр. 303
Примечание переформулировать, перефразировать, переписать заново полностью.
"Аргументом конструктору класса MenuItem передаются текстовые названия команд."
Каких команд?


----------------------------
Вместо заключения
стр. 305
"Мы постараемся отойти от канонов и употребить Заключение во благо, а не в наущение."
(Опять же приношу извинения за желчный комментарий, к концу прочтения книги накипело.)
Выпендриться?

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

стр. 306
"В качестве иллюстрации возможностей среды разработки Visual C# Express 2010 рассмотрим процесс создания простенького приложения с очень простым окном всего с одной кнопкой."
Всё на одном дыхании, без запятых?
----
Далее картинки по 2шт. на страницу, вычитывать смысла нет.

Анализ книги завершен.
Всем спасибо за прочтение!

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Последний раз редактировалось lxa85, 12-08-2013 в 12:02. Причина: добавил файл

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:56, 12-08-2013 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [Отзыв о книге] А. Васильев. "C#. Объектно-ориентированное программирование.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Теория - [отзыв на книгу] Автоматное программирование. 2-е изд. Поликарпова Н. И., Шалыто А. А lxa85 Программирование и базы данных 1 11-06-2012 23:05
[отзыв на книгу] Владислава Дунаева "Photoshop CS5. Понятный самоучитель" Ghost Цифровое изображение 0 28-11-2010 23:43
C/C++ - [отзыв на книгу] Программирование на C++. Трюки и эффекты. Александр Чиртик Ghost Программирование и базы данных 6 18-07-2010 12:57
2007 - Excel | Как снять защиту к некоторым функциям в книге при включенной "Защита листа"? MaxRAF Microsoft Office (Word, Excel, Outlook и т.д.) 2 10-03-2010 03:59
Отзывы о книге "Linux для пользователя"   Guest Общий по Linux 10 16-10-2004 17:32




 
Переход