Interfaces e classes abstratas. Conceitos de Orientação a Objeto

Preview:

Citation preview

Interfaces e classes abstratas

Conceitos de Orientação a Objeto

Classes Abstratas

Uma classe abstrata é uma classe que não pode ser instanciada diretamente. Em vez disso, você instancia uma instância de uma subclasse. Normalmente, uma classe abstrata tem uma ou mais operações abstratas . Uma operação abstrata não tem nenhuma implementação; ela é uma declaração pura para que os clientes possam se ligar à classe abstrata.

Livro texto: UML Essencial 3ª edição, pagina 80

Classes Abstratas

Classes AbstratasEm uma hierarquia de classe, quanto mais

alta a classe, mais abstrata é sua definição

Uma classe no topo da hierarquia pode definir apenas o comportamento e atributos que são comuns a todas as classes

Em alguns casos, a classe nem precisa ser instanciada diretamente e cumpre apenas o papel de ser um repositório de comportamentos e atributos em comum

É possível definir classes, métodos e propriedades abstratas em C#

Em Python

exceção NotImplementedError Essa exceção é derivado RuntimeError . Em definidas classes base do usuário, métodos abstratos devem levantar essa exceção quando necessitam de classes derivadas para substituir o método.

de Adones Cunha <adonescunha@gmail.com>responder a pug-pe@googlegroups.compara pug-pe@googlegroups.comdata 22 de agosto de 2010 16:59assunto Re: [pug-pe] Como defino interfaces/classes abstratas em python?

“Acho importante ressaltar que interfaces ou classes abstratas são mais do que uma feature de uma determinada linguagem. São abstrações de responsabilidades que você atribui a uma classe. Esse tipo de "contrato" é implementado mesmo em linguagens que não dão o mesmo tipo de suporte que Java e C# dão.

Claro que em cada linguagem isso é feito de uma maneira diferente. Apenas não devemos confundir padrões de orientação a objetos com palavras reservadas de uma determinada linguagem.

Percebo que se fala muito de ser "pythonico", seguir o "ruby way" ou qualquer coisa desse tipo, ignorando padrões e convenções adotados por comunidades de linguagens diferentes das que usamos. Acho que esses padrões devem ser entendidos e até mesmo usados quando for apropriado.

No caso da implementação de classes abstratas, por exemplo, por mais que não fosse estritamente necessário a versão 2.6 vem com o módulo abc para especificar métodos abstratos. Se vocês lerem a proposta da adição desse método, verão que a motivação está puramente centrada em facilitar o seguimento de padrões de orientação a objeto...”

Associações de Herança

Exemplo de classe abstrata

Associações de HerançaClasses abstratas

As classes concretas geram instâncias

As classes abstratas NÃO geram instâncias,

apenas simplificam a hierarquia de herança

Definem atributos e métodos para serem herdados

Possui ao menos um método abstrato (que não possui implementação)

A maneira mais comum de iniciar uma classe ou operação abstrata na UML é colocar o nome em itálico. Você pode tornar propriedades abstratas indicando uma propriedade abstrata ou métodos de acesso. As palavras em itálicos são chatas de escrever em um quadro branco; portanto, você pode usar o rotulo : {abstract}

Livro texto: UML Essencial 3ª edição, pagina 80-81

Interfaces

Interfaces

Uma interface é uma classe que não tem nenhuma implementação; isto é, todas as suas propriedades são abstratas as interfaces correspondem diretamente às interfaces das linguagens C# e Java e são um dia leto comum em outras linguagens tipadas.

Livro texto: UML Essencial 3ª edição, pagina 81

Interfaces

código a seguir testa as classes

Notação UML para representar interface

20/10/10

20/10/10

Recommended