Нещодавно я прочитав пост у блозі " Три великі брехні", і мені важко виправдовувати другу брехню, яку тут цитують:
(ЛЖ № 2) КОД повинен бути спроектований у всьому світі МОДЕЛЮ СВІТУ
Немає значення в коді бути якоюсь моделлю чи картою уявного світу. Я не знаю, чому цей настільки переконливий для деяких програмістів, але він надзвичайно популярний. Якщо в грі є ракета, будьте впевнені, що існує клас "Rocket" (якщо припустимо, що код є C ++), який містить дані про рівно одну ракету і робить непотрібний матеріал. Зовсім не зважаючи на те, що насправді проводиться перетворення даних, чи щодо компонування даних. Або з цього приводу, без основного розуміння того, що там, де є одне, напевно, є більше одного.
Незважаючи на те, що для такого виду конструкцій існує велика кількість покарань, найважливішим є те, що він не масштабується. Зовсім. Сто ракет коштує в сто разів дорожче однієї ракети. І це надзвичайно ймовірно, що це коштує навіть дорожче! Навіть для непрограміста це не має сенсу. Економія масштабу. Якщо у вас є щось більше, воно повинно дешевше, а не дорожче. І спосіб зробити це - правильно розробити дані та групувати речі за допомогою подібних перетворень.
Ось мої проблеми з цією брехнею зокрема.
Цінність коду є моделлю / картою уявного світу, оскільки моделювання уявного світу допомагає (принаймні мені, особисто) уявити і впорядкувати код.
Наявність класу "Ракета" - для мене абсолютно правильний вибір для класу. Можливо, "Ракети" можуть бути розбиті на такі типи Ракет, як AGM-114 Hellfire і т.д., які містили б силу корисного навантаження, максимальну швидкість, максимальний радіус повороту, тип націлювання тощо, але все ж кожна вистрілена ракета повинна мати позицію і швидкість.
Звичайно, 100 ракет коштує більше, ніж 1 ракета. Якщо на екрані є 100 ракет, для оновлення їх позиції повинно бути 100 різних обчислень. Другий абзац звучить так, ніби він стверджує, що якщо є 100 Ракет, для оновлення стану потрібно коштувати менше 100 обчислень?
Моя проблема в тому, що автор представляє "хибну" модель програмування, але не пропонує способу "виправити" її. Можливо, я переживаю аналогію класу Rocket, але мені дуже хотілося б зрозуміти міркування, які лежать в основі цієї брехні. Яка альтернатива?