Як ви повинні пояснити шаблони дизайну людям, що не входять до програми Software World


10

Я хочу пояснити дизайнерські зразки своїй племінниці, але завжди борюся за це. Багато в чому це пояснюється моєю відсутністю чіткого розуміння моделей дизайну. Як ви пропонуєте пояснювати такі моделі, як MVC, Singleton, Factory, Repository тощо, такими простими термінами, що навіть діти 10 років можуть зрозуміти.

Я шукаю приклади, які можуть полегшити розуміння моделей. Приклади з іграшками, фільмами, музикою тощо.


2
Шаблони проектування - це розробка програмного забезпечення, яка теорія категорій - математика. . . принаймні, так я пояснив би це математику.
Ерік Вілсон

Це як читати розділи відповідей книжок-пазлів. Ви не знатимете відповіді на кожну головоломку, але для більшості ви дізнаєтесь, з чого почати головоломку, на яку ви не бачили відповіді.
StuperUser

Відповіді:


7

Я думаю, що початок статті у Вікіпедії , мабуть, вдалий початок:

A design pattern is a general reusable solution to a commonly occurring problem.

Або ви хочете пояснити специфіку цих конкретних зразків?


шукаєте конкретику
gizgok


2
@gizgok: "специфіка"? Це смішно. Детально уточнюйте, що ще ви могли б хотіти. Бажаючи "конкретики", невизначено.
С.Лотт

5

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

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


1
coz 10 yr olds хочуть стати хакером
gizgok

2

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

Ви можете мислити шаблони дизайну так само, як ви думаєте про групи людей. Наприклад, іноді у нас є одна людина, яка сприяє усім нашим зустрічам. Це як зразок контролера, який полегшує взаємодію між об'єктами.

Або уявіть собі аудиторію, де хтось біля передньої кімнати спостерігає за тим, як люди піднімають руки, а потім повторює питання, щоб усі інші могли почути, чи, можливо, реагують, відповідаючи на нього. Це буде схоже на шаблон суб'єкта / спостерігача.

Існують моделі, які поводяться як перекладачі (схема адаптера), як охоронці (проксі), як експерти в галузі (синглтони), або як люди, які перевіряють, чи працює ваш автомобіль (валідатори).

Різниця між об'єктами і людьми полягає в тому, що ми можемо створити стільки об'єктів, скільки нам хочеться, і мати безліч різних копій. Це робить важливим зрозуміти, які обов'язки повинні мати об'єкти, зберігати свої обов'язки невеликими, і намагатися не дублювати те, що вони роблять, щоб програмне забезпечення не було занадто складним. Експерти мають великий досвід у цьому, і вони дали нам такі принципи взаємодії ефективного програмного забезпечення, щоб ми могли вирішити, яка роль є найкращою метафорою для роботи, яку ми намагаємось зробити, і отримати шматочки програмного забезпечення для співпраці найкращим чином.


1

Скажіть їй, що вони використовуються для побудови окремих компонентів системи, подібно до способів приготування їжі, які використовуються для створення страви / страви. Уявіть, що ви готуєте вечерю з картоплею, м'ясом та овочами. Ви вирішили, що хочете картоплю відварну та пюре, м'ясо на грилі та овочі на пару. Ви використовуєте шаблон дизайну гриля для приготування м'яса, відварювання та збивання для картоплі та пару для овочів.


1

Більшість цих моделей дизайну є частиною об'єктно-орієнтованого дизайну. Ви не можете реально пояснити їх комусь, не розуміючи ООД. Ви можете описати мету, яку ви досягаєте за заданим шаблоном, але не як вона працює, ні навіщо вона вам потрібна. Якщо, звичайно, ви не розбираєтесь у всьому OOD.


1
Більшість моделей дизайну - це інструкції щодо використання правильних абстракцій для вирішення певної проблеми. Вони насправді не є частиною об'єктно-орієнтованого дизайну.
Pemdas

@Pemdas: візьмемо, наприклад, завод. Який сенс він отримав поза OOP?
vartec

OOP - це те, де найбільше говорять про шаблони, але інші мови мають власні набори шаблонів. Наприклад, монади (які часто зустрічаються у функціональних мовах, іноді їх можна робити в OOP) - це зразок самих себе і дозволяють використовувати інші зразки. Крім того, як уже згадувалося, схеми дизайну прийшли до програмування від архітектури.
Чарлі

Шаблони дизайну не мають нічого спільного з OOP. Шаблони дизайну - це проблеми, які виникають знову і знову, та стратегії, розроблені для вирішення цих проблем. Якщо стратегія розробляється неодноразово, то у вас є схема. Якщо стратегія неодноразово працює, то ви називаєте її схемою дизайну, якщо вона неодноразово не працює, ви називаєте її антидіаграмою. Дізнатися про шаблони дизайну означає стратегії навчання, які працювали в минулому неодноразово. Подивіться, як я взагалі не згадував програмування, тим більше OOP?
gnasher729

