Baixe o app para aproveitar ainda mais
Prévia do material em texto
Classes, Objetos e Escopos Profa. Dra. Ieda Hidalgo E-mail: iedahidalgo@ft.unicamp.br Definição de Classe Classe é um tipo definido pelo usuário que combina num único registro dados e funções. A primeira evolução que uma classe acrescenta à programação é a possibilidade de se controlar o acesso aos seus membros. A segunda, é a possibilidade de incluir entre seus membros funções. Definição de Objeto Do mesmo modo que a existência do tipo “int” não cria uma variável, definir uma classe não cria um objeto. Podem ser declaradas variáveis de uma classe já definida. As variáveis de tipo classe são chamadas de objetos ou instâncias da classe. Nomenclatura Os dados de um objeto são chamados de dados- membro ou atributos. As funções de um objeto são chamadas de funções-membro ou métodos. Os membros de uma classe são privados por default, nas estruturas e uniões eles são públicos por default. Definindo uma Classe A definição de uma classe começa pela palavra-chave “class”, seguida do nome da classe e de seu corpo (delimitado por “{“ e finalizado com um ";“). Sintaxe class nome-classe { dados e funções privadas protected: dados e funções protegidas public: dados e funções públicas } lista-objetos; Exemplo class Retangulo // define a classe { private: // default, pode ser omitido int base, altura; // dados-membro public: // função-membro inline void inicia (int b, int h) {base=b; altura=h;} // função-membro void imprime() }; // aqui podem ser criados objetos da classe Observações Uma função-membro é inline quando o seu código está definido no corpo da classe. Uma função-membro inline pode ser definida fora da classe usando a palavra inline. Um membro de uma classe pode ser de qualquer tipo, inclusive do tipo de outra classe. A ordem de declaração de acesso (público, protegido ou privado) não importa. Criando Objetos da Classe Após a definição de uma classe podemos declarar um objeto desse tipo. Um objeto contém sua própria cópia de cada membro definido pela classe. Declarar um objeto é similar a declarar uma variável de qualquer tipo. Sintaxe / Exemplo Obs: objetos também podem ser declarados antes do “;” que finaliza a declaração de uma classe. Sintaxe: tipo-classe nome-objeto; Exemplo: // declara dois objetos, x e y, da classe Retangulo Retangulo x, y; Acessando Membros do Objeto Diretamente Sintaxe: nome-objeto.nome-membro Exemplo: x.inicia(5,3); // executa a função inicia do objeto x. Acessando Membros do Objeto usando Ponteiro Sintaxe: nome-ponteiro->nome-membro Exemplo: // declara um objeto y e um ponteiro p da classe Retangulo Retangulo y ,*p p = &y; // p recebe o endereço do objeto y p->inicia(5,3); // executa a função inicia do objeto y Implementação da Função-Membro As funções-membro cujo código fica fora da classe devem ter seu protótipo escrito dentro da definição da classe. Essa é a maneira de informar ao compilador que a função faz parte da classe, embora esteja definida fora dela. Para implementar uma função membro você deve dizer ao compilador a que classe a função pertence, usando o operador de resolução de escopo “::”. Sintaxe: tipo-retorno nome-classe :: nome-função parâmetros Exemplo: int Retangulo :: imprime() { ... inicia(10, 13); area = base x altura; ... } Dentro da função os membros podem ser usados diretamente (sem associá-los a um objeto). Isto porque uma função-membro deve ser chamada em relação a um objeto e, portanto, não é necessário especificá-lo uma segunda vez. Criando uma Matriz de Objetos Sintaxe: nome-classe nome-objeto tamanho-matriz Exemplo: Retangulo y[4]; Atribuindo Objetos Se ambos os objetos são do mesmo tipo, então um objeto pode ser atribuído a outro. Após a atribuição os dois objetos serão idênticos. Sintaxe: nome-objeto1 = nome-objeto2; Retornando Objetos Para retornar um objeto declare a função com tipo de retorno igual ao tipo da classe e retorne um objeto do mesmo tipo usando a instrução return. Escopos No corpo da definição de uma classe, as palavras: public, private e protected especificam o acesso e a visibilidade dos seus membros às partes do sistema. Tipos de Clientes Uma classe tem pelo menos três tipos de clientes: � clientes por instanciação (são os objetos) � clientes por herança (são as subclasses que herdam a estrutura da classe) � clientes por módulo (são as classes que estão dentro do mesmo módulo/pacote) Acesso Público Os membros públicos podem ser acessados por qualquer função-membro e por qualquer outra função do programa onde um objeto foi declarado. Os membros públicos fazem a interface entre o programador e a classe. Geralmente na parte pública da classe são colocadas as funções que irão operar os dados. Qualquer um dos 3 tipos de clientes pode fazer acesso, manipular e invocar diretamente membros declarados como públicos. Acesso Privado Os membros privados podem ser acessados pela classe inteira, mas não fora dela. Um membro privado não pode ser acessado por meio de um objeto. Geralmente na parte privada da classe são colocados os membros que conterão dados. Nenhum dos 3 tipos de clientes tem acesso. Acesso Protegido Os membros protegidos são acessados dentro da própria classe e pelos clientes por herança.
Compartilhar