Object-oriented Programming Fundamentals