Aliasing in object-oriented programming: types, analysis and verification