Introdução à POO: Classes e Objetos

Ver Todos os Exercícios

Teoria

Introdução

Eai, aqui é o Samuel do Responde Aí e hoje a gente vai começar o conteúdo de Programação Orientada a Objetos, ou simplesmente POO.

Esse é o grande diferencial entre o C++ e o clássico C e provavelmente o motivo de você estar estudando C++ nesse momento e não C.

Vantagens da POO

Por qual motivo nós utilizamos a programação orientada a objetos? Que vantagens ela pode nos proporcionar?

Para entender o porquê de usarmos a programação orientada a objetos, devemos inicialmente compreender o conceito de abstração e como isso se aplica a programação.

Abaixo nós temos um exemplo de dois códigos:

O código da direita está em Assembly, enquanto o da esquerda está em C++ (o melhor). Os dois códigos fazem a mesma coisa, no entanto existe uma grande diferença na maneira que eles estão escritos.

Isso se deve ao fato de Assembly ser uma linguagem de baixo nível, ou seja, está mais próxima da linguagem interpretada pelo computador, enquanto C++ é uma linguagem de alto nível, ou seja, se aproxima mais da nossa linguagem, proporcionando um maior nível de abstração quando comparada a linguagem interpretada pelo computador.

Uma das vantagens de usarmos a POO é exatamente o aumento dessa abstração, o que dá mais facilidade e liberdade para o programador passar as suas ideias para a linguagem de programação, além de um sistema de organização de código que, quando usado da forma correta, melhora muito o entendimento do código.

Além disso, há algumas possibilidades a mais que são abertas com o uso da POO, principalmente devido a alocação de memória. Mas elas serão abordadas na medida que vamos avançando na programação orientada a objetos.

Entendendo o que é uma classe e um objeto

Os conceitos de classe e objeto são a base para a programação orientada a objetos (tá até no nome!) e entender eles corretamente nos fornece a fundação necessária para começarmos a nossa jornada no mundo da POO. Para começarmos a entender o que eles são, vamos inicialmente pensar no clássico exemplo da casa.

Toda casa, antes de existir, precisa de uma planta, que não é nada mais do que um conjunto de informações e instruções necessárias para que a casa seja construída. Numa planta de casa normalmente há quantos cômodos a casa vai ter e, dentre esses cômodos, quais serão quartos, banheiros, cozinha, sala e etc. Além disso, pode conter outras informações sobre a casa, como tamanho e a posição de cada coisa.

Usando uma mesma planta é possível fazer várias casas, podendo ainda ter diferenças entre cada uma dependendo de algumas informações que podem ser modificadas. Essas diferenças não mudam o fato de que ela é uma casa que foi feita tendo como base as instruções da mesma planta.

Para a programação orientada a objetos, nós podemos entender uma classe como a planta da casa, ou seja, a base para a criação da casa, que seria o objeto. Ou seja, o objeto é aquele elemento concreto, o produto de uma ideia, que seria a classe. A classe é onde iremos colocar todas as características do objeto, que chamamos de atributos, e tudo aquilo que é possível fazer com aquele objeto, que chamamos métodos.

Instanciando um objeto

Nós já entendemos que a classe é um conjunto de características e funções que, juntas, podem definir a criação de um objeto. Se voltarmos ao exemplo da casa, já sabemos que a planta da casa é uma classe e a própria casa seria um objeto. No entanto, o próprio processo de construção da casa é algo que também devemos compreender. Para a POO, esse processo é chamado de instanciação.

Quando criamos uma classe, ela é armazenada no HD do computador, mas quando criamos um objeto, durante a instanciação, a memória RAM armazena os dados da classe para que seja possível criar esse objeto.

Vamos aprender como instanciamos um objeto na prática.

Para isso, vamos trabalhar no seguinte exemplo:

Suponha que você está programando um jogo no qual o jogador controla um personagem que vai enfrentando diversos inimigos ao longo do caminho. Nesse caso, você pode criar uma classe para esses inimigos, onde você define a ideia por trás do funcionamento deles, ou seja, as características deles e o que eles podem fazer.

Podemos criar essa classe da seguinte forma:

Perceba que, para criarmos uma classe, nós devemos:

  • Iniciar com class
  • Escrever o nome da classe
  • Abrir colchetes
  • Dentro dos colchetes nós escreveremos tudo aquilo que define a classe (os seus atributos e métodos)
  • Fechamos os colchetes
  • Finalizamos com ponto e vírgula

Agora, dentro da função main, vamos instanciar um objeto dessa classe.

Vamos supor que um dos inimigos que o jogador vai enfrentar seja um espadachim:

Para instanciarmos esse objeto, usamos o nome da classe e, em seguida, o nome do objeto:

Perceba que isso é muito semelhante ao que já fazemos com outros elementos no C++. As strings, por exemplo, são uma classe, ou seja, sempre que declaramos uma string, estamos, na verdade, instanciando um objeto da classe string, que pertence a biblioteca que também se chama string.

Agora que já temos uma noção dos fundamentos de classes e objetos, vamos para algumas questões para fixarmos melhor esse conteúdo.

Entendendo o que é uma classe e um objeto

Instanciando um objeto

Exercícios Resolvidos

Exercício Resolvido #1

Explique o que é uma classe e o que é um objeto no contexto da programação orientada a objetos.

Passo 1

Eai, tudo beleza?

Vamos primeiramente abordar o que é uma classe.

Uma classe é uma descrição que serve para abstrair características semelhantes para conjunto de objetos relacionados.

Já um objeto pode ser entendido como um elemento mais concreto, que existe a partir da instanciação de uma classe e apresenta características definidas por essa classe.

Como exemplo, podemos entender a classe moto, como um molde para criar todas as motos, haja vista que todas possuem características semelhantes que as definem como motos. Nesse caso, uma moto Bros e uma moto CB podem ser entendidas como objetos instanciados a partir da classe moto.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #2

Explique como é a sintaxe usada para declarar uma classe e instanciar um objeto. Exemplifique.

Passo 1

Eai, tudo beleza?

Primeiramente, vamos analisar como é a sintaxe de uma classe. Para declararmos uma classe, iniciamos com c l a s s e colocamos o nome da classe. A seguir, abrimos as chaves e colocamos as características da classe e fechamos as chaves. É importante lembrarmos que, após fecharmos as chaves, devemos usar ponto e vírgula!

De forma geral, a sintaxe para declarar uma classe é a seguinte:

c l a s s       N o m e D a C l a s s e

{

                C a r a c t e r í s t i c a s   D a   C l a s s e

} ;

Para instanciarmos um objeto, é mais simples. Colocamos primeiro a classe a qual esse objeto pertence, o nome desse objeto e finalizamos com ponto e vírgula:

N o m e D a C l a s s e         N o m e D o O b j e t o ;

Passo 2

Vamos exemplificar por meio da criação de uma classe a l u n o :

Agora, vamos instanciar um objeto dessa classe:

Resposta

Exercício Resolvido #3

Uma loja que está em processo de expansão, decide desenvolver um sistema próprio para o cadastro de clientes de forma que o processo de cadastro seja otimizado. Com base nos seus conhecimentos de C++, você foi contratado para desenvolver esse sistema. Explique o que você definiria como classe e como objeto para desenvolver o sistema de cadastro de clientes em C++.

Passo 1

Eai, tudo tranquilo?

Nessa questão, nós temos que analisar o contexto que nos foi dado e pensar numa boa maneira de definirmos o que seria a classe com a qual iríamos trabalhar e quais seriam os objetos dessa classe.

Normalmente, sabemos que em sistemas de cadastro de clientes são pedidas informações como nome, cpf, idade e etc. Ou seja, para cada cliente nós teremos uma série de características únicas, mas que são do mesmo tipo, ou seja, estão relacionadas.

Tendo isso e as informações do enunciado em consideração, é possível concluir que seria uma possível boa escolha definirmos a classe c l i e n t e , na qual cada cliente cadastrada seria um objeto pertencente a essa classe.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #4

O programador Bizonho está trabalhando num código para um jogo que ele foi contratado para desenvolver. No entanto, o seu programa está dando um problema de compilação e ele não está conseguindo resolver. Usando os seus conhecimentos em declarar classes e objetos, indique qual é o erro de compilação no código do Bizonho.

Passo 1

Eai, tudo beleza?

Para iniciarmos a nossa análise desse código, vamos inicialmente rever o que sabemos sobre a como declarar uma classe e um objeto.

A declaração de uma classe segue a seguinte sintaxe:

Enquanto a instanciação de um objeto apresenta a seguinte sintaxe:

Passo 2

