When I'm learning Julia, I am always thinking what is the correct way to do
OOP in this language. It seems to me that what I learned in C++ does not
apply in Julia.
It took me long to realize that the equivalent of Class of C++ in Julia is
not Type, but Module. Module is the basic function unit in Julia.
Thus, a Class in Julia is like
module ClassName # class Name {
using # include<> // should be outside
import # include<>
export function # public function;
var = 1 # private static var;
end # }
This provides the same structure as C++.
However, this design has two issues:
1) The visit control is not as fine-grained as in C++, the encapsulation is
not strict;
2) Variables at the top level of a module are global variables.
These two points are closely correlated. If we let module have private
variables, then they are not too different from local variables, ans thus
can be type inferred.
I think this is a natural way to do OOP with Julia.