130 likes | 225 Views
Linguagem de Programação C++. Usando Makefiles. Problema:. Colocar todas as classes em um único fonte: Pode tornar o fonte muito extenso e difícil de manipular; Dificulta a reutilização das classes em outros sistemas; Dificulta o trabalho em equipe. Solução: modularização.
E N D
Linguagem de Programação C++ Usando Makefiles
Problema: • Colocar todas as classes em um único fonte: • Pode tornar o fonte muito extenso e difícil de manipular; • Dificulta a reutilização das classes em outros sistemas; • Dificulta o trabalho em equipe.
Solução: modularização • Agrupam-se as classes relacionadas em módulos; • Para cada módulo dois arquivos: • Declarações: • Terminação “.h”; • Contém apenas as declarações de classes e constantes; • Implementação: • Terminação “.cpp” • Contém a implementação das classes definidas no “.h” correspondente; • Inclui o “.h” correspondente. • Para usar uma classe em outro módulo: • Basta incluir o “.h” correspondente
#include <iostream> #include <stdlib.h> #include "Memoria.h" using namespace std; int main(int argc, char *argv[]){ mem.setDados(550); mem.setEnd(14); mem.write(); mem.setEnd(14); mem.read(); cout << mem.getDados() << endl; system("PAUSE"); return 0; } Exemplo: teste.cpp usa Memoria
#include "Registrador.h" class Memoria{ public: Memoria(int umTamanho); void setDados(int umValor); void setEnd(int umValor); int getDados(void); void read(void); void write(void); private: Registrador16 endereco; Registrador16 dados; int tamanho; Registrador8 *memoria; }; Arquivo Memoria.h Exemplo: Memória usa Registrador
#include <iostream> #include <stdlib.h> #include "Memoria.h" Memoria::Memoria(int umTamanho){ if (umTamanho < 0){ tamanho = 10; }else{ tamanho = umTamanho; } memoria = new Registrador8[tamanho]; } void Memoria::setDados(int umValor){ dados.set(umValor); } void Memoria::setEnd(int umValor){ endereco.set(umValor); } int Memoria::getDados(void){ return(dados.get()); } void Memoria::read(void){ int aux = endereco.get(); if (aux >= tamanho-1) return; int low,high; high = memoria[aux].get(); low = memoria[aux+1].get(); dados.set(high*256+low); } void Memoria::write(void){ int aux = dados.get(); int low = aux % 256; int high = aux / 256; memoria[endereco.get()] = high; memoria[endereco.get()+1] = low; } Exemplo: Memoria.cpp
class Registrador8{ public: Registrador8(void); Registrador8(int umValor); int set(int umValor); int get(void); private: int consiste8(int umValor); int valor; }; class Registrador16{ public: Registrador16(void); Registrador16(int umValor); int set(int umValor); int get(void); private: int consiste16(int umValor); int valor; }; Exemplo: Registrador agrupa 2 arqs
#include "Registrador.h" Registrador8::Registrador8(void){ valor = 0; } Registrador8::Registrador8(int umValor){ ... } int Registrador8::set(int umValor){ ... } int Registrador8::get(void){ return(valor); } int Registrador8::consiste8(int umValor){ if ((umValor < 0)||(umValor > 255)) return(0); return(1); } Registrador16::Registrador16(void){ valor = 0; } Registrador16::Registrador16(int umValor){ ... } int Registrador16::set(int umValor){ if (consiste16(umValor)){ valor = umValor; return(1); } return(0); } int Registrador16::get(void){ return(valor); } int Registrador16::consiste16(int umValor){ ... } Exemplo: Registrador.cpp
Compilando vários módulos • IDE: cria-se um projeto • Comando de linha: • Cria-se um makefile • Makefile • Roteiro de compilação • Indica dependências e comandos de compilação • Nome do arquivo: Makefile • Ativação: make
Exemplo: Makefile all: teste teste: teste.o Memoria.o Registrador.o g++ -o teste teste.o Memoria.o Registrador.o teste.o: teste.cpp g++ -c teste.cpp Memoria.o: Memoria.cpp g++ -c Memoria.cpp Registrador.o: Registrador.cpp g++ -c Registrador.cpp
Exercícios: • Faça dowload dos módulos Memoria e Registrador, crie uma aplicação teste, crie um makefile, compile e execute a aplicação teste.
Exercícios • Crie uma classe MemoriaPipin. A memória do processador Pipinn é endereçada de 0 a 99 ou através dos mnemônicos “W”, “X”, “Y”, “Z”, “T1”, “T2”, “T3”, “T4”. Implemente esta classe usando a classe Memoria como “atributo”. Faça um exemplo de uso.
Exercício • Crie uma classe ULA usando a classe Registrador16. Faça um exemplo de uso integrado com a classe MemoriaPipinn (por exemplo buscando valores na memória e armazenando o resultado das operações).