Quando comparamos as sintaxes que sabemos que estão corretas com o código apresentado, percebemos que 15 do código do programador Bizonho há um erro de sintaxe, pois ele esqueceu de finalizar a classe com ponto e vírgula. Um erro muito comum, pois somos acostumados a usar as chaves em funções, condicionais e em laços de repetição, e, nesses casos, diferente de quando declaramos uma classe, não se utiliza ponto e vírgula.

Resposta

Falta de ponto e vírgula da linha 15 do código.

Exercício Resolvido #5

Pokémon é uma série de jogos que permite ao jogador travar batalhas entre personagens desse jogo, que são chamados de pokemons.

Suponha que você está programando uma cópia de Pokémon e para isso precisa criar uma classe para abstrair o que seria um pokemon para o programa. Crie essa classe e, dentro da função main, instancie os 3 pokemons iniciais: charmander, bulbasaur e squirtle.

OBS: Não é necessário preencher os atributos e métodos da classe.

Passo 1

Fala aí, tudo tranquilo? Então bora lá!

Nessa questão devemos criar uma classe p o k e m o n para instanciar os objetos que seriam os pokémons. Isso faz sentido porque todos os pokemons possuem determinadas características que os definem, como o tipo, a força, os ataques, etc.

Com base nisso, vamos para o nosso código. Primeiramente, vamos iniciar a classe p o k e m o n usando a sintaxe aprendida:

Como o enunciado nos diz, não preenchemos dentro da classe, mas deixamos um comentário, para entendermos que é nessa região onde vamos colocar os métodos e atributos da classe, ou seja, as características que definem um Pokémon.

Passo 2

Vamos, dentro da função main, instanciar os 3 pokemons do enunciado. Para isso, usamos o nome da classe, p o k e m o n , e os nomes dos objetos, charmander, bulbasaur e squirtle.

Perceba que é possível instanciar o 3 numa mesma linha de código seguindo o padrão de declaração que usamos até o momento.

Resposta

Exercício Resolvido #6

Explique o que é o processo de instanciar um objeto.

Passo 1

Uma classe é um molde de uma estrutura concreta que fica armazenada no hd do computador. O processo de instanciar é quando declaramos um objeto pertencente a essa classe. Nesse processo, o computador, por meio do nosso código, acessa as informações no hd e reserva um espaço na memória ram para armazenar todos os dados do nosso objeto que estão salvos na classe.

Resposta

Ei, a resposta está no passo a passo :)

Exercício Resolvido #7

Suponha que você foi contratado para integrar uma equipe de desenvolvimento de jogos. Dentro dessa equipe, você ficou responsável por desenvolver os personagens. Pensando nisso, você resolveu criar uma classe para servir de molde para a criação de todos os personagens. Crie essa classe e instancie um objeto dela.

Passo 1

Fala aí, tudo tranquilo?

Nessa questão nós temos que pensar em como declarar uma classe para abstrair um código que para criar os personagens de um jogo. Nesse caso, vamos chamar a nossa classe de P e r s o n a g e m .

Nós sabemos que a sintaxe para se declarar uma classe é a seguinte:

Portanto, para a nossa classe, teríamos:

Passo 2

Agora, vamos instanciar um objeto dessa classe. Para isso, usamos a seguinte sintaxe:

No nosso caso, vamos iniciar a função main no mesmo arquivo no qual criamos a classe e vamos instanciar o nosso objeto. Vamos chama-lo de i n i m i g o _ 1 , ou seja, o personagem que instanciamos é, na realidade, um dos vilões do jogo.

Resposta

Exercício Resolvido #8

Arduino é um microcontrolador programável em C++ que pode ser utilizado em diversos projetos de eletrônica.

Suponha que você está desenvolvendo um projeto de um robô controlado via Arduino. O robô vai fazer tudo que você indicar que ele deve fazer no seu código. Para melhor estruturar o seu projeto e obter um nível maior de abstração, você resolve criar uma classe com todas as características e funcionalidades do robô. Demonstre como você declararia essa classe.

Passo 1

Eai, tudo beleza?

Nessa questão, devemos declarar uma classe com o objetivo de abstrair o conceito de um robô controlado por um Arduino.

Para isso, vamos utilizar a seguinte sintaxe:

Agora, basta declararmos a nossa classe, que chamaremos de r o b o .

Resposta

Ei, a resposta está no passo a passo :)