Mandar um cafézinho para o programador:


Me ajude a transformar café em código!
Mostrando postagens com marcador Introdução. Mostrar todas as postagens
Mostrando postagens com marcador Introdução. Mostrar todas as postagens

Orientação a Objetos em C++: Introdução

 Antes de entrarmos em detalhes sobre um novo paradigma de programação (a orientação a objetos), vamos entender um pouco o que vínhamos fazer e o que vamos fazer de diferente.


Programação Funcional

Até o momento, usamos apenas um estilo de programação: a funcional, também chamada de procedimental. Como o nome diz, é um método que usa procedimentos, ou como chamamos: funções.

Basicamente, ele é um roteiro, um script de procedimentos e comandos. Ou seja, a gente só usa variáveis e funções. Vamos pegar um exemplo.

Vamos supor que você queira calcular a média aritmética de dois números, em C++. Necessariamente, você vai ter que ter duas variáveis pra armazenar os valores e um cálculo da média. Pronto, tem aí um 'roteiro' do que deve ser feito.

O que você pode fazer de diferente, é colocar o cálculo da média em uma função, para que ela possa ser invocada indefinidamente:

#include <iostream>
using namespace std;

float average(float num1, float num2)
{
    return (num1+num2)/2;
}

int main()
{
    float num1, num2;

    cout<<"Numero 1: ";
    cin >> num1;

    cout<<"Numero 2: ";
    cin >> num2;

    cout<<"Media: "<< average(num1,num2) << endl;

    return 0;
}

Veja como este programa é apenas um procedimento, começa rodando do começo da main() e vai até o final dele. Sempre. Tudo que fizemos foi sempre assim. Tem começo (geralmente declaração de variáveis), meio (chamando funções para fazer diversas coisas) e um fim (exibindo resultados).

O objetivo da programação funcional é criar funções que façam coisas. Pode parecer simples e bobo né? Mas coisas incríveis foram feitas usando isso. O Kernel do Linux, por exemplo, não usa C++, apenas C, ou seja, não tem orientação a objetos, apenas programação procedural.

Com o passar dos anos e décadas, os softwares foram ficando cada vez mais e mais e mais, e mais um pouco, complexos. E alguns problemas foram surgindo.


Programação Orientada a Objetos

Até o momento, em nossos programas, qualquer função poderia trabalhar em cima de qualquer dado. Isso com o tempo virou um problema de segurança. Seria ideal se determinadas funções pudessem atuar somente em cima de alguns dados.

Por exemplo, em programação funcional, as funções que trabalham com os dados da tesouraria de uma empresa, poderiam trabalhar com quaisquer dados, como os dos funcionários. Mas seria mais bacana se a tesouraria tivesse suas próprias funções e para trabalhar com os dados dos funcionários, tivessem funções próprias também. E por questão de segurança, nenhum pudesse mexer nas coisas dos outros.

Outro problema: você designa uma função pra receber um inteiro. Sem querer, alguém usa essa função e manda um float. Se fizer esse teste, vai dar erro, vai sair resposta errada e pode até simplesmente fechar o programa rodando. Imagina 'fechar' o programa de um avião, em pleno voo? Não dá né.

Daí que veio a bendita e linda POO: Programação Orientada a Objetos. Ela resolve esse problemas, e de uma maneira incrivelmente simples e fácil. Seu segredo é: ela passa a trabalhar com um treco chamado objeto.

Cada objeto vai ter suas próprias variáveis e somente algumas funções podem ver atuar e ver ele.
Se tem um objeto do tipo Som no seu jogo, ele vai ter variáveis, características e funções específicas atuando nele. Os objetos do tipo Personagem, vão ter variáveis, características e funções específicas pra eles. Uma função que mexe com Som não pode atuar num objeto do tipo Personagem. E, nossa, isso evita muuuuuitos bugs e potenciais problemas.

