Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Antywzorzec projektowy - Wikipedia, wolna encyklopedia

Antywzorzec projektowy

Z Wikipedii

RFC

W tym artykule pojawiły się wątpliwości odnośnie polskich tłumaczeń angielskich nazw antywzorców, które wymagają szerszego przedyskutowania. Jeśli chcesz wypowiedzieć się w tej sprawie lub zobaczyć dyskusję, wejdź na stronę: Wikipedia:RFC/Antywzorzec projektowy.

Antywzorce, (ang. Anti-patterns, Pitfalls), to przypadki powtarzających się, odkrywanych na nowo złych rozwiązań problemów. Badanie antywzorców zajmuje się ich rozpoznawaniem i porządkowaniem, tak aby można ich było uniknąć w przyszłości, a także, aby można było je łatwo wykryć w wadliwie działających systemach.

Termin "antywzorzec" ma swoje źródło w informatyce, czerpiąc inspirację ze wzorców projektowych opracowanych przez Bandę Czworga, które zawierają przykłady dobrych praktyk programistycznych.

Według książki Browna, Malveau, McCormicka i Mowbraya - antywzorce są naturalnym antonimem do wzorców. Do dobrych praktyk należy unikanie antywzorców.

Pojęcie jest obecnie aplikowane ogólnie do problemów inżynierskich, obejmując wszelkie inne aspekty inżynierii z udziałem człowieka. Jakkolwiek termin nie jest jeszcze szeroko używany koncepcja antywzorca jest bardzo ogólna.

Spis treści

[edytuj] Antywzorce w zarządzaniu projektem

  • Magiczna atrapa (ang. Smoke and mirrors, od triku magicznego): Antywzorzec dotyczy najczęściej oprogramowania, które nie ma zaimplementowanej funkcjonalności, chociaż udaje, że ją ma (np. nie działające formularze, opcje konfiguracyjne). Termin ten używany jest także w kontekście prezentowania możliwości firmy - wykonawcy klientowi, tak, aby ten myślał, że firma jest w stanie wykonać zleconą pracę.
  • Eksplozja oprogramowania (ang. Software bloat): Przydzielanie kolejnym wersjom oprogramowania coraz większej ilości zasobów z powodu jego nadmiernego rozrostu. Oprogramowanie jest często rozwijane poprzez dodawanie kolejnych funkcjonalności, bez ulepszania istniejących, co zwiększa zarówno jego wymagania, jak i liczbę osób potrzebnych do jego utrzymywania.
  • Zarządzanie poprzez bzdury (ang. Bullshit Management): Zarządzanie projektem bez odpowiedniej wiedzy na temat przedmiotu projektu. Nazwa wzięła się od kierowników, którzy są przekonani, że aby dobrze zarządzać projektem nie trzeba mieć wiedzy, wystarczy sprawiać dobre wrażenie, wygłaszając mądrze brzmiące opinie.

[edytuj] Antywzorce w projektowaniu oprogramowania

  • Zamiana funkcjonalności, Inwersja abstrakcji (ang. Abstraction inversion): Brak implementacji funkcjonalności wymaganej wprost przez użytkowników (na odpowiednio wysokim poziomie abstrakcji) zmusza ich do stosowania obejść i składania jej z innych (zazwyczaj prostszych) funkcji systemu.
  • Niejednoznaczny punkt odniesienia (ang. Ambiguous viewpoint): Obiektowe modele systemu są prezentowane bez wskazania do czego się odnoszą (bez określenia w jakim kontekście są ukazane).
  • Błotna bryła (ang. Big ball of mud): Dotyczy systemu o trudnej do wyodrębnienia i zrozumienia strukturze. Modyfikowanie takiego systemu jest ryzykowne, gdyż nie sposób jest przewidzieć skutków zmian, kod przypomina spagetti.
  • Blob: zobacz Wszechmocny obiekt
  • Petrochemia (ang. Gas factory): Zbyt skomplikowany, uciążliwie drobiazgowy projekt systemu lub funkcjonalność.
  • Wadliwe wejście (ang. Input kludge): Zachodzi gdy system nie radzi sobie z poprawnymi i niepoprawnymi danymi na wejściu, gdyż ich obsługa nie jest wyspecyfikowana i błędnie zaimplementowana. Często jest tak, że programista nie jest w stanie wykryć takiego błędu, natomiast użytkownik wykrywa go z łatwością przy pierwszym uruchomieniu.
  • Interfejs gigant (ang. Interface bloat): Tworzenie rozbudowanych i ciężkich interfejsów (w sensie diagramu klas) tak, że stają się one ciężkie do implementacji.
  • Magiczny przycisk (ang. Magic pushbutton): Implementowanie zbyt ubogiego interfejsu użytkownika, bez pozwolenia mu na większą ingerencję w działanie programu. Zachodzi najczęściej wtedy, gdy programista najpierw wyklikuje interfejs użytkownika, a później go oprogramowuje. Zazwyczaj kod, który stoi za funkcjonalnością przycisku dotyczy tylko tego przycisku (np. jest napisany w funkcji onClick), jest bardzo rozbudowany i trudno go wykorzystać w innych miejscach intefejsu.
  • Silnie zależne komponenty (ang. Re-Coupling): Wprowadzanie zbyt silnie powiązanych komponentów, klas w systemie.
  • System, który gra i tańczy (ang Stovepipe system): Ciężko serwisowalny system zbudowany z komponentów niepowiązanych ze sobą (funkcjonalnie).
  • System z wyścigami (Race hazard): System, w którym źle zorganizowano obsługę zdarzeń i jego działanie jest zależne od ich kolejności.

