Автор Тема: Функции против процедур  (Прочитано 84140 раз)

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:Функции против процедур
« Ответ #180 : Март 04, 2011, 08:07:56 pm »
Причем никаких зубодробильных абстракций там небыло. То есть весь процесс от начала до конца мне был понятен. Но мыслить в таком направлении я пока нормально не научился. Это реально построение сверху-вниз, а не снизу вверх.

Как только вы начинаете построение системы с планирования типов данных (структурки там заводите, классы разрисовываете) – это значит, что вы опять строите не сверху вниз, а снизу вверх, точнее строите не с самого низа, а где-то ниже середины. Соответственно да, будет участок где у вас будет как бы строительство сверху вниз, но основная часть все равно будет снизу вверх.

Так мне представляется такой подход естественным и продуктивным.
У нас есть задача и есть базовая машина.
Мы, с одной стороны, идём от задачи - проясняем её, сначала вообще без всякого программирования. Делим на функциональные части, потом на взаимодействующие подсистемы, реализующие эти функции. И стремимся свести как можно скорее к каким-то более типовым подзадачам, унифицированным решениям для этих задач (стремимся прийти от индивидуальной и неповторимой задачи к совершенно типовым подзадачам).
С другой стороны, поднимаем уровень данной нам машины, создавая новые слои, новые "абстрактные машины", в таком направлении, чтобы сойтись с тем нисходящим потоком мысли.

Я, как системщик-инструментальщик обычно практикую такую расстановку акцентов: "ключиком" для проекта является некий уровень в его середине, на котором удаётся уже "убить" частные закидоны задачи и придумать некие простые базовые средства, которые никак с задачей не связаны, но помогают просто её решить (т.е. свести прикладную часть задачи к какого-то рода сборке из кубиков). При создании этих средств не целим на универсальность (пустая трата времени - обобщать от одной задачи), а целим на инвариантность - т.е. средства должны быть такими базовыми и простыми, что, совершенно очевидно, что они будут полезны "направо и налево".

Так достигаются цели расширяемости и масштабируемости системы, и накопления фонда базовых средств и инструментов у коллектива.