28
Programação Orientada à Objetos Aula 9 – Herança

Programação Orientada à Objetos

Embed Size (px)

DESCRIPTION

Programação Orientada à Objetos. Aula 9 – Herança. Herança. ● Conceito: - PowerPoint PPT Presentation

Citation preview

Page 1: Programação Orientada à Objetos

Programação Orientada à Objetos

Aula 9 – Herança

Page 2: Programação Orientada à Objetos

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:

Page 3: Programação Orientada à Objetos

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

Page 4: Programação Orientada à Objetos

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

Page 5: Programação Orientada à Objetos

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

Page 6: Programação Orientada à Objetos

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

Page 7: Programação Orientada à Objetos

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:

Page 8: Programação Orientada à Objetos

ComposiçãoExemplo de composição:

Page 9: Programação Orientada à Objetos

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.

Page 10: Programação Orientada à Objetos

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.

Page 11: Programação Orientada à Objetos

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

Page 12: Programação Orientada à Objetos

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.

Page 13: Programação Orientada à Objetos

Exemplo de Herança

Page 14: Programação Orientada à Objetos

Exemplo de Herança

Page 15: Programação Orientada à Objetos

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

Page 16: Programação Orientada à Objetos

Herança em C# A sintaxe para declarar uma classe que herda de outra

em C# é: class DerivedClass : BaseClass { ... }

Sub-classes podem ser normalmente classes base para outras heranças: class DerivedSubClass : DerivedClass { ... }

As classes herdam apenas de uma classe base Uma classe sealed (selada) não pode ser herdada

Page 17: Programação Orientada à Objetos

Herança em C#

Classe base

Page 18: Programação Orientada à Objetos

Herança em C#

Classe derivada

Page 19: Programação Orientada à Objetos

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.

Page 20: Programação Orientada à Objetos

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.

Page 21: Programação Orientada à Objetos

Herança em C#● Observação: Vale relembrar a semântica relacionada aos símbolos

utilizados pararepresentar o nível de encapsulamento de um atributo ou método,

de acordo com aterminologia da linguagem UML[RBJ06].

Page 22: Programação Orientada à Objetos

Herança em C#Exemplo:

Page 23: Programação Orientada à Objetos

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

Page 24: Programação Orientada à Objetos

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.

Page 25: Programação Orientada à Objetos

Exemplo – classe base

Page 26: Programação Orientada à Objetos

Exemplo – classe derivada

Page 27: Programação Orientada à Objetos

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; } }

Page 28: Programação Orientada à Objetos

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?