----------------------------
Глава 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шт. на страницу, вычитывать смысла нет.