0

Шаблони дизайну вперше описані для архітектури. Такі речі, як розташування площі, будівель та інших, зазвичай, повторюваних макетів. Ви можете почати там. Такі речі, як головний вхід, стикаються з вулицею, двері до кута кімнати, і все, що ви можете придумати. Оригінальні авторські зразки широко не використовувались. Зараз він повідомляє, що самих моделей недостатньо.

Обговоріть переміщення речей по кімнаті. Поставте стілець перед дверима. Було б сенс перенести вікна чи двері в інше місце. Чому чи чому б ні?

Спробуйте щось на кшталт встановлення місця за столом. Спробуйте впорядкувати речі за розмірами, що відходять від вас. Не нормальна закономірність і з якою важко працювати. Налаштуйте його нормально. Це підходяща схема для швидкого склянки соку? Візерунки не завжди доречні.

Ми постійно живемо з візерунками. Візьміть три-чотири книги та почніть перебирати сторінки. У макеті є очевидна закономірність; титульна сторінка, зміст, зміст та покажчик. Не всі компоненти потрібні, але було б заплутано бачити їх на місці.


0

Шаблони дизайну - це розробка програмного забезпечення, що таке джиги для деревообробки. Це інструмент, за допомогою якого можна зробити відомі «скорочення» для використання у великих проектах.

Зауважте, що вам не потрібен джиг для зрізу, в деяких обставинах це просто простіше.


0

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

Сінглтон

Ця модель використовується тоді, коли ми хочемо гарантувати, що є щось одне. Шаблон досягається тим, що інші люди не можуть створити наш об’єкт.

Вікіпедія

MVC

Ця закономірність використовується, щоб допомогти зберегти модульну інформацію з усіма перевагами, які випливають із цього. Вид - це "інтерфейс користувача", Модель - це дані (включаючи логіку бізнесу), а Контролер - це те, як дії користувача маніпулюють моделлю. З цією модульністю ніщо не заважає мені мати кілька переглядів / контролерів для роботи з однією і тією ж моделлю. Для надто спрощеного прикладу я можу взаємодіяти зі своєю електронною поштою ("моделлю") через веб-сайт, настільний додаток та свій iPhone ("перегляди + контролери"). Якщо у мене є спільна групова скринька, я можу створити контролер, який не надсилатиме електронну пошту, і повторно використовувати те саме перегляд програми та електронну пошту. (так надмірно спрощено, але, сподіваюся, зрозуміло :))

Крім того, при цій чітко визначеній відокремленості проблем зміни в одному (в ідеалі) не потребують змін в іншому. Конкретний приклад: якщо мені потрібно підтримувати читання / запис у базу даних MySQL замість бази даних Oracle, мені потрібно буде лише змінити свою модель, і мій погляд / контролер не змінюється.

Вікіпедія

Заводська

Тут треба бути обережними, оскільки існує багато подібних шаблонів під назвою Фабрика ... Я розповім про абстрактну фабрику , але ви повинні знати, що існує також модель « Фабричний метод» .

В основному, я використовував би абстрактну фабрику, коли знаю, які дії я хочу виконати, але кроки щодо виконання цих невидимих ​​кроків можуть відрізнятися. Наприклад, я можу будувати додаток, де мені потрібно створити діалогове вікно з кнопкою на ньому. Якщо мій код використовує гіпотетичну фабрику інтерфейсу користувача, якщо мені потрібен код на Mac чи Linux замість Windows, я просто надаю іншу фабрику, а решта коду не змінюється. Для потенційно дивного прикладу, я міг би створити веб-фабрику, і раптом більша частина коду, що підтримує мою настільну програму, тепер також працює на багатому веб-сайті :) (нормально з інших причин, але теоретично :))


0

Для 10-річного віку, який хоче стати хакером - я б сказав.

Уявіть собі, якби у вас могли бути одні з найкращих хакерів у світі, що сиділи поруч із вами, коли ви викрадалися .. і раз у раз вони б сказали .. "Ви знаєте, чи зробите ви це так ... [вставити шаблон] ... тоді ваш код стане [швидшим / безпечнішим / більш ретельним / тощо] "як здорово це було б.

Тепер, коли я припускаю, що вона захоплена ідеєю - я б не витрачав час на пояснення кожної схеми, я поставив би їй "хакерське завдання". хороших ресурсів і подивіться, куди йде.

Але в основному їй потрібно буде навчитися їх шляхом наставництва.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.