[edytuj] Antywzorce w projektowaniu obiektowym

  • BaseBean: Umieszczanie metod typu utility w klasie bazowej, a następnie tworzenie na jej podstawie klas pochodnych. Prawidłowo używanie metod utility powinno być obsłużone poprzez delegowanie. Użycie dziedziczenia powoduje, że klasy dziedziczące polegają na funkcjonalności klasy bazowej, co może utrudniać kontrolę kodu przez programistę. Klasy typu utility są za to stabilne i podobne do siebie w różnych projektach - można je wyodrębnić w reużywalną bibliotekę.
  • Wołanie przodka (ang. CallSuper): W programowaniu obiektowym możliwe jest dziedziczenie właściwości i zachowania klas bazowych i przedefiniowywanie ich. Często metoda, która przedefiniowuje metodę bazową musi się i tak odwołać do metody bazowej w środku, aby skorzystać z jej funkcjonalności - dużo lepszym pomysłem w takim wypadku jest stworzenie czysto abstrakcyjnej metody w klasie bazowej.
  • Empty subclass failure
  • Boski obiekt (ang. God object) - Umieszczenie zbyt wielu funkcji w jednym komponencie (klasie). Obarczenie jej nadmierną odpowiedzialnością, co powoduje problemy w utrzymaniu jej kodu i wyodrębnieniu funkcjonalności.
  • Object cesspool
  • Poltergeists
  • Jo-jo (ang. Yo-yo problem): Sytuacja, kiedy funkcjonalność jest rozłożona pomiędzy głęboką hierarchię dziedziczących się klas. Aby zrozumieć działanie programu programista musi przechodzić w tą i z powrotem pomiędzy definicjami klas. Większość praktyk programistycznych (w tym znany artykuł "Inheritance considered harmful") zaleca stosowanie płytkiej hierarchii dziedziczenia.
  • Anemiczny model dziedziny (ang. Anemic Domain Model): Antywzorzec opisany przez Martina Fowlera. W tym przypadku model dziedziny składa się z klas z atrybutami bez metod, nie jest więc obiektowy. Logika biznesowa przeniesiona jest do innych klas, które transformują klasy dziedziny zmieniając ich stan (stąd nazwa Fowlera: skrypty transakcyjne). Antywzorzec ten przedmiotem wielu dyskusji - znaczna część metodyk tworzenia oprogramowania w Javie (w tym EJB) operuje na takim modelu. Duża część projektantów przenosi też swoje przyzwyczajenia z modelowania baz danych modelując system w ten sposób.
  • Sequential Coupling
  • Singletonitis

[edytuj] Antywzorce w programowaniu

  • Accidental complexity
  • Action at a distance
  • Accumulate and fire
  • Blind faith
  • Boat anchor
  • Busy spin
  • Caching failure
  • Checking type instead of interface
  • Code momentum
  • Coding by exception
  • Double-checked locking
  • Error hiding
  • Expection Handling
  • Hard code
  • Lava flow
  • Magic number
  • Magic string
  • Packratting
  • Spaghetti code
  • Superboolean logic
  • Loop-switch sequence

[edytuj] Antywzorce metodologiczne

  • Copypasteryzm (Copy and paste programming)
  • Programming by permutation
  • De-factoring
  • Golden hammer
  • Silver bullet
  • Improbability factor
  • Premature optimization
  • Reinventing the wheel
  • Reinventing the square wheel
  • Tester Driven Development

[edytuj] Antywzorce w zarządzaniu konfiguracją (Configuration management)

  • Dependency hell
  • DLL hell
  • JAR hell
  • Extension conflict

