Существуют ли какие-либо языки программирования, обеспечивающие контроль / защиту доступа на уровне объекта? - PullRequest
1 голос
/ 23 декабря 2009
public class ProtectedClass {
    private String name;
    public static void changeName(ProtectedClass pc, String newName) {
        pc.name = newName;
    }
    public ProtectedClass(String s) { name = s; }
    public String toString() { return name; }
    public static void main(String[] args) {
        ProtectedClass 
            pc1 = new ProtectedClass("object1"),
            pc2 = new ProtectedClass("object2");
        pc2.changeName(pc1, "new string"); // expect ERROR/EXCEPTION
        System.out.println(pc1);
    }
} ///:~

Учитывая приведенный выше исходный код Java, можно легко сделать вывод, что язык программирования Java может обеспечивать только контроль / защиту доступа на уровне класса. Существуют ли какие-либо языки программирования, обеспечивающие контроль / защиту доступа на уровне объекта?

спасибо.

P.S: Эта проблема вытекает из этого вопроса Java: Почему метод базового класса может вызывать несуществующий метод? Я хочу выразить признательность TofuBeer .

1 Ответ

5 голосов
/ 23 декабря 2009

Scala имеет частный объект область действия:

class A(){
    private[this] val id = 1
    def x(other : A) = other.id == id
}

<console>:6: error: value id is not a member of A
           def x(other : A) = other.id == id

Он компилируется, если вы измените видимость на приватное:

class A(){
    private val id = 1
    def x(other : A) = other.id == id
}
...