Fazer generalizações em UML 2

É natural para classificar os objetos em categorias e para organizar as categorias em subcategorias. Se você olhar para um lugar para viver, você encontrar-se categorizar uma unidade de habitação como uma casa, apartamento, townhouse, condomínio, mansão, e assim por diante. Casas podem, por sua vez, ser mais organizado por estilos como o rancho, de dois andares, colonial, e saltbox. UML fornece-lhe com a notação para capturar esses tipos de classificações - também conhecido como generalização e especialização - e fazer uso deles como um modelador e um programador.

Alguns desenvolvedores orientados a objetos vão para grandes comprimentos para salvar um pouco de trabalho. Quando eles podem modelar alguma coisa uma vez e reutilizá-lo, eles estão interessados. Se eles podem escrever um método (o código do programa para uma operação) para uma classe apenas uma vez e usá-lo muitas vezes, em seguida, assiná-los acima para uma maior produtividade. Se você quiser poupar tempo, especificando atributos e operações uma vez e depois reutilizá-los muitas vezes, a ler.

Como você define classes, você pode notar que algumas classes têm os mesmos atributos ou as mesmas operações. Quando este for o caso, você coloca essas características comuns (atributos, operações, e assim por diante) em uma classe mais genérica chamada a superclasse. As classes que partilham as características comuns são conhecidos como subclasses da superclasse. Por exemplo, o comprimento do material gravado em uma fita de vídeo, fita cassete, compact disc, ou película de filme é um atributo de todos os quatro kindsof gravado mídia. Essas classes podem compartilhar outros atributos, bem como, tais como as suas dimensões físicas e a data de cada um deles foi usado para fazer uma gravação. Neste caso, o superclasse seria RecordedMedia, as subclasses seria Videotape, Audiotape, CompactDisc e MovieFilm, e alguns atributos comuns poderiam incluir recordedLength e totalLength.

Este processo de encontrar atributos semelhantes ou operações entre as classes é conhecida como generalização. Por exemplo, você generalizar o atributo RecordLength em uma classe mais genérica chamada RecordedMedia. O processo para mostrar uma generalização em UML é simples:

1. Identificar as subclasses.

Localizar classes que possuem os mesmos atributos e / ou operações. Essas classes são as suas subclasses.

2. Crie uma superclasse.

Fornecer uma superclasse para manter os atributos comuns e / ou operações das subclasses. Dê a superclasse um nome que categoriza todas as subclasses. Colocar a superclasse acima das subclasses no diagrama de torná-lo mais fácil de ler, mas não é necessário.)

3. Adicione características comuns para a superclasse.

Remover os atributos e operações comuns das subclasses e colocá-los (uma vez) na superclasse.

4. Desenhe um relacionamento de generalização.

Você desenhar uma linha generalização de cada subclasse para a superclasse. Na UML a linha generalização é representado como uma linha cheia com uma ponta de seta oca na extremidade superclasse. Em UML, uma linha com a ponta da seta oca que liga uma subclasse de uma superclasse é conhecido como um relacionamento de generalização.

Depois de criar uma superclasse com as características comuns, tais como atributos e operações, as subclasses herdar esses recursos da superclasse. Desta forma, você só tem que escrever as características comuns uma vez nos superclasse em vez de muitas vezes em cada uma das subclasses.

Você pode dizer se você tem uma generalização, olhando para o idioma que você (ou outros) usar para descrever a relação entre classes. Observe que ao descrever suportes gravados e seus diversos tipos, tais como a cassete vídeo anteriormente nesta seção, a frase "quatro kindsof registrados media" apareceu. Se você está utilizando frases como "espécie de" ou "tipo de", então as chances são que você tem uma generalização em suas mãos.

Dizer que um de seus clientes está preocupado com manter o controle de materiais em um arquivo. Este cliente tem acumulado diferente tipos de suportes gravados, tais como fitas de vídeo e fitas de áudio. Como modeladores, você precisa capturar as diferenças entre esses meios de comunicação, bem como as suas semelhanças. O diagrama na Figura 1 mostra o início de várias generalizações, dispostos em um hierarquia de herança.


Figura 1: hierarquia de herança simples.

Os desenvolvedores usam a generalização prazo ou herança para se referir ao mesmo conceito de reutilização de atributos compartilhados e operações que mostram em uma superclasse e reutilização em subclasses. Generalização refere-se ao conceito de generalizar a partir de especificidades (subclasses) para o genérico (superclasse). Hereditariedade refere-se ao efeito de generalização em subclasses.

Quando você vê um generalização relação entre as classes, o seu significado é muito diferente da de um Associação relação entre classes. Uma associação é em última análise, uma relação entre muitos objetos - alguns casos de uma classe tem um relacionamento (link) com instâncias de outra classe. Em uma relação entre generalização aulas, a relação é realmente sobre as classes. O melhor que você pode dizer é que um objeto criado a partir de uma subclasse contém todas as características da subclasse e da superclasse.

Você só tem um objeto a partir de uma classe em um relacionamento de generalização. Mesmo que você mostra duas classes, a subclasse e da superclasse, você só tem um objeto que é criado. Você pode pensar em um objeto da classe Videotape também ser um objeto da classe RecordedMedia por causa da herança. A Figura 2 mostra um objecto criado a partir da classe de fita de vídeo com todos os seus atributos. (A instância de uma classe é representado como um símbolo de objeto.) Você não tem dois objetos diferentes (uma para RecordedMedia e um para Videotape), apenas um objeto. Quando o vtu83-1023 objeto foi criado, os valores de todos os seus atributos foram definidos. A gravação na fita é de 57 minutos. O comprimento total da fita física é de 60 minutos. A fita é uma fita de vídeo U-Matic com uma altura de 10 polegadas, uma largura de 7 polegadas, e uma profundidade de 1,5 polegadas. A gravação é analógico, e um log do conteúdo da fita é ligado à fita para o arquivista para fazer referência.


Figura 2: Uma instância mostrando toda herdou atributos.

Você só tem uma instância definido por uma subclasse e sua superclasse. A subclasse e da superclasse pode ter uma operação de construtor (para criar a instância) e uma operação de destruição (para destruir o exemplo). Quando o software é executado, e você criar uma instância de uma subclasse, o construtor da superclasse é executado primeiro, seguido pelo construtor da subclasse. Quando chega a hora de eliminar a instância que você criou, o destruidor da subclasse é chamado em primeiro lugar, seguido pelo processo de destruição da superclasse. Se as coisas são mais complexas porque você tem subclasses de subclasses, basta lembrar: Construtores são invocados a partir do topo da hierarquia de herança para os destruidores localizados na base são chamados na ordem do menor subclasse até o mais alto superclasse.

menu