Я предполагаю, что он имеет в виду, что контракт является королем - только потому, что метод в вашем классе является общедоступным, не дает клиентам права предполагать, что они могут вызвать его, или что они знают, что он делает, или что он будет там в следующей версии. API не определяются источником, они определяются контрактом, обычно в форме документации.
Ответственность за то, чтобы не вызывать недокументированные (неопубликованные) функции, лежит на клиенте, а исполнитель не должен скрывать методы, которые не должны вызываться.
Некоторые люди могут не согласиться с этим - как правило, те, кто не доверяет документации, и предпочитают узнать, как все работает, посмотрев на источник, чтобы увидеть, что на самом деле делает , а не то, что автор утверждает, что это делает. Они вполне могут иметь смысл, особенно на практике при работе с недокументированным кодом. Но я думаю, что это противоречит тому, что говорит Фаулер, о том, что функциональность должна быть формально определена, а не выведена из рассмотрения конкретной реализации.