Isso de cada objeto ter seus dados e procedimentos, é o chamado encapsulamento, base da lógica da POO. É como se existisse código específico para cada 'coisa'. Uma função só vê os dados daquela 'coisa' e só pode atuar naquela 'coisa'. Você pode, inclusive, esconder informações, dizer claramente: 'Ei, essa variável aqui, que armazena a senha, só pode ser vista aqui dentro do servidor, ela é inacessível para usuários de fora'. E isso traz uma segurança incrível.

Se você está desenvolvendo um game em C++ e usar orientação a objetos, você vai criar dados e procedimentos que só vão atuar e fazer sentido na parte da Lógica. Vai criar informações e funções que só vão ser visíveis e só vão atuar nos Graphics, vai criar coisas específicas para o Cenário (que nem são visíveis fora desse escopo). Você encapsula, você divide, você organiza as coisas...tá captando a ideia da POO ?

Não é mais aquele emaranhado de funções e variáveis que todo mundo pode ver e usar. Uma variável declarada, geralmente só deve ser usada pela função X(). Mas a função Y() pode sim ver e atuar nessa variável, isso é um erro, um problema, e seria interessante se isso fosse naturalmente impossível, se a própria linguagem fizesse essa separação. E é essa separação que a Orientação a Objetos faz.

Se você faz um sistema Web, você quer que apenas algumas funções sejam disponíveis pros usuários, como a função Exibe(), que vai mostrar as notas de um aluno de EAD. Mas se tiver usado programação funcional, o danado do aluno pode criar um código que chama a função Altera(), pra mudar suas notas, hackear o sistema. Ué, ele pode muito bem 'chutar' o nome das funções, e vai que acerta...

Com programação orientada a objetos, podemos deixar bem claro: "Ei sistema, somente essa função e essas variáveis podem ser acessadas pelos alunos". Quando ele tentar invadir o sistema, chamando outras funções que não fazem parte daquele 'objeto' (as notas dele, por exemplo), ele vai ser sumariamente bloqueado.

Bacana essa orientação a objetos, né? Mas vamos deixar de lero-lero, ir pro próximo tutorial e começar a aprender de vez como usar essa bruxaria.

Fontes de estudo

Paradigmas de Programação
Programação Procedural

Calculadora Simples em C++: Como Programar

Para finalizar com chave de ouro nossa seção de Introdução ao C++, vamos fazer um programinha bem simples, mas bastante útil e interessante: uma calculadora.

Antes de ver o código, tente resolver.
Ela deve receber dois números do usuário, e exibir as operações de:
  • Soma
  • Subtração
  • Multiplicação
  • Divisão do primeiro pelo segundo
  • Resto da divisão do primeiro pelo segundo
  • Porcentagem do primeiro em relação ao segundo
  • Média aritmética


Seu programa deve ficar + - assim, veja:

Como programar uma calculadora em C++

Tente aí!

Como fazer uma calculadora em C++

Veja como ficou nosso código:
#include <iostream>
using namespace std;

int main()
{
    float num1, num2;

    //Recebendo os dadps
    cout << "Primeiro numero: ";
    cin >> num1;

    cout << "Segundo numero: ";
    cin >> num2;

    //Exibindo as operações
    cout << "Soma         : " << num1 + num2 << endl;
    cout << "Subtracao    : " << num1 - num2 << endl;
    cout << "Multiplicacao: " << num1 * num2 << endl;
    cout << "Divisao      : " << num1 / num2 << endl;
    cout << "Modulo       : " << (int)num1 % (int)num2 << endl;
    cout << "Porcentagem  : " << 100.0*(num1/num2) << endl;
    cout << "Media        : " << (num1 + num2)/2 << endl;


    return 0;
}
O seu, como ficou? Diferente?
Posta aí nos comentários!

Veja que a única coisa diferente foi o trecho:
(int) num1 % (int)num2

