Tak, diagramy mogą być czasami nieodpowiednie. Kiedy są nieodpowiednie? Kiedy tworzysz je bez kodu, aby je zweryfikować, a następnie zamierzasz ich przestrzegać. Nie ma nic złego w rysowaniu diagramu, aby zbadać pomysł.
Zwinne tworzenie oprogramowania: zasady, wzorce i praktyki - Robert C. Martin
Co on dokładnie przez to rozumie? Czy UML nie został zaprojektowany, aby pomóc zaplanować strukturę kodu przed „zanurzeniem się”? Jaki jest sens korzystania z niego, jeśli nie postępujesz zgodnie ze schematami, które wymyśliłeś?
Kontekst: W tym rozdziale wujek Bob tworzy diagram UML dla zdobywcy punktów w grze w kręgle. Następnie rozwija program w sposób testowy, bez sprawdzania schematu UML. Powstały program nie przypomina diagramu UML, a wujek Bob dochodzi do powyższego wniosku.
źródło
Odpowiedzi:
Aby właściwie to wyjaśnić, potrzebujemy krótkiej lekcji historii. We wczesnych latach inżynierii oprogramowania często stosowaną analogią było budowanie domu. Architekt i inżynier budowlany omawiają plany z klientem i opracowują projekt. Następnie budowniczowie wykonują ten projekt, aby zbudować rzeczywisty dom. Pisanie kodu było postrzegane jako odpowiednik budowy rzeczywistego domu. Tak więc istniała potrzeba wcześniejszego zaprojektowania, zanim ta kompilacja będzie mogła mieć miejsce. Stworzono różne narzędzia do projektowania graficznego, w tym UML.
Pierwotnie pomysł z UML polegał na tym, że należałoby w pełni zaprojektować system z UML, a następnie przekazać go programistom, aby przełożyły ten projekt na kod. W rzeczywistości to po prostu nie działa i doprowadziło do tego, że lata programistów były postrzegane jako „realizatorzy”, a nie „projektanci”, projekty były spóźnione, projekty musiały się ciągle zmieniać po tym, jak miały być ukończone itp.
Powód jest prosty. Kodowanie to projektowanie . W przypadku analogii domu kod jest rysunkiem architekta. Kompilator jest konstruktorem, który bierze te projekty i tworzy z nich program. Ta realizacja doprowadziła następnie do powstania zwinnych technik, narodzin TDD itp.: Narzędzi pomagających poprawić jakość tego projektu kodu.
Tak jak architekt może przygotować wstępne szkice, aby pomóc jej i jej zespołowi wizualizować ogólny projekt, tak programista może użyć UML lub innych narzędzi, aby pomóc w wizualizacji potrzebnego projektu. Tak jak te szkice nie są ślepo przestrzegane, tak nie należy ślepo przestrzegać UML. Projekt kodu powinien ewoluować w oparciu o zwinne iteracje i używanie TDD. Podsumowując, tak jak architekt może zbudować model domu, aby pomóc jej i jej zespołowi w wizualizacji rysunków, tak też UML może pomóc w wizualizacji struktury kodu.
Jak mówi wujek Bob, nie możesz sprawdzić poprawności UML, możesz jedynie zweryfikować kod. Dlatego kod jest główną dokumentacją projektową, a UML, jeśli jest używany, jest jedynie dokumentacją wtórną.
źródło
Wydaje mi się, że nie każdy idiom programistyczny (lub projekt, czy kod) pasuje do UML (co przyznaję, że nie wiem dobrze - po prostu czytam kilka książek na ten temat - nigdy go nie używałem i prawdopodobnie go nie lubię).
Zwykły kod C (np. Kod źródłowy jądra Linuksa) może nie być dokładnie modelowany przez UML.
Kod Ocaml (z jego modułami i funktorami), a nawet kod C ++ 11 (z lambdami i szablonami) może nie pasować do UML.
Programowanie wieloetapowe à la MetaOcaml prawdopodobnie nie pasuje do UML.
Kod Prolog lub kod Common Lisp prawdopodobnie nie pasuje do UML.
Zobacz również tę odpowiedź i tę kwestię kopalni.
Przeczytaj Scott's Programming Language Pragmatics oraz Van Concept 's Concepts, Techniques and Models of Computer Programming , a następnie zadaj sobie pytanie, czy każdy model programowania pasuje do UML.
Zobacz także: Martin Fowler Is Design Dead? blog.
źródło