Wzorce Alexandera

O Christopherze Alexanderze - architekcie, który wśród informatyków stał się postacią kultową - na łamach Computerworld pisałem już kilkakrotnie. Artykuł ten rozpoczyna cykl, w którym jeszcze szerzej przybliżę jego idee.

O Christopherze Alexanderze - architekcie, który wśród informatyków stał się postacią kultową - na łamach Computerworld pisałem już kilkakrotnie. Artykuł ten rozpoczyna cykl, w którym jeszcze szerzej przybliżę jego idee.

W środowisku informatycznym najbardziej znane są prace Alexandera związane z wzorcami: "The Timeless Way of Building" i "A Pattern Language", które weszły do kanonu literatury informatycznej. Od tych prac zaczniemy cykl - przyjrzymy się oryginalnemu podejściu do wzorców. W dalszych artykułach zastanowimy się, jak najnowsze prace Alexandera, "The Nature of Order", można odnieść do informatyki.

Istnieją tylko wzorce

Do pojęcia wzorców Alexander doszedł próbując w sposób obiektywny odróżnić budynki dobre, w których człowiek czuje się dobrze, od budynków złych. Wymagało to na tyle głębokiej analizy struktury budynków, żeby można było zidentyfikować niezmienniki, odróżniające takie budynki.

Alexander zadał sobie pytanie, z czego naprawdę składają się budynki. Naiwnie patrząc można powiedzieć, że z cegieł, cementu, betonu itp. Jednak cegły i inne składniki można wymienić, a budynek cały czas zachowa swoją strukturę, można też zachować składniki i stworzyć zupełnie inny budynek. Tym, co jest naprawdę ważne, co stanowi istotę budynku, to relacje między jego składowymi. Drzwi rozpoznajemy jako drzwi, ponieważ występują w nich określone relacje: proporcje, umiejscowienie klamki, ułożenie względem framugi itd. Drzwi mogą się między sobą różnić, jednak zaliczamy je do jednej klasy rzeczy, ponieważ występują w nich pewne "niezmiennicze" relacje. Wzorce są właśnie tymi relacjami-niezmiennikami. Są relacjami między pewnymi elementami, lecz jeżeli przyjrzymy się tym elementom, okaże się, że w nich istotne są również relacje, czyli wzorce. W końcu okazuje się, że wzorce są relacjami między wzorcami. W ten sposób Alexander doszedł do wniosku, że podstawowymi składnikami budynków są wzorce. To samo jest prawdziwe w przypadku dowolnego systemu, naturalnego czy stworzonego przez człowieka: wzorce są podstawowym budulcem całego świata.

Wzorzec jako przepis

Od strony praktycznej wzorzec w ujęciu Alexandera z jednej strony jest rzeczą w świecie, z drugiej jest przepisem mówiącym, jak ten wzorzec zastosować. Na tym też opiera się użyteczność wzorców. Kent Beck - twórca eXtreme Programming i jedna z ważnych postaci w środowisku związanym z wzorcami informatycznymi - zwrócił uwagę na ważne rozróżnienie między przepisem a projektem. Projekt jest czymś statycznym, co można uzyskać przez inżynierię wsteczną, przepis jest dynamiczny, generatywny, zazwyczaj nie można go uzyskać przez inżynierię wsteczną. Przepis mówi nam jak daną rzecz utworzyć, projekt niekoniecznie. Na przykład przepis mówi nam krok po kroku jak upiec ciasto, odtworzyć przepis z gotowego ciasta byłoby bardzo trudno.

Dobre i złe wzorce

Wzorce mogą być dobre lub złe (żywe lub martwe, jak nazywa je Alexander). Tym, co odróżnia dobry system (budynek) od złego, są tworzące go wzorce. Jednym z celów prac Alexandera była klasyfikacja dobrych wzorców w architekturze. Rezultatem był system 253 wzorców, zebrany w "A Pattern Language". Podobne prace były (i cały czas są) powadzone przez informatyków, opisano setki wzorców dla różnych dziedzin: projektowanie obiektowe, analiza, zarządzanie konfiguracją, systemy rozproszone, architektura systemów itp.

Czym różni się dobry wzorzec od złego? Dobry wzorzec to taki, który równoważy siły występujące w kontekście, w jakim występuje. Przy czym pojęcie siły w teorii wzorców jest traktowane abstrakcyjnie. Nie chodzi o siły w sensie fizycznym, ale o wszystko, co może powodować zmianę systemu. W systemie informatycznym, który będzie się często zmieniał i jest narażony na ataki ze strony hakerów, widać dwie siły: jedna związana z wymaganiami bezpieczeństwa, druga z łatwością pielęgnacji. Jeżeli siły te nie są zrównoważone przez system (tzn. działają w sposób niekontrolowany) wywierają negatywny wpływ na system i mogą doprowadzić w ostateczności do jego unicestwienia. Na przykład niezrównoważona druga siła może spowodować, że adaptacja systemu do zmieniających się warunków będzie zbyt wolna, z czasem system taki będzie coraz trudniejszy w pielęgnacji i będzie pojawiać się coraz więcej błędów. System jako całość będzie coraz słabszy.

Języki wzorców

Pojedynczy wzorzec zazwyczaj nie równoważy wszystkich działających sił, często może nawet wprowadzać dodatkowe. Te siły powinny zostać zrównoważone przez inne wzorce. Dlatego dla Alexandera podstawowe znaczenie mają spójne systemy wzorców, które nazwał językami wzorców. Dopiero gdy wzorce tworzą język, ujawnia się ich pełna siła.

System wzorców tworzy język wtedy, gdy wzorce wspólnie równoważą wszystkie siły w szerszym kontekście, którego dotyczy język. Może być to język do projektowania ogrodów, projektowania kuchni, domu, ulic itp. W informatyce chociaż pojęcie języków wzorców jest znacznie mniej popularne niż wzorców, powstało kilka takich języków, np. język dla systemów telekomunikacyjnych, stworzony w Lucent Technology, język dla społeczności jini opracowany w Sun Microsystems przez Dicka Gabriela, czy język wzorców organizacyjnych opracowany przez Jima Copliena (Organizational Patterns for Agile Development).

Według Alexandera, gdy cokolwiek tworzymy, zawsze posługujemy się językiem wzorców, jest to równie podstawowy fakt o naturze ludzkiej jak używanie mowy.

Proponuje on nowe podejście do projektowania: Prawdziwym wyzwaniem każdego procesu projektowania jest zadanie stworzenia języka, z którego później można wygenerować określony projekt. [...] Przygotowanie języka może zająć bardzo dużo czasu: tygodnie, miesiące, lata. Samo użycie języka [...] zajmuje nie więcej niż kilka godzin. Metody tej nie udało się zastosować w pełni ani w informatyce, ani w architekturze, dopiero najnowsze prace Alxandera nad sekwencjami generatywnymi dają obiecujące wyniki.

QWAN

Dla Alexandera wzorce i języki wzorców same w sobie nie były celem, służyły do osiągnięcia tajemniczej cechy QWAN (quality without a name), czyli jakości bez nazwy. Niektórzy dopatrują się w niej mistycyzmu, inni udają, że Alexander w ogóle o takich rzeczach nie pisał. Jest to jednak centralne pojęcie w teorii Alexandera - chociaż budzące najwięcej wątpliwości i nieporozumień. Ale o tym w kolejnym odcinku.

<hr>W Polsce związkami prac Alexandera z informatyką zajmuje się projekt Humanistyczna Inżynieria Oprogramowania (http://www.projekt-hio.info ).


TOP 200