Session and Union Types for Object Oriented Programming