Пример механизма сокрытия в Squeak, похожий на C ++ - PullRequest
0 голосов
/ 02 июля 2019

Мне было интересно, возможно ли реализовать механизм Hiding в Squeak, похожий на тот, который существует в таких языках, как C ++ и C #, где это одна из основных функций. Я знаю, что могу переопределить методы в Squeak и не могу перегрузить методы, потому что это динамические языки, но возможно ли скрыть методы / поля? Я пытался копаться в журналах Squeak, но я не мог найти ответ. Если можно добиться сокрытия в Squeak, я был бы рад увидеть пример. Если это возможно, в чем может быть причина? Может быть, какое-то значение ООП, которое это запрещает?

Ответы [ 2 ]

4 голосов
/ 03 июля 2019

Хотя нет явного синтаксиса, который запрещает вызов super, если вы не вызываете super из переопределения метода, тогда унаследованная реализация фактически скрыта.И нет, вы не можете помешать подклассу иметь доступ к переменным экземпляра суперкласса.

0 голосов
/ 06 июля 2019

Пожалуйста, прочитайте сначала @ JamesFoster's answer.

Должно быть относительно легко добавить поддержку для запрета super.Так как super не всегда допустим или, по крайней мере, не должно быть, когда суперкласс равен nil (например, ProtoObject), компилятор должен где-то проверить это условие, прежде чем разрешить super в качестве допустимой псевдопеременной.,Тогда нужно было бы настроить эту проверку, спросив класс, поддерживает ли он super или нет (а не является ли его суперкласс nil).

Я пробовал в Pharo и нетпроверить на всех (это означает, что вы можете отправить на super в ProtoObject).Таким образом, модификация компилятора Pharo может быть немного сложнее.

...