Advanced Object oriented programming assignment