Implementación y Sincronización de Objetos Separate en Java M. Katrib, E. Pimentel, J.L.Pastrana mkm@matcom.uh.cu , (ernesto, pastrana)@lcc.uma.es Facultad de Matemática y Computación. Universidad de la Habana E.T.S.I.Informática. Universidad de Málaga Abstract. El siguiente trabajo, enmarcado en el contexto de objetos y componentes, presenta una propuesta para la implementación y sincronización de objetos separate en Java basada en la metáfora de Diseño por Contrato, introducida por Meyer. A lo largo del mismo se expondrán las características de la propuesta, así como determinados detalles de implementación y su posible aplicación en lenguajes de definición de interfaces (IDL) para permitir el desarrollo de componentes más robustos, correctos y tolerantes a fallos. 1 Introducción Muchos de los sistemas software que se desarrollan hoy en día, están basados en el paradigma de la orientación a objetos y son intrínsecamente distribuidos, por lo tanto, podemos ver nuestro sistema como un conjunto de objetos que cooperan e interactúan entre sí para lograr un objetivo común. Las tendencias actuales en la ingeniería del software se basan en la construcción de software mediante la integración de objetos y/o componentes. Meyer en su libro Construcción de Software Orientado a Objetos presenta la metáfora de Diseño por Contrato[1] como una metodología para el desarrollo de software orientado a objetos. Dicha metáfora se basa en considerar un sistema como una colección de componentes que colaboran del mismo modo en que lo hacen los negocios que tienen éxito: respetando unos contratos que definen explícitamente las obligaciones y beneficios que incumben a cada una de las partes. La idea central de este trabajo consiste en el uso de la metáfora del contrato para la integración y sincronización de objetos y/o componentes que se encuentren en diferentes procesadores lógicos y a los que llamaremos objetos separate[1]. Los términos en que se establecerán los contratos serán expresados mediante asertos de tres tipos: precondiciones, postcondiciones e invariantes. Cada método ofrecido por una clase y ejecutado a través de sus objetos exige el cumplimiento de una condición (precondición) por parte del cliente y a cambio garantiza una condición (postcondición) que se cumplirá al terminar la ejecución del servicio. Además de estos “contratos particulares” entre cada servicio de la clase proveedora y la clase cliente, la clase proveedora asegura un invariante o condición que será satisfecha por los objetos de la clase proveedora cada vez que se relacionen con la clase cliente.