Isso se chama casting, ou seja, como o operador de módulo (resto da divisão) só tem sentido com valores inteiro e nossas variáveis são do tipo float, nós colocamos (int) antes das variáveis para dizer ao C++ que queremos tratar aquelas variáveis, naquele momento, como inteiros.

Conversão entre grau Celsius e Fahrenheit

Neste tutorial, vamos resolver duas questões de nossa lista de exercícios básicos de C++, sobre conversão entre as temperaturas Celsius e Fahrenheit.

As fórmulas que vamos usar, são:

Como converter de Fahrenheit para Celsius em C++

Como converter de Celsius para Fahrenheit

Inicialmente, vamos conversar de C para F.
Ou seja, o usuário entre com o valor em Celsius e retornamos em Fahrenheit.

A fórmula matemática é a primeira acima, que na linguagem C++ vira:
F = (9*C/5) + 32;

Veja:
#include <iostream>
using namespace std;

int main()
{
    float C, F;

    cout << "Graus em Celsius: ";
    cin >> C;

    F = (9*C/5) + 32;

    cout << "Representa em Fahrenheit: " << F;

    return 0;
}

Convertendo de Fahrenheit para Celsius

Agora o contrário, usando a segunda fórmula, que em C++ fica:
C = 5*(F-32)/9;

Veja como fica nosso código:
#include <iostream>
using namespace std;

int main()
{
    float C, F;

    cout << "Graus em Fahrenheit: ";
    cin >> F;

    C = 5*(F-32)/9;

    cout << "Representa em Celsius: " << C;

    return 0;
}

Exercícios Básicos de C++

Parabéns, você finalizou a parte básica de nosso Curso de C++.
Agora vamos praticar.

Tente, de todo o coração, com toda calma, esforço e concentração, fazer os exercícios abaixo.
Deixe um comentário com suas soluções, ok?

Questões de C++

01. Escreva um programa que pede o raio de um círculo, e em seguida exiba o perímetro e área do círculo.

02. Faça um programa que recebe o raio de uma esfera e calcula seu volume.

03. Faça um programa que recebe um inteiro, representado um valor em anos. Mostre quantos dias tem esse intervalo de tempo, assumindo que um ano tenha 365 dias.

04. Faça um programa que receba duas variáveis: o valor das horas e do minutos.  Em seguida, converta tudo para minutos e também para segundos.

05. Crie um programa que receba a temperatura em graus Celsius e converta para Farenheit.

06. Faça o contrário do exercícios anterior.

Conversão entre grau Celsius e Fahrenheit

07. Faça um programa que pergunte o ano atual e sua idade, em seguida exibe seu ano de nascimento.

Soluções na apostila C++ Progressivo

Exercícios de Porcentagem em C++

08. Faça um programa que calcula 12% de 2112

09. Faça um programa que recebe um valor do usuário e calcula 12% desse total

10. Faça um programa que recebe um valor de porcentagem do usuário, e calcula quanto isso representa de um segundo valor que ele digitou.

11. Programe um software que recebe dois números, onde o primeiro deve ser menor que o segundo.
Em seguida, ele calcula a porcentagem que o primeiro representa do segundo.

Por exemplo, se digitou 12 e 21, isso quer dizer que 12 representa 57,14% de 21

12. Você se tornou programador C++, e agora está ganhando super bem. Mas, mesmo assim, vai ter que pagar impostos.

Crie um software que recebe o valor do seu salário e calcula os 7% do imposto de renda.
A saída do seu programa deve ser o salário bruto (sem abatimento), o tanto de imposto que vai pagar e o seu salário líquido (após descontar o IR).

13. Devido a inflação, todo ano seu salário deve ser ajustado baseado nela.
Por exemplo, se a inflação foi 2,5% então seu salário deve crescer nesse mesmo montante, para não perder valor.

Crie um programa em C++ que pergunta o salário da pessoa, a inflação do último ano e aplique essa inflação. Mostre o salário anterior, o aumento devido a inflação e o novo salário.

