Como vimos anteriormente, durante o processo de abstração determinamos quais serão os atributos e métodos do nosso objeto. No entanto, esses métodos precisam de uma proteção, para que não sejam acessados por qualquer outro objeto diretamente. É preciso que haja um controle sobre o acesso a essas propriedades (as variáveis da instância) e esse é o papel do encapsulamento. Ele irá proteger os campos contra alterações acidentais e só permitirá que seus valores sejam modificados através de métodos específicos para isso. Esse controle é feito através de palavras reservadas chamadas modificadores de acesso. São elas: public, private, protected e internal.

Basicamente o papel de cada modificador de acesso é:

- Public : permite o acesso por qualquer outro objeto, ou seja, é a forma menos segura possível.

- Private : permite o acesso somente de dentro da mesma classe onde foi criado.

- Protected : só permitirá o acesso na classe onde ele foi criado (como o modificador Private), mas permite também o acesso a classes-filha, ou seja, que herdam dessa classe. Não se preocupem com o conceito de herança agora. Falaremos dele mais adiante. Por enquanto apenas guardem que o modificador Protected não permite acessos externos, a menos que sejam de classes derivadas dele.

- Internal : permite o acesso somente dentro do projeto atual.

Vamos aproveitar a classe Carro que criamos anteriormente para demonstrar o funcionamento do encapsulamento e dos principais modificadores de acesso. Nossa classe está dessa forma:

Encapsulamento e Modificadores de Acesso

Nós possuímos os métodos setCor e getCor, ambos com o modificador de acesso public, ou seja, eles podem ser acessados livremente, que é o que de fato já testamos quando inserimos as cores "Azul" e "Vermelha" em nossos objetos no tutorial sobre instâncias. O IntelliSense do Visual Studio nos mostrava ambos como disponíveis quando criávamos o objeto objCarro, do tipo Carro, conforme a figura abaixo:

Encapsulamento e Modificadores de Acesso

Isso só acontece porque eles estão com modificador public. Vamos alterar o modificador do método getCor para private e ver o que acontece. Nosso código ficará assim:

namespace WindowsFormsApplication1
        {
            internal class Carro
        
        {
            string sCor;
            string sMarca;
        
            public void setCor(string cor)
            {
                sCor = cor;
            }
        
            private string getCor()
            {
                return sCor;
            }
        }
        }
        

Agora vamos chamar o IntelliSense do Visual Studio novamente, vejam:

Encapsulamento e Modificadores de Acesso

O setCor, que está definido como public, continua disponível, mas o getCor, que alteramos para private, não pode mais ser acessado de fora da classe Carro. Percebam o quanto isso é importante para a segurança do tráfego de dados. Nesse exemplo estamos lidando com métodos simples e inofensivos, que somente inserem e fazem a leitura de uma propriedade em um objeto, mas poderíamos ter, por exemplo, uma função que gravaria dados confidenciais no banco de dados. Dessa forma poderíamos definir seu modificador de acesso como private e permitir que a mesma fosse acessada somente de dentro da classe e após uma minuciosa verificação nas informações que foram passadas pelo usuário, evitando os famosos SQL Injections, que são instruções maliciosas que procuram danificar ou roubar os dados do banco.

Mas voltando ao nosso exemplo, da forma como nosso código do método getCor está agora, ou seja, com o modificador private, ele não mais pode ser acessado de fora da classe, mas somente de dentro dela, ou seja, de dentro do método setCor nós podemos chamá-lo, vejam:

Encapsulamento e Modificadores de Acesso

No fundo é tudo muito simples, mas a importância dos modificadores de acesso é imensa e é muito importante que você os entenda.

Ainda na imagem acima é importante notar que as variáveis sCor e sMarca não possuem modificadores de acesso explícitos, mas na verdade eles existem. O C# trata, inteligentemente, todas as variáveis com modificadores não declarados como Privates. Ou seja, deixar o código acima como está ou fazê-lo com as palavras Private é a mesma coisa, vejam:

