Abstract : This document presents a method to automatically derive programs in an imperative language from algebraic specifications. The imperative language is a standard one i.e. programs contain declarations of variables (the state) and sequence of statements which modify the program state. A characteristic feature is the destructive assignment of a value to a variable. An algebraic specification is composed of sorts, constructors which define the set of the possible values (which can be denoted), and operators which are axiomatized using conditional rewrite rules. An implementation link is defined between the objects of the algebraic specification domain, called the abstract domain, and the imperative program domain, called the concrete domain. The formalization of this implementation link allows one to parametrize the derivation of a specification. The implementation of the operators respects the form of the derivation and the contraints of the imported library. It also solves the access conflicts to the variables, and minimizes the cost involved by the duplications generated by the transformation from the functional to the imperative style. Similarly, we define an implementation link, called abstract link. It maps sorts to sorts and constructors to constructors from an algebraic specifications to another one. We propose two kinds of derivation for the constructors : either we use a systematic derivation to an imperative data type, or we compute all the possible abstract implementation links to the sorts whose implementations can be re-used. Finally, a method which enhances the partial modifications of the data is proposed. It relies upon the same principles as the ones developed previously.