14. Na cidade de C++lândia há uma tolerância de 15% do limite de velocidade, para não se levar uma multa. Faça um programa que pede ao usuário a velocidade máxima de uma via e calcula até que velocidade o carro pode transitar sem ser multado. Seu código vai ser embarcado no sistema de GPS do carro, para avisar o limite de velocidade que o carro deve percorrer.

Soluções: porcentagem em C++

Questões de Média em C++

15. Crie um programa que peça duas notas ao usuário, e retorne a média dele.

16. Faça o mesmo do exercício anterior, mas para 3 notas.

17. A prova do vestibular do IME tem peso 3 para Matemática, 2.5 para Física, 2.5 para Química, 1.0 para Português e também 1.0 para Inglês. Crie um sistema que peça as notas do usuário e retorne a média dele.

Tipos de Dados, Variáveis e Atribuição em C++: int, char, float, double e bool

Neste tutorial de nosso curso de C++, vamos aprender a trabalhar com dados (informações) em programação.

Armazenando Informações

Um dos pilares da computação, é a armazenagem de informações, de dados.
O computador faz, basicamente, duas coisas: cálculos e armazenagem de dados.

Quase sempre, faz os dois: processamento de dados, como armazenar, alterar, excluir, fazer operações matemáticas etc.

Neste tutorial, embora longo seja bem simples, vamos introduzir os conceitos de tipos de dados e variáveis em C++, conhecimentos altamente importantes para trabalharmos com programação de computadores.

Vamos conhecer os mais variados tipos de dados, quais suas características e funções.
De antemão, saiba que toda variável que você vai usar para armazenar dados ao longo de seus programas, devem ser declaradas previamente.

Usar uma variável que ainda não foi declarada acarretará em erros na hora da compilação.

O tipo de dado inteiro: int

Este tipo de dado serve para armazenar, especificamente, dados numéricos do tipo inteiro.
Os inteiros são:
  • ..., -3, -2, -1, 0, 1, 2, 3, ...


Vamos agora criar e declarar uma variável chamada idade:
  • int idade;


Pronto. Nesse ponto, o computador vai pegar um local da memória do seu computador e reservar para a variável idade. E o que está armazenado? Inicialmente, 'lixo'.

Vamos agora atribuir o valor 18 para esta variável:
  • idade = 18;


Agora, sempre que usarmos a variável numero, ela será substituída pelo número inteiro 18.
Veja:
#include <iostream>
using namespace std;

int main()
{
    int idade;
    idade = 18;

    cout << "Minha idade é: "<< idade <<endl;
    return 0;
}

Note que o cout não imprime a palavra 'idade', e sim o valor contido dentro desta variável.
Variável em C++


Tipo de dado caractere: char

Além de números inteiros, podemos também armazenar caracteres, ou seja, letras.
Para isso, usamos a palavra-chave char (de character, do inglês).

Vamos declarar uma variável do tipo char, de nome letra.
  • char letra;

Agora vamos atribuir um valor para ela. No caso, como é um char, devemos armazenar alguma letra do alfabeto, como por exemplo, C:
  • letra = 'C';


Note que os caracteres devem estar dentro de aspas simples.
Vamos imprimir essa letra na tela:

#include <iostream>
using namespace std;

int main()
{
    char letra;
    letra = 'C';

    cout << "A terceira letra do alfabeto é: "<< letra << endl;
    return 0;
}

Resultado:
Variáveis em C++

Lembrando que 'a' é diferente de 'A', são dois caracteres distintos.
Os caracteres são mais usados em conjuntos, ou seja, formando um texto. Vamos estudar isso em uma seção posterior de nosso curso, sobre strings.

Veja que:
  • 5 - é um número, um dado do tipo int
  • '5' - é um caractere, uma letra, não pode ser usado por exemplo em operações matemáticas

Tipo de dado flutuante: float e double

