Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
DimaBr
Лучшие "Друзья"
unit Classes;

type
TStrings = class(TPersistent);
TStream = class(TObject);
TFiler = class(TObject);
TThread = class;
TDataModule = class(TComponent)
TBasicAction = class(TComponent);

Хороший пример. Спасибо.
Как раз это “плохие” друзья, но они в одном модуле.
А почему так?
14 авг 19, 12:20    [21949059]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
Как раз это “плохие” друзья, но они в одном модуле.
А почему так?

Предположение-1: Classes - это модуль VCL библиотеки, которая уже завершена, т.е. не находится в разработке, ей “не грозят” архитектурные изменения, поэтому можно пренебрегать правилами дружественности ради компактности.
Предположение-2: Classes - это основа для VCL, как пространство имен std в C++. Его не требуется делить на меньшие части.
...
Какие еще предположения?
14 авг 19, 12:22    [21949064]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58106
Блог
Victor Cookin
В один модуль попадают "дружественные" классы. То есть те, которым открыт доступ к приватным методам друга.

Это отрицательная фича, которую было бы очень здорово выпилить нафиг.
14 авг 19, 12:49    [21949121]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
Artem.1st
Classes - это модуль VCL библиотеки, которая уже завершена

Уточнение, Classes - это Runtime библиотека (не VCL)... еще один довод к аналогии std для C++
14 авг 19, 12:53    [21949126]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47967

Модуль - средство инкапсуляции программных единиц. А уж являются ли эти единицы
процедурами, функциями, типами или чем другим - совершенно всё равно.

Posted via ActualForum NNTP Server 1.5

14 авг 19, 13:00    [21949138]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30227

14.08.2019 12:49, softwarer пишет:
> Это отрицательная фича, которую было бы очень здорово выпилить нафиг.

дык, ввели же наконец-то strict private.

лучше поздно чем вообще (С)

Posted via ActualForum NNTP Server 1.5

14 авг 19, 13:02    [21949144]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30227

14.08.2019 13:00, Dimitry Sibiryakov пишет:
> Модуль - средство инкапсуляции программных единиц. А уж являются ли эти единицы
> процедурами, функциями, типами или чем другим - совершенно всё равно.

узко мыслишь (С)
был у меня один студиоз, который задался целью покончить таки с гегелевской неопределённостью
и разработать универсальные критерии классификации материи по категориям "живой" и "неживой"...

зы: похоже, тут те же симптомы

Posted via ActualForum NNTP Server 1.5

14 авг 19, 13:05    [21949149]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
softwarer
Victor Cookin
те, которым открыт доступ к приватным методам друга.

Это отрицательная фича, которую было бы очень здорово выпилить нафиг.

Для ограничения доступа к приватным разделам, в Delphi-2005 появилось ключевое слово strict private.
Это подразумевается или что-то другое?
14 авг 19, 13:08    [21949151]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
Dimitry Sibiryakov
Модуль - средство инкапсуляции программных единиц.

Если “дружественность” программных единиц - это основной критерий формирования delphi-модуля, то я хочу понять эту методику. Цель - уменьшить межмодульные связи, а второстепенная цель - инкапсулировать друзей. Это важно для большого проекта.
Такая методика должна существовать(этот велосипед д.б. изобретен), вот я ее ищу.
14 авг 19, 13:42    [21949210]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58106
Блог
Мимопроходящий
дык, ввели же наконец-то strict private.

А толку? В своих исходниках и без него нет проблем, а чужих он не исправит.
14 авг 19, 13:49    [21949222]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58106
Блог
Artem.1st
Это подразумевается или что-то другое?

Подразумевается, что дружественность как концепцию вообще надо бы выпилить из языка.
14 авг 19, 13:51    [21949225]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47967

Artem.1st
Такая методика должна существовать(этот велосипед д.б. изобретен), вот я ее ищу.

Нет такой методики. Модуль - средство инкапсуляции программных единиц. Количество
инкапсулированных программных единиц решается в каждом случае индивидуально в зависимости
от конкретных условий проекта.

Ты можешь в одну сумку свалить половину универмага или разложить разные группы товаров по
разным сумкам. Это твоё личное решение как архитектора.

Posted via ActualForum NNTP Server 1.5

14 авг 19, 13:57    [21949233]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
Если говорить о дружественности, то иногда нужны методы или свойства, которые будут видны только в рамках этой дружественности.
Например некоторые классы из фреймоврка логирования должны уметь обращаться к свойствам других классов этого же фреймворка, но эти же свойства не должны быть доступны конечному разработчику.

Важно понимать, что поля класса всегда должны быть приватные. Это кухня класса, только он должен владеть реализацией собственного состояния. Любое обращение извне может быть только через свойства. К сожалению в Delphi исторически сложилось, что в рамках одного модуля разрешается обращаться к приватным полям. Это нарушает логическую целостность.
Представьте ситуацию, когда 200 разработчиков разрабатывают 200 классов и потом их поддерживают на одном проекте. В каком-то классе поменяли внутреннюю реализацию, но наружу как были выставлены свойства (контракт класса), так и остались. Однако некий недобросовестный разработчик вместо обращения к свойствам, полез в приват к чужому классу. Все, приплыли, развалилось...

А вся эта разрешенность появилась из-за недостатка абстракций...

Отсутствие полноценных пространств имен. Отсутствие модификатора internal, который скажет что свойство, метод, класс, интерфейс будут видимы только в рамках пространства имен.

Из-за этого и появляются портяники модулей, которые тяжело поддерживать при постоянном обновлении большой командой разработчиков. Попробуйте выполнять мердж изменений и решать конфликты каждые N часов в команде из 20 человек работающим над одним проектом и одной областью.

