<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Wzorce</id>
	<title>Wzorce - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Wzorce"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Wzorce&amp;action=history"/>
	<updated>2026-04-24T09:08:40Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=Wzorce&amp;diff=10242&amp;oldid=prev</id>
		<title>Izabela Szlachta at 22:52, 13 May 2013</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Wzorce&amp;diff=10242&amp;oldid=prev"/>
		<updated>2013-05-13T22:52:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Cat|Refactoring}}&lt;br /&gt;
{{Cat|Design Patterns}}&lt;br /&gt;
{{Design Patterns Links}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobleprog&amp;quot; headingmark=&amp;quot;⌘&amp;quot; incmark=&amp;quot;…&amp;quot; scaled=&amp;quot;true&amp;quot; font=&amp;quot;Trebuchet MS&amp;quot; &amp;gt;&lt;br /&gt;
;title: Katalog wzorców&lt;br /&gt;
;author: Leszek Albrzykowski (NobleProg Ltd)&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Kody źródłowe dla omawianych wzorców: http://svn.nobleprog.com/training/php/Refactoring/&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Add parameter ⌘==&lt;br /&gt;
Parametryzacja metody, pozwala na uniknięcie konieczności jej późniejszych zmian.&lt;br /&gt;
== Change Bidirectional Association to Unidirectional ⌘==&lt;br /&gt;
Istnieje dwustronna relacja pomiędzy obiektami, ale jeden z nich nie potrzebuje dostępu do funkcjonalności drugiego.&lt;br /&gt;
== Change Reference to Value ⌘==&lt;br /&gt;
Odwrócenie wzorca &amp;quot;Change Value to Reference&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Change Unidirectional Association to Bidirectional ⌘==&lt;br /&gt;
Wzorzec odwrotny do &amp;quot;Change Bidirectional Association to Unidirectional&amp;quot;&lt;br /&gt;
== Change Value to Reference ⌘==&lt;br /&gt;
Istnieje klasa z wieloma, takimi samymi instancjami, które należy zamienić w pojedynczy obiekt. Należy zamienić obiekt (wartość) na referencję.&lt;br /&gt;
Dzięki temu rozwiązaniu możemy w klasie korzystać z obiektów zewnętrznych.&lt;br /&gt;
&lt;br /&gt;
== Collapse Hierarchy ⌘==&lt;br /&gt;
Klasa rodzica i dziecka nie różnią się znacząco od siebie. Należy połączyć klasy ze sobą.&lt;br /&gt;
TODO: Source&lt;br /&gt;
== Consolidate Conditional Expression ⌘==&lt;br /&gt;
Kilka warunków sprawdza jeden rezultat. Należy je skonsolidować.&lt;br /&gt;
TODO: Source&lt;br /&gt;
== Consolidate Duplicate Conditional Fragments ⌘==&lt;br /&gt;
Niezależnie od warunku wykonywane są te same czynności. Należy je przenieść poza warunek.&lt;br /&gt;
TODO: Source&lt;br /&gt;
== Decompose Conditional ⌘==&lt;br /&gt;
Instrukcje warunkowe są skomplikowane. Należy zastosować dekompozycje warunków.&lt;br /&gt;
TODO: Source&lt;br /&gt;
== Encapsulate Collection ⌘==&lt;br /&gt;
TODO: Source&lt;br /&gt;
== Encapsulate Collection ⌘==&lt;br /&gt;
Metoda zwraca kolekcję. Należy zwracać kolekcję bez możliwości jej modyfikacji (w trybie do odczytu) oraz udostępnić metody pozwalające na dodawanie i usuwanie elementów z kolekcji.&lt;br /&gt;
TODO: Source&lt;br /&gt;
== Encapsulate Downcast ⌘==&lt;br /&gt;
Metoda powinna zwracać wartość obiektu rzutowanego w dół a nie zbytnie uogólnionego. &lt;br /&gt;
== Encapsulate Field ⌘==&lt;br /&gt;
Istnieją publiczne pola klasy. Należy zastąpić je akcesorami i ustawić jako prywatne.&lt;br /&gt;
== Extract Class ⌘==&lt;br /&gt;
Rozdzielenie funkcjonalności zdefiniowanej w klasie na dwie niezależne. &lt;br /&gt;
== Extract Method ⌘==&lt;br /&gt;
Zebranie podobnych funkcjonalności i przeniesienie ich do odpowiedniej metody. &lt;br /&gt;
== Hide Delegate ⌘==&lt;br /&gt;
Ukrycie przed klientem niektórych szczegółów delegowanego obiektu (zgodnie z paradygmatem enkapsulacji).&lt;br /&gt;
== Hide Method ⌘==&lt;br /&gt;
Metoda nie jest używana przez klienta bądź inne klasy - należy ją ukryć. &lt;br /&gt;
== Inline Class ⌘==&lt;br /&gt;
Scalenie funkcjonalności klas, które mają podobną funkcjonalność (np. operują na tym samym obiekcie biznesowym) .&lt;br /&gt;
== Inline Method ⌘==&lt;br /&gt;
Nazwa metody odzwierciedla jej działanie (jest ponadto czytelna) i nie ma konieczności dekompozycji tej funkcji. Należy scalić metody.&lt;br /&gt;
== Inline Temp ⌘==&lt;br /&gt;
Wynik działania metody jest przypisywany do tymczasowej zmiennej. W takiej sytuacji należy unikać tworzenia zmiennych tymczasowych. &lt;br /&gt;
== Introduce Explaining Variable ⌘==&lt;br /&gt;
Należy stworzyć zmienną, której nazwa odzwierciedla jej działanie.&lt;br /&gt;
== Introduce Foreign Method ⌘==&lt;br /&gt;
Rozszerzenie klasy klienta o metodę, która powinna być dostępna w klasie serwera, ale klasy tej nie możemy modyfikować.&lt;br /&gt;
== Introduce Local Extension ⌘==&lt;br /&gt;
Konieczne jest rozszerzenie funkcjonalności klasy, której nie możemy modyfikować (dziedziczenie lub wzorzec Dekorator). &lt;br /&gt;
== Introduce Null Object ⌘==&lt;br /&gt;
Istnieje konieczność sprawdzania czy dany obiekt (lub jego metoda) nie jest pusty (NULL). W przypadku wielokrotnej konieczności sprawdzenia tego warunku, należy wprowadzić pusty obiekt dzięki czemu można uniknąć wielokrotnego porównywania do wartości NULL oraz podejmowania różnych działań jeśli warunek okaże się prawdziwy.&lt;br /&gt;
== Introduce Parameter Object ⌘==&lt;br /&gt;
Metoda przyjmuje parametry, które potrzebne są do wykonania jednej operacji. Zamiast przekazywania dwóch parametrów należy je scalić w jeden. &lt;br /&gt;
== Move Field ⌘==&lt;br /&gt;
Przeniesienie pola/właściwości do klasy, która częściej będzie je/ją wykorzystywać.&lt;br /&gt;
== Move Method ⌘==&lt;br /&gt;
Analogicznie do Move Field.&lt;br /&gt;
== Parameterize Method ⌘==&lt;br /&gt;
Istnieją metody realizujące bardzo podobne zadania. Należy zamienić je na jedną z odpowiednimi parametrami.&lt;br /&gt;
&lt;br /&gt;
== Pull Up Constructor Body ⌘==&lt;br /&gt;
Konstruktory klas dziedziczących mają taką samą funkcjonalność. Należy przenieść konstruktor do klasy rodzica.&lt;br /&gt;
&lt;br /&gt;
== Pull Up Field ⌘==&lt;br /&gt;
Analogicznie do &amp;quot;Pull Up Constructor Body&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Pull Up Method ⌘==&lt;br /&gt;
Analogicznie do Pull Up Field.&lt;br /&gt;
== Push Down Field ⌘==&lt;br /&gt;
Odwrócenie wzorca &amp;quot;Pull Up Field&amp;quot;.&lt;br /&gt;
== Push Down Method ⌘==&lt;br /&gt;
Odwrócenie wzorca &amp;quot;Pull Up Method&amp;quot;.&lt;br /&gt;
== Remove Assignments to Parameters ⌘==&lt;br /&gt;
W ramach działania jakiegoś algorytmu nadpisywana jest wartość (również typ) zmiennej. W takiej sytuacji, w celu łatwiejszej analizy kodu należy wprowadzić dodatkowe zmienne. &lt;br /&gt;
== Remove Control Flag ⌘==&lt;br /&gt;
Istnieje zmienna pełniąca rolę flagi i zmieniająca się w zależności od różnych warunków. Należy używać konstrukcji breake lub return zamiast tej zmiennej.&lt;br /&gt;
&lt;br /&gt;
== Remove Double Negative ⌘==&lt;br /&gt;
W warunku występuje podwójna negacja (~~). Należy zastąpić warunek przyrównaniem do prawdy.&lt;br /&gt;
&lt;br /&gt;
== Remove Middle Man ⌘==&lt;br /&gt;
Odwrócenie wzorca &amp;quot;Hide Delegate&amp;quot;. &lt;br /&gt;
== Remove Parameter ⌘==&lt;br /&gt;
Parametr nie jest używane przez metodę. Należy go usunąć.&lt;br /&gt;
== Remove Setting Method ⌘==&lt;br /&gt;
Istnieje metoda, która pozwala na modyfikację danych, które nie powinny być modyfikowane. Dane te należy przekazywać za pomocą konstruktora a metodę usunąć.&lt;br /&gt;
&lt;br /&gt;
== Rename Method ⌘==&lt;br /&gt;
Nazwa metody nie oddaje jej działania. Należy zmienić nazwę metody.&lt;br /&gt;
&lt;br /&gt;
== Replace Array with Object ⌘==&lt;br /&gt;
Istnieje tablica przechowująca wiele różnych wartości (również co do typu). Należy zastąpić tablicę obiektem.&lt;br /&gt;
&lt;br /&gt;
== Replace Conditional with Polymorphism ⌘==&lt;br /&gt;
Istnieje warunek który podejmuje różne działania w zależności od typu obiektu. Należy utworzy klasy dziedziczące i skorzystać z polimorfizmu.&lt;br /&gt;
&lt;br /&gt;
== Replace Conditional with Visitor  ⌘==&lt;br /&gt;
TODO&lt;br /&gt;
== Replace Constructor with Factory Method ⌘==&lt;br /&gt;
Przeznaczenie konstruktora jest niewystarczające. Należy zastąpić tworzenie obiektu metodą fabrykującą zamiast za pomocą konstruktora.&lt;br /&gt;
&lt;br /&gt;
== Replace Data Value with Object ⌘==&lt;br /&gt;
Istnieje zmienna/pole które potrzebuje dodatkowych funkcjonalności bądź właściwości. Należy zamienić tą zmienną/pole obiektem.&lt;br /&gt;
&lt;br /&gt;
== Replace Delegation with Inheritance  ⌘==&lt;br /&gt;
Należy, jeśli to możliwe, zastąpić delegację dziedziczeniem.&lt;br /&gt;
== Replace Error Code with Exception ⌘==&lt;br /&gt;
System korzysta z wewnętrznego mechanizmu zgłaszania błędów (np. oznacza błędy symbolami). Należy zastąpić je wyjątkami.&lt;br /&gt;
== Replace Magic Number with Symbolic Constant ⌘==&lt;br /&gt;
Należy przenieść stałe wartości do odpowiednich zmiennych.&lt;br /&gt;
== Replace Parameter with Explicit Methods ⌘==&lt;br /&gt;
Istnieje jeden akcesor (lub metoda wykonująca różne działania w zależności od parametru) dla wielu zmiennych. Należy zastąpić go osobnymi akcesorami dla każdej ze zmiennych.&lt;br /&gt;
== Replace Recursion with Iteration ⌘==&lt;br /&gt;
Algorytm korzysta z rekurencji. Należy zastąpić rekurencję pętlą jeśli to możliwe.&lt;br /&gt;
== Replace Subclass with Fields ⌘==&lt;br /&gt;
Klasy dziedziczące różnią się tylko zmienną. Należy ją przenieść do klasy rodzica.&lt;br /&gt;
== Replace Temp with Query ⌘==&lt;br /&gt;
Zmienne tymczasowe przechowują rezultat jakiegoś wyliczenia. W takiej sytuacji, wyliczenie to można przenieść do metody, istnieje bowiem możliwość jej wielokrotnego użycia. &lt;br /&gt;
== Replace Type Code with State/Strategy ⌘==&lt;br /&gt;
W zależności od typu (stałej) zmienia się zachowanie obiektu. Nie jest możliwe zastosowanie dziedziczenia i polimorfizmu. Należy użyć wzorca Strategii lub Stanu.&lt;br /&gt;
== Reverse Conditional ⌘==&lt;br /&gt;
Należy zmodyfikować wyrażenie warunkowe jeżeli odwrócenie warunków będzie bardziej zrozumiałe.&lt;br /&gt;
== Separate Query from Modifier ⌘==&lt;br /&gt;
Metoda jednocześnie pobiera jak i modyfikuje wartości. Należy rozdzielić ją na dwie metody: odpowiednio modyfikującą i pobierającą.&lt;br /&gt;
== Split Loop ⌘==&lt;br /&gt;
Podczas przebiegu pętli wykonywanych jest zbyt wiele czynności. Należy rozdzielić pętlę na kilka niezależnych.&lt;br /&gt;
== Split Temporary Variable ⌘==&lt;br /&gt;
Do jednej zmienne tymczasowej przypisywane są wyniki działania różnych wyliczeń. Należy utworzyć osobne zmienne dla każdego z wyliczeń wraz z odpowiednią nazwą. Ten wzorzec nie dotyczy zmiennych tymczasowych nadpisywanych w pętlach. &lt;br /&gt;
== Substitute Algorithm ⌘==&lt;br /&gt;
Dany algorytm możliwy jest do zrealizowania w prostszy sposób. Należy zastąpić bardziej skomplikowany prostszym.&lt;br /&gt;
== Separate Domain from Presentation ⌘==&lt;br /&gt;
Wzorzec mówi o separacji domeny (dziedziny) od prezentacji. Przykładem może być realizacja aplikacji zgodnie ze wzorce MVC/MVP/MVVM.&lt;br /&gt;
== Convert Procedural Design to Objects ⌘==&lt;br /&gt;
W przypadku wielu systemów (pomijamy tak specyficzne rozwiązania jak programy pisane np. w Prologu gdzie obiekt ma inne znaczenie niż w ogólnie przyjętym rozumieniu wywodzącym się z OOP) programowanie obiektowe wydaje się najlepszym rozwiązaniem. Część z języków traktuje wszystko jako obiekt. Ze wzorcem tym wiąże się pojęcie &amp;quot;Primitive Obsession&amp;quot;, czyli unikanie typów prostych (w szczególności dla obiektów dziedziny). W językach wspierających programowanie proceduralne, funkcyjne i obiektowe znaczenie &amp;quot;Primitive Obsession&amp;quot; może być szczególnie istotne przez wzgląd na &amp;quot;praktyki&amp;quot; programistów.&lt;/div&gt;</summary>
		<author><name>Izabela Szlachta</name></author>
	</entry>
</feed>