Já aprendemos a lidar com números inteiros.
Porém, nem tudo na vida é um número inteiro, como sua idade.

Muitas vezes, precisamos trabalhar com valores fracionados, ou seja, 'quebrados'.
Para isso, usamos os tipos de dados float e double:
float preco;
double valor;

A diferença é que float tem precisão única, e double tem precisão dupla (ou seja, cabe uma parte fracionada maior, e um maior número de bytes da memória foi reservado para este tipo de variável).

Vejamos um uso:

#include <iostream>
using namespace std;

int main()
{
    float preco;
    preco = 14.99;

    cout << "A apostila custa: R$ "<< preco << endl;
    return 0;
}
Note que usamos ponto (.) ao invés de vírgula (,). É assim que usamos em programação, como nos Estados Unidos, por exemplo.
Tipo de dado double

Assim, uma lojinha de R$ 1,99 em nosso mundo, será lojinha de R$ 1.99 no mundo da programação, ok?

O tipo de dado Booleano: bool

Você já deve ter ouvido falar que na computação (ou na tecnologia, de um modo geral), é tudo 1 ou 0, não é?

De fato, os valores 1 e 0, são muito importantes, pois representam verdadeiro e falso, consecutivamente.

Existe um tipo de dado para armazenar somente informações do tipo true/false (chamados de booleanos), o bool.

Declarando:
  • bool verdade;


Atribuindo um valor booleano:
  • verdade = true;


Exibindo o valor de true na tela:

#include <iostream>
using namespace std;

int main()
{
    bool verdade;
    verdade = true;

    cout << "Verdade em C++ é: "<< verdade << endl;
    return 0;
}

Resultado:
Curso de C++ completo online grátis para download

Exercícios:

1. Faça um programa em C++ que exibe o valor de duas variáveis, do tipo booleano, mostrando cada valor atribuído possível. Use duas variáveis.

2. Refaça o exercício anterior, agora declarando apenas uma variável.

Nomes de variáveis

Como temos total poder para escolhermos o nome que quisermos para nossas variáveis, temos também algumas responsabilidades.

A primeira delas é não escolher palavras-chaves (keywords), que serão listas no tópico a seguir.
Outra responsabilidade, é a da organização.

Você vai ficar tentado a usar:
int a, float b, char c

Evite esses nomes. Use:
int idade;
float diametro;
char letra;

Ou seja, nomes de variáveis que queiram significar algo relacionado ao valor que você vai armazenar ali. Isso ajuda muito quando seus programas forem se tornando maiores e mais complexos.

Evite também:
double salarioprogramador;

Use:
double salario_programador;

Ou ainda:
double salarioProgramador;

Note como assim fica mais fácil de ler e de cara já podemos antever que tipo de informação tem nessas variáveis, concorda?

Palavras-chave reservadas

Existem algumas palavras que você não deve usar como nomes para suas variáveis, pois elas são reservadas para o funcionamento interno do C++.

São elas:
and, and_eq, asm, auto, bitand, bitor, bool, break, case, catch, char, class, compl, const, canst cast, continue, default, delete, do, double, dynamic_ cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, not, not_ eq, operator, or, or_eq, private, protected, public, reg i ster, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, us ing, virtual, void, volatile, wchart, while, xorxor_eq

Resposta do exercício

#include <iostream>
using namespace std;

int main()
{
    bool valorBooleano;
    valorBooleano = true;
    cout << "Verdade em C++ é: "<< valorBooleano << endl;

    valorBooleano = false;
    cout << "Falso em C++ é: " << valorBooleano << endl;
    return 0;
}

Estudar também:

http://www.cplusplus.com/doc/tutorial/variables/

Saída simples em C++: cout, <<, endl, \n e Outros caracteres especiais

No tutorial anterior, aprendemos a criar o primeiro programa em C++, famoso Hello, world! ou Olá, mundo!.

Para tal, usamos um comando bem especial: o cout.
Vamos aprofundar nossos estudos neste assunto.

