Skip to content

Commit e5320ff

Browse files
committed
Fixed error in example.
1 parent 5bb105d commit e5320ff

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

interactive/php/replace-conditional-with-polymorphism.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,27 @@ replace-conditional-with-polymorphism:php
33
###
44

55
1.ru. Если условный оператор находится в методе, который выполняет ещё какие-то действия, <a href="/extract-method">извлеките его в новый метод</a>.
6+
67
1.en. If the conditional is in a method that performs other actions as well, perform <a href="/extract-method">Extract Method</a>.
8+
79
1.uk. Якщо умовний оператор знаходиться в методі, який виконує ще якісь дії, <a href="/extract-method">витягніть його в новий метод</a>.
810

911
2.ru. Для каждого подкласса иерархии, переопределите метод, содержащий условный оператор, и скопируйте туда код соответствующей ветки оператора.
12+
1013
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+
1115
2.uk. Для кожного підкласу ієрархії потібно перевизначити метод, ща містить умовний оператор, і скопіювати туди код відповідної гілки оператора.
1216

1317
3.ru. Удалите эту ветку из условного оператора.
18+
1419
3.en. Delete this branch from the conditional.
20+
1521
3.uk. Видаліть цю гілку з умовного оператора.
1622

1723
4.ru. Повторяйте замену, пока условный оператор не опустеет. Затем удалите условный оператор и объявите метод абстрактным.
24+
1825
4.en. Repeat replacement until the conditional is empty. Then delete the conditional and declare the method abstract.
26+
1927
4.uk. Повторюйте заміну, поки умовний оператор не спорожніє. Потім видалите умовний оператор і оголосите метод абстрактним.
2028

2129

@@ -97,7 +105,7 @@ class Employee {
97105
public $commission;
98106
public $bonus;
99107
public function payAmount() {
100-
return $type->payAmount($this);
108+
return $this->type->payAmount($this);
101109
}
102110
}
103111
@@ -216,7 +224,7 @@ Select body of "payAmount"
216224
#|en| After these actions, we can set up delegation from the <code>Employee</code> class.
217225
#|uk| Після цих дій ми можемо налаштувати делегування з класу <code>Employee</code>.
218226

219-
Print " return $type->payAmount($this);"
227+
Print " return $this->type->payAmount($this);"
220228

221229
#|ru| После этого займёмся перемещением кода в подклассы. Создадим методы <code>payAmount</code> в каждом из подклассов и переместим туда расчёты зарплат для соответствующих типов служащих.
222230
#|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.

interactive/php/replace-type-code-with-state-strategy.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,45 @@ replace-type-code-with-state-strategy:php
33
###
44

55
1.ru. Используйте <a href="/self-encapsulate-field">самоинкапсуляцию поля</a> для создания геттера для поля, которое содержит кодирование типа.
6+
67
1.en. Use <a href="/self-encapsulate-field">Self Encapsulate Field</a> to create a getter for the field that contains type code.
8+
79
1.uk. Використайте <a href="/self-encapsulate-field">самоінкапсуляцію поля</a> для створення геттера для поля, яке містить кодування типу.
810

911
2.ru. Создайте новый класс, который будет играть роль <i>состояния</i> (или <i>стратегии</i>). Создайте в нем абстрактный геттер закодированного поля.
12+
1013
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+
1115
2.uk. Створіть новий клас, який гратиме роль <i>стану</i> (або <i>стратегії</i>). Створіть у ньому абстрактний геттер закодованого поля.
1216

1317
3.ru. Создайте подклассы состояния для каждого значения закодированного типа.
18+
1419
3.en. Create state subclasses for each value of the coded type.
20+
1521
3.uk. Створіть підкласи стану для кожного значення закодованого типу.
1622

1723
4.ru. В абстрактном классе состояния создайте статический фабричный метод, принимающий в параметре значение закодированного типа. В зависимости от этого параметра фабричный метод будет создавать объекты различных состояний. Для этого в его коде придётся создать большой условный оператор, но он будет единственным по завершению рефакторинга.
24+
1825
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+
1927
4.uk. У абстрактному класі стану створіть статичний фабричний метод, що набуває в параметрі значення закодованого типу. Залежно від цього параметра фабричний метод створюватиме об'єкти різних станів. Для цього в його коді доведеться створити великий умовний оператор, але він буде єдиним після завершення рефакторингу.
2028

2129
5.ru. В исходном классе поменяйте тип закодированного поля на класс-состояние. В сеттере этого поля вызывайте фабричный метод состояния для получения новых объектов состояний.
30+
2231
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+
2333
5.uk. У початковому класі поміняйте тип закодованого поля на клас-стан. У сетерові цього поля викликайте фабричний метод стану для отримання нових об'єктів станів.
2434

2535
6.ru. Переместите поля и методы из суперкласса в соответствующие подклассы-состояния.
36+
2637
6.en. Move the fields and methods from the superclass to the corresponding state subclasses.
38+
2739
6.uk. Перемістіть поля та методи з суперкласу у відповідні підкласи-стану.
2840

2941
7.ru. Когда все что можно перемещено, используйте <a href="/replace-conditional-with-polymorphism">замену условных операторов полиморфизмом</a>, чтобы окончательно избавиться от условных операторов, использующий закодированный тип.
42+
3043
7.en. When everything movable has been moved, use <a href="/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+
3145
7.uk. Коли усі потрібні дані будуть перенесені, використайте <a href="/replace-conditional-with-polymorphism">заміну умовних операторів поліморфізмом</a>, щоб остаточно позбавитися від умовних операторів, які використовують закодований тип.
3246

3347

@@ -86,7 +100,7 @@ class Employee {
86100
public $commission;
87101
public $bonus;
88102
public function payAmount() {
89-
return $type->payAmount($this);
103+
return $this->type->payAmount($this);
90104
}
91105
}
92106
@@ -424,7 +438,7 @@ Select body of "payAmount"
424438
#|en| After these actions, we can set up delegation from the <code>Employee</code> class.
425439
#|uk| Після цих дій ми можемо налаштувати делегування з класу <code>Employee</code>.
426440

427-
Print " return $type->payAmount($this);"
441+
Print " return $this->type->payAmount($this);"
428442

429443
#|ru| После этого займёмся перемещением кода в подклассы. Создадим методы <code>payAmount</code> в каждом из подклассов и переместим туда расчёты зарплат для соответствующих типов служащих.
430444
#|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

Comments
 (0)