[edytuj] Niektóre antywzorce organizacyjne

  • Paraliż analityczny (ang. Analysis paralysis): zjawisko to zachodzi wtedy, gdy koszty poniesione na analizę decyzji przekraczają korzyści wynikające z podjęcia tej decyzji. Często analiza zagadnienia zagłębia się do takiego poziomu szczegółowości, że trudno jest ją ogarnąć, zidentyfikować problemy, a kontekst zagadnienia jest tracony. W przypadku projektów programistycznych zjawisko to objawia się nieporcjonalnie długim czasem poświęconym na zbieranie wymagań, projektowanie systemu, bez żadnej wartości dodanej z poświęcenia tego dodatkowego czasu. Paraliż analityczny może być skutkiem zbyt biurokratycznego i zbyt drobiazgowego podejścia do problemu, często spowodowany jest brakiem doświadczenia projektantów i kierowników, lub potrzebą spełnienia wymogów korporacyjnych (np. wypełnienia odpowiednich szablonów dokumentów), metodologicznych (forsowania zbędnych kroków w metodologii, analiza zjawisk poza zakresem systemu wymuszona metodologią - w powiązaniu z antywzorcem: rozmycia zakresu), etc.
  • Dojna krowa (ang. Cash cow): Znane z marketingu (macierz wzrostu-udziałów Boston Consulting Group) pojęcie określające bardzo dochodowy produkt, w rynku sprzedaży którego firma ma duży udział, jest zarazem nazwą antywzorca. Jest nim wtedy gdy firma skupiająca swoją uwagę na sprzedaży dochodowego produktu, nie pracuje jednocześnie nad nowymi produktami. Dochodowy produkt może w niedługim czasie okazać się przestarzały, a firma z powodu braku nowości wypadnie z rynku.
  • Ciągła przestarzałość (ang. Continuous obsolescence): Zjawisko, kiedy firma poświęca więcej uwagi na przenoszenie istniejącego systemu na nowe platformy i środowiska, niż nad poprawą jego funkcjonalności. Nazwa została stworzona poprzez analogię z pojęciem Ciągła integracja (ang. Continous Integration).
  • Cost migration
  • Creeping featurism
  • Design by committee
  • Escalation of commitment
  • I told you so
  • Management by numbers
  • Management by perkele
  • Uprawa pieczarek (ang. Mushroom management): Styl zarządzania podobny do uprawy pieczarek. Pieczarki trzymane są w ciemnościach, w oborniku (ang. bullshit), a gdy trochę urosną - obcina się im głowy. W zarządzaniu przekłada się to na podejmowanie decyzji bez konsultacji z personelem, którego dotyczą te decyzje, lub wręcz nie informowanie personelu aż do czasu, gdy decyzje zapadną i będą odczuwalne. Zjawisko spotykane jest najczęściej w organizacjach o hierarchicznej strukturze, z barierami komunikacyjnymi pomiędzy poszczególnymi szczeblami. Antywzorzec ten dotyczy także projektów informatycznych, a dokładniej braku komunikacji pomiędzy klientami lub architektami systemu, a programistami, którzy implementują system. Programiści nie mają bezpośredniego kontaktu z klientem i mogą polegać tylko na stworzonej dokumentacji, która z kolei jest często traktowana niezobowiązująco przez klienta (np. klient traktuje ją "po macoszemu", jako zło konieczne).
  • Rozpłynięcie zakresu (ang. Scope creep): Powstaje na ogół wtedy, gdy zakres projektu nie jest poprawnie określony, dokumentowany i kontrolowany (na skutek braku zarządzania zmianami, braku określenia co jest celem projektu, słabego lub bezsilnego kierownika projektu). Zakres projektu podlega niekontrolowanym zmianom, a zespół zbacza z początkowo określonego kierunku. Powoduje to, że w projekcie wykonywane są inne czynności, niż przewidziane w opracowanym na początku budżecie i harmonogramie. Na ogół zakres projektu powiększa się, co powoduje, że w uprzednio zaplanowanym czasie próbuje się wykonać więcej czynności.
  • Stovepipe
  • Uzależnienie od dostawcy (ang. Vendor lock-in): Sytuacja, w której klient jest uzależniony od produktów dostawcy do tego stopnia, że nie może zmienić dostawcy bez poniesienia kosztów zmiany. W przypadku oprogramowania termin ten odnosi się do niemożności wymiany komponentu oprogramowania na inny z powodu ich niekompatybilności. Dostawcy oprogramowania tworzą często różne architektury, interfejsy systemów, które uniemożliwiają łatwą migrację. Często taka sytuacja wynika także z błędnego zaprojektowania systemu. Może się zdarzyć, że niekompatybilność komponentów jest celowym zamierzeniem dostawcy, który z uzależnienia nabywcy czerpie korzyści - w modelu biznesowym powiązanych produktów (ang. razor and blades) dostawca sprzedaje główny produkt (np. maszynkę do golenia, drukarkę, telefon) po zaniżonej cenie, po to, aby czerpać korzyści ze sprzedaży komponentów które do niego pasują (np. ostrzy, wkładów, abonamentu).
  • Violin string organization


[edytuj] Linki zewnętrzne

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com