C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Архангельский А.Я. — ошибки в книге?!, "Программирование на C++ Builder 6"
BreakPointMAN
Отправлено: 25.07.2005, 21:59


Станционный диспетчер

Группа: Участник
Сообщений: 86



Недавно решил перечитать А.Я. Архангельского "Программирование на C++ Builder 6", чтобы вспомнить некоторые уже подзабытые веСЧи... и наткнулся на следующий бред (по-другому назвать сей фрагмент текста у меня язык не поворачивается) -

QUOTE

Элементы (переменные и функции), объявленные в классе в разделе private, видимы и доступны только внутри данного модуля. При этом из функций, объявленных внутри класса, к ним можно обращаться непосредственно по имени, а из других функций — только со ссылкой на объект данного класса. В рассмотренном примере это относится к процедуре F1. Если в модуле описано несколько классов, то объекты этих классов взаимно видят элементы, описанные в их разделах private.

Элементы, объявленные в классе в разделе public, видимы и доступны для объектов любых классов и для других модулей, в которых директивой #include включен заголовочный файл данного модуля. При этом из объектов того же класса, к ним можно обращаться непосредственно по имени, а из других объектов и процедур — только со ссылкой на объект данного класса.  В рассмотренном примере это относится к переменной Ch1 и процедуре F2.

В классах, помимо обсуждавшихся ранее, могут быть еще разделы protected — защищенные. Элементы, объявленные в классе в разделе protected, видимы и доступны для любых объектов внутри данного модуля, а также для объектов классов-наследников данного класса в других модулях. Объекты из других модулей, классы которых не являются наследниками данного класса, защищенных элементов не видят.


Архангельский А.Я. — "Программирование в C++ Builder 6", Москва, издательство БИНОМ, 2004 г.
(глава 1, раздел 1.9.5.4 "Области видимости переменных и функций" — стр. 56)


В принципе, все три абзаца — бред от начала до конца, но некоторые моменты я выделил красным...
Поправьте меня, если я ошибаюсь, но разве здесь нет смысловых ошибок?
Если нет — то пойду перечитывать Страуструпа и всех остальных вместе с ним...
ps: под модулем здесь подразумевается cpp- или h-файл, в котором описывается/определяется класс...


...::: всё вышесказанное — чистое имхо :::...
Георгий
Отправлено: 25.07.2005, 23:22


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



да, это БРЕД. но только частично — если постараться, то можно из этй мозаики сложить целую картину и догадаться, что же имел ввиду Архангельский (ну или те, кто от его имени пишут).
Лена
Отправлено: 26.07.2005, 09:56


Мастер участка

Группа: Участник
Сообщений: 501



Это из первого издания книги или это из нового второго издания?
Asher
Отправлено: 26.07.2005, 10:29


Мастер участка

Группа: Модератор
Сообщений: 550



В его книге по пятому билдеру такая-же ахинея. Слово в слово.

Язык надо учить по первоисточникам, а не в кратком вольном пересказе
BreakPointMAN
Отправлено: 26.07.2005, 11:01


Станционный диспетчер

Группа: Участник
Сообщений: 86



QUOTE (Лена @ 26/07/2005, 09:56)
Это из первого издания книги или это из нового второго издания?

Это первое издание...

ммм... а для интереса — у кого если второе издание есть — посмотрите, исправлена ли эта ошибка?.. в первом издании — их море (я уже не говорю про орфографические и пунктуационные ошибки и опечатки...); очень и очень грустно... sad.gif Потому что книга чисто как описание среды BCB мне нравиццца... По крайней мере, лучше я еще пока не видел...
Doga
Отправлено: 26.07.2005, 12:06


Мастер участка

Группа: Участник
Сообщений: 575



Зато грамматических ошибок нет! biggrin.gif biggrin.gif biggrin.gif
BreakPointMAN
Отправлено: 27.07.2005, 23:13


Станционный диспетчер

Группа: Участник
Сообщений: 86



QUOTE (Doga @ 26/07/2005, 12:06)
Зато грамматических ошибок нет! biggrin.gif biggrin.gif biggrin.gif

Хороший юмор! biggrin.gif
грустно, правда... sad.gif
olegenty
Отправлено: 28.07.2005, 08:40


Ветеран

Группа: Модератор
Сообщений: 2412



Б. Страуструп поможет... Ничего лучше по С++ не доводилось читать...
flint
Отправлено: 28.07.2005, 13:10


Дежурный стрелочник

Группа: Участник
Сообщений: 58



Интересно, откуда Страуструп так хорошо знает С++? biggrin.gif smile.gif biggrin.gif
Doga
Отправлено: 28.07.2005, 15:37


Мастер участка

Группа: Участник
Сообщений: 575



Подозреваю, он на короткой ноге с самим автором biggrin.gif
olegenty
Отправлено: 28.07.2005, 16:15


Ветеран

Группа: Модератор
Сообщений: 2412



угу, у него с автором на двоих одна нога smile.gif (он один из разработчиков языка)
Doga
Отправлено: 28.07.2005, 16:24


Мастер участка

Группа: Участник
Сообщений: 575



НЕ МОЖЕТ БЫТЬ!!! biggrin.gif Кто бы мог подумать! biggrin.gif
flint
Отправлено: 29.07.2005, 07:32


Дежурный стрелочник

Группа: Участник
Сообщений: 58



Ага... Вот это да... Писатель книжек — автор языка. Да такого быть не может! cool.gif
Sl@Sh
Отправлено: 09.09.2005, 15:41


Мастер участка

Группа: Участник
Сообщений: 383



Сразу скажу, что моё ИМХО далеко не как профи, но из всего приведеного текста неправильным есть только :

