utfpr – campus curitiba - daeln cursos de eng. eletrônica/eng. da computação if62c -...
TRANSCRIPT
![Page 1: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/1.jpg)
UTFPR – Campus Curitiba - DAELNUTFPR – Campus Curitiba - DAELNCursos de Eng. Eletrônica/Eng. da ComputaçãoCursos de Eng. Eletrônica/Eng. da Computação
IF62C - Fundamentos de ProgramaçãoIF62C - Fundamentos de Programação
Semana 10 – parte I: Herança Simples e Múltipla
Prof.a Tânia Preto / Prof. Robinson Vida
![Page 2: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/2.jpg)
Herança – Características (i/ )Herança – Características (i/ )
Herança é um mecanismo da OO que permite criar novas classes a partir de classes já existentes, aproveitando-se das características já definidas na classe;
Esta característica permite mecanismo o reuso e reaproveitamento de código existente, diminuindo o tamanho do código e tornando a programação mais eficiente;
As novas classes são chamadas de classes derivadas (subclasses) e herdam as características da classes bases (superclasses);
Uma subclasse pode herdar: Atributos, Métodos e Relacionamentos
![Page 3: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/3.jpg)
Herança – Características (ii/ )Herança – Características (ii/ )
As subclasses são mais especializadas do que as suas superclasses que são mais genéricas.
Dizemos também que a subclasse é uma extensão da superclasse;
Razões para estender classes: alterar classes já existentes e adicionar
propriedades ou comportamentos para representar outra classe de objetos;
criar uma hierarquia de classes que “herdam” propriedades e comportamentos de outra classe e definem novas propriedades e comportamentos.
![Page 4: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/4.jpg)
Herança – Características (iii/ ) Herança – Características (iii/ )
Exemplo: As classes X1, X2 e X3 herdaram as características A e B da classe base (ou superclasse) X;
Observa-se no exemplos que não foi necessário implementar novamente as características A e B para as novas classes, ou seja, essas características foram herdadas.
As subclasse, , além de herdarem todas as características de seus supertipos, podem adicionar mais características tais como variáveis e/ou métodos adicionais, bem como reescrever métodos já existentes na superclasse (polimorfismo).
![Page 5: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/5.jpg)
Herança – Características (iii/ ) Herança – Características (iii/ )
Alterações feitas na superclasse afetam diretamente todas as classes descendentes;
Termos como palavras classe base, supertipo, superclasse, classe pai e classe mãe são sinônimos, assim como palavras classe derivada, subtipo, subclasse e classe filha também são sinônimos;
Herança simples X herança múltipla:◦ Herança simples é quando uma classe só herda características
de uma única classe mãe;
◦ Herança múltipla é quando uma classe herda características de mais de uma classe;
◦ Algumas linguagens permitem herança múltipla como C++, outras não permitem herança múltipla que é o caso do Java;
◦ Java contém um mecanismo para “aproximar” a herança múltipla que é o uso de interfaces.
![Page 6: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/6.jpg)
Herança – Características Herança – Características (iv/ ) (iv/ )
Exemplo de Herança simples usando UML:
A classe VeículoTerrestre contém as subclasses Carro e Caminhão, que herdaram os Atributos Peso e Comprimento;
A Classe Caminhão contém o Atributo Tonelagem próprio da Classe, herdando Peso e Comprimento;
A Classe Carro não tem Atributo próprio, herdando Peso e Comprimento da classe VeículoTerrestre;
Podemos entender que tanto Caminhão como Carros são uma espécie de VeículoTerrestre;
![Page 7: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/7.jpg)
Herança – Características Herança – Características (iv/ ) (iv/ )
Exemplo de Herança simples usando UML:
A classe VeículoTerrestre contém as subclasses Carro e Caminhão, que herdaram os Atributos Peso e Comprimento;
A Classe Caminhão contém o Atributo Tonelagem próprio da Classe, herdando Peso e Comprimento;
A Classe Carro não tem Atributo próprio, herdando Peso e Comprimento da classe VeículoTerrestre;
Podemos entender que tanto Caminhão como Carros são uma espécie de VeículoTerrestre;
![Page 8: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/8.jpg)
Herança simples – Herança simples – Exemplo 1Exemplo 1- - JAVAJAVA
class Funcionario { // super classe
protect String nome, cpf;
protect double salario;
public void setNome(String nome){
this.nome = nome;
}
public String getNome( ){
return this.nome;
}
public double getBonificação ( ) {
return this.salario *0.10;
} //idem para cpf e salario
}
![Page 9: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/9.jpg)
Herança simples – Herança simples – Exemplo 1 Java- Exemplo 1 Java- cont.cont.class Gerente extends Funcionario { // subclasse
int senha;
int numFuncGerenciados;
public void setSenha(int senha){
this.senha =senha;
}
public boolean autentica (int senha) {
if (this.senha == senha) return true
else return false;
}
}
![Page 10: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/10.jpg)
Herança simples – Herança simples – Exemplo 2-Exemplo 2-C++C++ class Funcionario { // super classe
public: void setNome(std::string nome);
std::string getNome( );
protected: std::string nome; //protected: classe derivada pode acessar
std::string cpf;
double salario;
double getBonificação ( );
};
void Funcionario::setNome(std::string _nome) {
nome = _nome; }
double getBonificação ( ) { return this.salario *0.10; }
std::string Funcionario:: getNome( ) { return nome }
//idem para cpf e salario
![Page 11: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/11.jpg)
Herança simples – Herança simples – Exemplo 2 C+Exemplo 2 C++cont.+cont.
class Gerente : public Funcionario { // gerente é subclasse
private: int senha;
public: int numFuncGerenciados;
void setSenha(int senha);
boolean autentica (int senha);
};
void Gerente::setSenha(int _senha) { senha = _senha; }
boolean Gerente::autentica (int _senha) {
if (senha == _senha) return true
else return false;
}
![Page 12: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/12.jpg)
Herança - Herança - Especificadores de Especificadores de AcessoAcesso Atributos e métodos privados são herdados, mas não
podem ser acessados diretamente; Além dos especificadores public e private, existe um
outro especificador relacionado ao conceito de herança: protected;
protected: ◦ permite a visibilidade ao pacote e as subclasses de
outros pacotes;◦ funciona como private sob ponto de vista externo a
classe;◦ atributos protected são visíveis pelas classes
derivadas, enquanto os private não o são;
![Page 13: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/13.jpg)
Herança - Especificadores de Herança - Especificadores de Acesso – Exemplo C++Acesso – Exemplo C++
![Page 14: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/14.jpg)
Herança – Flexibilidade Herança – Flexibilidade
Construtores:◦ Os métodos herdados são usados exatamente
como os não herdados;◦ Java: Métodos construtores não são herdados, é
necessário invocá-los usando super( ) ou this ( );◦ C++: Construtor default só é disponível se também
for disponível na superclasse;
Reescrita de Métodos:◦ Um método herdado de uma classe pode ser
reescrito (sobreescrito / override), alterando seu comportamento;
![Page 15: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/15.jpg)
Herança – Herança – Reescrita de Reescrita de MétodosMétodosUm método herdado de uma classe pode ser
reescrito (sobreescrito, sobreposto, override), alterando assim seu comportamento;
As assinaturas (parâmetros) devem ser identicas;
![Page 16: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/16.jpg)
Herança simples – Herança simples – Exemplo 2 JavaExemplo 2 Java
class Gerente extends Funcionario { // subclasse com reescrita
int senha;
int numFuncGerenciados;
public void setSenha(int senha) {
this.senha =senha;
}
public boolean autentica (int senha) {
if (this.senha == senha) return true
else return false;
}
public double getBonificação ( ) { // sobreescrevendo
return this.salario *0.15;
}
}
![Page 17: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/17.jpg)
Herança simples - Herança simples - Exemplo 2 Java- Exemplo 2 Java- cont.cont.Outra maneira de reescrever:
public double getBonificação ( ) { // sobreescrevendo
return super. getBonificação( ) + 1000;
}class testaGerente {
public static void main (String[] args) {Gerente gerente = new Gerente; gerente.setNome(“Chuck Berry”);gerente.setSalario(5000.0);System.out.println(gerente.getBonificacao);}}
Teste o uso do método getBonificacao da classe pai e também a alteração acima;
![Page 18: UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e](https://reader035.vdocuments.pub/reader035/viewer/2022062512/552fc175497959413d8ef452/html5/thumbnails/18.jpg)
Herança simples – Herança simples – Exemplo 2 C++Exemplo 2 C++
class Gerente : public Funcionario { // gerente é subclasse
private: int senha;
public: int numFuncGerenciados;
void setSenha(int senha);
boolean autentica (int senha);
};
void Gerente::setSenha(int _senha) { senha = _senha; }
double Gerente::getBonificação ( ) { return this.salario *0.15; } // sobreescrevendo o método da classe pai
boolean Gerente::autentica (int _senha) {
if (senha == _senha) return true
else return false;
}