今の時代はプロパティがあるからo.var = 2 とかくだけで、
内部的にはsetterを呼べるような定義ができるからね。

C#だとこんな感じか?

class Klass {
 int _var;
 public int var {
  get { return _var; }
  set { _var = value; }
 }
}

つまりこれはプロパティがない言語特有の回避策だよ。
プロパティがある言語では以下のどちらの書き方をしても、
関数が呼ばれる(ことがある)

1. o.set_var(2)
2. o.var = 2

本質的には、値の代入と関数呼び出すは、書き方が違うだけで同じもの。
そして本当にやりたいことは、2の書き方をした時でも、値チェックなどをやって
例外を出したいから、それができる仕組みが必要ってこと。

だからプロパティという仕組みで、2の書き方で関数呼び出しができる構文が作られた。
だけどJavaだけは、それがなかったので、全て関数で書きましょうというやり方が普及してしまった。
Javaでもプロパティという仕組みを作ればよかったのだが、言語仕様を変えずにコーディングルールにしてしまった。

変数直接代入するしかない言語では全部関数で書く。
プロパティがある言語では、値代入=関数呼び出しにできる。
直接の変数代入はやったらだめ。