link3036 link3037 link3038 link3039 link3040 link3041 link3042 link3043 link3044 link3045 link3046 link3047 link3048 link3049 link3050 link3051 link3052 link3053 link3054 link3055 link3056 link3057 link3058 link3059 link3060 link3061 link3062 link3063 link3064 link3065 link3066 link3067 link3068 link3069 link3070 link3071 link3072 link3073 link3074 link3075 link3076 link3077 link3078 link3079 link3080 link3081 link3082 link3083 link3084 link3085 link3086 link3087 link3088 link3089 link3090 link3091 link3092 link3093 link3094 link3095 link3096 link3097 link3098 link3099 link3100 link3101 link3102 link3103 link3104 link3105 link3106 link3107 link3108 link3109 link3110 link3111 link3112 link3113 link3114 link3115 link3116 link3117 link3118 link3119 link3120 link3121 link3122 link3123 link3124 link3125 link3126 link3127 link3128 link3129 link3130 link3131 link3132 link3133 link3134 link3135 link3136 link3137 link3138 link3139 link3140 link3141 link3142 link3143 link3144 link3145 link3146 link3147 link3148 link3149 link3150 link3151 link3152 link3153 link3154 link3155 link3156 link3157 link3158 link3159 link3160 link3161 link3162 link3163 link3164 link3165 link3166 link3167 link3168 link3169 link3170 link3171 link3172 link3173
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 очень рад видеть Вас зарегистрированным на этом форуме.

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

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