Utilisation des espaces de noms et des modificateurs d'accès
Règles pour le modificateur d'accès
• Les entités avec modificateur d'accès Aucun sont accessibles à partir de toutes les autres entités.
• Les entités privées ne sont accessibles que depuis leurs propres projets.
• Les entités restreintes ne sont accessibles qu'à partir du même projet et des espaces de noms autorisés.
• Les caractéristiques avec modificateur d'accès Aucun sur une entité ayant également pour modificateur d'accès Aucun sont accessibles à partir de toutes les autres entités.
• Les caractéristiques avec modificateur d'accès Aucun sur une entité restreinte sont accessibles uniquement à partir des espaces de noms autorisés.
• Les caractéristiques avec modificateur d'accès Aucun sur une entité privée sont accessibles uniquement à partir du projet dans lequel elles sont définies.
• Les caractéristiques restreintes ne sont accessibles qu'à partir du même projet et des espaces de noms autorisés.
• Les caractéristiques privées ne sont accessibles qu'à partir du projet dans lequel elles sont définies.
• Si une entité est définie sur PRIVE, ses caractéristiques ne peuvent pas avoir une étendue RESTREINT.
• Les caractéristiques internes ne sont accessibles qu'à partir de l'entité à laquelle appartient la caractéristique.
• Lorsqu'une entité ou une caractéristique est créée, elle hérite de l'étendue de son parent.
• Voici les modificateurs d'accès classés dans l'ordre de leur étendue.
Aucune >> Restreinte >> Privée >> Interne
◦ Aucune est plus large que Restreinte, Privée et Interne.
◦ Restreinte est plus large que Privée et Interne.
◦ Privée est plus large qu'Interne.
◦ Le modificateur d'accès Interne est le plus restreint.
Exemples
• Si [P2#Solution].[T2#Thing] essaye d'appeler [P1[n1.n2.n3]#Component].[T1#Thing], l'autorisation sera donnée, car si une entité ou une caractéristique est définie sur PUBLIC au sein d'un projet, avec ou sans espace de noms, elle peut être appelée/utilisée par toute autre entité ou caractéristique du même projet ou d'un projet avec un espace de noms différent.
• Si [P2[n4.n5.n6]#BuildingBlock].[T2#Thing] essaye d'appeler [P1[n1.n2.n3]#Component].[T1#Thing], l'autorisation sera donnée, car si une entité ou une caractéristique est définie sur PUBLIC au sein d'un projet, avec ou sans espace de noms, elle peut être appelée.
• Si [P2#Solution].[TT2#ThingTemplate] essaye d'appeler [P1[n1.n2.n3]#Component].[TT1{PRIVATE}#ThingTemplate], l'autorisation ne sera pas donnée, car si une entité ou une caractéristique est définie sur PRIVATE au sein d'un projet, avec ou sans espace de noms, elle peut être appelée/utilisée par toute autre entité ou caractéristique du même projet uniquement.
• Si [P2[n4.n5.n6]#BuildingBlock].[TS2#ThingShape] essaye d'appeler [P1[n1.n2.n3]#Component].[TS1{PRIVATE}#ThingShape], l'autorisation ne sera pas donnée, car si une entité ou une caractéristique est définie sur PRIVATE au sein d'un projet, avec ou sans espace de noms, elle peut être appelée/utilisée par toute autre entité ou caractéristique du même projet uniquement.
• Si [P1[n1.n2.n3]#Component].[T2{PRIVATE}#Thing].[S1#Service] essaye d'appeler [P1[n1.n2.n3]#Component].[TT1{PRIVATE}#ThingTemplate], l'autorisation sera donnée, car l'entité peut être appelée/utilisée par toute autre entité ou caractéristique au sein du même projet uniquement.
• Si [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate].[Prop2{PRIVATE}#Property] essaye d'appeler [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{RESTRICTED[n1.n2]}#Service], l'autorisation ne sera pas donnée, car les caractéristiques avec un modificateur d'accès PUBLIC sur une entité définie sur RESTREINT ne sont accessibles qu'à partir des espaces de noms autorisés.
• Si [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate] essaye d'appeler [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing], l'autorisation ne sera pas donnée, car les caractéristiques et entités restreintes ne sont accessibles qu'à partir du même projet et les espaces de noms autorisés.
• Si [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing] essaye d'appeler [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate], l'autorisation sera donnée, car l'entité ou la caractéristique avec l'étendue Aucune (PUBLIC) est accessible à tout le monde.
• Si P1[n1.n2.n3]#BuildingBlock].[T2{RESTRICTED[n1.n2]}#Thing].[Prop2{RESTRICTED[n1.n2]}#Property] essaye d'appeler [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{INTERNAL}#Service], l'autorisation ne sera pas donnée, car les caractéristiques internes ne sont accessibles qu'à partir de l'entité à laquelle appartient la caractéristique.
• Si [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[Prop1{PRIVATE}#Property] essaye d'appeler [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{INTERNAL}#Service], l'autorisation sera donnée, car les caractéristiques internes ne sont accessibles qu'à partir de l'entité à laquelle appartient la caractéristique.