Также проблемой является это прописать модули в uses.
Если взять System.Classes и разбить его на N логических единиц... То чтобы использовать различные возможности, в uses придется прописать еще с десяток модулей вместо одного.
В отличие от того же пространства имен которое может быть одно хоть на 100 модулей.

Поэтому наверное и считается использование дельфи чем-то устаревшим, потому что мир меняется, подходы меняются, а возможности языка нет.
В командной разработке он не удобен в отличие от других.
14 авг 19, 14:00    [21949236]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47967

X-Cite
Например некоторые классы из фреймоврка логирования должны уметь обращаться к свойствам
других классов этого же фреймворка, но эти же свойства не должны быть доступны конечному
разработчику.

Отличный пример облажавшегося архитектора.

Posted via ActualForum NNTP Server 1.5

14 авг 19, 14:03    [21949246]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
softwarer
Подразумевается, что дружественность как концепцию вообще надо бы выпилить из языка.

Хороший архитектурный момент.
На примере классов Контейнер(Collection) и Элемент(Item), как эти классы реализовать без дружественности?
14 авг 19, 14:07    [21949253]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47967

Artem.1st
как эти классы реализовать без дружественности?

Легко: Item не должен ничего знать о контейнере в котором он лежит. Это и называется
инкапсуляцией.

Posted via ActualForum NNTP Server 1.5

14 авг 19, 14:11    [21949266]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3625
X-Cite
Также проблемой является это прописать модули в uses.
Если взять System.Classes и разбить его на N логических единиц... То чтобы использовать различные возможности, в uses придется прописать еще с десяток модулей вместо одного.


Classes мог бы просто экспортировать псевдонимы типов на типы других N модулей.
14 авг 19, 14:19    [21949283]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58106
Блог
Artem.1st
На примере классов Контейнер(Collection) и Элемент(Item), как эти классы реализовать без дружественности?

Грамотно и профессионально.

Да, это хороший пример. В своё время я захотел добавить к компоненту TStatusBar различную полезную функциональность - например, вывод прогрессбара, размещение в панелях кнопок, комбобоксов и прочих контролов, возможность пользователю в ран-тайме ресайзить панели мышкой и так далее. И для того, чтобы это сделать, мне в конце концов пришлось просто взять из VCL весь код TStatusBar и связанных классов, откопировать себе в модуль и сделать независимый компонент - потому что из-за грёбанной дружественности между TStatusPanels (контейнер) и TStatusPanel (элемент) сделать нужную функциональность наследованием оказалось просто-напросто невозможно.
14 авг 19, 14:20    [21949284]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
Dimitry Sibiryakov
Нет такой методики.

Из-за масштабности проекта другого выхода нет. Я вынужден искать “методику”.
Вам спасибо за ответ.
14 авг 19, 14:22    [21949289]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30227

14.08.2019 14:22, Artem.1st пишет:
> Из-за масштабности проекта...

я ж говорил, BolgenOS...

Posted via ActualForum NNTP Server 1.5

14 авг 19, 14:24    [21949293]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47967

Artem.1st
Из-за масштабности проекта другого выхода нет. Я вынужден искать “методику”.

Зря тратишь время. Любую масштабную задачу (проект) можно и нужно дробить на всё более
мелкие подзадачи пока их сложность не сравняется с квалификацией исполнителя. Это работа
для тимлида и архитектора.

Posted via ActualForum NNTP Server 1.5

14 авг 19, 14:29    [21949304]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
Dimitry Sibiryakov
Легко: Item не должен ничего знать о контейнере в котором он лежит. Это и называется
инкапсуляцией.

Спасибо за ответ. Как раз “свежая” тема, мои исследования уткнулись в то, что во многих прикладных задачах Элемент должен знать о Контейнере. Например, в реляционных структурах зависимые сущности ссылаются по ключу на главную сущность.

А вот это реальный код из Classes.pas
  TCollectionItem = class(TPersistent)
  private
    FCollection: TCollection;
...
  end;

Так как обойтись без дружественности? Есть еще способ?
14 авг 19, 14:39    [21949320]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Leonid
Member

Откуда: From nowhere
Сообщений: 741
X-Cite
В отличие от того же пространства имен которое может быть одно хоть на 100 модулей.
Вот и я о том же.

X-Cite
...мир меняется, подходы меняются, а возможности языка нет.
Ну Дельфи тоже меняется, но не так быстро как хотелось бы.
К 2019-му наконец-то добавили возможность объявление переменных по месту с авто-выведением типа. Аллилуйя!!
Глядишь к 2025-му добавят и двухпроходный компилятор с нэймспейсами.
А к 2030-му полноценные лямбды появятся и еще чего.
14 авг 19, 14:42    [21949326]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
X-Cite,
спасибо за ответ. Есть интересные моменты, чтоб подумать.
Параллельно я смотрю на методики пространства имен C++. Также у Си-шников намечается появление “Модуля” в стандарте C++20, по крайней мере они ведут такие обсуждения.
14 авг 19, 15:00    [21949335]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
Dimitry Sibiryakov
Любую масштабную задачу (проект) можно и нужно дробить на всё более
мелкие подзадачи

Я неправильно выразился. Задача даже не масштабная, а неограниченная размерами. Ее бесполезно дробить, это будет рутиной. В основе д.б. методика контроля программного функционала(разбитие на модули, учет связей, и т.п...). Она существует, найти ее - дело времени. Я параллельно изобретаю свой велосипед, просто, чтоб лучше чувствовать цель.
14 авг 19, 15:17    [21949352]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить