AULA 7 - Programação II - Graduação

De IFSC
Revisão de 16h39min de 23 de agosto de 2017 por imported>Fargoud (→‎Exemplo:)
Ir para navegação Ir para pesquisar

Separando a interface da implementação

Conforme tudo que já foi descrito até o momento, o objetivo maior do encapsulamento de classes é preservar o sigilo acerca do código que vai ser implementado na classe.

Assim, é necessário que as classes sejam códigos independentes e fechados, que chamamos de IMPLEMENTAÇÃO DA CLASSE, compilados separadamente do restante do código-"cliente" (que serve de entrada/saída de dados com o usuário - INTERFACE COM O USUÁRIO), mas rodados juntos, linkados, para que funcionem conjuntamente.

O código-cliente vai ter acesso apenas aos Métodos e Atributos públicos dos objetos.

  • Métodos Públicos: são também chamados de INTERFACES DA CLASSE, pois serão usados diretamente pelos CLIENTES (programas usuários) para manipular os dados da classe.

A interface da classe normalmente é publicada na forma de Cabeçalhos (protótipos), em um arquivo de cabeçalho (*.h), fornecido junto com o executável da classe.

Separa1ii.png

Exemplo:

Separando os códigos de interface com o usuário da implementação da classe Horario

Primeiro, em um arquivo *.h escreve-se a declaração da classe (INTERFACE DA CLASSE):

/* horario1.h  - Declaração da classe Horario      */
#ifndef HORARIO1_H
#define HORARIO1_H
class Horario 
{  public:
   Horario( );
   void SetaHora(int, int, int);
   void ImprimeMilitar( );
   void ImprimePadrao( );
   private:
       int hora, minuto, segundo;
 };
#endif
Separa3ii.png

Depois, em um arquivo *.cpp escreve-se a IMPLEMENTAÇÃO da classe, isto é, todos os códigos de seus métodos, principalmente os privados.

/* horario1.cpp  - Definição dos métodos de Horario */
#include <iostream>
#include “horario1.h”
Horario::Horario( ) {hora=minuto=segundo = 0;}
void Horario::SetaHora(int h, int m, int s)
{    	hora = (h>= 0 && h < 24)? h:0;

minuto = (m>= 0 && m < 60)? m:0;

       segundo = (s>= 0 && h < 60)? s:0;  }
void Horario::ImprimeMilitar( );
{  cout << (hora < 10? “0”:”“) << hora << “:” << (minuto < 10?”0”:”“) << minuto;                                                                 
}
void Horario::ImprimePadrao( )
{ cout<<((hora==0 || hora==12)? 12:hora%12) << “:” << (minuto < 10?”0”:”“)<< minuto <<  “:” << (segundo < 10? ”0”:”“) << segundo <<  (hora<12? “da manhã”: “da tarde”);     }

Note que é imprescindível incluir-se o arquivo de cabeçalho, no arquivo de implementação.

No Visual C++ 2008:

Separa2ii.png
Separa3ii.png
Separa4ii.png
Separa5ii.png
Separa6ii.png
Separa7ii.png