2016-04-06 13 views
5

Oggi i linguaggi di programmazione hanno questi noti modificatori di accesso: privato, pubblico, interno e protetto. Ma a volte quando scrivo un programma in modalità OOP, penso di aver bisogno di un modificatore 'speciale' che possa specificare manualmente la classe per cui voglio consentire l'accesso.Perché i linguaggi di programmazione non hanno un modificatore di accesso "permessi classi specifiche"

Ora voglio sapere il motivo per cui i progettisti di linguaggi non aggiungono tale modificatore ai linguaggi di programmazione, forse il conflitto con il concetto OOP o la difficoltà?

Grazie per la risposta :)

p.s. Scusa se la stessa domanda è già stata fatta.

risposta

2

C# e VB.Net entrambi hanno il concetto di friend assemblies, dove assembly specificati possono accedere ai membri interni del assembly specificato. Questo ti consente di dare accesso provvisorio a chiamanti specifici, il controllo per questo viene fatto in fase di compilazione.

Solo gli assembly che si specificano esplicitamente come amici possono accedere ai tipi e ai membri Friend (Visual Basic) o interni (C#). Per esempio, se il montaggio B è un amico di assemblaggio A e assemblaggio riferimenti C di montaggio B, C non ha accesso a un amico (Visual Basic) o tipi interni (C#) in A.

La realtà non è che sono usi legittimi limitati per questa funzione (almeno in queste lingue), a meno che non si stia sviluppando codice maleodorante.

Ma detto ciò, l'idea di una classe che definisce chi può chiamarla è borderline che viola le regole di incapsulamento e astrazione di OOP. Permettendo a una classe di nominare chi è il chiamante può essere che stai permettendo alla classe di avere una conoscenza al di fuori del suo regno e stai proiettando un buon design fuori dalla finestra. Una classe può dettare in modo che il chiamante debba chiamare il numero, ma non lo chi deve chiamare.

Spero che questo aiuti un po '- personalmente non vedo l'ora di ricevere risposte dalle persone più orientate al linguaggio accademico.

1
+0

Ma questo è solo Java? Cosa succede se usi un altro linguaggio di programmazione come 'PHP',' C#/C' o qualsiasi altra lingua diversa? – Jer

+0

@ C0dekid.php si applica solo a Scala – chester89

+0

Oh, forse gli sviluppatori delle altre lingue devono dare un'occhiata a questo, perché questa è una funzione utile per avere :)! Grazie comunque per la risposta :) @ chester89 – Jer

0

Questo è esattamente ciò che fa il modificatore friend in C++.

Problemi correlati