.NET :: POO C# .NET - Aula 01 - Fundamentos do .NET Framework
Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos....
Transcript of Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos....
![Page 1: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/1.jpg)
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++
![Page 2: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/2.jpg)
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;
};
![Page 3: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/3.jpg)
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.
![Page 4: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/4.jpg)
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.
![Page 5: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/5.jpg)
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.
![Page 6: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/6.jpg)
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
![Page 7: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/7.jpg)
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.
![Page 8: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/8.jpg)
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.
![Page 9: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/9.jpg)
Criação de uma classe derivada: exemplo
![Page 10: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/10.jpg)
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.
![Page 11: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/11.jpg)
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.
![Page 12: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/12.jpg)
Modalidades de acesso às classes com os especificadores public, private e protected
![Page 13: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/13.jpg)
Hierarquia de classes
class Base
class Derivada1 : public Base
class Derivada2 : public Derivada1
…
![Page 14: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/14.jpg)
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.
![Page 15: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/15.jpg)
Herança múltiplaclass b1 {
…
};
class b2 {
…
};
class d: public b1, public b2 {
…
};
![Page 16: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/16.jpg)
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.
![Page 17: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/17.jpg)
Exemplo
![Page 18: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/18.jpg)
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
![Page 19: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/19.jpg)
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.
![Page 20: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/20.jpg)
![Page 21: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/21.jpg)
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.
![Page 22: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/22.jpg)
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).
![Page 23: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/23.jpg)
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.
![Page 24: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/24.jpg)
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.
![Page 25: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/25.jpg)
ExemploPara lançar uma exceção a um nível mais alto de execução, usamos o comando throw:
![Page 26: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/26.jpg)
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.
![Page 27: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/27.jpg)
Exemplo
![Page 28: Classes em C++ - sandrapsoares.files.wordpress.comªncia da programação orientada para objetos. Características fundamentais da POO ... Em C++, entretanto, podemos usar exceções](https://reader034.fdocumentos.tips/reader034/viewer/2022051803/5b01ac607f8b9ab9598cade3/html5/thumbnails/28.jpg)
Exemplo