[00:00] E aí pessoal, bem-vindos de volta. Então vamos entender o que nós vamos programar durante esse treinamento, precisamos fazer alguma coisa para entender os conceitos.
[00:07] Nós vamos trabalhar como se estivéssemos criando um sistema de um banco, então nós vamos projetar algumas coisas como representar uma conta, realizar operações em uma conta, realizar saques, depósitos, etc. E precisamos fazer isso utilizando algumas boas práticas e nós já vamos entender como chegar nessas boas práticas. Então durante o desenvolvimento nós vamos entender o que é orientação objetos, o que esse nome tem a ver com desenvolvimento.
[00:33] Mas vamos começar pelo começo, eu tenho uma base de um sistema, adicionei o using namespace std que nós já conversamos no curso anterior, o porquê de não adicionar esse em todo lugar. Mas vamos lá, o que eu quero fazer, eu quero representar uma conta. O que uma conta precisa?
[00:49] Uma conta precisa do número da conta. Então eu vou armazenar na linha 8 string numeroConta = “12356”. Uma conta precisa ter o CPF do titular, na linha 9 eu vou armazenar, string cpfTitular = “123.456.789-10”. Precisa ter o nome do titular, para nós entrarmos em contato com ele, etc. E obviamente, toda conta precisa ter um saldo, eu vou colocar na linha minha conta com saldo de 100 reais.
[01:20] Tenho aqui todas as informações necessárias para manipular uma conta. Consigo identificar o titular, consigo me comunicar com o titular através do nome, consigo identificar a conta em si pelo número, tem o saldo dela, tenho tudo que eu preciso.
[01:32] Só que se eu precisar de uma outra conta, por exemplo, para realizar uma transferência entre uma conta e outra, eu vou precisar de todas essas definições separadas e eu vou ter que vir renomeando, usando nomes diferentes para as variáveis para não dar conflito. E isso não é profissional, nós não estamos fazendo isso da forma mais bem feita, vamos dizer assim.
[01:55] Então o que nós podemos fazer, o que eu quero na prática é ao invés de utilizar string, float, int, bool, os tipos de dados que o C++ entrega para nós, eu quero criar um novo tipo. E o nome desse tipo vai ser conta e vai possuir todos esses dados mencionados anteriormente. Então o nosso tipo conta vai ter dentro dele um número, um CPF do titular, um nome do titular, um saldo. Então ele vai ter essas informações.
[02:29] E muito do conhecimento que nós adquirimos nos treinamentos de C, vão servir para C++. C e C++ são linguagens completamente diferentes, mas a base, a parte mais simples é bastante parecida. Então como nós já vimos em C, em C++ nós também conseguimos criar algo que é chamado de struct. Então vamos criar uma struct.
[02:52] Criar uma struct conta, e na prática o que eu estou dizendo, eu estou falando “olha só C++, eu quero criar um novo tipo. E esse tipo vai ser um aglomerado de outras variáveis, de outras informações”. Então eu posso trazer para cá, por exemplo, todos os dados aqui. Então eu vou copiar, vou colar, não preciso ter o Conta no nome da variável, é o número. E eu não vou ter o valor, porque é só definição e a cada conta que eu criar a partir desse tipo, vai definir os valores.
[03:28] Então o que eu estou fazendo, eu defini um novo tipo no meu sistema e o nome desse tipo é "Conta". Então a partir desse tipo eu posso criar variáveis, uma variável do tipo conta, por exemplo. Então, como eu crio um inteiro, int nomeINteiro. Para criar uma conta eu faço o tipo, que é Conta e o nome da variável, uma conta, por exemplo.
[03:52] Lá em C, nós precisaríamos definir que isso é uma struct ou fazer um typedef. Mas em C++ isso não é necessário, eu simplesmente coloco o tipo e o nome da variável, umaConta.
[04:05] Com isso, o que vai acontecer por baixo dos panos, o compilador vai pedir: “Olha só, eu preciso de um espaço de memória no meu stack frame”, que você já viu no treinamento anterior o que significa, e no stack frame dessa função, esse espaço de memória que eu preciso, precisa caber 3 strings e um saldo. Então esse é o espaço que eu vou precisar e é esse o espaço que vai ser reservado.
[04:27] Então se eu tenho todo esse espaço reservado dentro dessa variável, então dentro dessa variável umaConta eu consigo acessar o cpfTitular, o numero, o saldo, e todas as informações.
[04:43] Então ao invés de utilizar as variáveis separadas, eu vou utilizar umaConta.numero, umaConta.cpfTitular, umaConta.nomeTitular, e, obviamente, umaConta.saldo e eu vou definir como 100 reais.
[05:10] Então, com isso, eu tenho toda a definição da conta em um local só, eu tenho um tipo específico para isso. E se eu quiser criar uma outra conta, eu não preciso ficar renomeando as variáveis, eu vou simplesmente criar umaOutraConta. E a partir dessa umaOutraConta eu posso acessar o saldo também, por exemplo.
[05:32] E repara que eu tenho a variável umaConta modificando o saldo, e depois umaOutraConta modifica o saldo também. Então será que eu vou ter qual valor em umaConta? Eu vou ter o 100 que é original ou 200 que foi modificado? Vamos exibir e falar um pouco sobre isso. Então cout << “Uma conta: ” << umaConta.saldo << “ Outra conta: ” << umaOutraConta. Saldo << endl;.
[06:07] Então o que nós esperamos que aconteça, que em umaConta.saldo eu tenha o valor de 100, e já em umaOutraConta.saldo eu tenha o valor de 200. Porque eu não quero que o valor de uma conta afete o valor da outra, os dados de umaConta são separados dos dados de umaOutraConta porque lembra, quando eu crio uma nova variável do tipo conta, eu estou separando um espaço de memória.
[06:38] Então, em umaConta eu estou alterando o saldo desse espaço de memória e em umaOutraConta eu estou alterando o saldo desse espaço de memória, são espaços diferentes. Então quando eu fizer o build na parte superior da tela “Build > Run > Build and Execute” e executo esse programa, eu tenho exatamente o que eu esperava, uma conta tem 100 reais e uma outra conta tem 200 reais.
[06:56] “Ah Vinícius, isso eu já sabia, eu já aprendi isso em C”, então essa revisão é importante por quê? Com isso, com esse conhecimento nós conseguimos começar a modelar os nossos dados, trazer algo no mundo real para código, fazer uma abstração de algo que existe, uma conta, por exemplo, para o nosso código contendo só as informações que nós precisamos.
[07:23] Grava essa palavra “abstração”, nós vamos falar mais sobre ela ainda, mas basicamente foi que eu fiz aqui, pegar um conceito real e trazer de forma simplificada para o nosso sistema. E a partir desse dado, dessa variável especial, nós conseguimos acessar vários outros valores.
[07:40] E em cima desses valores, eu quero realizar operações. Eu quero em cima de uma Conta, por exemplo, realizar saques, depósitos, transferências, etc. Então vamos fazer isso, mas no próximo vídeo.