Object-oriented programming theory