AULA 3 - Programação II - Graduação
Modificado de [C++ como programar, Deitel & Deitel] e de [C++ Absoluto, Savitch]
Programação orientada a objetos
A programação orientada a objetos (POO) encapsula dados (atributos) e funções (métodos) em pacotes chamados classes.
Uma classe é como a planta de uma casa. A partir da planta, o construtor pode construir uma casa. A partir de uma classe, o programador pode construir um objeto.
Uma planta pode ser reutilizada muitas vezes para se fazer muitas casas. Uma classe pode ser reutilizada muitas vezes para se criar muitos objetos.
As classes têm a propriedade de ocultação de informações. Isso significa que, embora os objetos da classe possam saber como comunicar-se uns com os outros, através de interfaces bem-definidas, normalmente não é permitido às classes saber como as outras classes são implementadas. Os detalhes da implementação são escondidos dentro das próprias classes.
Em C e outras linguagem procedurais, a programação tende a ser orientada a funções, enquanto que em C++ a programação é orientada a objetos.
Implementando um tipo abstrato DiadoAno com uma class
Como exemplo, vamos ilustrar o processo de implementação de um tipo abstrato relacionado com datas, e atributos e ações que lhe digam respeito.
Os campos membros dos objetos são chamados de atributos, ou membros de dados e as ações são chamadas de métodos ou funções-membro.
Tipos contendo membros de dados e funções membro são definidos em C++ utilizando-se a palavra-chave class.
Ex:
class DiadoAno{
public:
void Mostra();
private:
int dia; //0-31
int mes; //0-12
int ano; //0-2017
};
A definição da classe começa com a palavra reservada class. O nome da classe, DiadoAno, segue a palavra-chave.
O corpo da classe é delimitado pelas chaves ({ e }) e termina com o ponto e vírgula (;).
Esta classe possui um método PÚBLICO (public), Mostra() e três atributos PRIVADOS (private), dia, mes e ano.
Os modificadores public: e private: são chamados de especificadores de acesso a membros.
Quaisquer atributos ou métodos declarados depois do especificador de acesso a membros public (e antes do próximo especificador) são acessíveis onde quer que o programa tenha que acessar um objeto da classe DiadoAno.
Quaisquer atributos ou métodos declarados depois do especificador de acesso a membros private (e antes do próximo especificador) são acessíveis somente a métodos da própria classe DiadoAno.
Isto significa que um programa usuário da classe não poderá acessar diretamente um atributo private, mas apenas através de um método público.
Um exemplo de utilização desta classe seria o programa C++ abaixo (CodeBlocks):
1 #include <iostream>
2 using namespace std;
3
4 class DiadoAno
5 { public:
6 void Mostra();
7 private:
8 int dia; //0-23
9 int mes; //0-59
10 int ano; //0-59
11 };
12
13 int main()
14 { DiadoAno hoje;
15 hoje.Mostra();
16 return 0;
17 }
18
19 void DiadoAno::Mostra()
20 {
21 cout << "Informe o dia (0-31)" << endl;
22 cin >> dia;
23 cout << "Informe o mes (0-12)" << endl;
24 cin >> mes;
25 cout << "Informe o ano (0-2017)" << endl;
26 cin >> ano;
27 cout<< "Hoje \202 dia: " << dia << "/" << mes << "/" << ano <<"\n";
28 }
A saída do programa será:
Note que os atributos privados só podem ser acessados pelo método Mostra(). Este foi chamado, tranquilamente, na função main(), na linha 15.
Se vc tentar acessar também um dos atributos, como dia, na função main(), o compilador dará erro.
