Aroma simplifies the task of parallelizing large applications on multicomputers by providing applications with a shared object space. Aroma supports both traditional monolithic objects and aggregate object that can be partitioned across multiple nodes. Aggregate objects support data parallelism efficiently. An Aroma program consists of tasks that operate on shared objects. Tasks typically execute on the node on which their input data is located, thus minimizing communication. Shared data objects have synchronization properties associated with them, making it possible to parallelize a large class of applications without using explicit locks and condition variables. In this paper, we present and justify the Aroma language features, and give examples of Aroma programs. Aroma has been implemented on the Nectar multicompnter and we give performance results for several applications.