2010-04-17 23 views
6

Estoy tratando de comprender conceptos básicos de ontología. He aquí un ejemplo:Clases/instancias en Ontología

  • coche (clase)
  • 2009 VW CC (? Subclase o instancia)
  • de mi vecino 2009 VW CC (instancia)

Mi problema es la comprensión qué es "2009 VW CC" (como modelo de automóvil). Si está haciendo que el modelo de producto sea una subclase en la ontología, de repente su ontología se hincha con miles de subclases de un "automóvil". Eso es redundante. Al mismo tiempo, no podemos decir que "2009 VW CC" es una instancia, al menos no es una instancia material de una clase.

¿Tiene sentido distinguir entre instancias regulares y material (objetos físicos distintos)?

Por otro lado, si ambas son instancias (de naturaleza diferente por así decir), ¿cómo puede la instancia heredar propiedades/relaciones de una clase no?

Respuesta

5

Odio decir que depende, pero depende.

Si necesita modelar todos los automóviles del mundo, y tiene métodos que puede usar para llamarlos (como "cambiar neumáticos", que es un proceso muy diferente para cada modelo), entonces sí, va a ir tener muchas clases infladas, porque tu situación en el mundo real también está hinchada.

Si solo desea tener una base de datos de imágenes de automóviles arquetípicos, y no importa si es una imagen de la instancia de su vecino o de su hermana, puede soltar la capa inferior. "2009 VW CC" bien podría ser una instancia, aunque puede visualizar que también es una clase en otro modelo.

Alternativamente, tal vez no es necesario que sea una verdadera subclase en absoluto. Una simple referencia podría ser suficiente. Por ejemplo, una compañía de seguros sabe acerca de una gran lista de modelos de automóviles y años, pero los desarrolladores no escriben una subclase para cada uno. En cambio, tienen una base de datos de modelos de automóviles, donde una fila puede representar 2009 VW CC. Cuando asegura su automóvil, crean una instancia de "Coche asegurado" con una referencia a la instancia "2009 VW CC".

Esto no sigue estrictamente la frase "Usar herencia para una 'es-una' relación ', pero las operaciones en todos los tipos de autos son idénticas; solo cambian los parámetros (por ejemplo, el precio del seguro). y los modelos de automóviles nuevos se registran en la base de datos, no en el código.

Una suposición aquí es que puede modelar las diferencias entre los modelos de diferencia como meramente parámetros de los mismos métodos en el automóvil.

(Aparte: cuando el iPhone comenzó a estar disponible a través de los sitios web de las compañías telefónicas, noté que rompía sus modelos de clase, sus sitios web parecían manejar docenas de marcas y modelos de teléfono en una página, presumiblemente usando un simple base de datos de teléfonos y sus características, y luego necesitaba una página especial para manejar los modelos de iPhone, presumiblemente porque se requerían nuevos métodos especiales en sus clases para respaldar algunos aspectos de la venta del iPhone. Los departamentos de ventas automatizados decían "Presione 1 para comprar un teléfono . Presione 2 para comprar un iPhone. ")

+0

No tengo la intención de modelar todas las instancias de un automóvil (o cualquier producto para el caso), pero quiero proporcionar una manera de hacerlo en mi aplicación. Por ejemplo, si un producto se lanza en una edición limitada, o es lo suficientemente único/personalizado. –

+0

Entonces tal vez sea apropiado un modelo híbrido. Standard_Car hereda de Car y tiene una referencia a una base de datos de diferentes modelos que admite. Custom_Car hereda de Car y tiene subclases para cada tipo de automóvil, lo suficientemente diferentes e importantes como para pasar por el costoso paso de modelar en el código. El automóvil de su vecino puede ser una instancia de Standard_Car o una de las subclases personalizadas de Car, dependiendo de su novedad. – Oddthinking

1

Lo tienes al revés.

2009 VW CC hereda de la clase car. Por lo tanto, 2009 VW CC necesita saber acerca de car, pero car no necesita saber acerca de 2009 VW CC. Aunque ocasionalmente usamos el término "subclase" en realidad, car no sabe nada sobre ninguna de sus subclases.

Lo que es más interesante es si se tiene en cuenta herencia de prototipos (como en javascript), donde los objetos heredan directamente de otros objetos (imaginar si su 2009 VW CC heredaron los aspectos de la de su vecino 2009 VW CC). En realidad, cómo se implementa esto es que los objetos nuevos tienen un puntero secreto hacia el objeto desde el que heredaron. Si piensas en este puntero secreto, puedes ver cómo el objeto de origen no se hincha.

Ahora, si está sugiriendo que la herencia múltiple y los árboles genealógicos largos pueden llevar a estructuras confusas, entonces estaría de acuerdo con usted.

+0

Estoy de acuerdo con su segundo párrafo, pero no puedo ver dónde SODA no está de acuerdo o lo hace al revés. Ni siquiera veo dónde está sugiriendo herencia múltiple o árboles familiares largos. Parece preocupado por un árbol familiar WIDE, debajo del auto. – Oddthinking

+0

Él está pensando que la clase necesita saber la subclase. Esto es al revés Solo la subclase necesita saber acerca de la clase. – tzenes

+0

Gracias, estas son excelentes ideas. Entonces, parece que en la vida real, si mantenemos nuestra estructura manejable, podemos decir que los productos (en el sentido de los modelos de productos) son todas las instancias, que pueden tener incluso instancias más concretas con propiedades incluso más específicas. –

0

Estoy realmente de acuerdo con Oddthinking. Además, si necesita modelos de vehículos como clases, "de repente su ontología se hincha con miles de subclases de un automóvil", en realidad no es un problema. ¿Por qué debería ser? Usted simplemente define clases en lugar de individuos, puede tener una ontología 'abstracta', con clases base, y una ontología 'concreta', con clases que representen la situación particular en el mundo real. Esto no es OOP, la definición de miles de clases que son realmente algo intermedio entre las instancias y las clases no es gran cosa, al menos conceptualmente, nadie considera esto 'hinchado' o extraño de ninguna otra manera. De hecho, lo hacen todo el tiempo en mi campo (ciencias de la vida, donde normalmente no nos importan las proteínas P53 en nuestro cuerpo, por lo que P53 es una clase, aunque también se usa para modelar un registro en una base de datos relacional) .

Excepto, bueno, mi experiencia es que herramientas como Virtuoso parecen optimizadas para la situación de pocas clases y muchas instancias. De hecho, he observado mejoras de rendimiento significativas cuando convertí millones de clases en Virtuoso en instancias. Entonces, bueno, es complicado ...

Cuestiones relacionadas