code blocks

Download Code Blocks

Post on 11-Aug-2015

235 views

Category:

Documents

2 download

Embed Size (px)

TRANSCRIPT

TUTORIAL "C++ COMO UMA LINGUAGEM DE PROGRAMAO ORIENTADA A OBJECTOS."

PROGRAMAO ORIENTADA A OBJETOS

Este tutorial prope-se ensinar programao orientada a objectos em C++. A maioria dos livros no apresenta a linguagem nesse contexto, dando uma ateno maior para os recursos de C++ do que para a metodologia de programao. recomendvel que o leitor tenha acesso a um desses livros visto que no ensinaremos aqui aspectos considerados bsicos que so em geral quase todos que permitem usar C++ como um C melhorado. Voc pode usar C++, como uma linguagem procedural com recursos avanados, mais uma vez no isso que pretendemos ensinar neste texto. Na prtica de programao orientada a objectos estaremos atentos em nossos programas para pontos como: - Compatibilidade, portabilidade. - Segurana. - Reusabilidade. - Facilidade de integrao. - Facilidade de extenso. - Eficincia. Os tpicos seguintes nos guiaro nesses objectivos, mostrando numa curva de aprendizado suave, como programar usando orientao a objectos em C++.

1. CLASSES E OBJECTOS Uma classe um tipo definido pelo utilizador que contm o molde, a especificao para os objectos, assim como o tipo inteiro contm o molde para as variveis declaradas como inteiros. A classe envolve, associa, funes e dados, controlando o acesso a estes, defini-la implica em especificar os seus atributos (dados) e suas funes membro (cdigo). Um programa que utiliza uma interface controladora de um motor elctrico provavelmente definiria a classe motor. Os atributos desta classe seriam: temperatura, velocidade, tenso aplicada. Estes provavelmente seriam representados na classe por tipos como float ou long . As funes membro desta classe seriam funes para alterar a velocidade, ler a temperatura, etc. Um programa editor de textos definiria a classe pargrafo que teria como um de seus atributos uma string ou um vector de strings, e como funes membro, funes que operam sobre estas strings. Quando um novo pargrafo digitado no texto, o editor cria

a partir da classe pargrafo um objecto contendo as informaes particulares do novo texto. Isto chama-se instanciao ou criao do objecto. Classes podem ser declaradas usando a palavra reservada struct ou a palavra reservada class, nos exemplos posteriores entraremos em mais detalhes. As classes do prximo tpico 1.2 so declaradas com struct por razes didcticas. Quando chegarmos em encapsulamento 1.3 mostraremos como declarar classes com class e no usaremos mais struct no tutorial.

1.1. ESPECIFICANDO UMA CLASSE Suponha um programa que controla um motor elctrico atravs de uma sada serial. A velocidade do motor proporcional a tenso aplicada, e esta proporcional aos bits que vo para sada serial e passando por um conversor digital analgico. Vamos abstrair todos estes detalhes por enquanto e modelar somente a interface do motor como uma classe, a pergunta que funes e que dados membro deve ter nossa classe, e que argumentos e valores de retorno devem ter essas funes membro: Representao da velocidade: A velocidade do motor ser representada por um atributo, ou dado membro, inteiro (int). Usaremos a faixa de bits que precisarmos, caso o valor de bits necessrio no possa ser fornecido pelo tipo , usaremos ento o tipo long , isto depende do conversor digital analgico utilizado e do compilador. Representao da sada serial: O motor precisa conhecer a sua sada serial, a sua ligao com o "motor do mundo real". Suponha uma representao em hexadecimal do atributo endereo de porta serial, um possvel nome para o atributo: enderecomotor. No se preocupe em saber como usar a representao hexadecimal. Alterao do valor da velocidade: Internamente o usurio da classe motor pode desejar alterar a velocidade, cria-se ento o mtodo ( em C++ funo membro): void altera_velocidade(int novav); . O cdigo anterior corresponde ao cabealho da funo membro, ela definida junto com a classe motor, associada a ela. O valor de retorno da funo void (valor vazio), poderia ser criado um valor de retorno (int) que indicasse se o valor de velocidade era permitido e foi alterado ou no era permitido e portanto no foi alterado. No faz sentido usar, chamar, esta funo membro separada de uma varivel do tipo motor, mas ento porque na lista de argumentos no se encontra um motor? Este pensamento reflecte a maneira de associar dados e cdigo (funes) das linguagens procedurais. Em linguagens orientadas a objectos o cdigo e os dados so ligados de forma diferente, a prpria declarao de um tipo definido pelo usurio j engloba as declaraes das funes inerentes a este tipo, isto ser explicado em 1.2.2.

Note que no fornecemos o cdigo da funo, isto no importante, por hora a preocupao com a interface definida pela classe: suas funes membro e dados membro. Apenas pense que sua interface deve ser flexvel de modo a no apresentar entraves para a criao do cdigo que seria feita numa outra etapa. Nesta etapa teramos que imaginar que o valor numrico da velocidade deve ir para o conversor onde ir se transformar numa diferena de potencial a ser aplicada nos terminais do motor, etc. 1.2. STRUCT EM C++ Objectos so instncias de uma classe. Quando um objecto criado ele precisa ser inicializado, ou seja para uma nica classe : Estudante de graduao podemos ter vrios objectos num programa: Estudante de graduao Carlos, Identificao 941218, Curso Computao; Estudante de graduao Luiza , Identificao 943249, Curso Engenharia Civil... A classe representa somente o molde para a criao dos objectos, estes sim contm informao, veja tpico classes e objectos. 1.2.1. ATRIBUTOS OU DADOS MEMBRO. Este exemplo declara uma struct e em seguida cria um objecto deste tipo em main alterando o contedo desta varivel. Uma struct parecida com um record de Pascal, a nossa representa um crculo com os atributos raio, posio x , posio y, que so coordenadas cartesianas. Note que este objecto no possui funes membro ainda.

#include struct circulo //struct que representa um circulo. { float raio; float x; //posicoes em coordenadas cartesianas float y; }; void main() { circulo ac; //criacao de variavel , veja comentarios. ac.raio=10.0; //modificacao de conteudo (atributos) da struct ac.x=1.0; //colocando o circulo em uma posicao determinada ac.y=1.0; //colocando o circulo em uma posicao determinada cout