O que são públicos, privados e protegidos na programação orientada a objetos?

93

O que são públicos, privados e protegidos na programação orientada a objetos?

Delirium tremens
fonte
+1, uma daquelas coisas que eu achei um pouco difícil de

Respostas:

152

Eles são modificadores de acesso e nos ajudam a implementar o Encapsulamento (ou ocultação de informações). Eles informam ao compilador quais outras classes devem ter acesso ao campo ou método que está sendo definido.

private - Apenas a turma atual terá acesso ao campo ou método.

protected - Apenas a classe e subclasses atuais (e às vezes também classes do mesmo pacote) desta classe terão acesso ao campo ou método.

public - Qualquer classe pode se referir ao campo ou chamar o método.

Isso assume que essas palavras-chave são usadas como parte de uma declaração de campo ou método dentro de uma definição de classe.

Ben S
fonte
4
observe que em java, membros do mesmo pacote podem acessar membros protegidos
Landon Kuhn
2
Sim, e Java também tem um quarto modificador de acesso que é a string vazia. Não fornecer nenhum modificador de acesso permitirá o acesso de qualquer classe de nível de pacote.
Ben S de
1
Eu gosto da parte do "compilador", porque a maioria das linguagens que conheço, todas as funções / classes podem ser facilmente acessadas em tempo de execução, por exemplo, por meio de reflexões no .NET. Portanto, eu tendo a dizer que esses modificadores de acesso são basicamente apenas uma ajuda para os programadores orientarem outros programadores que trabalham no / com o mesmo código, ocultando certas coisas.
merkuro de
1
Algumas línguas possuem algumas particularidades. Como no Delphi, membros privados são acessíveis por outras classes na mesma unidade, e você deve usar o uso estrito privado se não quiser este comportamento.
Fabio Gomes
1
C # também executa o truque de membros do mesmo pacote com acesso protegido. Em essência, C # é apenas o Java da Microsoft
iGbanam
6

Eles não são realmente conceitos, mas palavras-chave específicas que tendem a ocorrer (com semânticas ligeiramente diferentes) em linguagens populares como C ++ e Java.

Essencialmente, eles têm o objetivo de permitir que uma classe restrinja o acesso a membros (campos ou funções). A ideia é que quanto menos um tipo tem permissão para acessar em outro tipo, menos dependência pode ser criada. Isso permite que o objeto acessado seja alterado mais facilmente sem afetar os objetos que se referem a ele.

Em termos gerais, público significa que todos têm permissão para acessar, privado significa que apenas membros da mesma classe têm permissão para acessar e protegido significa que membros de subclasses também têm permissão. No entanto, cada idioma adiciona suas próprias coisas a isso. Por exemplo, C ++ permite que você herde não publicamente. Em Java, também há um nível de acesso padrão (pacote) e regras sobre classes internas, etc.

Uri
fonte
6

Todos os três são modificadores de acesso e palavras-chave que são usados ​​em uma classe. Qualquer coisa declarada em público pode ser usada por qualquer objeto dentro da classe ou fora da classe, variáveis ​​em privado só podem ser usadas pelos objetos dentro da classe e não podem ser alteradas por meio de acesso direto (já que pode ser alterado por meio de funções como função amiga) .Qualquer coisa definida na seção protegida pode ser usada pela classe e sua classe derivada.

monica
fonte
1

Um item público é aquele que pode ser acessado por qualquer outra classe. Você só precisa saber qual é o objeto e pode usar um operador ponto para acessá-lo. Protegido significa que uma classe e suas subclasses têm acesso à variável, mas não a quaisquer outras classes; elas precisam usar um getter / setter para fazer qualquer coisa com a variável. Um privado significa que apenas essa classe tem acesso direto à variável, todo o resto precisa de um método / função para acessar ou alterar esses dados. Espero que isto ajude.

Mnuzzo
fonte
1

como acima, mas qualitativamente:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

quanto menos acesso você fornece, menos detalhes de implementação vazam de seus objetos. menos desse tipo de vazamento significa mais flexibilidade (também conhecido como "acoplamento mais fraco") em termos de alteração de como um objeto é implementado sem interromper os clientes do objeto. isso é algo realmente fundamental para entender.

Jon
fonte
0

Para resumir, na programação orientada a objetos, tudo é modelado em classes e objetos. As classes contêm propriedades e métodos. Palavras-chave públicas, privadas e protegidas são usadas para especificar o acesso a esses membros (propriedades e métodos) de uma classe de outras classes ou outros .dlls ou mesmo outros aplicativos.

Zaki
fonte