Публичные методы Smalltalk против частных / защищенных методов

Я заметил, что язык Smalltalk не имеет понятия частных / защищенных методов. Все методы являются публичными. Исходя из фона Java/C++, я считал это фундаментальным недостатком языка, поскольку любое приложение, созданное в Smalltalk, было бы полностью открыто для манипуляций. Я полагаю, вы могли бы полагаться на соглашения об именах для документирования общедоступного API и префиксных методов для обозначения их как приватных (я считаю, что это делает Squeak), но он все еще полностью открыт.

Есть ли какие-либо преимущества этого подхода по сравнению с наличием явных модификаторов доступа для управления доступом к вызовам методов?

4 ответа

Решение

Действительно, способ Smalltalk состоит в том, чтобы поместить частные методы в категорию "private". Это указывает на то, что вы не должны использовать эти методы, но, конечно, это не применяется.

Это по замыслу - это особенность, а не ошибка. Smalltalk изначально разрабатывался как открытая система.

Некоторые преимущества:

  • Если мне просто нужно - может быть, разработчик библиотеки не предвидел необходимости раскрывать какую-то конкретную вещь, которую я просто должен иметь - я все равно могу вызывать эти частные методы. Очевидно, это не то, что нужно делать легко: скорее, разумно, осторожно, зная, что это тактическое решение.
  • Простота языка.
  • (Согласно комментарию Александра Жасмина) Smalltalk не делает различий между тем, что вы, программист, можете делать, и тем, что может делать язык / среда. Это означает, что Smalltalk-the-image предоставляет все, что вам нужно для создания собственных инспекторов / отладчиков / чего угодно, без необходимости поставлять специальные инструменты, использующие методы "мы можем делать это, но вы не можете".

Частные и защищенные методы на самом деле являются существенным недостатком таких языков, как C++, java и C#. Они в основном говорят своим пользователям: я не хочу учиться и развиваться. Следствием этого (и гораздо более раннего связывания) является то, что эти языки требуют гораздо больше BDUF и, следовательно, гораздо менее пригодны для современного (гибкого) процесса разработки.

Первый вопрос: что такое модификаторы частного / защищенного доступа? По сути, речь идет не о безопасности. Речь идет о предоставлении правильного интерфейса для пользователя. Исходя из этого, нет особой разницы между наличием защищенных / закрытых категорий и языковой конструкции специально для этого.

Я бы даже сказал, что наличие частного / защищенного модификатора видимости усложняет проблему, чем решает ее на самом деле.

Кроме того, я не думаю, что частная / защищенная видимость является хорошим ответом на эту проблему.

По крайней мере, у Smalltalk должно быть текстовое соглашение о том, что имена методов, начинающиеся с "подчеркивания", можно вызывать вне самих объектов. К сожалению, я не думаю, что "подчеркивание" допускается в качестве первого символа имени метода.

Другие вопросы по тегам