module encap_protec_attrib;

// ***** public by default ******
// => can be both accessed and modified
struct Person {
	string name;	// or => public string name;
	int age;
}

// ****** private members ****** 
// => cannot be modified, but can be accessed through get... functions
struct Person2 {
	private string name;
	private int age;

	string getName() {
		return name;
	}

	int getAge() {
		return age;
	}
}

// specifying protection attributes at a modular level
private void foo() { /* or struct/class/etc */ }

// ****** package protection attribute ******
// animal.cat contains: package void foo() { ... }
// it can be accessed in any other module inside the animal package

// ****** protected members ****** 
// => can be accessed by the module that defines it and by any class that inherits from it
class Person3 {
	string name;
	int age;

	protected int id;

	// this(...) { ... }
	// ...
}



// ****** defining protection attribtes ****** 

// 1) java style
private void hello() { }

// 2) c++ style
public:
	void hello() { }
	// ....

// 3) block style
protected {
	void hello() { }	
}