Что такое модули ?
От: yvb  
Дата: 18.07.02 10:11
Оценка:
Вот говорят, что в C/C++ не настоящие модули,
а просто включение текста. А что такое
"настояшие" модули ? Вроде бы в ADA они и в
Modula2.

спасибо
Re: Что такое модули ?
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 18.07.02 10:25
Оценка:
Здравствуйте yvb, Вы писали:

yvb>Вот говорят, что в C/C++ не настоящие модули,

yvb>а просто включение текста. А что такое
yvb>"настояшие" модули ? Вроде бы в ADA они и в
yvb>Modula2.

Что такое в твоем понимании настояцие модули?

Модуль в C++ обычно состоит из 2 файлов
.h в котором находится описание для
компилятора(у какой функции сколько параметров
и какие) и файла в котором содержится сама
функция. Тот второй файл может быть cpp,
obj, или lib(lib это несколько obj склееные вместе).

если модуль в obj или lib то он не компилится
повторно т.к. уже компиленый что сильно сокращает
время сборки.

В таких языках как Delphi эти 2 файла склеены в 1.
(это на самом деле не всегда удобно) то что в Delphi
interface это как бы первый файл а implementation — второй
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[2]: Что такое модули ?
От: yvb  
Дата: 18.07.02 10:55
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Модуль в C++ обычно состоит ....


Спасибо за ответ. Но это мне все известно.
Есть в программировании понятие
"модульное программирование". И вроде бы C++
такую технологию поддерживает. Но мне приходилось
не один раз слышать, что вот дескать в C++
"не настоящие" модули. Т.е. люди хотели сказать,
что C++ не на 100% поддерживает модульное программирование.
Например в форуме C/C++ в топике "Макрос, работающий только для данного класса"
не один раз высказывалось, что в C++ не хватает (настоящих) модулей.
Об этом был мой вопрос.

Еще раз спасибо
Re[3]: Что такое модули ?
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 18.07.02 11:07
Оценка:
Здравствуйте yvb, Вы писали:

yvb>Здравствуйте Anatolix, Вы писали:


yvb>не один раз высказывалось, что в C++ не хватает (настоящих) модулей.

yvb>Об этом был мой вопрос.

Это мнение классика(Бьерн страуструп). Да
действительно #define переходит границу модуля программирования.
Но это просто одно из средств, #define лучше вообще не использовать,
если не уверен. Их заменяют шаблоны и инлайновые функции.

Б.С. В следующей редакции C++ хочет чтобы #define не выходил
за пределы .h(из книжки дизайн и эволюция C++).
Но непонятно будет это сделано или нет. Слишком много
кода написано.

Что по поводу общего ответа C++ поддерживает модули
(не смотря на #define Его вконце концов можно
и отменить #undef в конце модуля.)
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[3]: Что такое модули ?
От: Vi2 Удмуртия http://www.adem.ru
Дата: 18.07.02 11:23
Оценка:
Здравствуйте yvb, Вы писали:

yvb>Но мне приходилось не один раз слышать, что вот дескать в C++ "не настоящие" модули.

yvb>Т.е. люди хотели сказать, что C++ не на 100% поддерживает модульное программирование.
yvb>Например в форуме C/C++ в топике "Макрос, работающий только для данного класса" не один раз высказывалось, что в C++ не хватает (настоящих) модулей.
yvb>Об этом был мой вопрос.

Модульное программирование — это принцип, технология, точно также, как и структурное программирование. То, что C/C++ поддерживает их, а не исповедует, известно. Кто-то считает это за благо, кто-то нет.

Однако эта поддержка помогает мне (и не только в работе программиста), и я опираюсь на эту поддержку в своей работе.

"Главное не в дорогах, которые мы выбираем, а в том в нас, что заставляет нас выбирать эту дорогу" (произвольно из О.Генри).
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re: Что такое модули ?
От: Anton V. Kolotaev  
Дата: 19.07.02 05:55
Оценка: 21 (2)
Здравствуйте yvb, Вы писали:

yvb>Вот говорят, что в C/C++ не настоящие модули,

yvb>а просто включение текста. А что такое
yvb>"настояшие" модули ? Вроде бы в ADA они и в
yvb>Modula2.

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

Понятие модуль очень широкое, и говорить, что есть ненастоящие модули, бессмысленно. Модули различаются размером, связностью, сцеплением с другими модулями, рутинностью и еще много чем.

Так же бессмысленно говорить о "настоящей" персистентности.

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

В С++ основные средства поддержки модульности: классы, пространства имен.

IMHO .h и .cpp файлы — не предназначены для поддержки модульности (не являются именованной сущностью), а лишь срество декомпозиции программы. Другое дело, что многие придерживаются правила "один модуль (класс) — пара .h и .cpp файлов". Но в отличии от Java оно нигде не узаконено. IMHO это хорошо.
Re[2]: Что такое модули ?
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 19.07.02 06:23
Оценка:
Здравствуйте Anton V. Kolotaev, Вы писали:

AVK>Здравствуйте yvb, Вы писали:


yvb>>Вот говорят, что в C/C++ не настоящие модули,

yvb>>а просто включение текста. А что такое
yvb>>"настояшие" модули ? Вроде бы в ADA они и в
yvb>>Modula2.

AVK>Вообще говоря, модулями являются и класс, и процедура, и пространство имен.

AVK>Если не ошибаюсь, модуль — это сущность, к которой можно обращаться по имени, его семнтика не зависит от того, кем он используется, считается, что модуль инкапсулирует нечто и предоставляет клиентам интерфейс для доступа к этому нечто. модуль — механизм наведения структуры.

Все-таки помоему модуль это единица трансляции. Т.е. если
ты поменял одну букву в программе и она вся перекомпилилась
сначит она не модульная. А если перекомпилилась часть то
модульная.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[3]: Что такое модули ?
От: Aquary Россия https://wmspanel.com/
Дата: 19.07.02 06:39
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Все-таки помоему модуль это единица трансляции. Т.е. если

A>ты поменял одну букву в программе и она вся перекомпилилась
A>сначит она не модульная. А если перекомпилилась часть то
A>модульная.

Я могу изменить одну букву в foo.h, который используется во всем проекте, перекомпилится вся прога. Значит, это уже по определению не будет модульный проект?
Разбиение на файлы — это ведь физическое разбиение программы, а не логическое.
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming
https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
http://scm-notes.blogspot.com/ — Блог об управлении конфигурацией
Re[3]: Что такое модули ?
От: Anton V. Kolotaev  
Дата: 19.07.02 06:40
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Все-таки помоему модуль это единица трансляции.


Сейчас нет со мной умной книжки (О. Одинцов "Профессиональное программирование"), но все-таки мне кажется, что единица трансляции в С++ — не модуль (в отличии от многих других языков). Если не ошибаюсь, есть такое понятие, как "аксиомы модульности Коуэна".

С другой стороны, мы ведем спор про то, что является модулем. Учитывая свободу в выборе определений, споры об определениях иногда бесплодны.

A> Т.е. если

A>ты поменял одну букву в программе и она вся перекомпилилась
A>сначит она не модульная. А если перекомпилилась часть то
A>модульная.

Это одно из возможных свойств модульной архитектуры. Кстати, Др. Б.С. многое говорил о его важности в С++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.