Thing \. (Physical_thing \. (Animal \. (Dog instance: Diesel_the_dog The_most_famous_dog_named_Togo) (Human_being exclusion: Dog, \. (Man instance: Sean_Connery Brent_Spinner) //+ James_Bond ? (Woman exclusion: Man) (Human_person \. Natural|Physical_human-person_from_a_legal_aspect) ) ) ) (Person \. (Legal_person|entity exclusion: Natural|Physical_person_from_a_legal_aspect, instance: James_Bond __[author: pm] ) //pm: my choice; not Data_the_android when disconnected (Natural|Physical_person_from_a_legal_aspect \. Natural|Physical_human-person_from_a_legal_aspect ) (Human_person //+??? subtype: Human_cyborg Human_character Android_character, instance: James_Bond ) ) (Movie_character //exclusion: Physical_thing Person //not in the general case \. (Human_character instance: (James_Bond actor: Sean_Connery) ) (Android_character instance: (Data_the_android actor: Brent_Spinner) ) //+? exclusion: Human_character //e.g. a Human-cyborg_character ? (Dog_character instance: (The_character_of_the_most_famous_dog_named_Togo actor: Diesel_the_dog ) ) ).
Les RCs du 1er exemple ne sont donc pas correctes, et ne passent donc pas à l'échelle
→ elles ne sont donc pas à utiliser dans un(e) programme/BdD orienté(e)-objet,
→ simplement ajouter des types ou des instances ne corrigeraient pas le problème.
Voici une version FL de la modélisation demandée (dans cette version là, les quantificateurs sont dans les nœuds relations) :
Company employee _[any->1..*]: Employee; ///exact translation but it would be more correct and // complete to use: Company employee _[any->1..*; 0..*<-any]: (Employee \. Person_employee); Person \. Man Woman Employee; //exact translation but it would be more precise to assert that: // Person \. excl{Man Woman} Person_employee; // since an Employee is not necessarily a Person. //Note: "any Person may be a Man (or something else)" // <=> (∀p,m Person(p) => Man(m) ∨ Person_that_is_not_a_man(m)) // <=> (∀p,m Man(m) => Person(p)) <=> [Person \. Man] // Idem for the representation of "may be a Woman". Employee id _[any->1..*]: ID, photo _[any->1..*]: Photo; //exact translation; more completely: // Employee id _[any->1..*; 0..*<-any]: ID, photo _[any->1..*; 0..*<-any]: Photo;
Concernant la modélisation contenant au moins 4 problèmes conceptuels
(6 sont listés ci-dessous) :
array<Employee> employees;
array<Employee> a__oEmployee;
Collection<<Employee> employees;
Collection<Employee> a__oEmployee;
class Company { Employee *poEmployee; }
Employee oEmployee;
par
Relation_employee *rpRelation_employee;