Concepts in Object Orientated Programming