Saída simples (imprimindo coisas na tela):
cout e <<

O que fizemos no primeiro programa em C++ foi, simplesmente, escrever uma mensagem na tela.
Dizemos que imprimimos algo no console (telinha preta de comandos), ou mais especificamente, fizemos uma saída do C++ para a tela.

Especificamente o cout é um treco chamado objeto. Especificamente, um objeto da classe ostream.
Não se preocupe, por hora, com esses termos. Vamos esmiuçar ele em nossos tutoriais de orientação a objetos em C++.

Esse comando é standard output stream, ou seja, é a saída padrão de informação. Ou seja, através do cout conseguimos enviar informações para a saída padrão, que é o terminal de comando, a janelinha preta que aparece na sua frente, quando rodamos o programa.

Vamos agora exibir a mensagem: "Bem vindos ao curso C++ Progressivo":
#include <iostream>
using namespace std;

int main()
{
    cout << "Bem vindos ao curso C++ Progressivo";
    return 0;
}
Rode esse programa e veja o resultado.

Já o operador << sinaliza que estamos enviando informação (no caso, o texto) para o comando cout:
cout << algo (algo está sendo enviado para a saída padrão).

Podemos reescrever o programa da seguinte maneira:
#include <iostream>
using namespace std;

int main()
{
    cout << "Bem vindos ao curso "<<"C++ Progressivo";
    return 0;
}
Bacana, né?
Vamos agora escrever na tela:
Imprimir coisas na tela com C++
Basta usarmos o comando cout duas vezes, concorda? Veja:
#include <iostream>
using namespace std;

int main()
{
    cout << "Bem vindos ao curso";
    cout << "C++ Progressivo";
    return 0;
}
Não se esqueça do ponto e vírgula ao término de cada comando. Isso é universal em C++.
O resultado fica:
cout em C++

Opa! Peraí! Ficou tudo grudado, qual foi o problema?

Quebra de linha: endl e \n

Uma string, que é o mesmo que um texto, é nada mais que uma sequência de caracteres.
Após a primeira frase, "Bem vindos ao curso" existe um caractere, embora não possamos ver.

É a quebra de linha, é o mesmo que ocorre quando você dá um enter em um texto, ele pula, quebra pra próxima linha.

Podemos resolver isso usando o comando endl (end line), que é um manipulador de stream, veja:
#include <iostream>
using namespace std;

int main()
{
    cout << "Bem vindos ao curso " << endl;
    cout <<"C++ Progressivo";
    return 0;
}

Uma outra maneira de quebra a linha, é usando o caractere \n.
No caso, ele vai dentro da string, ou seja, como se fosse um caractere de texto mesmo:
#include <iostream>
using namespace std;

int main()
{
    cout << "Bem vindos ao curso\n";
    cout <<"C++ Progressivo";
    return 0;
}
Veja que podemos inclusive fazer isso usando apenas um comando cout:
#include <iostream>
using namespace std;

int main()
{
    cout << "Bem vindos ao curso\nC++ Progressivo";
    return 0;
}

O caractere '\n' ocupa 1 byte de memória na execução do programa. Já o endl chama uma função do sistema, para fazer o mesmo efeito do \n.

Caracteres especiais em C++

\n é chamado de caractere especial. Vejamos alguns outros:

  • \t - tem o mesmo efeito do TAB num editor de texto
  • \r - Carriage return: posicione o cursor da tela no início da linha atual, não avança para a próxima linha.
  • \a - Alert, em máquinas antigas produzia um som (um bipe)
  • \\ - Usado pra printar o caractere \
  • \' - Usado para printar o caractere ' (aspas simples)
  • \" - Usado para printar o caractere "" (aspas duplas)


Fontes de estudo e consulta

http://www.cplusplus.com/reference/iostream/cout/
http://www.cplusplus.com/reference/ostream/endl/

Ajude o C++ Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo