You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1.ru. Если условный оператор находится в методе, который выполняет ещё какие-то действия, <ahref="/extract-method">извлеките его в новый метод</a>.
6
+
6
7
1.en. If the conditional is in a method that performs other actions as well, perform <ahref="/extract-method">Extract Method</a>.
8
+
7
9
1.uk. Якщо умовний оператор знаходиться в методі, який виконує ще якісь дії, <ahref="/extract-method">витягніть його в новий метод</a>.
8
10
9
11
2.ru. Для каждого подкласса иерархии, переопределите метод, содержащий условный оператор, и скопируйте туда код соответствующей ветки оператора.
12
+
10
13
2.en. For each hierarchy subclass, redefine the method that contains the conditional and copy the code of the corresponding conditional branch to that location.
14
+
11
15
2.uk. Для кожного підкласу ієрархії потібно перевизначити метод, ща містить умовний оператор, і скопіювати туди код відповідної гілки оператора.
12
16
13
17
3.ru. Удалите эту ветку из условного оператора.
18
+
14
19
3.en. Delete this branch from the conditional.
20
+
15
21
3.uk. Видаліть цю гілку з умовного оператора.
16
22
17
23
4.ru. Повторяйте замену, пока условный оператор не опустеет. Затем удалите условный оператор и объявите метод абстрактным.
24
+
18
25
4.en. Repeat replacement until the conditional is empty. Then delete the conditional and declare the method abstract.
26
+
19
27
4.uk. Повторюйте заміну, поки умовний оператор не спорожніє. Потім видалите умовний оператор і оголосите метод абстрактним.
20
28
21
29
@@ -97,7 +105,7 @@ class Employee {
97
105
public $commission;
98
106
public $bonus;
99
107
public function payAmount() {
100
-
return $type->payAmount($this);
108
+
return $this->type->payAmount($this);
101
109
}
102
110
}
103
111
@@ -216,7 +224,7 @@ Select body of "payAmount"
216
224
#|en| After these actions, we can set up delegation from the <code>Employee</code> class.
217
225
#|uk| Після цих дій ми можемо налаштувати делегування з класу <code>Employee</code>.
218
226
219
-
Print " return $type->payAmount($this);"
227
+
Print " return $this->type->payAmount($this);"
220
228
221
229
#|ru| После этого займёмся перемещением кода в подклассы. Создадим методы <code>payAmount</code> в каждом из подклассов и переместим туда расчёты зарплат для соответствующих типов служащих.
222
230
#|en| Then start moving code to subclasses. Create <code>payAmount</code> methods in each of the subclasses and move payroll calculations there for the relevant employee types.
1.ru. Используйте <ahref="/self-encapsulate-field">самоинкапсуляцию поля</a> для создания геттера для поля, которое содержит кодирование типа.
6
+
6
7
1.en. Use <ahref="/self-encapsulate-field">Self Encapsulate Field</a> to create a getter for the field that contains type code.
8
+
7
9
1.uk. Використайте <ahref="/self-encapsulate-field">самоінкапсуляцію поля</a> для створення геттера для поля, яке містить кодування типу.
8
10
9
11
2.ru. Создайте новый класс, который будет играть роль <i>состояния</i> (или <i>стратегии</i>). Создайте в нем абстрактный геттер закодированного поля.
12
+
10
13
2.en. Create a new class that will play the role of <i>state</i> (or <i>strategy</i>). Create an abstract getter of the coded field in it.
14
+
11
15
2.uk. Створіть новий клас, який гратиме роль <i>стану</i> (або <i>стратегії</i>). Створіть у ньому абстрактний геттер закодованого поля.
12
16
13
17
3.ru. Создайте подклассы состояния для каждого значения закодированного типа.
18
+
14
19
3.en. Create state subclasses for each value of the coded type.
20
+
15
21
3.uk. Створіть підкласи стану для кожного значення закодованого типу.
16
22
17
23
4.ru. В абстрактном классе состояния создайте статический фабричный метод, принимающий в параметре значение закодированного типа. В зависимости от этого параметра фабричный метод будет создавать объекты различных состояний. Для этого в его коде придётся создать большой условный оператор, но он будет единственным по завершению рефакторинга.
24
+
18
25
4.en. In the abstract state class, create a static factory method that accepts the value of the coded type as a parameter. Depending on this parameter, the factory method will create objects of various states. For this, in its code create a large conditional; it will be the only one when refactoring is complete.
26
+
19
27
4.uk. У абстрактному класі стану створіть статичний фабричний метод, що набуває в параметрі значення закодованого типу. Залежно від цього параметра фабричний метод створюватиме об'єкти різних станів. Для цього в його коді доведеться створити великий умовний оператор, але він буде єдиним після завершення рефакторингу.
20
28
21
29
5.ru. В исходном классе поменяйте тип закодированного поля на класс-состояние. В сеттере этого поля вызывайте фабричный метод состояния для получения новых объектов состояний.
30
+
22
31
5.en. In the original class, change the type of the coded field to the state class. In the field's setter, call the factory state method for getting new state objects.
32
+
23
33
5.uk. У початковому класі поміняйте тип закодованого поля на клас-стан. У сетерові цього поля викликайте фабричний метод стану для отримання нових об'єктів станів.
24
34
25
35
6.ru. Переместите поля и методы из суперкласса в соответствующие подклассы-состояния.
36
+
26
37
6.en. Move the fields and methods from the superclass to the corresponding state subclasses.
38
+
27
39
6.uk. Перемістіть поля та методи з суперкласу у відповідні підкласи-стану.
28
40
29
41
7.ru. Когда все что можно перемещено, используйте <ahref="/replace-conditional-with-polymorphism">замену условных операторов полиморфизмом</a>, чтобы окончательно избавиться от условных операторов, использующий закодированный тип.
42
+
30
43
7.en. When everything movable has been moved, use <ahref="/replace-conditional-with-polymorphism">Replace Conditional with Polymorphism</a> in order to get rid of conditionals that use type code once and for all.
44
+
31
45
7.uk. Коли усі потрібні дані будуть перенесені, використайте <ahref="/replace-conditional-with-polymorphism">заміну умовних операторів поліморфізмом</a>, щоб остаточно позбавитися від умовних операторів, які використовують закодований тип.
32
46
33
47
@@ -86,7 +100,7 @@ class Employee {
86
100
public $commission;
87
101
public $bonus;
88
102
public function payAmount() {
89
-
return $type->payAmount($this);
103
+
return $this->type->payAmount($this);
90
104
}
91
105
}
92
106
@@ -424,7 +438,7 @@ Select body of "payAmount"
424
438
#|en| After these actions, we can set up delegation from the <code>Employee</code> class.
425
439
#|uk| Після цих дій ми можемо налаштувати делегування з класу <code>Employee</code>.
426
440
427
-
Print " return $type->payAmount($this);"
441
+
Print " return $this->type->payAmount($this);"
428
442
429
443
#|ru| После этого займёмся перемещением кода в подклассы. Создадим методы <code>payAmount</code> в каждом из подклассов и переместим туда расчёты зарплат для соответствующих типов служащих.
430
444
#|en| Then start moving code to subclasses. Create <code>payAmount</code> methods in each of the subclasses and move payroll calculations there for the relevant employee types.
0 commit comments