В мире ООП «свойство» имеет довольно широкий смысл, и его конкретное значение зависит от контекста. Как правило, это атрибут сущности; Это может быть имя или возраст человека, цвет цветка, высота здания и т. д. Свойство имеет свое имя и свою ценность (например, flower.color = red
- здесь color
- это имя, а red
- это значение), значение может принадлежать разным типам (или классам): строка, число, человек, предприятие ... Оно может иметь постоянное значение (которое никогда не меняется в течение жизни владельца ( объект, которому он принадлежит)) или может иметь значение переменной, которое может быть изменено пользователем. В области программного обеспечения об этом можно говорить на концептуальном уровне анализа предметной области и разработки программного обеспечения; в этом случае людям обычно все равно, как именно это будет реализовано. Кроме того, его можно использовать на уровне конкретной реализации (программный код), и тогда средства для реализации этой концепции зависят от языка программирования.
Например, в Java
, когда мы говорим «свойство», мы обычно подразумеваем поле (переменную) объекта и пару методов (или один метод для свойств, доступных только для чтения), чтобы получить доступ к его значению (получатель и установщик) :
class Person {
private String name; // the field to hold the value
public Person(String name) { // Constructor
this.name = name // The name is given at the moment it's been born
}
public String getName() { return Name; } // getter
// No, name can't be changed after it's been born -- it's a read-only property, thus no setter
// public void setName(String name) { this.name = name; } // otherwise the setter would look like this
}
В этом случае пользователь может получить доступ к значению свойства с помощью следующего кода:
System.out.println(thisPerson.getName());
Другие языки (например, C#
) имеют средства для кодирования свойств более удобным способом:
class AnotherPersonType {
private string name // a field to hold the value
public string Name
{
get => name; // getter, the same as "return this.name;"
set => name = value; // setter, the same as "this.name = value;"
}
}
.....
anotherPerson.name = "John"; // It looks like an assignment,
// but in fact, the setter is invoked