UTFPR – Campus Curitiba - DAELN
Cursos de Eng. Eletrônica/Eng. da Computação
IF62C - Fundamentos de Programação
Semana 10 – parte II: Herança Múltipla
Prof.a Tânia Preto / Prof. Robinson Vida
Herança Múltipla – Características (i/
 Ocorre
quando
uma
subclasse
herda
características de duas ou mais superclasses
imediatas, ou seja, é "filha" de mais de uma classe;
 Permite combinar as
características de várias
superclasses existentes em uma nova classe;
 Um ponto a ser observado é quanto a manipulação de
nomes de membros duplicados nas classes base, ou seja,
quando herda as mesmas características de classes
diferentes;
 Uso de qualificação: prefixar o nome do membro
(atributo ou método) com o nome da classe base a que
ele se refere, a fim de resolver o conflito.
Herança Múltipla – Exemplo 1
Herança Múltipla – Exemplo 2
Herança simples e herança múltipla no mesmo diagrama de classes:
 é possível ter os dois tipos de herança;
 Ocorre herança repetida: A mesma classe ascendente será
herdada por uma classe descendente mais de uma vez.
Herança Múltipla – Exemplo 3
•
•
Herança simples e herança múltipla no mesmo diagrama de
classes;
Especialização X Generalização
Herança Múltipla em C++ - Características
 C++ permite a implementação de herança múltipla;
 Sintaxe:
class SubClasse :
<tipo de acesso> SuperClasse1,
<tipo de acesso> SuperClasse2,
.....
<tipo de acesso> SuperClasseN {
// Definição da Classe
}
obs.: <tipo de acesso> pode ser private, public ou
protected. Caso não seja colocado nenhum
especificador de acesso, assume-se private como
default.
Herança Múltipla em C++ -
Exemplo
class Hora { // classe base Hora
protected: int hor, min, seg;
public: Hora(int h, int m, int s) { hor = h; min = m; seg = s;
}
virtual void display() {
std::cout << hor << “:” << min << “:” << seg;
}
};
class Data { //Classe Base Data
protected: int dia, mes, ano;
public: Data(int d, int m, int a) { dia = d; mes = m; ano = a;
}
virtual void display() {
std::cout << dia << “/” << mes << “/” << ano;
}
};
Herança Múltipla em C++ -
Exemplo – cont.
class Arquivo : public Data, public Hora {// Classe Derivada Arquivo
protected: char strArquivo[15];
public:
Arquivo(char *nomeArquivo, int dd, int mm, int aaaa,
int hh, int mn, int ss) : Hora(hh, mn, ss), Data (dd, mm, aaaa) {
strcpy(strArquivo, nomeArquivo);
}
void display();
};
void Arquivo::display() // Implementação do novo método display
{
std::cout << strArquivo << ” ” ;
Data::display(); // usa display de Data
std::cout << ” “;
Hora::display(); // usa display de Hora
}
“Herança Múltipla” em Java - Características
 Java não permite a implementação de herança
múltipla;
 Uma maneira aproximada de contornar a
necessidade de receber informações de entidades
diferentes é através do uso de interfaces;
 Em Java uma classe filha só pode ter uma classe
mãe, porém uma classe pode implementar várias
interfaces;
 Uma interface descreve métodos, mas não os
implementa;
 A classe é responsável por implementar os métodos
descritos na interface.
 Essa “implementação” pode ser considerada algo
semelhante a uma herança;
“Herança Múltipla” em Java - Exemplo
public interface Relogio { // descrição da interface
public String getHoras();
}
public interface Radio() { // descrição da interface
public void liga();
public void desliga();
public void trocaEstacao(int frequencia);
}
“Herança Múltipla” em Java Exemplo - continuação
public class RadioRelogio implements Radio, Relogio {
private String horarioAtual;
// implementação das interfaces:
public RadioRelogio { // Inicializa objeto
}
public String getHoras() { return horarioAtual;
}
public void liga() {
// Implementacao
}
public void desliga() { // Implementacao
}
public void trocaEstacao(int frequencia) { // Implementacao
}
}
Download

IF62C - Fundamentos de Programação