В главном модуле - создан сложный массив, с множеством под-массивов.


PS: Всем кто прочитает, а тем более поможет - отличного настроения!

.
Модератор: Модераторы
absdjfh писал(а):Пользуйтесь общепринятыми терминами, а не своими.
absdjfh писал(а):перенести данные в дочерний модуль.
absdjfh писал(а):экспортировать данные из главного модуля и описать декларацию внешней переменной в дочернем
program Test_Main; // Главная программа
uses
Test_Unit, // модуль с процедурами
Test_Data; // модуль с данными
begin
Test_Data.PublicVar:= 1;
Test_Unit.Clear;
Write(Test_Data.PublicVar);
Readln;
end.
unit Test_Data; // Модуль с данными
interface
var PublicVar : integer;
implementation
end.
unit Test_Unit; // модуль с процедурами
interface
procedure Clear;
implementation
uses Test_Data;
procedure Clear;
begin
Test_Data.PublicVar:=0;
end;
end.
SSerge писал(а):И, опять же, определяя глобальную переменную в unit, вы закладываете мину замедленного действия. Правильный путь объектно-ориентираванного программирования говорит о том, что глобальных переменных вообще не должно быть - любая переменная должна быть обёявлена только внутри описания класса и принадлежать экземпляру этого класса, чтобы потом не искать мучительно "откуда она взялась".
alexey38 писал(а):Единственное, что нужно вместо названия модуля Test_Data, использовать сразу такое, которое и через 20 лет будет в памяти, т.е. совпадающее со смыслом из постановки задачи.
SSerge писал(а):И, опять же, определяя глобальную переменную в unit, вы закладываете мину замедленного действия.
СПАСИБО - БОЛЬШОЕ; ЧЕЛОВЕЧЕСКОЕOleg_D писал(а):Попробуйте вынести глобальные данные, используемые в нескольких модулях, в отдельный модуль и подключить его через uses.
alexey38 писал(а): Структура программы должна соответствовать логике мышления.
При передаче, через параметры процедур и функций - тратятся громадные ресурсы. Каждое обращение к процедуре/функции - это уже, колоссальная затрата времени процессора. На самом деле всё зависит от задачи. Поясните почему Вы полагаете что глобальные переменные плохо?Oleg_D писал(а):Совсем без глобальных переменных не обойтись, это так. Но надо стремиться свести их количество к минимуму, а данные передавать через параметры процедур и функций. Но всё это опыт, опыт и опыт.
Oleg_D писал(а):В Паскале память для локальных переменных и параметров отводится в стеке автоматически, что почти не требует расхода времени, поскольку архитектура любого современного процессора заточена под это.
Искусство - сложная вещь. В Искусстве - всё зависит от изначальной логики программы (я так думаю), но я художник - представитель наидревнейшего Искусства планеты. Художникам свойственно преувеличивать и "ложно" трактовать естественные для большинства факты. Однако я твёрдо уверен, что надёжность программы - зависит от аккуратности программиста и глобальные переменные здесь ни при чём.Oleg_D писал(а):Это запутывает проект и снижает надёжность программы.
Ну вот.. Вы противоречите сами себе. Т.к. естественно мне априори нужны данные, которые я хочу использовать в нескольких модулях, причём и кстати - постоянно и очень часто. Ещё раз спасибо за Ваш пример.Oleg_D писал(а):Если глобальные данные нужны лишь внутри одного модуля, их объявляют в секции реализации. А если в они нужны и в других модулях, то в секции интерфейса (как в моём примере выше).
vitaly_l писал(а):Вот только не надо красивых фраз, я достаточно хорошо знаю например PHP и там с этим проблем нет
vitaly_l писал(а):Есть, главный модуль, в uses которого - указан дочерний модуль.
vitaly_l писал(а):Как в главном модуле объявить переменную, которую будет видно в "подчинённых" юнитах?
SSerge писал(а):Но вы же не ищете правильных путей, не так ли?
SSerge писал(а):в разделе implementation вашего дочернего модуля...
svk12 писал(а):Но они должны быть прописаны в разных секциях(interface/implementation).
vitaly_l писал(а):Если Вы сможете описать логику мышления, то Вы будете первым из ныне-живущих. В смысле над этим бьются уже много десятков и даже сотен лет, но толком никто не может сказать: Что такое сознание?
vitaly_l писал(а):Ещё есть способы передачи данных из главного модуля в модуль подчинённый?
alexey38 писал(а):Речь идет чтобы программу писать максимально близко к своим рассуждениям о самой задаче.
alexey38 писал(а):Проблема в том, что многих учат программировать оторвано от анализа самой задачи.
alexey38 писал(а):я Вам не советую создавать классы там, где они не нужны и где достаточно использовать глобальную переменную. Но если создаете глобальную переменную, то не называйте ее очень кратко, типа i,j,x,y и т.п., т.к. доступ к ним есть много откуда и можно ошибочно перетереть значение там, где не нужно было. Поэтому называйте модули, глобальные переменные и процедуры длинно, максимально привязываясь в их фактическому наименованию.
Вернуться в Обучение Free Pascal
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4