classes em c++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos....

Post on 21-May-2018

228 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Curso Profissional de Gestão e Programação de Sistemas Informáticos

Disciplina: Programação e Sistemas de Informação

Módulos 10 e 11 – POO

A professora: Sandra Soares

Classes em C++

Classes em C++Uma class define um novo tipo de dados

Class nome_identificador {

private: // dados e métodos não podem ser acedidos diretamente

dados e métodos;

protected: // dados e métodos só podem ser acedidos por classes derivadas

dados e métodos;

public: // dados e métodos podem ser acedidos diretamente

dados e métodos;

};

Classes em C++Uma definição de classe é em todo semelhante à definição de uma struct. Os dados são definidos como os campos de uma struct ou variáveis. Os métodos são definidos da mesma forma que funções.

Os dados e os métodos são acedidos e invocados, respetivamente, através do operador (.) ou “->” no caso do objeto ser um apontador.

Construtores Os construtores permitem a inicialização automática dasinstâncias. É permitida a definição de vários construtores deforma a disponibilizar um leque de inicializações possíveis.

O construtor é considerado o método especial, cujo nome éigual ao nome da classe.

Um construtor é invocado automaticamente quando édefinido um objeto de uma classe.

Construtores e construtores de classes derivadas

class base

{

private:

int a;

int b;

public:

base (int aa, int bb) { a=aa; b=bb;}

};

class derivada : public base

{

private:

int c;

public:

derivada (int aa, int bb, int cc) : base(aa,bb) { c=cc;}

};

void main(void)

{

base b1(1,2); //constrói um objeto da classe base

derivada d1(1,2,3); //constrói um objeto da classe derivada

}

Construtor da

classe base.

Construtor da

classe

derivada.

a e b são os parâmetros

da classe base que têm

que ser passados para a

classe derivada.

Classe-base – classe que serve de base à criação de outra classe;

Classe-derivada – classe que é criada a partir de outra classe.

Derivação de classes – criação de classes a partir de outras.

Herança – uma classe derivada herda, em princípio, todos os membros(variáveis ou atributos e funções ou métodos) da sua classe base.

Uma classe derivada, para ter razão de ser, deverá ter os seuselementos próprios, a nível de atributos e métodos (variáveis efunções), nuns casos, inteiramente novos, noutros casos, readaptadosda classe-base.

Uma classe derivada também pode servir de classe-base de uma outraclasse, logo podemos construir uma estrutura com vários níveis dehierarquia entre classes-base e derivadas – hierarquia de classes.

Derivação e herança entre classes

POOA derivação de classes com herança das classes-base e com as suas

características próprias, juntamente com a possibilidade de criarmos e

utilizarmos objetos de todas essas classes constitui, em traços gerais, a

essência da programação orientada para objetos.

Características fundamentais da POOEncapsulamento – tem a ver com a forma como a definição de umaclasse permite proteger o seu código e os seus dados. As vantagensdessa proteção são óbvias: as classes e os objetos constituem unidadesde código protegidas, flexíveis e reutilizáveis.

Polimorfismo – tem a ver com a possibilidade de criarmos diferentesversões para uma função ou operador; isto vem aumentar aflexibilidade e a possibilidade de readaptação desses elementos decódigo a novos contextos.

Herança – A derivação de classes com herança permite criar novasclasses a partir de outras já existentes; conjuntamente com issoreutilizam-se unidades de código já criadas e readaptam-se a novasfinalidades. Tudo isto junto permite a preparação de bibliotecas declasses que tornam a criação de aplicações mais fácil de rápida.

Criação de uma classe derivada: exemplo

Classe derivada Class D:[public|private|protected] B

A seguir ao nome da classe derivada inserem-se dois pontos(:),seguidos de um especificador de acesso (que pode ser: public; private;protected). Por fim, vem o nome da classe base.

As classes derivadas são criadas mais frequentemente com oespecificador public, pois, assim, essas classes herdam os membros daclasse-base com os mesmos qualificativos de public, private ouprotected e, além disso, os objetos da classe derivada podem ter acessoaos membros public da classe-base. As heranças com private eprotected são muito mais limitativas para as classes derivadas e objetos.

SituaçõesQuando uma classe derivada D é criada com public a partir de uma classe-baseB

◦ Os membros herdados da classe-base B mantêm, na classe derivada D, os mesmosqualificativos de public, private e protected;

◦ Os objetos da classe derivada D só têm acesso aos membros public da classe-base.

Quando uma classe derivada D é criada com protected a partir de uma classe-base B

