Shared Abstract Data Types: an Algebraic Methodology for their Specification