Programação
Orientada à
Objetos
Aula 9 – Herança
Herança
● Conceito:
– Herança é a capacidade de especializar tipos de objetos
(classes), de forma que os tipos especializados contenham,
além de características estruturais e comportamentais já
definidas pelos seus “ancestrais”, outras definidas para eles
próprios.
● Forma:
Herança em POO

Herança é um conceito chave usado na orientada ao objeto para descrever uma
relação entre classes

Através da herança uma classe copia ou herda todas as propriedades, atributos e
métodos de uma outra classe, podendo estender sua funcionalidade

A classe que cede os membros para a outra é chamada super-classe, classe base
ou classe ancestral

A classe que herda os membros de uma outra é chamada sub-classe ou classe
derivada

A herança evita a reescrita de código e especifica um relacionamento de
especialização/generalização
Herança e UML

A UML (Unified Modeling Language) – Linguagem de
Modelagem Unificada – é uma linguagem padrão
baseada em diagramas utilizada para modelar sistema
orientados a objetos

A estrutura de uma classe e seus relacionamentos
podem ser visualizados em um Diagrama de Classes

A herança no diagrama de classes é indicada por uma
seta da classe derivada para a classe ancestral
Herança
● A especialização pode ser feita tanto a partir de classes já
construídas pelo próprio programador, como por classes de
terceiros ou classes-padrão da linguagem específica.
Classe feita pelo programador -> Classe “Pessoa”, “Avião”,
“Cachorro”
Classes padrões -> “System” utilizada através do Using
System.Object


A classe System.Object é a classe ancestral de qualquer
classe em C#, mesmo que não declarada

class Empregado { ...

}

class Empregado : System.Object { ...

}
Métodos herdados de System.Object

Equals – Testa se dois objetos são iguais

GetHashCode – Retorna o código de hash para o objeto

GetType – Retorna informação sobre a classe do objeto

ToString – Retorna o objeto como string
Composição
● Conceito:
– É a técnica de construir um tipo não pela derivação partindo de
outra classe, mas pela junção de vários outros objetos de menor
complexidade que fornecem ao objeto composto determinada
funcionalidade quando em conjunto.
● Forma:
Composição
Exemplo de composição:
Composição
● Não há nenhuma palavra-chave ou recurso especial para
utilizar composição em c#, visto que esta técnica nada mais
é do que um modo particular, para cada situação, de
agrupar classes existentes de forma a criar novas classes com
novas funcionalidades em determinado arranjo.
Herança

A herança, juntamente com o
encapsulamento e polimorfismo, é um dos
três características primárias (ou pilares de )
da programação orientada a objeto

A herança permite que criar novas classes
que reutilizem, estendam e modifiquem um
comportamento que é definido em outras
classes.
Herança

A classes que é herdada é chamada de





Classe base
Classe Pai
Classe Mãe
Super Classe
A classe que herda de outra classe é
chamada de:



Classe derivada
Classe Filho
Sub Classe
Herança
 Conceitualmente,
uma classe derivada é
uma especialização da classe base.
 Diferente
do JAVA, C# aceita herança
múltipla e herança simples.
Exemplo de Herança
Exemplo de Herança
Encapsulamento e
Polimorfismo


Encapsulamento é o conceito da POO relacionado
com a visibilidade dos membros da classe

O símbolo – indica os membros privados

O símbolo # indica os membros protegidos

O símbolo + indica os membros públicos
Polimorfismo é o conceito da POO que ocorre
quando objetos de classes distintas em uma
hierarquia realizam uma mesma operação (mesmo
método) de forma diferente
Herança em C#

A sintaxe para declarar uma classe que herda de outra
em C# é:




Sub-classes podem ser normalmente classes base para
outras heranças:





class DerivedClass : BaseClass {
...
}
class DerivedSubClass : DerivedClass {
...
}
As classes herdam apenas de uma classe base
Uma classe sealed (selada) não pode ser herdada
Herança em C#
 Classe
base
Herança em C#
 Classe
derivada
Modificadores de Acesso

Em C# existem o seguintes modificadores de acesso

public


Um método definido como Public pode ser acessado
por qualquer classe de qualquer projeto
private

Este modificador é o mais restrito, somente a classe
onde ele foi definido é que pode acessá-lo, nenhuma
outra tem permissão, nem mesmo as classes que
herdam da classe onde o método foi definido.
Modificadores de Acesso
 protected

Somente as classes que herdam da classe
que contem o método protegido
(protected) tem permissão para acessá-lo
e as classes que estão no mesmo pacote.
Herança em C#
● Observação: Vale relembrar a semântica relacionada aos símbolos
utilizados para
representar o nível de encapsulamento de um atributo ou método, de
acordo com a
terminologia da linguagem UML[RBJ06].
Herança em C#
Exemplo:
Construtores

Instanciar um objeto de uma classe derivada
inicia uma cadeia de chamadas de contrutores.

Antes de realizar suas tarefas o contrutor da classe
derivada invoca o construtor da classe base

Assim, podemos dizer que sempre que criamos um
objeto da classe derivada estamos criando
também um objeto da classe base
Herança em C#
● Construtores em subclasses
– A sequência de execução dos construtores sempre acontece no
sentido top-down, ou seja, desde a superclasse, passando por todos
os níveis da hierarquia, até chegar à subclasse em questão, como
pode ser visto na Figura 4.5.
Exemplo – classe base
Exemplo – classe derivada
Herança x Construtores

Os construtores da classe ancestral podem (e devem) ser
chamados pelo construtor da classe derivada com a palavra
reservada base

class Empregado {

private string nome;

protected double salarioFixo;

public Empregado(string aNome, double aSalarioFixo) {

nome = aNome;

salarioFixo = aSalarioFixo; }

}

class Gerente : Empregado {

private double gratificacao;

public Gerente(string aNome, double aSalarioFixo, double
aGratificacao) : base(aNome, aSalarioFixo) {

gratificacao = aGratificacao; }


}
Exercícios
● Explique em poucas palavras o que seria uma herança em C#.
● Explique de que maneira o uso da herança promove a reutilização
de código.
● Qual a utilidade de se definir métodos e atributos com o modificador
de acesso protected?
Download

POO Aula 9- Herança (1)