◦ Os membros public e protected herdados da classe-base B passam todos a protectedna classe derivada D;

◦ Os objetos da classe derivada D não têm acesso a nenhum membro da classe-base.

Quando uma classe derivada D é criada com private a partir de uma classe-base B

◦ Os membros public e protected da classe-base B passam todos a private na classederivada D;

◦ Os objetos da classe derivada D não têm acesso a nenhum membro da classe-base.

Modalidades de acesso às classes com os especificadores public, private e protected

Hierarquia de classes

class Base

class Derivada1 : public Base

class Derivada2 : public Derivada1

Herança múltipla

class Base1 {…} class Base2 {…}

class Derivada : public Base1, public Base2

É possível criar uma classe derivada a partir

de mais do que uma classe base.

Herança múltiplaclass b1 {

};

class b2 {

};

class d: public b1, public b2 {

};

Herança múltipla

A classe derivada herda todos os membros das classes-base

mencionadas no seu cabeçalho e tem acesso direto a todos eles, exceto

em relação aos membros privados. Quanto aos objetos criados a partir

de uma classe derivada com herança múltipla, o acesso aos membros

das classes-base depende dos especificadores de acesso que foram

usados na criação da classe derivada.

Exemplo

Permissões de acesso

Tipo de Acesso Public Protected Private

Membros da mesma classe

Sim Sim Sim

Membros de classes derivadas

Sim Sim Não

Não membros Sim Não Não

Funções virtuais e sua redefinição em classes derivadas

Uma forma especial de redefinir uma função de uma classe-base em

classes derivadas passa pela utilização de funções virtuais. Uma função

virtual é uma função-membro de uma classe-base que é declarada com

a palavra virtual e tem de ser redefinida nas classes derivadas dessa

classe-base.

As funções virtuais constituem uma importante forma de polimorfismo

em C++. Elas permitem que as classes derivadas readaptem aos seus

contextos uma função membro da classe-base.

Função virtual pura e classe abstrataÉ possível declarar uma função virtual numa classe-base sem definiressa função, o que obriga a que toda a classe derivada tenha de ter asua versão da função virtual da classe-base.

Quando isto acontece, estamos perante aquilo que se chama umafunção virtual pura e uma classe abstrata.

Função virtual pura: é uma função que é declarada como virtual numaclasse-base e não recebe aí nenhuma definição, obrigando a que sejadefinida nas classes derivadas.

Classe abstrata: é uma classe que contém pelo menos uma funçãovirtual pura. Isto implica que uma classe abstrata não possa ser usadapara criar objetos a partir dela, uma vez que existe, pelo menos, ummembro não definido.

Função virtual pura e classe abstrataA forma geral para declarar uma função virtual pura é a seguinte:

virtual tipo_dados f_nome ([parâmetros])=0;

tipo_dados -> refere-se ao tipo de dados que a função retorna.

f_nome -> refere-se ao nome da função.

([parâmetros]) -> indica os eventuais parâmetros que a função pode utilizar.

A expressão = 0 é o indicativo que transforma a função em virtual pura (não é definida na classe base).

ExceçõesUma exceção ocorre quando um programa encontra-se numa situação anormal,

devido a condições que estão fora do seu controlo, tais como:

- memória insuficiente;

- erros de E/S;

- índice fora do intervalo permitido;

- etc…

Nessas ocasiões, a solução usualmente adotada consiste em exibir uma

mensagem de erro e interromper a execução do programa, devolvendo um

código de erro.

Exceções

Em C++, entretanto, podemos usar exceções para gerenciar de forma mais

eficaz os erros que ocorrem durante a execução de um programa. Em vez de

simplesmente abortar sua execução, podemos comunicar a ocorrência do

evento inesperado a um contexto de execução mais alto, que esteja melhor

capacitado para se recuperar da condição de erro.

ExemploPara lançar uma exceção a um nível mais alto de execução, usamos o comando throw:

try… catchUma exceção lançada é tratada depois, por um código que se encontra fora do

fluxo de execução normal do programa. Para tratar uma exceção, usamos a

seguinte estrutura:

Quando uma exceção é detetada dentro de um bloco try, os destrutores dos

objetos criados no bloco são chamados e, em seguida, o controle é transferido

ao bloco catch correspondente ao tipo da exceção detetada, se ele existir. No

final da execução do bloco catch, o programa continua a sua execução

normalmente, na primeira instrução após a estrutura try...catch.

Exemplo

Exemplo

top related