[UML ou OO] Enumeration pode herdar de outra enumeration?

1,414 views
Skip to first unread message

Rommel

unread,
Feb 23, 2010, 1:17:25 PM2/23/10
to PBJug
Olhando no metamodelo da UML, não encontrei nenhum restrição, porém,
consultando fóruns por aí, vi alguns dizerem que não é possível. As
ferramentas de UML que mexi aqui, permitem fazer a herança... e aí?
Pode ou não pode?
Ou na UML pode mas em OO não pode? Pq?

Se alguém tiver algum material de confiança (livro, artigo etc) sobre
essa questão, por favor, avisa aê... fóruns e blogs (sem referências)
não valem...

[]s

Maurício Linhares

unread,
Feb 23, 2010, 1:29:33 PM2/23/10
to pb...@googlegroups.com
Não faz muito sentido haver herança de enumerations, porque elas
normalmente são um conjunto de constantes já conhecidas, se você
precisa de uma nova constante é só adicionar ela lá, não faz muito
sentido ter herança de enumerations.

-
Maurício Linhares
http://codeshooter.wordpress.com/ | http://twitter.com/mauriciojr

2010/2/23 Rommel <ericr...@gmail.com>:

> --
> =================================================================
> Site do grupo: http://pbjug.org/
>
> Para sair da lista, envie um e-mail para pbjug-un...@groups.google.com
> =================================================================

Andrea

unread,
Feb 23, 2010, 1:50:13 PM2/23/10
to pb...@googlegroups.com
Olá a todos
 
Falando em Java especificamente, é tecnicamente impossível, ainda que alguma ferramenta UML permita desenhar diagramas assim:
Note: All enums implicitly extend java.lang.Enum. Since Java does not support multiple inheritance, an enum cannot extend anything else.  http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html
Uma enum filha de outra enum não poderia existir neste caso. Concordo tb com o Maurício, não faz mto sentido.
 
 
Atenciosamente,
Andrea Fernanda

Jonhnny Weslley

unread,
Feb 23, 2010, 1:53:35 PM2/23/10
to pb...@googlegroups.com
Mas, enumerations podem implementar interfaces. O q pode ser bastante útil.

2010/2/23 Maurício Linhares <linhares...@gmail.com>



--
Jonhnny Weslley Sousa Silva
MSc. Candidate in Computer Science
Distributed Systems Laboratory
Federal University of Campina Grande
------------------------------------------------------------------
BeeFS http://www.lsd.ufcg.edu.br/beefs
------------------------------------------------------------------
http://www.jonhnnyweslley.net

Maurício Linhares

unread,
Feb 23, 2010, 1:56:44 PM2/23/10
to pb...@googlegroups.com
Idealmente enumerations não deveriam ter código nenhum, uma
enumeration que implementa uma interface é definitivamente uma coisa
que me assustaria em um projeto.

2010/2/23 Jonhnny Weslley <jonhnny...@jonhnnyweslley.net>:

Jonhnny Weslley

unread,
Feb 23, 2010, 3:16:47 PM2/23/10
to pb...@googlegroups.com
Enums podem ser muitos mais do que meras contantes tipadas, e qdo combinadas com interfaces são uma forma bem mais simples de implementar o padrão Flyweight.

2010/2/23 Maurício Linhares <linhares...@gmail.com>
--
=================================================================
Site do grupo: http://pbjug.org/

Para sair da lista, envie um e-mail para pbjug-un...@groups.google.com
=================================================================

Maurício Linhares

unread,
Feb 23, 2010, 3:20:29 PM2/23/10
to pb...@googlegroups.com
A questão é que elas não foram pensadas pra esse caso, enumerações
deveriam ser apenas constantes tipadas. Se a necessidade vai além
disso, enumerações não deveriam ser utilizadas.

Rommel

unread,
Feb 23, 2010, 6:35:46 PM2/23/10
to PBJug
Veja essa situação:

