An approach to object semantics based on terminal co-algebras