@oop_ru

Страница 12 из 785
Sergey
06.12.2016
20:59:55
тут как раз подходы в духе "наследуй воруй убивай" работают только в путь

тот же Yii как пример)

а если требования меняются часто? Или ты понятия не имеешь на данный момент что на что влияет, то нужно вводить избыточность, дробление (декомпозиция если по другому)

что бы минимизировать риски

Google
Aleh
06.12.2016
21:00:59
тут как раз подходы в духе "наследуй воруй убивай" работают только в путь
ну если требований так много, что все за раз в голову не влазят, то тут все-таки не покатит. Потому что по сути изменения требований здесь что-то аналогичное прочтению следующего тома документации)

Sergey
06.12.2016
21:01:08
короч

декомпозиция

разделение обязанностей

управление связанностью

все ради этого

иногда можно и понаследовать, никто ж не говорит что это всегоа плохо, это не нужно просто

маленькую

У тебя есть классы Human, Student, Teacher.

опиши как сделать так, что бы можно было сделать студента Васю и учителя Марью Ивановну

da horsie
06.12.2016
21:05:12
new Human('Вася', new Strategy\Student());

Sergey
06.12.2016
21:05:38
да блин

Google
Sergey
06.12.2016
21:05:42
ты все сломал

Aleh
06.12.2016
21:06:02
он знал))

Sergey
06.12.2016
21:06:17
я ж хотел что бы он наследование замутил(

da horsie
06.12.2016
21:06:22
я предположил

Sergey
06.12.2016
21:06:30
что бы я потом "а теперь сделай что бы Марья отчислила Васю и тот стал солдатом"

или "а теперь перенесемся в 41-ый век и преподавать будет робот"

da horsie
06.12.2016
21:07:15
$vasya->setStrategy(new Strategy\Soldier());

Aleh
06.12.2016
21:07:23
фу, setter

da horsie
06.12.2016
21:07:42
нуканука

а как надо?

Sergey
06.12.2016
21:09:09
хз)

changeRole

хотя бы

а то стратегии какие-то

"студент" это не стратегия, это по сути состояние души)

da horsie
06.12.2016
21:10:08
ну setRole()

setBehavior()

Sergey
06.12.2016
21:10:16
почему setRole?

почему не changeRole?

da horsie
06.12.2016
21:10:31
что значит change?

Google
da horsie
06.12.2016
21:10:44
в чем отличие от set?

Aleh
06.12.2016
21:10:55
$vasya->expell();

Sergey
06.12.2016
21:10:57
`As a teacher, I want to deduct student from course in order to punish him"

$colonel->summon($vasia)

Aleh
06.12.2016
21:11:21
$teacher->expell($vasya); хотя скорее так

da horsie
06.12.2016
21:11:47
$colonel->summon($vasia)
ну а внутри summon-то что будет?

Sergey
06.12.2016
21:11:47
а да, expell

da horsie
06.12.2016
21:11:53
там и будет setRole

Aleh
06.12.2016
21:12:03
deduct вроде про налоги, я тож сначала подумал так написать)

не

там просто $vasya->role = null;

они ж одного класса

ну или приватный метод какой-нибудь

da horsie
06.12.2016
21:13:00
Aleh
06.12.2016
21:13:04
private

само собой

Sergey
06.12.2016
21:13:23
паблик фуу
объекты одного типа имеют доступ к приватному состоянию друг друга

da horsie
06.12.2016
21:13:34
а кто у нас одного типа?

Aleh
06.12.2016
21:13:36
никаких public(только редко в дто) и никогда protected(никогда как наследование)

Google
da horsie
06.12.2016
21:13:52
Humans
у нас же роботы

Sergey
06.12.2016
21:14:00
но вообще метод expell должен быть у Teacher

da horsie
06.12.2016
21:14:31
метод expell должен быть у SchoolClass

Aleh
06.12.2016
21:14:36
у нас же роботы
тогда с общим интерфейсом

Sergey
06.12.2016
21:14:39
хз, у меня сейчас у класса User есть методы becameMerchant(MerchantAccountMaker $maker) и т.д.

Aleh
06.12.2016
21:14:42
метод expell должен быть у SchoolClass
ну вообще да, но у нас просто его нет

da horsie
06.12.2016
21:14:44
или у StudentGroup

тогда с общим интерфейсом
общий интерфейс не дает видеть не публичные члены

Sergey
06.12.2016
21:15:28
не дает да

в целом хороший вопрос... дай подумать

Aleh
06.12.2016
21:16:01
ну да, потому что у интерфейса его нет. becameExpelled()

тогда будет)

ну или leaveUniversity хз

Sergey
06.12.2016
21:17:06
хм...

погоди

а разве студент что-то знает об университете?

Aleh
06.12.2016
21:17:33
а знает?

Sergey
06.12.2016
21:17:39
нет

Aleh
06.12.2016
21:17:44
тогда не будет)

Sergey
06.12.2016
21:17:46
и отчисляет не преподаватель, а деканат

Google
da horsie
06.12.2016
21:17:53
класс знает о студенте

деканат тоже знает

Aleh
06.12.2016
21:18:07
вообще как @f3ath предложил, school некий

отчисляет

da horsie
06.12.2016
21:18:33
метод $school->expell($vasya) вызывется изнутри деканата

так же как до этого вызвался $school->enroll($vasya)

Aleh
06.12.2016
21:19:06
вообще, решение об отчислении принимает school, но как к этому привязан учитель?

он должен что-то сказать school о student

Sergey
06.12.2016
21:19:20
учитель подает запрос на отчисление

Aleh
06.12.2016
21:19:20
что именно?

failedExam?

Sergey
06.12.2016
21:19:30
ну или да

скорее так

3 зафэйленных экзамена - отчислен

Aleh
06.12.2016
21:19:43
$teacher->markAsFailed($exam, $vasya);

Артур Евгеньевич
06.12.2016
21:19:56
Ебать у вас тут дискуссия

Вы что профессора?

Sergey
06.12.2016
21:20:16
почему варнинг?

Aleh
06.12.2016
21:20:20
ну а чего вдруг school ворнинг делает

почему варнинг?
это из-за разных стратегий деканата)

они бывают мямли

Страница 12 из 785