Encapsulamento e Modificadores de Acesso

Se alterarmos isso para public, mesmo de fora da classe elas ficarão disponíveis para acesso, vejam:

Encapsulamento e Modificadores de Acesso

Essa prática não é recomendada, pois a organização e a segurança que a POO nos oferece fica enfraquecida quando se altera variáveis da instância de um objeto diretamente. É aconselhável deixa-las sempre como private e somente efetuar a manipulação dos seus valores de dentro dos métodos da classe.

O básico sobre encapsulamento e modificadores de acesso é isso. Não vou falar agora sobre o tipo Protected, pois para isso seria preciso já ter falado sobre herança, então o farei no momento oportuno.

Vou deixar de lado o Internal, que só faz sentido em soluções muito grandes, que possuem mais de um projeto e, como o objetivo destes tutoriais é dar uma introdução à POO, não vejo sentido em citar um assunto que seguramente não será usado por alguém que esteja tendo seu primeiro contato com POO agora. Acho que só tumultuaria as coisas, mas, apenas para saciar sua curiosidade, ele não tem nada de complexo e basta pensar que atributos ou classes definidas como Internal somente podem ser acessadas de dentro do seu próprio assembly(Project, no Visual Studio). É importante também não confundir os Projects com as Solutions. O Visual Studio permite que uma Solution contenha vários Projects. Enfim, não se preocupe com este tipo de modificador de acesso. O importante é encerrar este tópico sabendo que é possível proteger os dados para que sejam acessados somente através de métodos específicos. Prossigamos nosso minicurso falando no tópico seguinte sobre "herança".


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

O título Space Invaders, lançado em 1980, fez tanto sucesso em todo o mundo que as pessoas compravam o console Atari apenas para poderem jogá-lo em casa. Saiba mais sobre este incrível título clicando aqui.


Digitar senhas em computadores de uso coletivo é extremamente perigoso, pois além de softwares de monitoramento, existem dispositivos de hardware que podem capturar suas senhas. Evite ao máximo acessar sites de bancos a partir destes computadores. Veja mais aqui.


O personagem Mario surgiu pela primeira vez no mundo dos games em um jogo chamado Donkey Kong, lançado em 1981. Mario, que naquela época se chamava Jumpman, não era o personagem principal do jogo, mas ele se tornaria um dos mais famosos personagens do mundo dos games. Saiba mais.


Considerando todas as adaptações de jogos de videogame para o cinema, a mais bem sucedida foi Lara Croft: Tomb Raider, lançado em 2001 e que faturou 274 milhões de dólares. Ele foi dirigido por Simon West e estrelado pela bela Angelina Jolie.


A empresa Universal City Studios, detentora dos direitos autorais do King Kong, processou a Nintendo logo após o lançamento de Donkey Kong, pois segundo ela, o game violava os seus direitos. Ela venceu o processo e recebeu da Nintendo uma indenização de quase 2 milhões de dólares.


Criar um jogo é muito mais complexo do que parece. São milhares, às vezes, milhões de linhas de código. Isso não é exagero! Apenas o jogo Ultima Online possui 6.006.313 linhas de programação, totalizando 25.103.295 palavras


O Playstation só nasceu porque uma parceria entre Sony e Nintendo, para desenvolver uma unidade de CD para o Super Nintendo, fracassou. Clique aqui e saiba mais.


Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.


O filme Mortal Kombat, inspirado no jogo de mesmo nome, faturou 23 milhões de dólares apenas no fim de semana de estreia nos EUA. Ainda sobre este título de sucesso, outra cifra que impressiona é o faturamento ao longo do primeiro ano: 1 bilhão de dólares no mundo todo.


O título Tetris detém o recorde de jogo mais adaptado de todos os tempos. No total foram mais de 60 plataformas diferentes que receberam alguma versão do quebra-cabeças criado por Alexey Pajitnov. Conheça mais sobre este incrível jogo clicando aqui.