Atributos e Métodos
Produzido por Gustavo BarbosaTeoria
Introdução
Eai, tudo bem?
Nessa aula nós vamos prosseguir com os fundamentos da orientação a objetos. A seguir, nós vamos compreender mais sobre as ferramentas usadas para caracterizar um objeto e como isso é abstraído na POO, desde as propriedades desse objeto até o que ele pode realizar.
Então vamos nessa!
Atributos de uma classe
Imagine que você foi contratado para programar um jogo em C++. Uma das coisas que acontecem nesse jogo, é que o jogador pode controlar uma moto. Para que isso seja possível, você precisa programar todas as características da sua moto, ou seja, se ela é uma moto rápida ou devagar, o tamanho dela, se ela está ligada ou desligada, etc.
Para programar isso, vamos criar uma classe, onde vamos especificar tudo sobre as motos desse jogo. Então bora lá!
Inicialmente, vamos criar a classe:
O nosso próximo passo seria colocar as características das motos desse jogo no nosso código. Na programação orientada a objetos, essas características são chamadas de atributos. Na prática, um atributo será uma variável que guardará um valor que está atrelada a uma característica da classe.
Para começarmos a declarar os atributos dessa foto, vamos pensar o que queremos dela e como podemos colocar isso na forma de atributos. Algumas características básicas que podemos pensar de uma moto é a sua velocidade e o seu estado (ou seja, se ela está ligada ou desligada). Então vamos passar isso para o nosso código:
Basicamente, o que fizemos aqui foi declarar os atributos dessa classe que criamos, e isso é feito da mesma maneira que declaramos as variáveis. Perceba que declaramos os atributos com valores iniciais. Na prática, isso significa que, sempre que instanciarmos um objeto dessa classe, ele vai ter esses valores para os seus atributos, ou seja, todas as motos vão possuir velocidade máxima de 80, assim como está na linha 4, e ela estará parada e desligada, por isso as variáveis e foram inicializadas com .
Mas é possível que modifiquemos o nosso código para que possamos alterar os valores que inicializamos, ou seja, para que possamos instanciar motos com diferentes velocidades máximas, estando já ligada ou já em movimento. Vamos entender melhor sobre isso com os métodos de uma classe.
Métodos de uma classe
Além de possuir atributos, precisamos definir o que um objeto de uma classe pode fazer com esses atributos. Isto é, quais são as ações que esse objeto pode fazer? Para a programação orientada a objetos, essas ações são os métodos de uma classe. Esses métodos serão funções que declaramos dentro da nossa classe. Essas funções podem usar os atributos da classe, além de poder modificá-los.
Para a nossa classe , é interessante que tenhamos métodos para ligar e desligar a moto, além de podermos alterar a sua velocidade máxima. Pensando nisso, vamos criar 3 métodos para essa classe.
Criarmos os métodos é o mesmo que declararmos funções dentro da nossa classe. Agora, vamos programar o que os nossos métodos fazem. Uma boa maneira de fazermos isso de tal modo que o nosso código fique organizado, é especificarmos o que cada método faz fora da região das chaves que delimita a classe. Mas como o compilador sabe que essa função é na verdade um método da classe e não uma função global? Para isso, o C++ usa uma sintaxe específica.
Para que possamos, fora da região da classe, especificar o que um método faz, usamos a seguinte sintaxe:
É bem semelhante ao que já fazemos com funções, a diferença é que incluímos o nome da classe antes do nome da função e separamos os dois usando “::”.
Vamos brincar um pouco com essa estrutura e definir o que os nossos métodos fazem.
Iniciando com o método . Vamos modificar o valor do Atributo para o valor que será recebido na função e vamos imprimir esse valor na tela.
Importante: os atributos de uma classe são acessíveis para os métodos das classes sem precisar passarmos eles como parâmetros.
Dessa forma, nós temos:
Agora vamos definir o método . Esse método deve modificar o estado da moto de desligada para ligada, ou seja, deve alterar o valor da variável de para . Caso a moto já esteja ligada, simplesmente imprimir na tela a mensagem indicando que a moto está ligada.
Por fim, vamos definir o método . De forma semelhante ao anterior, ele deve checar se a moto está ligada ou desligada e a desligar em caso positivo.
Com isso, nós já definimos os atributos e os métodos da nossa classe. Agora vamos ver como utilizamos eles após instanciarmos um objeto.
Notação ponto
Para acessarmos os métodos e atributos da nossa classe fora da região interna a ela, existem duas notações possíveis. A primeira que veremos é a notação ponto, mas antes disso, vamos acrescentar uma linha de código que tornará possível acessarmos os métodos da nossa classe:
Basicamente, ao escrevermos na linha 12, torna-se possível acessar os métodos que estão abaixo da linha 12. Por enquanto, não vamos nos aprofundar muito nesse comando, apenas tenha em mente que ele possui essa função,
Vamos inicializar a nossa função e vamos instanciar um objeto da nossa classe. Por uma questão de organização, vamos iniciar a nossa função em outro arquivo . Para que possamos usar o código que criamos nesse novo arquivo, vamos fazer uma inclusão. Para isso, vamos salvar o código feito com o nome moto.cpp e vamos abrir um novo arquivo .cpp na mesma pasta.
Perceba que, para incluir o código que fizemos, foi utilizado o header .
Agora, vamos usar a notação ponto para acessarmos o método e colocarmos a velocidade limite da nossa moto em 150 usando a notação ponto.
Perceba que a notação ponto apresenta a seguinte sintaxe:
Bem semelhante a acessarmos uma função, mas nesse caso temos que colocar o objeto antes para indicar que a função que queremos acessar é, na realidade, um método da classe ao qual o objeto pertence.
Nós podemos fazer isso para os demais métodos que definimos:
Ou seja, nesse caso, nós mudamos a velocidade máxima da nossa moto, ligamos ela e depois a desligamos. Isso nos daria a seguinte saída:
Mas, se instanciássemos dois objetos da mesma classe, ao modificarmos o valor de algum atributo de um, o mesmo seria alterado para o outro?
A resposta para essa pergunta é não. Qualquer instanciar um objeto, ele vem com todas as informações iniciais que estão declaradas na sua classe. Ou seja, dois objetos, mesmo que pertençam a mesma classe, são objetos distintos.
Notação flecha
O segundo tipo de notação que usaremos é a notação flecha. Ela é utilizada quando declaramos um ponteiro que aponta para o local de memória do objeto. Para declararmos esse ponteiro, basta usarmos a notação:
Então, ao invés de usarmos o objeto, vamos fazer esse ponteiro apontar para o local de memória de um objeto instanciado e usaremos ele para acessarmos os métodos da classe . É possível fazer isso usando o para indicar que estamos nos referindo ao objeto armazenado no local da memória no qual o ponteiro está guardando.
Porém, se torna muito não prático sempre precisarmos acrescentar . Pensando nisso, utiliza-se o operador seta para simplificar o nosso trabalho:
Com isso, nós podemos acessar os métodos utilizando o ponteiro que aponta para o local de memória do nosso objeto.
Agora que já compreendemos mais sobre os atributos e métodos da programação orientada a objetos, nós podemos começar as nossas questões de fixação! Então bora lá!