Отже, "Чи відсутні у шаблонах дизайну мовні особливості"? [зачинено]


12

Я побачив тут, на програмістів, відповідь на це запитання: як змінюється мислення щодо моделей дизайну та практики OOP в динамічних і слабо типізованих мовах? Там я знайшов посилання на статтю з відвертою назвою: Чи є в моделях дизайну відсутні особливості мови . Але там, де я знайшов фрагменти, які мені здалися дуже привабливими, і це, можливо, можна перевірити на основі досвіду, є стимул для цього, наприклад:

ПолГрехам сказав, що "Пітер Норвіг виявив, що 16 з 23 моделей в дизайні шаблонів" невидимі або простіші "в Ліспі".

або інше речення, яке підтверджує те, що я нещодавно бачив із людьми, які намагаються імітувати заняття в JavaScript:

Звичайно, ніхто ніколи не говорить про "функціональну" схему, або про "класову" схему чи про численні інші речі, які ми приймаємо як належне, оскільки більшість мов надають їх як вбудовані функції. OTOH, програмісти з чисто прототиповим орієнтованим мовою? Можливо, вам буде зручно моделювати класи з прототипами ...

Я також беру до уваги, що моделі дизайну є інструментом комунікації . Тому що навіть маючи обмежений досвід участі у створенні додатків, я можу розцінюватись як антидіаграма ( неефективна та / або контрпродуктивна e), наприклад, змушуючи невелику команду PHP вивчати шаблони GoF для малих та середніх інтранетних додатків. Я знаю, що масштаб, сфера та мета можуть визначити, що є ефективним та / або продуктивним, але все ж мені не вдалося знайти технічний огляд з цього приводу.

Я бачив невеликі комерційні програми, які змішуються з OOP і все ще є ремонтопридатними, і я не знаю, чи багатьом знадобиться, наприклад, в python, щоб написати сингл, але для мене простий модуль робить те саме.

Чи є дослідження, вичерпні статті чи інша форма експозиції, яка враховує шаблони дизайну, порівняно з простими способами чи простішими способами, чи заміни за мовними особливостями?


16
Було б помилкою сприймати все, що говорить Пол Грехем щодо мови програмування як "об'єктивне та фактичне".
Мейсон Уілер

5
Я не схильний не погоджуватися з Полом Грем, але @MasonWheeler правий, євангелісти з багатьох причин, але не за їх об'єктивність.
Джиммі Хоффа

3
@JimmyHoffa: Це взагалі не "євангелісти". Я сумніваюся з довгою історією Грехема, коли розміщував смішні матеріали, які часто суперечать собі та його джерелам, і намагаюся вивернути все, що видається послідовним. Незалежно від того, за що ви виступаєте, це жахливий шлях для цього, і мені трохи страшно, що люди насправді його слухають.
Мейсон Уілер

5
Було б приємно ознайомитися з деякими дослідженнями, але якщо ви коли-небудь використовували сучасні функціональні мови - ви вже знаєте, наскільки застарілі схеми дизайну GOF, і немає необхідності в кількості, щоб підтвердити це більше . (Хоча вони були важливі у 1990 році, без сумніву).
c69

3
@DanielB, кожна конкретна парадигма зазнає невдачі, оскільки реальність набагато складніша, ніж будь-яка парадигма могла колись бути. Отже, кожна проблема заслуговує на свою власну, доменну модель та парадигму.
SK-логіка

Відповіді:


10

Я не знаю жодної поглибленої дискусії чи дослідження, яка б враховувала всі ці речі.

Однак, на мій погляд, весь аргумент "дизайнерських моделей є лише виправленням відсутніх функцій в мовах ОО". Так, деякі шаблони дизайну саме такі, вони заповнюють деякі загальні прогалини, навіть не існують в іншій мові X. Це, як правило, ваші низькі рівні, більш прості шаблони дизайну, як деякі / багато оригіналів у книзі GoF.

Але дизайнерські зразки виходять далеко за рамки простих, і називати їх відсутніми особливостями мови розтягує уяву. Перегляньте каталог Фаулера моделей застосувань для підприємств та подумайте, як це було б, якби вони були частиною основного визначення мови. Я думаю, ви б отримали специфічну для домену мову ( DSL ) для корпоративних додатків (і дуже складну).

Ось у чому справа, насправді - дизайнерські зразки - це спосіб вирішити багаторазові рішення для конкретних проблем (які часто застосовуються загальною, універсальною мовою). Ось тут і відбувається спілкування. Якщо ви скажете мені "ми використовуємо Active Records", я вже досить багато знаю про вашу програму, не витрачаючи хвилин на обговорення того, що таке різні підходи. Так, так, шаблони дизайну роблять отвори в мовних специфікаціях. Це все, що вони роблять? Ні - не довгим пострілом.

Редагувати:

Я певною мірою кажу про те, що моделі дозволяють практикуючим OO мислити на більш високому рівні та майже будувати тип DSL для свого оточення, залишаючись у синтаксисі своєї мови. І так, я бачив, що відбувається, коли застосовуєш їх скрізь (див.: AbstractSingletonProxyFactoryBean , так, це існує), або думаю, що це якась срібна куля. Справа в тому, що, хоча вони потребують тривалого часу, щоб отримати справді комфорт, вони повинні насправді знизити складність, зробивши речі передбачуваними / зрозумілими на високому рівні. Це дуже відрізняється від того, щоб стати набором патчів для вад вашої мови.

Редагування 2 - додано зустрічний приклад AbstractSingletonProxyFactoryBean, щоб потішити шаблони. Щоб бути абсолютно справедливим, якщо його дивитись із світла AOP, навіть цей зустрічний приклад можна захистити.


(+1) і прийміть, тому що ви звузили мій пошук на DSL та моделях програм. Дуже продуманий, і чи можете ви, будь ласка, розширити чи посилання для читача, можливо, в дужках хоча б один із акронімів DSL, я вважаю, що це означає, що залежить від домену.
Едуард Флорінеску

@EduardFlorinescu спасибі, я оновив посилання на DSL.
Даніель Б

Я також знайшов цю статтю, яка підтверджує частину вашої відповіді в цьому випадку з Groovy ibm.com/developerworks/java/library/j-eaed7/index.html
Eduard Florinescu,

1
@EduardFlorinescu, що дуже цікаво, хоча я не просто конкретно посилався на модель перекладача; швидше, я мав на увазі, що багато зразків можуть бути досить доменними і стати майже ідіоматичними для розробників у цьому домені. У цьому сенсі вони стають своєрідною DSL, і не вимагають великих зусиль для розуміння та використання. Наприклад, коли я читаю шаблон команди (приклад, що не стосується домену), я знаю, який код котла можна сміливо ігнорувати, і це не потребує великих зусиль. Але все-таки дякую за цікаве посилання.
Даніель Б
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.