Хотя я согласен с тем, что вы можете начать с наименьших привилегий и перемещать вещи в видимость, когда это необходимо, это только потому, что в конечном итоге это приводит к правильному объектно-ориентированному дизайну без необходимости слишком много думать о том, является ли член класса реальной бизнес-функцией, которая должны быть выставлены.
Вы должны инкапсулировать и скрыть как можно больше сложностей внутри объекта, чтобы внешний интерфейс был как можно более минималистичным. Один из способов добиться этого — добавлять или отображать свойства только по мере необходимости.
Если вам не нужен внешний доступ к определенному члену класса, возможно, это просто артефакт реализации, который не соответствует фактическому использованию класса в бизнесе. Поэтому его сложность должна быть скрыта.
В этом случае, поскольку TBar наследуется от TFoo, Protected является допустимым уровнем видимости, поскольку он зарезервирован для унаследованных классов. Кроме того, поскольку TBar унаследован от TFoo, возможно, вы думаете, что он должен иметь некоторые дополнительные привилегии для внутренней работы TFoo, потому что, в конце концов, это его дочерний класс. Почему мы должны относить TBar к такому же низкому уровню доступа, как и другие классы?
Ответ зависит от того, является ли FList фактическим членом класса TFoo, поскольку мы рассматриваем то, что представляет собой модель TFoo, или это просто деталь реализации. Кроме того, какой уровень доступа требуется? Мы просто обращаемся к нему или меняем реализацию?
Я предполагаю, что вам не нужен доступ к FList, и вы не меняете реализацию, и в этом случае, даже если бы два класса были в одном и том же модуле, я бы все равно сделал FList Private вместо Protected.
Если бы вы просто обращались к члену класса из классов-потомков в том же блоке, я бы все равно оставил его закрытым.
Однако, если бы FList был чем-то, что вам нужно переопределить в TBar (вероятно, нет, поскольку это не метод), или был разработан как нечто, что унаследованные классы должны или будут переопределять, независимо от того, находится ли он в том же модуле или нет, тогда вы бы хотите сделать его защищенным.
Вам также потребуется повысить видимость до Protected, если вам нужно получить доступ к FList из классов-потомков за пределами того же модуля.
person
Marcus Adams
schedule
17.01.2012
private
или дажеstrict private
, а когда это становится слишком ограничивающим, вы можете ослабить ограничения по мере необходимости. - person David Heffernan   schedule 17.01.2012strict protected
? Классы находятся в разных подразделениях. - person Jens Mühlenhoff   schedule 17.01.2012TBar
полный контроль над унаследованнымFList
? - person OnTheFly   schedule 17.01.2012FList
. - person Jens Mühlenhoff   schedule 17.01.2012