Apostila - Programa--o C++
169 pág.

Apostila - Programa--o C++


DisciplinaAnálise Textual9.942 materiais293.773 seguidores
Pré-visualização50 páginas
organize agora as fichas por ordem alfabética do nome do paciente. 
 
 
 
Curso de Linguagem Computacional C/C++ 
________________________________________________________________________________________________ 
Sistemas Industriais Inteligentes \u2013 DAS \u2013 CTC \u2013 UFSC 99 
14 Classes e Objetos em C++ 
No capítulo anterior começamos a apresentar a idéia da Orientação a Objetos em C++. 
Agora vamos começar a explicar o que são classes e objetos. 
Suponha que estamos criando um programa de computador que jogue xadrez contra o 
usuário. Primeiramente, como no problema do arquiteto, temos um ambiente a modelar (no caso o 
jogo de xadrez) e vamos utilizar os componentes deste ambiente para descrevê-lo. Analisando-se 
rapidamente um jogo de xadrez, apontamos vários elementos que devem ser modelados. 
Podemos modelar o tabuleiro definindo as suas dimensões, quantas posições livres existem, 
a cor do tabuleiro, definir métodos para desenhar este tabuleiro na tela e métodos para controlar as 
posições das peças no tabuleiro. 
Podemos em seguida modelar todas as peças do jogo de xadrez. Cada uma destas peças será 
um objeto do nosso programa. Para cada peça, i.e. cada objeto peça, devemos definir algumas 
propriedades desta como tipo (peão, rei, rainha, torre, bispo e cavalo), de que time pertence (se 
pertence ao time do computador ou ao time do usuário), a cor desta peça e o seu desenho 
geométrico. Alguns métodos também são necessários como definir a maneira como esta peça pode 
ser movimentada no tabuleiro, a posição inicial desta peça no tabuleiro, como esta peça pode ser 
desenhada na tela, etc. 
Aqui já fica bem clara a idéia do que sejam os objetos no jogo. O tabuleiro e cada uma de 
suas peças serão objetos no nosso programa. Desta forma, podemos modelar cada elemento isolado, 
permitindo assim uma boa estrutura para o programa e capacidade de reutilização. 
Mas o que vem a ser as classes do nosso programa? Classes definem tipos de objetos. 
Quando modelamos as peças do tipo peão, percebemos que temos vários elementos no nosso 
ambiente com estas caracterísiticas, i.e., temos múltiplas instâncias do objeto peão. Então, 
definimos uma classe chamada peão e definimos nesta classe todos as propriedades e métodos para 
o elemento peão. Adicionamos um índice para podermos referenciar cada elemento peão 
isoladamente. Assim, definida a classe peão, podemos criar quantas instâncias (objetos) desta classe 
desejarmos. Todo objeto deve ser modelo a partir da definição da classe que o representa. Desta 
forma, temos que definir as classes para as demais peças do xadrex como o rei e a rainha. 
Entretanto, podíamos ter criado somente uma classe entitulada: peças do xadrez. Desta 
forma não teremos uma classe para cada tipo de peça do xadrez mas uma classe que representa 
todos os tipos de peças de xadrez. Definir esta classe será uma atividade muito mais complexa e 
\u201cinsegura\u201d (no sentido de poder gerar erros) que definir cada tipo de peça isoladamente. Por 
exemplo, nesta classe a dimensão da peça de xadrez e o método com que esta deve ser 
movimentada no tabuleiro vão ser diferentes para cada tipo de peça (peão, torre, bispo, ...). Isto nos 
leva a ter definições complexas para as atributos e métodos desta classe. 
Devemos utilizar a primeira representação ou a segunda? Bom, depende do nível de 
abstração que desejamos (nível de detalhamento). Se o programador achar mais fácil tratar somente 
um tipo genérico de peça de xadrez, não há motivos para refinar este modelo. Se o programador 
desejar ter um controle diferenciado para cada tipo das peças, então é melhor refinar o modelo e 
criar uma classe para cada tipo. O bom senso é que define o quanto você deve ou não refinar um 
modelo, tome cuidado para não criar classes desnecessárias. 
Você pode estar achando que terminamos, ou seja, que o jogo de xadrez já está modelado 
definindo-se o tabuleiro e as peças. Esta seria uma intuição normal, pois estes são os elementos que 
vemos quando jogamos xadrez. Mas não podemos esquecer de definir alguns elementos abstratos 
que estão inseridos no modelo. O primeiro é o próprio jogador. Nós queremos que o computador 
jogue contra o usuário, então devemos ter que modelar o jogador, definindo as suas propriedades 
como a cor da suas peças e os seus métodos, que aqui incluem as suas estratégias de jogo. Outro 
elemento necessário é uma espécie de juiz, que controlará as regras do jogo, saberá quando é a vez 
Curso de Linguagem Computacional C/C++ 
________________________________________________________________________________________________ 
Sistemas Industriais Inteligentes \u2013 DAS \u2013 CTC \u2013 UFSC 100 
do usuário ou do programadador, isto é, devemos definir uma classe que controlará a execução do 
programa. Por fim, devemos ainda definir alguns elementos necessários para a interface do 
programa, como uma janela na tela onde desenharemos o tabuleiro, o mouse para que o usuário 
possa mexer as suas peças e todos os demais elementos necessários. 
Para cada um destes elementos, deveremos definir as propriedades e métodos que segundo 
esta nossa aplicação podem modelar corretamente o nosso ambiente. Quando criamos as classes de 
objetos, também definimos as relações entre eles. Descrevendo os componentes do ambiente e a 
relação entre eles, já teremos então uma representação similar deste. 
Neste capítulo seguimos apresentando a sintaxe para definção de classes de objetos em C++. 
14.1 Tipo Classe e o Encapsulamento de Dados 
A idéia fundamental de linguagens orientadas a objetos é a possibilidade de combinar num 
único registro campos que conterão dados e campos que são funções para operar os campos de 
dados do registro. Uma unidade assim é chamada classe. 
Uma instância (variável) de uma classe é chamada objeto e conterá campos de dados e 
funções. Definir uma classe não cria nenhum objeto, do mesmo modo que a existência do tipo int 
não cria nenhuma variável inteira. 
As funções de um objeto são chamadas funções-membro ou métodos e, de modo geral, são o 
único meio de acesso aos campos de dados também chamados de variáveis de instância. 
Se o programa necessita atribuir um valor a alguma variável de instância, deve chamar uma 
função-membro que recebe o valor como argumento e faz a alteração. Devemos evitar o acesso a 
variáveis de instância diretamente. 
Desta forma, os campos de dados estarão escondidos para nós, o que previne alterações 
acidentais ou inválidas. Dizemos então que os campos de dados e suas funções estão encapsulados 
(de cápsula) numa única entidade. As palavras encapsular e esconder são termos técnicos da 
definição de linguagens orientadas a objetos. 
O conceito de \u201cesconder\u201d dados significa que eles estarão confinados dentro da classe e não 
poderão ser alterados, por descuido, por funções que não perteçam a classe. 
Se alguma modificação ocorrer em variáveis de instância de um certo objeto, sabemos 
exatamente quais funções interagiram com elas: são as funções-membro do objeto. Nenhuma outra 
função pode acessar esses dados. Isso simplifica a escrita, manutenção e alteração do programa. Um 
programa em C++ consiste em um conjunto de objetos que se comunicam por meio de chamadas às 
funções-membro. 
14.2 Definindo Classes 
Vamos começar com um exemplo que mostra os elementos básicos na definição de classes e 
criação de objetos. O exemplo cria uma classe para representar um retângulo. 
 
// Exemplo de uma classe 
#include <iostream> 
using namespace std; 
 
class Retangulo // Define a classe 
{ 
 private: 
 int bas, alt; // atributos privados 
 public: 
 static int n; // atributos publicos 
 
 // Construtores e Destrutores 
Curso de Linguagem Computacional C/C++ 
________________________________________________________________________________________________ 
Sistemas Industriais Inteligentes \u2013 DAS \u2013 CTC \u2013 UFSC 101 
 Retangulo() { bas=0; alt=0; n++; } 
 
 Retangulo(int a, int b=0); 
 
 ~Retangulo() { n--; } 
 
 // metodos da classe