Как использовать переменные класса? - PullRequest
0 голосов
/ 01 июля 2018

Простой вопрос. Если у меня есть класс A с методами m1 и m2 . Это хорошая практика, что m1 меняет состояние A . И затем, когда вызывается m2 , он полагается на состояние A , которое изменяется на m1 . Другими словами, если м2 зависит от вызова m1 до вызова м2 . m1 и m2 являются частными. По-другому это О.К. для частных методов рассматривать состояние объекта как разделяемую память? Проблема возникает, когда они вызваны не по порядку. Но с преимуществом не нужно копировать аргументы. Любой совет?

1 Ответ

0 голосов
/ 01 июля 2018

Ваше описание не очень хороший дизайн.

Переменные класса должны иметь инварианты класса, которые являются истинными до и после любого (и всех) вызовов метода. Порядок звонков не должен иметь значения. То, как вы описали это, звучит так, что будут случаи, когда это не будет верно, например, если m1 еще не вызывается и m2 - это.

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

Мой совет: вы должны указать (явно как комментарии) эти инварианты, а затем рассуждать о том, как вы оставляете их истинными (единственный раз, когда они могут быть ложными, это во время вызова метода). Это может помочь вам меньше зависеть от порядка звонков.

Это может привести к слиянию некоторого кода из методов или сделать m2 вспомогательной функцией, которая вызывается из m1 , но не вызывается извне.

...