Algorithmic skeletons are a well-known approach for implementing distributed applications. Declarative versions typically use higher- order functions in functional languages. We show here a different approach based on parameterized modules in Maude, that receive the operations needed to solve a concrete problem as a parameter. Architectures are conceived separately from the skeletons that are executed on top of them. The object-oriented methodology followed facilitates nesting of skeletons and the combination of architectures. Maude analysis tools allow to check properties of the applications built by instantiating a skeleton at different abstraction levels.