При этом из функций, объявленных внутри класса, к ним можно обращаться непосредственно по имени, а из других функций — только со ссылкой на объект данного класса. В рассмотренном примере это относится к процедуре F1

Дело в том, что своё ИМХО я сразу проверил. А проверял именно каждое написаное предложение. И только Приведеный вверху текст не ответствовал действительности.

P.S.: Просто высказываю своё не профессиональное мнение. Подскажите если не прав.
Asher
Отправлено: 09.09.2005, 16:00


Мастер участка

Группа: Модератор
Сообщений: 550



На любую попытку доступа, описанную в выделеных красным предложениях, вы получите
is not accessible
И если к protected еще можно достучаться из потомков или друзей, то к привате — только из друзей класса.
И дружба не наследуется.
Sl@Sh
Отправлено: 10.09.2005, 17:27


Мастер участка

Группа: Участник
Сообщений: 383



Не понял смысл вашего ответа, Asher. Вот взять ходябы первое предложение (цитаты из книги). Разве к private я смогу получить доступ вне данного класса. Именно об этой невозможности и пишет Архангельский. Это ведь на бред не похоже.

Отредактировано Sl@Sh — 10/09/2005, 17:28
Asher
Отправлено: 12.09.2005, 08:20


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Кхм... Извине Sl@Sh? но вы точно внимательно читаете что там написано? Разбираем по высказываниям.
QUOTE
Элементы (переменные и функции), объявленные в классе в разделе private, видимы и доступны только внутри данного модуля.  При этом из функций, объявленных внутри класса, к ним можно обращаться непосредственно по имени, а из других функций — только со ссылкой на объект данного класса. В рассмотренном примере это относится к процедуре F1. Если в модуле описано несколько классов, то объекты этих классов взаимно видят элементы, описанные в их разделах private.

private класса видны ТОЛЬКО ВНУТРИ ДАННОГО КЛАССА ИЛИ ДРУГА ДАННОГО КЛАССА. Внутри модуля могут быть описаны несколько классов, но они не будут видеть private секции друг друга никаким образом если они не друзья.
QUOTE

Элементы, объявленные в классе в разделе public, видимы и доступны для объектов любых классов и для других модулей, в которых директивой #include включен заголовочный файл данного модуля. При этом из объектов того же класса, к ним можно обращаться непосредственно по имени, а из других объектов и процедур — только со ссылкой на объект данного класса.  В рассмотренном примере это относится к переменной Ch1 и процедуре F2.

Здесь все верно. Но напутать с public было-бы предельным случаем, я бы сказал клиническим.
QUOTE

В классах, помимо обсуждавшихся ранее, могут быть еще разделы protected — защищенные. Элементы, объявленные в классе в разделе protected, видимы и доступны для любых объектов внутри данного модуля, а также для объектов классов-наследников данного класса в других модулях. Объекты из других модулей, классы которых не являются наследниками данного класса, защищенных элементов не видят.

protected из других классов, елсли они не потомки или друзья, также не видны.

Вообще модуль — чисто искуственно разделения для удобства манипулирования частями и понижения сложности одной отдельно взятой единицы трансляции, а также подчеркнуть логическую структуру программы.
Sl@Sh
Отправлено: 13.09.2005, 17:11


Мастер участка

Группа: Участник
Сообщений: 383



Да вы правы, не внимательно (со мной так всегда).
Тут точно мозайка какая-то (как Георгий писал). Возможно Архангельский имел ввиду модуль формы, в котором объявлен только класс формы и все функции и переменные этого модуля объявлены в классе формы.
Sergey Boyko
Отправлено: 22.09.2005, 14:17


Ученик-кочегар

Группа: Участник
Сообщений: 4



QUOTE
Вообще модуль — чисто искуственно разделения для удобства манипулирования частями и понижения сложности одной отдельно взятой единицы трансляции, а также подчеркнуть логическую структуру программы.

Это не совсем так.
До последнего времени, это была еще и отдельно взятая единица линковки.
Кроме этого, не стоит забывать что до появления объектно-ориентированных языков, модули в большинстве случаев были единственным средством инкапсуляции данных (static-функции и данные ).
Так что я бы не стал так уверенно утверждать об "искуственности" модульной технологии.
Для наглядности советую сгенерировать MAP-файл, и внимательно изучить.

Отредактировано Sergey Boyko — 22/09/2005, 14:19
Asher
Отправлено: 22.09.2005, 15:53


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
Не думал что мое высказывание в конце поста выглядит таким категоричным. Мне наверное надо почаще ИМХО писать, хотя я думал моя подпись решает эту проблему. biggrin.gif

QUOTE
До последнего времени, это была еще и отдельно взятая единица линковки.
Кроме этого, не стоит забывать что до появления объектно-ориентированных языков, модули в большинстве случаев были единственным средством инкапсуляции данных (static-функции и данные ).

С другой стороны, ИМХО, изменение смысла ключевого слова static в С++ по отношению к С и появление пространств имен ведет к тому, что реально разбиение на модули, в настоящее время, искусственно и в плане организации кода и в плане линковки .
В том смысле, что если-бы это было не так, то не требовалось бы от компиляторов механизма прекомпиляции заголовочных файлов.

P.S. to Sergey Boyko очень рад видеть Вас зарегистрированным на этом форуме.

Отредактировано Asher — 22/09/2005, 16:58
Gedeon
Отправлено: 22.09.2005, 16:42


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (Asher @ 22/09/2005, 15:53)
P.S. to Sergey Boyko очень рад видеть Вас зарегистрированным на этом форуме.

Присоединяюсь!

Вернуться в Флейм