Антипа́терн, або антишабло́н — загальний спосіб вирішення проблеми, що часто виникає під час проєктування програмного забезпечення, який, як правило, неефективний та зменшує продуктивність комп'ютерної програми. Інакше кажучи, антипатерн — шкідливий і неефективний патерн.
Концепція антипатерну є універсальною і придатна не лише для програмної інженерії, але й для практично будь-якої сфери людської діяльності; втім, термін не набув поширення поза межами IT-індустрії.
Поняття антипатерну з'явилось тоді, коли програмісти зрозуміли, що описувати і документувати необхідно не лише гарні ідеї, але й погані. Правильно сформульований антипатерн складається не лише з опису типової помилки, але й пояснює, чому таке рішення виглядає привабливим (наприклад, економить час розробки, чи дійсно працює в деякому обмеженому контексті), до яких негативних наслідків воно призводить, і яким патерном бажано його замінити.
Найважливіша мета документації антипатернів — полегшити можливість розпізнавання шкідливого рішення і успішного виправлення помилок ще на ранніх етапах роботи. Антипатерн не просто застерігає «Не роби цього!», а вказує інженеру на те, що він, можливо, не усвідомлює, що рішення такого типу принесе набагато більше шкоди, ніж користі.
Існує 3 ключових правила, коли рішення вважається антипатерном:
- Загальноприйнятий процес, структура чи план дій, який на перший погляд дає ефективне рішення, найчастіше дає більше негативних наслідків, ніж позитивних.
- Цей процес (структура, план), незважаючи на свою шкідливість, достатньо поширений на практиці.
- Правильне рішення вже існує, воно задокументовано та перевірено на ефективність.
Історія
З розвитком ІТ-індустрії масштаби програмних проєктів та витрати ресурсів на них нестримно росли, що породжувало велику кількість проблем, що поставали перед програмістами. Більшість цих проблем були типовими і зустрічались практично в кожному великому проєкті. На початку 90-х років набули значної популярності каталоги шаблонів проєктування (англ. design patterns) — елегантних і перевірених на практиці способів вирішення типових проблем. Патерни і на сьогоднішній день є потужними і надзвичайно популярними, проте багато розробників, використовуючи популярні патерни в ситуаціях, до яких вони не пристосовані, робили програми вкрай неефективними, чи породжували набагато більше проблем, ніж було в проєкті перед використанням патерну. Крім того, у ІТ-інженерів, як і у працівників будь-якої сфери діяльності, можна виокремити типові помилки, зумовлені недостатньою базою знань чи відсутністю досвіду в програміста, стислими термінами здачі проєкту, фінансовими обмеженнями та іншим.
Вперше термін «Антипатерн» в розумінні формальної моделі типового невдалого рішення використовується 1996 року Майклом Ейкройдом (англ. Michael Akroyd) на конференції «Object World West Conference», посвяченій аспектам об'єктно-орієнтованого програмування. У своїй презентації «Антипатерни: запобігання неправильному використанню об'єктів», Ейкройд звертав увагу на шкідливі, але часті програмні конструкції, зокрема, ті, що суперечать принципам ООП. До того ж, для кожної такої конструкції він пропонував ефективну заміну.
Термін (в розумінні: «погана ідея») зустрічався і до Ейкройда, але не публікувався і особливою популярністю не користувався. Та все ж, приписувати авторство одній людині не варто. Як вважає Вільям Браун, автор книги «Антипатерни: рефакторинг програм, архітектур та проєктів», антипатерн — це етап еволюції поняття патерну проєктування, розширення їх моделі.
Приклади
Комерційні та соціальні
Організаційні
- Паралізоване мислення (Analysis paralysis): Проєкт зупиняється на стадії аналізу та специфікацій, які менеджмент хоче виконати якнайкраще.
- Велосипедний навіс (Bicycle shed): Надання великого значення неважливим питанням. Походить від історії обговорень будівництва ядерної електростанції, коли більше уваги приділялося деталям навісу для велосипедів, а не самій станції.
- Вбивча технологія (Bleeding edge): Ризик застосування технології, яка ще не пройшла належного випробування. В результаті такя технологія може призвести до надвитрат, низьких результатів, відкладення термінів завершення проєкту. Походить від алюзії подібних термінів leading edge / cutting edge.
- Ефект свідка (Bystander apathy): Феномен, коли ймовірність допомоги людині в біді від свідків знижується пропорційно кількості свідків. Всі вважають, що допомогти має хтось інший.
- Дійна корова (Cash cow): Негативний вплив історії успішного продукту на незадоволеність новими продуктами, які ще розвиваються.
- Дизайн від комітету (Design by committee): Участь багатьох в обговоренні та прийнятті рішень щодо дизайну, що призводить до розмитого бачення продукту / дизайну.
- Ескалація прив'язаності (Escalation of commitment): Відмова й неможливість скасувати попереднє неправильне рішення. Походить від феномену названого оманою неповоротних витрат.
- Групове/стадне мислення (Groupthink): Прийняття думки одного учасника групи як основної та небажання брати до уваги думки інших учасників.
- Управління за цілями (Management by objectives): Надмірне значення надається цифрам, які не мають значення для проєкту або отримання цих даних коштує високу ціну.
- Мікроменеджмент (Micromanagement): Зловживання контролем в управлінні підлеглими.
- Моральний ризик (Moral hazard): Ізоляція людини, що приймає рішення, від наслідків її / його рішення.
- Грибне управління (Mushroom management): Викривлені комунікації між управлінцем і працівниками, коли працівникам надається тільки обмежена інформація («ростуть у темряві, харчуються навозом»).
- Принцип Пітера (Peter principle): Просування працівників вище по кар'єрній драбині, засноване на поточних показниках, а не їх здатності розвиватися на новій посаді. В результаті такого успішний працівник не справляється із новим завданням / посадою.
- Чайка-менеджмент (Seagull management): Керівник звертається до працівників лише, коли виникає проблема, перед здачею роботи, або просто «прибігає, багато галасує, не вирішує проблему й зникає».
- Силос (Stovepipe або Silos): Створення структури із малих розрізнених команд, які працюють кожна над своїм завданням і їх результати роботи неможливо поєднати.
- Рольове кліше (Typecasting): Доручення одноманітних завдань спеціалісту, який успішний в певному питанні. Але обмеження його/її розвитку.
- Залежність від постачальника (Vendor lock-in): Створення системи надмірно залежної від одного постачальника, якого неможливо або важко замінити.
Антипатерни проєктування програмного забезпечення
- Інверсія абстракції (Abstraction inversion) — приховування частини функціональності від зовнішнього використання, в надії на те, що ніхто не буде її використовувати.
- Неоднозначна точка зору (Ambiguous viewpoint) — представлення моделі без специфікації її точки розгляду.
- Database-as-IPC: Використання бази даних, як черги повідомлень для рутинних внутрішніх комунікацій, коли можна застосувати більш простіший механізм, наприклад сокети.
- Золоте покриття (Gold plating): Продовження роботи над завданням чи проєктом, коли вартість роботи перевищує вигоду від її ефективності.
- Внутрішньоплатформний ефект (Inner-platform effect): Система може так налаштовуватися, що стає бідною копією середовища розробки.
- Ляп на вході: Неможливість визначити і реалізувати обробку помилки через неправильні вхідні дані.
- Перевантажений інтерфейс: Проєктування настільки складного інтерфейсу, що його вкрай важко реалізовувати.
- Магічна кнопка (Magic pushbutton): Кодування логіки реалізації класу безпосередньо в коді елементів інтерфейсу, без використання абстракції.
- Стан гонитви (Race hazard): Результат програми залежить від послідовності неконтрольованих подій.
- Димохід (Stovepipe system): Легкий супровід збірки погано зв'язаних елементів.
Антипатерни програмування
- Зайва складність (Accidental complexity): Представлення необов'язкової складності в програмі.
- Дії на відстані (Action at a distance): Неочікувана взаємодія між ізольованими частинами програми.
- Сліпа віра (Blind faith): Не перевірка, виправлення помилки, чи результату підпрограми
- П'яте колесо (Boat anchor): Зберігання частин коду, що не використовуються.
- Холостий цикл (Busy waiting): Використання CPU під час очікування якоїсь дії, зазвичай для тривалих циклів перевірки, замість використання повідомлень подій.
- Кеш відмов (Caching failure): Забування скинути прапорець помилки після її виправлення.
- Карго-культ програмування (Cargo cult programming): Використання патернів та методів без розуміння мети.
- Кодування виключень (Coding by exception): Додавання нового коду для обробки кожної виняткової ситуації.
- Приховування помилок (Error hiding): Перехоплення повідомлень, що свідчать про помилку, до того, як вони надійдуть до користувача, замість реального виправлення помилок.
- Жорсткий код (Hard code): Вкладення припущень про середовище системи у її реалізації.
- М'який код (Soft code): Зберігання бізнес-логіки у конфігураційних файлах, а не у коді.
- Послідовність циклів-розгалужень (Loop-switch sequence): Кодування послідовності кроків використовуючи розгалуження всередині циклів.
- Магічні числа (Magic numbers): Включення непрокоментованих та незадокументованих констант до алгоритму.
- Повторення коду (Repeating yourself): Написання коду, який повторюється знову і знову, замість організації підпрограм.
- Код-спагеті (Spaghetti code): Програми, структури яких ледь зрозумілі через неправильне застосування структур коду.
- Лазанья-код (Lasagna code): Програма, структура якої містить забагато рівнів.
Антипатерни об'єктно-орієнтованого програмування
- BaseBean: Спадкування функціональності зі службового класу, а не делегування йому вирішення проблем.
- Супер виклик (Call super): Обов'язкові підкласи для виклику перевизначеного методу суперкласу.
- Проблема коло-еліпс (Circle-ellipse problem): Використання підтипу змінної-типу чи базового підтипу-значення.
- Кільцеві залежності (Circular dependency): Представлення непотрібних прямих чи непрямих взаємних залежностей між об'єктами та модулями програми.
- Інтерфейс констант (Constant interface): Використання інтерфейсів для визначення констант.
- Божественний об'єкт (God object): Концентрування функціоналу в одній частині проєкту (класу, методі).
- Об'єкт вигрібної ями (Object cesspool): Повторне використання об'єкту, стан якого не допускає повторне використання.
- Об'єкт оргії (Object orgy): Неможливість інкапсулювати об'єкти належним чином дає необмежений доступ до його внутрішніх функцій.
- Полтергейсти (Poltergeists): Об'єкти, єдиною метою яких є передача інформації на інші об'єкти.
- Послідовне з'єднання (Sequential coupling): Клас вимагає, щоб його методи викликалися у певному порядку.
- Проблема Йо-йо (Yo-yo problem): Структуру (наприклад, наслідування), важко зрозуміти через надмірну фрагментацію.
Антипатерни методологій програмування
- Програмування методом копіювання-вставлення (Copy and paste programming): Копіювання (і зміна) наявного коду, замість того, щоб створювати нове рішення.
- Золотий молоток (Golden hammer): Припущення, що улюблене рішення є універсальним.
- Коефіцієнт неймовірності (Improbability factor): Припущення, що ймовірність виникнення помилки є достатньо низькою.
- Це придумав не я (Not Invented Here (NIH) syndrome): Обвинувачення колишніх співробітників організації в написанні непрацюючого коду.
- Це придумав я (Invented Here): Тенденція до несприйняття нових чи менш тривіальних рішень всередині організації, найчастіше через недовіру до персоналу.
- Передчасна оптимізація (Premature optimization): Завчасне програмування для підвищення ефективності, жертвуючи хорошим дизайном, гнучкістю, а інколи навіть реальною ефективністю.
- Програмування перестановкою (або «випадкове програмування»), або «програмування за збігом обставин») (Programming by permutation (or «programming by accident», or «programming by coincidence»)): Спроба знайти рішення шляхом послідовної зміни коду і перевіряючи «чи воно працює».
- Винаходження велосипеда (Reinventing the square Wheel): При не змозі використати наявне рішення, намагаєшся оптимізувати своє, яке працює набагато гірше.
- Срібна куля (Silver bullet): Припущення, що улюбленим технічним рішенням можна вирішити більшу проблему.
- Tester Driven Development: програмні проєкти, в яких нові вимоги зазначені в повідомленнях про помилки.
Антипатерни системного адміністрування
- Пекло залежностей (англ. Dependency hell): Залежність від версій необхідних бібліотек і програм. Поширений в Unix-середовищах.
- DLL пекло (DLL hell): Неадекватне управління динамічними бібліотеками (DLLs). Поширений в Microsoft Windows.
Див. також
Примітки
- . Архів оригіналу за 3 квітня 2005. Процитовано 1 серпня 2014.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title ()
Література
- Brown, William J.; Raphael C. Malveau, Hays W. "Skip" McCormick, Thomas J. Mowbray, Theresa Hudson (ed) (1998). AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis. , ltd. ISBN .
Посилання
- Anti-patterns catalog [ 3 квітня 2005 у Wayback Machine.]
- Проломы проектно-дизориентированного проектирования [ 30 квітня 2014 у Wayback Machine.]
Цю статтю треба для відповідності Вікіпедії. (березень 2015) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Antipa tern abo antishablo n zagalnij sposib virishennya problemi sho chasto vinikaye pid chas proyektuvannya programnogo zabezpechennya yakij yak pravilo neefektivnij ta zmenshuye produktivnist komp yuternoyi programi Inakshe kazhuchi antipatern shkidlivij i neefektivnij patern Koncepciya antipaternu ye universalnoyu i pridatna ne lishe dlya programnoyi inzheneriyi ale j dlya praktichno bud yakoyi sferi lyudskoyi diyalnosti vtim termin ne nabuv poshirennya poza mezhami IT industriyi Ponyattya antipaternu z yavilos todi koli programisti zrozumili sho opisuvati i dokumentuvati neobhidno ne lishe garni ideyi ale j pogani Pravilno sformulovanij antipatern skladayetsya ne lishe z opisu tipovoyi pomilki ale j poyasnyuye chomu take rishennya viglyadaye privablivim napriklad ekonomit chas rozrobki chi dijsno pracyuye v deyakomu obmezhenomu konteksti do yakih negativnih naslidkiv vono prizvodit i yakim paternom bazhano jogo zaminiti Najvazhlivisha meta dokumentaciyi antipaterniv polegshiti mozhlivist rozpiznavannya shkidlivogo rishennya i uspishnogo vipravlennya pomilok she na rannih etapah roboti Antipatern ne prosto zasterigaye Ne robi cogo a vkazuye inzheneru na te sho vin mozhlivo ne usvidomlyuye sho rishennya takogo tipu prinese nabagato bilshe shkodi nizh koristi Isnuye 3 klyuchovih pravila koli rishennya vvazhayetsya antipaternom Zagalnoprijnyatij proces struktura chi plan dij yakij na pershij poglyad daye efektivne rishennya najchastishe daye bilshe negativnih naslidkiv nizh pozitivnih Cej proces struktura plan nezvazhayuchi na svoyu shkidlivist dostatno poshirenij na praktici Pravilne rishennya vzhe isnuye vono zadokumentovano ta perevireno na efektivnist IstoriyaZ rozvitkom IT industriyi masshtabi programnih proyektiv ta vitrati resursiv na nih nestrimno rosli sho porodzhuvalo veliku kilkist problem sho postavali pered programistami Bilshist cih problem buli tipovimi i zustrichalis praktichno v kozhnomu velikomu proyekti Na pochatku 90 h rokiv nabuli znachnoyi populyarnosti katalogi shabloniv proyektuvannya angl design patterns elegantnih i perevirenih na praktici sposobiv virishennya tipovih problem Paterni i na sogodnishnij den ye potuzhnimi i nadzvichajno populyarnimi prote bagato rozrobnikiv vikoristovuyuchi populyarni paterni v situaciyah do yakih voni ne pristosovani robili programi vkraj neefektivnimi chi porodzhuvali nabagato bilshe problem nizh bulo v proyekti pered vikoristannyam paternu Krim togo u IT inzheneriv yak i u pracivnikiv bud yakoyi sferi diyalnosti mozhna viokremiti tipovi pomilki zumovleni nedostatnoyu bazoyu znan chi vidsutnistyu dosvidu v programista stislimi terminami zdachi proyektu finansovimi obmezhennyami ta inshim Vpershe termin Antipatern v rozuminni formalnoyi modeli tipovogo nevdalogo rishennya vikoristovuyetsya 1996 roku Majklom Ejkrojdom angl Michael Akroyd na konferenciyi Object World West Conference posvyachenij aspektam ob yektno oriyentovanogo programuvannya U svoyij prezentaciyi Antipaterni zapobigannya nepravilnomu vikoristannyu ob yektiv Ejkrojd zvertav uvagu na shkidlivi ale chasti programni konstrukciyi zokrema ti sho superechat principam OOP Do togo zh dlya kozhnoyi takoyi konstrukciyi vin proponuvav efektivnu zaminu Termin v rozuminni pogana ideya zustrichavsya i do Ejkrojda ale ne publikuvavsya i osoblivoyu populyarnistyu ne koristuvavsya Ta vse zh pripisuvati avtorstvo odnij lyudini ne varto Yak vvazhaye Vilyam Braun avtor knigi Antipaterni refaktoring program arhitektur ta proyektiv antipatern ce etap evolyuciyi ponyattya paternu proyektuvannya rozshirennya yih modeli PrikladiKomercijni ta socialni Organizacijni Paralizovane mislennya Analysis paralysis Proyekt zupinyayetsya na stadiyi analizu ta specifikacij yaki menedzhment hoche vikonati yaknajkrashe Velosipednij navis Bicycle shed Nadannya velikogo znachennya nevazhlivim pitannyam Pohodit vid istoriyi obgovoren budivnictva yadernoyi elektrostanciyi koli bilshe uvagi pridilyalosya detalyam navisu dlya velosipediv a ne samij stanciyi Vbivcha tehnologiya Bleeding edge Rizik zastosuvannya tehnologiyi yaka she ne projshla nalezhnogo viprobuvannya V rezultati takya tehnologiya mozhe prizvesti do nadvitrat nizkih rezultativ vidkladennya terminiv zavershennya proyektu Pohodit vid alyuziyi podibnih terminiv leading edge cutting edge Efekt svidka Bystander apathy Fenomen koli jmovirnist dopomogi lyudini v bidi vid svidkiv znizhuyetsya proporcijno kilkosti svidkiv Vsi vvazhayut sho dopomogti maye htos inshij Dijna korova Cash cow Negativnij vpliv istoriyi uspishnogo produktu na nezadovolenist novimi produktami yaki she rozvivayutsya Dizajn vid komitetu Design by committee Uchast bagatoh v obgovorenni ta prijnyatti rishen shodo dizajnu sho prizvodit do rozmitogo bachennya produktu dizajnu Eskalaciya priv yazanosti Escalation of commitment Vidmova j nemozhlivist skasuvati poperednye nepravilne rishennya Pohodit vid fenomenu nazvanogo omanoyu nepovorotnih vitrat Grupove stadne mislennya Groupthink Prijnyattya dumki odnogo uchasnika grupi yak osnovnoyi ta nebazhannya brati do uvagi dumki inshih uchasnikiv Upravlinnya za cilyami Management by objectives Nadmirne znachennya nadayetsya cifram yaki ne mayut znachennya dlya proyektu abo otrimannya cih danih koshtuye visoku cinu Mikromenedzhment Micromanagement Zlovzhivannya kontrolem v upravlinni pidleglimi Moralnij rizik Moral hazard Izolyaciya lyudini sho prijmaye rishennya vid naslidkiv yiyi jogo rishennya Gribne upravlinnya Mushroom management Vikrivleni komunikaciyi mizh upravlincem i pracivnikami koli pracivnikam nadayetsya tilki obmezhena informaciya rostut u temryavi harchuyutsya navozom Princip Pitera Peter principle Prosuvannya pracivnikiv vishe po kar yernij drabini zasnovane na potochnih pokaznikah a ne yih zdatnosti rozvivatisya na novij posadi V rezultati takogo uspishnij pracivnik ne spravlyayetsya iz novim zavdannyam posadoyu Chajka menedzhment Seagull management Kerivnik zvertayetsya do pracivnikiv lishe koli vinikaye problema pered zdacheyu roboti abo prosto pribigaye bagato galasuye ne virishuye problemu j znikaye Silos Stovepipe abo Silos Stvorennya strukturi iz malih rozriznenih komand yaki pracyuyut kozhna nad svoyim zavdannyam i yih rezultati roboti nemozhlivo poyednati Rolove klishe Typecasting Doruchennya odnomanitnih zavdan specialistu yakij uspishnij v pevnomu pitanni Ale obmezhennya jogo yiyi rozvitku Zalezhnist vid postachalnika Vendor lock in Stvorennya sistemi nadmirno zalezhnoyi vid odnogo postachalnika yakogo nemozhlivo abo vazhko zaminiti Antipaterni proyektuvannya programnogo zabezpechennya Inversiya abstrakciyi Abstraction inversion prihovuvannya chastini funkcionalnosti vid zovnishnogo vikoristannya v nadiyi na te sho nihto ne bude yiyi vikoristovuvati Neodnoznachna tochka zoru Ambiguous viewpoint predstavlennya modeli bez specifikaciyi yiyi tochki rozglyadu Database as IPC Vikoristannya bazi danih yak chergi povidomlen dlya rutinnih vnutrishnih komunikacij koli mozhna zastosuvati bilsh prostishij mehanizm napriklad soketi Zolote pokrittya Gold plating Prodovzhennya roboti nad zavdannyam chi proyektom koli vartist roboti perevishuye vigodu vid yiyi efektivnosti Vnutrishnoplatformnij efekt Inner platform effect Sistema mozhe tak nalashtovuvatisya sho staye bidnoyu kopiyeyu seredovisha rozrobki Lyap na vhodi Nemozhlivist viznachiti i realizuvati obrobku pomilki cherez nepravilni vhidni dani Perevantazhenij interfejs Proyektuvannya nastilki skladnogo interfejsu sho jogo vkraj vazhko realizovuvati Magichna knopka Magic pushbutton Koduvannya logiki realizaciyi klasu bezposeredno v kodi elementiv interfejsu bez vikoristannya abstrakciyi Stan gonitvi Race hazard Rezultat programi zalezhit vid poslidovnosti nekontrolovanih podij Dimohid Stovepipe system Legkij suprovid zbirki pogano zv yazanih elementiv Antipaterni programuvannya Zajva skladnist Accidental complexity Predstavlennya neobov yazkovoyi skladnosti v programi Diyi na vidstani Action at a distance Neochikuvana vzayemodiya mizh izolovanimi chastinami programi Slipa vira Blind faith Ne perevirka vipravlennya pomilki chi rezultatu pidprogrami P yate koleso Boat anchor Zberigannya chastin kodu sho ne vikoristovuyutsya Holostij cikl Busy waiting Vikoristannya CPU pid chas ochikuvannya yakoyis diyi zazvichaj dlya trivalih cikliv perevirki zamist vikoristannya povidomlen podij Kesh vidmov Caching failure Zabuvannya skinuti praporec pomilki pislya yiyi vipravlennya Kargo kult programuvannya Cargo cult programming Vikoristannya paterniv ta metodiv bez rozuminnya meti Koduvannya viklyuchen Coding by exception Dodavannya novogo kodu dlya obrobki kozhnoyi vinyatkovoyi situaciyi Prihovuvannya pomilok Error hiding Perehoplennya povidomlen sho svidchat pro pomilku do togo yak voni nadijdut do koristuvacha zamist realnogo vipravlennya pomilok Zhorstkij kod Hard code Vkladennya pripushen pro seredovishe sistemi u yiyi realizaciyi M yakij kod Soft code Zberigannya biznes logiki u konfiguracijnih fajlah a ne u kodi Poslidovnist cikliv rozgaluzhen Loop switch sequence Koduvannya poslidovnosti krokiv vikoristovuyuchi rozgaluzhennya vseredini cikliv Magichni chisla Magic numbers Vklyuchennya neprokomentovanih ta nezadokumentovanih konstant do algoritmu Povtorennya kodu Repeating yourself Napisannya kodu yakij povtoryuyetsya znovu i znovu zamist organizaciyi pidprogram Kod spageti Spaghetti code Programi strukturi yakih led zrozumili cherez nepravilne zastosuvannya struktur kodu Lazanya kod Lasagna code Programa struktura yakoyi mistit zabagato rivniv Antipaterni ob yektno oriyentovanogo programuvannya BaseBean Spadkuvannya funkcionalnosti zi sluzhbovogo klasu a ne deleguvannya jomu virishennya problem Super viklik Call super Obov yazkovi pidklasi dlya vikliku pereviznachenogo metodu superklasu Problema kolo elips Circle ellipse problem Vikoristannya pidtipu zminnoyi tipu chi bazovogo pidtipu znachennya Kilcevi zalezhnosti Circular dependency Predstavlennya nepotribnih pryamih chi nepryamih vzayemnih zalezhnostej mizh ob yektami ta modulyami programi Interfejs konstant Constant interface Vikoristannya interfejsiv dlya viznachennya konstant Bozhestvennij ob yekt God object Koncentruvannya funkcionalu v odnij chastini proyektu klasu metodi Ob yekt vigribnoyi yami Object cesspool Povtorne vikoristannya ob yektu stan yakogo ne dopuskaye povtorne vikoristannya Ob yekt orgiyi Object orgy Nemozhlivist inkapsulyuvati ob yekti nalezhnim chinom daye neobmezhenij dostup do jogo vnutrishnih funkcij Poltergejsti Poltergeists Ob yekti yedinoyu metoyu yakih ye peredacha informaciyi na inshi ob yekti Poslidovne z yednannya Sequential coupling Klas vimagaye shob jogo metodi viklikalisya u pevnomu poryadku Problema Jo jo Yo yo problem Strukturu napriklad nasliduvannya vazhko zrozumiti cherez nadmirnu fragmentaciyu Antipaterni metodologij programuvannya Programuvannya metodom kopiyuvannya vstavlennya Copy and paste programming Kopiyuvannya i zmina nayavnogo kodu zamist togo shob stvoryuvati nove rishennya Zolotij molotok Golden hammer Pripushennya sho ulyublene rishennya ye universalnim Koeficiyent nejmovirnosti Improbability factor Pripushennya sho jmovirnist viniknennya pomilki ye dostatno nizkoyu Ce pridumav ne ya Not Invented Here NIH syndrome Obvinuvachennya kolishnih spivrobitnikiv organizaciyi v napisanni nepracyuyuchogo kodu Ce pridumav ya Invented Here Tendenciya do nesprijnyattya novih chi mensh trivialnih rishen vseredini organizaciyi najchastishe cherez nedoviru do personalu Peredchasna optimizaciya Premature optimization Zavchasne programuvannya dlya pidvishennya efektivnosti zhertvuyuchi horoshim dizajnom gnuchkistyu a inkoli navit realnoyu efektivnistyu Programuvannya perestanovkoyu abo vipadkove programuvannya abo programuvannya za zbigom obstavin Programming by permutation or programming by accident or programming by coincidence Sproba znajti rishennya shlyahom poslidovnoyi zmini kodu i pereviryayuchi chi vono pracyuye Vinahodzhennya velosipeda Reinventing the square Wheel Pri ne zmozi vikoristati nayavne rishennya namagayeshsya optimizuvati svoye yake pracyuye nabagato girshe Sribna kulya Silver bullet Pripushennya sho ulyublenim tehnichnim rishennyam mozhna virishiti bilshu problemu Tester Driven Development programni proyekti v yakih novi vimogi zaznacheni v povidomlennyah pro pomilki Antipaterni sistemnogo administruvannya Peklo zalezhnostej angl Dependency hell Zalezhnist vid versij neobhidnih bibliotek i program Poshirenij v Unix seredovishah DLL peklo DLL hell Neadekvatne upravlinnya dinamichnimi bibliotekami DLLs Poshirenij v Microsoft Windows Div takozhShabloni proyektuvannya programnogo zabezpechennya Efekt drugoyi sistemi Stan gonitvi RefaktoringPrimitki Arhiv originalu za 3 kvitnya 2005 Procitovano 1 serpnya 2014 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya LiteraturaBrown William J Raphael C Malveau Hays W Skip McCormick Thomas J Mowbray Theresa Hudson ed 1998 AntiPatterns Refactoring Software Architectures and Projects in Crisis John Wiley amp Sons ltd ISBN 978 0 471 19713 3 PosilannyaAnti patterns catalog 3 kvitnya 2005 u Wayback Machine Prolomy proektno dizorientirovannogo proektirovaniya 30 kvitnya 2014 u Wayback Machine Cyu stattyu treba vikifikuvati dlya vidpovidnosti standartam yakosti Vikipediyi Bud laska dopomozhit dodavannyam dorechnih vnutrishnih posilan abo vdoskonalennyam rozmitki statti berezen 2015