Esiste un linguaggio orientato agli oggetti che non consente di avere variabili membro private? [chiuso]

2

So che JavaScript non consente esplicitamente di avere una variabile membro di un oggetto come privata, ma puoi farlo implicitamente utilizzando le chiusure.

Ma esiste un linguaggio orientato agli oggetti che non consente affatto di avere variabili membro private (non esplicitamente e non implicitamente)?

    
posta Christopher 20.07.2018 - 04:25
fonte

4 risposte

4

Python è un esempio di un linguaggio OO che non supporta le variabili dei membri privati . In Python, l'idea dei valori incapsulati è ottenuta solo attraverso la convenzione (anteponendo il nome della variabile con _ ). Alcuni IDE potrebbero quindi applicare tale convenzione nascondendo tali membri dall'accesso pubblico, ma la lingua stessa non lo fa.

Naturalmente, si potrebbe essere pedanti e affermare che, a meno che un linguaggio non offra un vero incapsulamento, non si tratti di un linguaggio OO, nel qual caso Python quindi non fa il voto. Prendi questa linea di "ragionamento" fino alla sua conclusione e quindi anche Java non si qualifica come l'incapsulamento può essere aggirato usando la riflessione.

    
risposta data 20.07.2018 - 09:31
fonte
2

Perl applica la privacy dei membri solo per convenzione. Come Larry Wall, il creatore di Perl, scrisse una volta:

"Perl doesn't have an infatuation with enforced privacy. It would prefer that you stayed out of its living room because you weren't invited, not because it has a shotgun."

    
risposta data 20.07.2018 - 19:18
fonte
0

La programmazione orientata agli oggetti è definita da ereditarietà, polimorfismo e incapsulamento. E poiché i membri privati rientrano nella categoria incapsulamento, direi di no.

So che esiste un dibattito in corso sul fatto che JavaScript sia o meno un linguaggio OOP, dal momento che supporta oggetti e classi. Lo stesso si può dire su Python che supporta anche OOP ma non ha incapsulamento (almeno fino alla versione 3).

Ma la tua domanda è se qualche linguaggio OOP non supporta membri privati - e per me questo è contraddittorio in termini poiché l'incapsulamento è obbligatorio in OOP. Direi NO.

    
risposta data 20.07.2018 - 08:21
fonte
0

Credo che Object Pascal, inoltre, non abbia supportato membri di dati pubblici / privati. E CLOS (Common Lisp Object System) - Non credo che siano supportati anche dati pubblici / privati.

    
risposta data 20.07.2018 - 17:42
fonte

Leggi altre domande sui tag