This is an old revision of the document!
La pregunta del millón es: “¿Qué es OSGi?” La respuesta más simple a esta pregunta es que se trata de una capa de modularidad para la plataforma Java. Por supuesto, la siguiente pregunta que podría surgir es: “¿Qué se entiende por modularidad?” Aquí usamos modularidad en el sentido tradicional, donde el código de la aplicación de software se divide en partes lógicas que representan intereses separados.
Aunque Java ofrece una serie adecuada de modificadores de acceso para controlar la visibilidad (por ejemplo, public
, protected
, private
y el acceso por paquete), estos tienden a abordar la encapsulación orientada a objetos a nivel bajo y no abordan realmente la partición lógica del sistema. Java cuenta con el concepto de paquete, que se utiliza típicamente para organizar el código. Para que el código sea visible desde un paquete Java hacia otro, debe declararse como public (o protected si se usa herencia). A veces, la estructura lógica de una aplicación requiere que cierto código pertenezca a diferentes paquetes, pero esto significa que cualquier dependencia entre los paquetes debe ser expuesta como public, lo cual lo hace accesible para cualquier otro. Con frecuencia, esto puede exponer detalles de la implementación, lo que dificulta la evolución futura, ya que otros usuarios pueden llegar a depender de su API que no está destinada a ser pública.
Considere el siguiente ejemplo:
// #1 package org.foo.hello; public interface Greeting { void sayHello(); }
// #2 package org.foo.hello.impl; import org.foo.hello.Greeting; public class GreetingImpl implements Greeting { final String m_name; public GreetingImpl(String name) { m_name = name; } public void sayHello() { System.out.println("Hello, " + m_name + "!"); } }
// #3 package org.foo.hello.main; importimportorg.foo.hello.Greeting; org.foo.hello.impl.GreetingImpl; public class Main { public static void main(String[] args) { Greeting greet = new GreetingImpl(“Hello World”); greet.sayHello(); } }