|
|
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
DimaBrЛучшие "Друзья" Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Хороший пример. Спасибо. Как раз это “плохие” друзья, но они в одном модуле. А почему так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 12:20 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Как раз это “плохие” друзья, но они в одном модуле. А почему так? Предположение-1: Classes - это модуль VCL библиотеки, которая уже завершена , т.е. не находится в разработке, ей “не грозят” архитектурные изменения, поэтому можно пренебрегать правилами дружественности ради компактности. Предположение-2: Classes - это основа для VCL, как пространство имен std в C++. Его не требуется делить на меньшие части. ... Какие еще предположения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 12:22 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Victor CookinВ один модуль попадают "дружественные" классы. То есть те, которым открыт доступ к приватным методам друга. Это отрицательная фича, которую было бы очень здорово выпилить нафиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 12:49 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1stClasses - это модуль VCL библиотеки, которая уже завершена Уточнение, Classes - это Runtime библиотека (не VCL)... еще один довод к аналогии std для C++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 12:53 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Модуль - средство инкапсуляции программных единиц. А уж являются ли эти единицы процедурами, функциями, типами или чем другим - совершенно всё равно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 13:00 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
14.08.2019 12:49, softwarer пишет: > Это отрицательная фича, которую было бы очень здорово выпилить нафиг. дык, ввели же наконец-то strict private. лучше поздно чем вообще (С) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 13:02 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
14.08.2019 13:00, Dimitry Sibiryakov пишет: > Модуль - средство инкапсуляции программных единиц. А уж являются ли эти единицы > процедурами, функциями, типами или чем другим - совершенно всё равно. узко мыслишь (С) был у меня один студиоз, который задался целью покончить таки с гегелевской неопределённостью и разработать универсальные критерии классификации материи по категориям "живой" и "неживой"... зы: похоже, тут те же симптомы Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 13:05 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
softwarerVictor Cookinте, которым открыт доступ к приватным методам друга. Это отрицательная фича, которую было бы очень здорово выпилить нафиг. Для ограничения доступа к приватным разделам, в Delphi-2005 появилось ключевое слово strict private . Это подразумевается или что-то другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 13:08 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovМодуль - средство инкапсуляции программных единиц. Если “дружественность” программных единиц - это основной критерий формирования delphi-модуля, то я хочу понять эту методику. Цель - уменьшить межмодульные связи, а второстепенная цель - инкапсулировать друзей. Это важно для большого проекта. Такая методика должна существовать(этот велосипед д.б. изобретен), вот я ее ищу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 13:42 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийдык, ввели же наконец-то strict private. А толку? В своих исходниках и без него нет проблем, а чужих он не исправит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 13:49 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1stЭто подразумевается или что-то другое? Подразумевается, что дружественность как концепцию вообще надо бы выпилить из языка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 13:51 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1stТакая методика должна существовать(этот велосипед д.б. изобретен), вот я ее ищу. Нет такой методики. Модуль - средство инкапсуляции программных единиц. Количество инкапсулированных программных единиц решается в каждом случае индивидуально в зависимости от конкретных условий проекта. Ты можешь в одну сумку свалить половину универмага или разложить разные группы товаров по разным сумкам. Это твоё личное решение как архитектора. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 13:57 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Если говорить о дружественности, то иногда нужны методы или свойства, которые будут видны только в рамках этой дружественности. Например некоторые классы из фреймоврка логирования должны уметь обращаться к свойствам других классов этого же фреймворка, но эти же свойства не должны быть доступны конечному разработчику. Важно понимать, что поля класса всегда должны быть приватные. Это кухня класса, только он должен владеть реализацией собственного состояния. Любое обращение извне может быть только через свойства. К сожалению в Delphi исторически сложилось, что в рамках одного модуля разрешается обращаться к приватным полям. Это нарушает логическую целостность. Представьте ситуацию, когда 200 разработчиков разрабатывают 200 классов и потом их поддерживают на одном проекте. В каком-то классе поменяли внутреннюю реализацию, но наружу как были выставлены свойства (контракт класса), так и остались. Однако некий недобросовестный разработчик вместо обращения к свойствам, полез в приват к чужому классу. Все, приплыли, развалилось... А вся эта разрешенность появилась из-за недостатка абстракций... Отсутствие полноценных пространств имен. Отсутствие модификатора internal, который скажет что свойство, метод, класс, интерфейс будут видимы только в рамках пространства имен. Из-за этого и появляются портяники модулей, которые тяжело поддерживать при постоянном обновлении большой командой разработчиков. Попробуйте выполнять мердж изменений и решать конфликты каждые N часов в команде из 20 человек работающим над одним проектом и одной областью. Также проблемой является это прописать модули в uses. Если взять System.Classes и разбить его на N логических единиц... То чтобы использовать различные возможности, в uses придется прописать еще с десяток модулей вместо одного. В отличие от того же пространства имен которое может быть одно хоть на 100 модулей. Поэтому наверное и считается использование дельфи чем-то устаревшим, потому что мир меняется, подходы меняются, а возможности языка нет. В командной разработке он не удобен в отличие от других. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:00 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
X-CiteНапример некоторые классы из фреймоврка логирования должны уметь обращаться к свойствам других классов этого же фреймворка, но эти же свойства не должны быть доступны конечному разработчику. Отличный пример облажавшегося архитектора. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:03 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
softwarerПодразумевается, что дружественность как концепцию вообще надо бы выпилить из языка. Хороший архитектурный момент. На примере классов Контейнер(Collection) и Элемент(Item), как эти классы реализовать без дружественности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:07 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1stкак эти классы реализовать без дружественности? Легко: Item не должен ничего знать о контейнере в котором он лежит. Это и называется инкапсуляцией. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:11 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
X-CiteТакже проблемой является это прописать модули в uses. Если взять System.Classes и разбить его на N логических единиц... То чтобы использовать различные возможности, в uses придется прописать еще с десяток модулей вместо одного. Classes мог бы просто экспортировать псевдонимы типов на типы других N модулей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:19 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1stНа примере классов Контейнер(Collection) и Элемент(Item), как эти классы реализовать без дружественности? Грамотно и профессионально. Да, это хороший пример. В своё время я захотел добавить к компоненту TStatusBar различную полезную функциональность - например, вывод прогрессбара, размещение в панелях кнопок, комбобоксов и прочих контролов, возможность пользователю в ран-тайме ресайзить панели мышкой и так далее. И для того, чтобы это сделать, мне в конце концов пришлось просто взять из VCL весь код TStatusBar и связанных классов, откопировать себе в модуль и сделать независимый компонент - потому что из-за грёбанной дружественности между TStatusPanels (контейнер) и TStatusPanel (элемент) сделать нужную функциональность наследованием оказалось просто-напросто невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:20 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНет такой методики. Из-за масштабности проекта другого выхода нет. Я вынужден искать “методику”. Вам спасибо за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:22 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
14.08.2019 14:22, Artem.1st пишет: > Из-за масштабности проекта... я ж говорил, BolgenOS... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:24 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1stИз-за масштабности проекта другого выхода нет. Я вынужден искать “методику”. Зря тратишь время. Любую масштабную задачу (проект) можно и нужно дробить на всё более мелкие подзадачи пока их сложность не сравняется с квалификацией исполнителя. Это работа для тимлида и архитектора. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:29 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЛегко: Item не должен ничего знать о контейнере в котором он лежит. Это и называется инкапсуляцией. Спасибо за ответ. Как раз “свежая” тема, мои исследования уткнулись в то, что во многих прикладных задачах Элемент должен знать о Контейнере. Например, в реляционных структурах зависимые сущности ссылаются по ключу на главную сущность. А вот это реальный код из Classes.pas Код: pascal 1. 2. 3. 4. 5. Так как обойтись без дружественности? Есть еще способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:39 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
X-CiteВ отличие от того же пространства имен которое может быть одно хоть на 100 модулей.Вот и я о том же. X-Cite...мир меняется, подходы меняются, а возможности языка нет.Ну Дельфи тоже меняется, но не так быстро как хотелось бы. К 2019-му наконец-то добавили возможность объявление переменных по месту с авто-выведением типа. Аллилуйя!! Глядишь к 2025-му добавят и двухпроходный компилятор с нэймспейсами. А к 2030-му полноценные лямбды появятся и еще чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 14:42 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
X-Cite, спасибо за ответ. Есть интересные моменты, чтоб подумать. Параллельно я смотрю на методики пространства имен C++. Также у Си-шников намечается появление “Модуля” в стандарте C++20, по крайней мере они ведут такие обсуждения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 15:00 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЛюбую масштабную задачу (проект) можно и нужно дробить на всё более мелкие подзадачи Я неправильно выразился. Задача даже не масштабная, а неограниченная размерами. Ее бесполезно дробить, это будет рутиной. В основе д.б. методика контроля программного функционала(разбитие на модули, учет связей, и т.п...). Она существует, найти ее - дело времени. Я параллельно изобретаю свой велосипед, просто, чтоб лучше чувствовать цель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 15:17 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39849281&tid=2039118]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 357ms |

| 0 / 0 |
