utfpr – campus curitiba - daeln cursos de eng. eletrônica/eng. da computação if62c -...

18
UTFPR – Campus Curitiba - DAELN UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Cursos de Eng. Eletrônica/Eng. da Computação Computação IF62C - Fundamentos de Programação IF62C - Fundamentos de Programação Semana 10 – parte I: Herança Simples e Múltipla Prof.a Tânia Preto / Prof. Robinson Vida

Upload: internet

Post on 22-Apr-2015

107 views

Category:

Documents


2 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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;

}