segunda-feira, 15 de novembro de 2010

Como representar Class Templates (ou Classes Genéricas) em UML?

Templates são velhos conhecidos dos programadores C++ e ganharam popularidade entre os programadores Java com a introdução dos Generics na versão 5 da linguagem Java. De forma superficial, pode-se dizer que os Generics da linguagem Java e os Templates do C++ são nomes diferentes para o mesmo conceito. Os arquitetos da linguagem Java foram muito felizes na escolha do nome, pois os Class Templates nada mais são do que uma forma de representar classes de uma forma genérica.

A questão é: como representar as classes genéricas em UML? Assim como em C++, a UML também utiliza o nome Template, conforme consta na especificação. A figura a seguir mostrar parcialmente como representar em UML a interface java.util.Collection da API Java.


Em linguagem Java, o código fica:

public interface Collection<E> {
 public boolean add(E e);
 public Iterator<E> iterator();
}

A seguir, temos um exemplo de criação de um array de String como uma especialização da classe java.util.ArrayList, que é uma classe genérica da API Java.


Antes de apresentar o código Java, é importante dizer que a classe StringArray não será exatamente uma subclasse da classe genérica ArrayList, mas sim uma implmentação da classe genérica, ligando o tipo String ao tipo genérico E do ArrayList.

O código Java, então, fica como abaixo:

public class StringArray extends ArrayList<String> {
}

Note também que, no código Java, a classe StringArray não está especializando a classe genérica ArrayList<E>, e sim a classe ArrayList<String>, tendo o tipo String já ligado ao tipo genérico E. Uma outra opção para se escrever o tipo ligado ArrayList<String> é apresentado no diagrama abaixo:


Para mais informações sobre Templates na UML, faça download da especificação que pode ser encontrada no site: http://www.omg.org/uml

8 comentários:

  1. Gostei da iniciativa, vou estar aqui a todo post! Gostei desse post...

    ResponderExcluir
  2. Obrigado Daniel. Será sempre bem vindo. Abraços.

    ResponderExcluir
  3. Adorei compadre!
    Share your knowlegde is the way...
    kissessssss

    ResponderExcluir
  4. Estou dentro! super legal o blog Márcio! adorei!!!

    ResponderExcluir
  5. Olá Comadre, obrigado, com certeza, esse é o caminho!!!

    Obrigado Kátia, vai acompanhando pois logo terá um post interessante pro seu TCC. ;)

    ResponderExcluir
  6. opa... isso é muito interessante! rs

    ResponderExcluir
  7. Também gostei mto... vou imitar o Daniel e estar aqui sempre...

    ResponderExcluir
  8. Obrigado Luana. Assim como disse pro Daniel, vc também será sempre bem vinda! ;) rsrsrs. Abraços.

    ResponderExcluir