Estou modelando uns agentes inteligentes. Nessa modelagem, há algumas
taxonomias específicas (como a de Russel&Norvig e Wooldridge), a
exemplo, Agente Reflexo (Reativo), Agente Baseado em Modelos (ABM),
Agente Baseado em Objetivos (ABO) e por aí vai. Esses agentes são
generalizações entre si, ou seja, o ABM é um Reativo com algumas
outras características. O ABO é um ABM com outras características e
por aí vai também. Agora veja a situação em que o agente mais simples,
o Reativo, possui alguns estados básicos, como Criado, Parado e
Rodando. Isso está numa enumeration. O ABM, por sua vez, terá os
mesmos estados do Reativo e alguns outros. O ABO segue o mesmo
raciocínio.
Da forma como está sendo modelado, usando uma abordagem ortogonal e
baseada em componentes, eu não preciso herdar todos os componentes do
modelo mais básico e sim, apenas os componentes dos quais preciso para
o modelo superior e apenas daquela visão específica. Assim, se não
puder fazer herança de enumeration, terei que toda vez reescrever os
mesmos dados, já escritos acima, o que seria evitado com uma herança,
já que bastaria adicionar os novos estados.
Desta forma, utilizando essa abordagem ortográfica e baseada em
componentes, não faz sentido ter herança de enums? Se pensar numa
simples modelagem OO realmente não faz muito... mas como descrevi,
acredito que há sim um sentido... não achas?

[]s

On 23 fev, 15:29, Maurício Linhares <linhares.mauri...@gmail.com>
wrote:


> Não faz muito sentido haver herança de enumerations, porque elas
> normalmente são um conjunto de constantes já conhecidas, se você
> precisa de uma nova constante é só adicionar ela lá, não faz muito
> sentido ter herança de enumerations.
>
> -

> Maurício Linhareshttp://codeshooter.wordpress.com/|http://twitter.com/mauriciojr
>
> 2010/2/23 Rommel <ericrom...@gmail.com>:


>
> > Olhando no metamodelo da UML, não encontrei nenhum restrição, porém,
> > consultando fóruns por aí, vi alguns dizerem que não é possível. As
> > ferramentas de UML que mexi aqui, permitem fazer a herança... e aí?
> > Pode ou não pode?
> > Ou na UML pode mas em OO não pode? Pq?
>
> > Se alguém tiver algum material de confiança (livro, artigo etc) sobre
> > essa questão, por favor, avisa aê... fóruns e blogs (sem referências)
> > não valem...
>
> > []s
>
> > --
> > =================================================================
> > Site do grupo:http://pbjug.org/
>

> > Para sair da lista, envie um e-mail para pbjug-unsubscr...@groups.google.com
> > =================================================================

Rommel

unread,
Feb 23, 2010, 6:37:18 PM2/23/10
to PBJug
É, realmente, em Java não... mas conceitualmente, em OO, herança
múltipla é possível e temos linguagens que suportam isso. Neste caso,
lendo a resposta que coloquei para o Maurício, o que vc acha?

[]s

On 23 fev, 15:50, Andrea <websapi...@gmail.com> wrote:
> Olá a todos
>
> *Falando em Java especificamente*, é tecnicamente impossível, ainda que


> alguma ferramenta UML permita desenhar diagramas assim:
>

>  *Note:* *All* enums implicitly extend java.lang.Enum. Since Java does not
> support multiple inheritance, *an enum cannot extend anything else.  *http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html


>
> Uma enum filha de outra enum não poderia existir neste caso. Concordo tb com
> o Maurício, não faz mto sentido.

>  <http://java.sun.com/docs/books/tutorial/java/javaOO/enum.html>


>
> Atenciosamente,
> Andrea Fernanda
>
> Em 23 de fevereiro de 2010 15:29, Maurício Linhares <

> linhares.mauri...@gmail.com> escreveu:


