Improving Object-Oriented Programming by Integrating Language Features to Support Immutability