Utilizzo di namespace e modificatori di accesso
Regole per il modificatore di accesso
• Le entità con modificatore di accesso Nessuno sono accessibili da tutte le altre entità.
• Le entità private sono accessibili solo dai progetti di appartenenza.
• Le entità limitate sono accessibili solo dallo stesso progetto e dai namespace consentiti.
• Le caratteristiche con modificatore di accesso Nessuno per un'entità con modificatore di accesso Nessuno sono accessibili da tutte le altre entità.
• Le caratteristiche con modificatore di accesso Nessuno per un'entità con ambito Limitato sono accessibili solo dai namespace consentiti.
• Le caratteristiche con modificatore di accesso Nessuno per un'entità con ambito Privato sono accessibili solo dal progetto in cui sono definite.
• Le caratteristiche con ambito limitato sono accessibili solo dallo stesso progetto e dai namespace consentiti.
• Le caratteristiche con ambito Privato sono accessibili solo dal progetto in cui sono definite.
• Se un'entità è PRIVATA, le caratteristiche non possono avere ambito LIMITATO.
• Le caratteristiche con ambito interno sono accessibili solo dall'entità a cui appartiene la caratteristica.
• Se viene creata un'entità o una caratteristica, questa eredita l'ambito dal relativo padre.
• Modificatori di accesso menzionati in ordine di ampiezza.
Nessuno >> Limitato >> Privato >> Interno
◦ Nessuno è più ampio di Limitato, Privato e Interno.
◦ Limitato è più ampio di Privato e Interno.
◦ Privato è più ampio di Interno.
◦ Interno è il modificatore di accesso dall'ambito più ristretto.
Esempi
• Se [P2#Solution].[T2#Thing] prova a chiamare [P1[n1.n2.n3]#Component].[T1#Thing], la chiamata riesce perché un'entità o una caratteristica PUBBLICA all'interno di un progetto, con o senza un namespace, può essere chiamata o utilizzata da qualsiasi altra entità o caratteristica all'interno dello stesso progetto o di un progetto con un namespace diverso.
• Se [P2[n4.n5.n6]#BuildingBlock].[T2#Thing] prova a chiamare [P1[n1.n2.n3]#Component].[T1#Thing], la chiamata riesce perché un'entità o una caratteristica PUBBLICA all'interno di un progetto, con o senza namespace, può essere sempre chiamata.
• Se [P2#Solution].[TT2#ThingTemplate] prova a chiamare [P1[n1.n2.n3]#Component].[TT1{PRIVATE}#ThingTemplate], la chiamata non riesce perché un'entità o una caratteristica PRIVATA all'interno di un progetto, con o senza namespace, può essere chiamata o utilizzata da qualsiasi altra entità o caratteristica solo all'interno dello stesso progetto.
• Se [P2[n4.n5.n6]#BuildingBlock].[TS2#ThingShape] prova a chiamare [P1[n1.n2.n3]#Component].[TS1{PRIVATE}#ThingShape], la chiamata non riesce perché un'entità o una caratteristica PRIVATA all'interno di un progetto, con o senza namespace, può essere chiamata o utilizzata da qualsiasi altra entità o caratteristica solo all'interno dello stesso progetto.
• Se [P1[n1.n2.n3]#Component].[T2{PRIVATE}#Thing].[S1#Service] prova a chiamare [P1[n1.n2.n3]#Component].[TT1{PRIVATE}#ThingTemplate], la chiamata riesce perché può essere chiamata o utilizzata da qualsiasi altra entità o caratteristica solo all'interno dello stesso progetto.
• Se [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate].[Prop2{PRIVATE}#Property] prova a chiamare [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{RESTRICTED[n1.n2]}#Service], la chiamata non riesce perché le caratteristiche con modificatore di accesso PUBBLICO per un'entità con ambito LIMITATO sono accessibili solo dai namespace consentiti.
• Se [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate] prova a chiamare [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing], la chiamata non riesce perché le entità e le caratteristiche con ambito limitato sono accessibili solo dallo stesso progetto e da namespace consentiti.
• Se [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing] prova a chiamare [P2[n1.n2.n3]#BuildingBlock].[TT2#ThingTemplate], la chiamata riesce perché l'accesso alle entità o alle caratteristiche con ambito Nessuno (PUBLIC) è consentito a tutti.
• Se P1[n1.n2.n3]#BuildingBlock].[T2{RESTRICTED[n1.n2]}#Thing].[Prop2{RESTRICTED[n1.n2]}#Property] prova a chiamare [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{INTERNAL}#Service], la chiamata non riesce perché le caratteristiche con ambito interno sono accessibili solo dall'entità a cui appartiene la caratteristica.
• Se [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[Prop1{PRIVATE}#Property] prova a chiamare [P1[n1.n2.n3]#BuildingBlock].[T1{RESTRICTED[n1.n2]}#Thing].[S1{INTERNAL}#Service], la chiamata riesce perché le caratteristiche con ambito interno sono accessibili solo dall'entità a cui appartiene la caratteristica.