>
> > Não faz muito sentido haver herança de enumerations, porque elas
> > normalmente são um conjunto de constantes já conhecidas, se você
> > precisa de uma nova constante é só adicionar ela lá, não faz muito
> > sentido ter herança de enumerations.
>
> > -
> > Maurício Linhares
> >http://codeshooter.wordpress.com/|http://twitter.com/mauriciojr
>

> > 2010/2/23 Rommel <ericrom...@gmail.com>:


>
> >  > Olhando no metamodelo da UML, não encontrei nenhum restrição, porém,
> > > consultando fóruns por aí, vi alguns dizerem que não é possível. As
> > > ferramentas de UML que mexi aqui, permitem fazer a herança... e aí?
> > > Pode ou não pode?
> > > Ou na UML pode mas em OO não pode? Pq?
>
> > > Se alguém tiver algum material de confiança (livro, artigo etc) sobre
> > > essa questão, por favor, avisa aê... fóruns e blogs (sem referências)
> > > não valem...
>
> > > []s
>
> > > --
> > > =================================================================
> > > Site do grupo:http://pbjug.org/
>
> > > Para sair da lista, envie um e-mail para

> > pbjug-unsubscr...@groups.google.com


> > > =================================================================
>
> > --
> > =================================================================
> > Site do grupo:http://pbjug.org/
>
> > Para sair da lista, envie um e-mail para

> > pbjug-unsubscr...@groups.google.com
> > =================================================================

Andrea

unread,
Feb 23, 2010, 7:56:47 PM2/23/10
to pb...@googlegroups.com

Olá Rommel

 

Supondo que vc queria codificar seu projeto em Java, eu quis adiantar que não é possível fazer herança com enums usando Java.

 

Falei que não fazia sentido porque a estratégia de herança seria para objetos do domínio do negócio e enumerations seriam para representar novos tipos de conjuntos de dados (como o conjunto de status dos agentes), e não para objetos de domínio em si ...

 

Mas compreendo perfeitamente seu raciocínio no caso descrito. Contudo, se vc tiver 10 classes de agentes em sua hierarquia, vc vai querer ter 10 enumerations também em hierarquia, é isso? Não começa a complicar ?

De fato, algumas pessoas sentem essa necessidade sua de herdar de enums, depende do ponto de vista de cada um.

abs!

Atenciosamente,
Andrea



Para sair da lista, envie um e-mail para pbjug-un...@groups.google.com
=================================================================

Mauricio Linhares

unread,
Feb 23, 2010, 10:34:22 PM2/23/10
to pb...@googlegroups.com
Sendo a sua única preocupação reutilizar o código entre os vários
agentes, a solução mais simples (e próxima do conceito usual de
enums) seria colocar todos os possíveis valores em uma única classe
enum e cada um dos agentes usaria apenas os valores que lhe interessam.

Chega inclusive a ser estranho isso ser possível em uml dado que eu
acredito que nenhuma linguagem de programação aceitaria essa
construção, em C# por exemplo o enum é um value type, equivalente
aos tipos primitivos que temos em java.

A grande questão de não fazer sentido herdar de enums é que o enum
em si representa um conjunto de valores fixos e conhecidos, assim não
haveria necessidade de se "herdar" de um enum porque não é
necessário extendê-lo, todos os possíveis valores já eståo ali
disponíveis para uso.

Enviado de meu iPhone

> Para sair da lista, envie um e-mail para pbjug-un...@groups.google.com
> =================================================================

Tiago Farias

unread,
Feb 25, 2010, 12:58:57 PM2/25/10
to pb...@googlegroups.com
Essa discussão me lembra algo q eu li no blog da Caelum há um bom tempo:

http://blog.caelum.com.br/2006/10/14/como-nao-aprender-orientacao-a-objetos-heranca/

É interessante q as vezes nós (eu me incluo) nos "flagramos" utilizando herança sobre classes apenas pra economizar alguma linhas de código. Quando o intuito seria utilizar herança quando houvesse a relação "IS-A". Parece ser o caso citado pelo amigo...
Reply all
Reply to author
Forward
0 new messages