Apply proper OO concept, method naming and refactor

Based on the suggestions of jasim, refactor the classes, methods with
proper naming. One thing learnt was:

"One of the more universal, yet simple rules is: Function names should be
verbs if the function changes the state of the program, and nouns if
they're used to return a certain value."