JavaBeans: What's the difference between an attribute and a property?

attributes, java, javabeans, properties

Solution

Examples

Property and attribute are equivalent

private int age;

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

Property `age` translates to `personAge` attribute

private int personAge;

public int getAge() {
    return personAge;
}

public void setAge(int age) {
    this.personAge = age;
}

Property is synthesized, there is no attribute

In this case the property is read-only:

private int age;
private Sex sex;

public boolean isFemaleAdult() {
    return sex == Sex.FEMALE && age >= 18
}

I found few intereseting hints in Tapestry documentation:

A property is not the same as an attribute ... though, most often, each property is backed up by an attribute.

and later:

Another common pattern is a synthesized property. Here, there is no real attribute at all, the value is always computed on the fly.

Problem

In the JavaBean section of my revision list it states that I should know "the difference between an attribute and a property". I can't really find a difference between the two. I'm aware that JavaBeans use properties and normal Java classes use attributes (or at least that's what I was taught to call them) but I can't see a real difference. Is it to do with getter/setter methods? Thanks

Original source