Desenvolvedores.Net - TechBlog

Tag Archives: Especialização

Tipos de Relacionamento (UML)

3
1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (5 votos, média: 5,00 de 5)
Loading ... Loading ...
14 de abril de 2011

Para um melhor entendimento deste Artigo veja o Índice (UML)

Neste artigo irei abordar os tipos de relacionamento que a UML tem.

Os relacionamentos  ou associações definem as dependências e ligações entre as classes, objetos, pacotes, tabelas, entre outros que iremos ver no decorrer do artigo.

Vamos à eles:

Associação

É uma conexão entre as classes , tabelas e objetos. Um relacionamento.

Em UML uma associação representa um relacionamento que descreve as ligações entre os objetos ligados.

Uma associação deve ter sempre duas pontas, onde uma é o objeto de início e a outra o objeto final.

Uma associação pode representar a multiplicidade entre os objetos. Podemos ter as seguintes representações de multiplicidade:
0 (zero)
1 (um)
0…1 (zero ou um)
0…* (zero ou mais)
1…* (um para muitos)
* (muitos)

 

Por exemplo, podemos pegar uma Nota Fiscal e seus Itens.

Uma nota fiscal, vários itens.

 

As associações podem ser:

  • Normais:
    • É o tipo mais comum, é representada por uma linha sólida entre as classes. Possui um nome em cada ponta que identifica o que cada uma representa, normalmente é um verbo. Mas fica a critério de cada um para facilitar o entendimento.
  • Recursiva:
    • Indica que uma classe pode conectar-se a ela mesma. Por exemplo. Pegamos o objeto Pessoa. Ele é um objeto que pode ser um Pai, um Filho, um Fornecedor, um Cliente, um Usuário. Mas todos estes são “Pessoas”.
  • Um outro exemplo pode ser um plano de contas, onde podemos ter:

    Fornecedor
        |----> Água;
        |----> Luz;
    Receitas
        |----> Vendas
        |----> Serviços
    Despesas
        |----> Financeiras
        |----> Funcionários

    Neste caso podemos estar colocando todos dentro do mesmo objeto e definir o “pai” como o nível superior de cada conta.

  • Exclusiva:
    • Em alguns momentos precisamos representar que um objeto pode participar apenas de um tipo em determinado momento.
    • Uma associação exclusiva é representada por um linha tracejada entre as associações, entre elas existe a especificação {ou}.
    • Abaixo um exemplo. A pessoa não pode ser Jurídica e Física ao mesmo tempo.
  • Qualificada:
    • As associações qualificadas representam as ligações de 1…* (um para muitos) ou * (muitos).
      O “qualificador” identifica no final da associação qual o objeto está identificado.

Agregação

A agregação é um tipo de associação onde o todo está relacionado com suas partes. É representada com o símbolo de um diamante junto a classe agregadora.

Composição

A composição é muito semelhante a agregação, o objeto “Parte” pode pertencer somente ao objeto “Todo” e normalmente o objeto “Todo” vive e morre com suas “Partes”.

É representada pelo símbolo de um diamante preto na classe agregadora.

Generalização

Generalização é a capacidade de identificar as similaridades entre várias classes, com isso criamos um supertipo que encapsula todas as funcionalidades comuns as demais classes filhas.

Podemos usar a generalização para agrupar os nossos objetos em um tipo comum.

Especialização

A especialização cria uma classe herdada da generalização onde refina o processo definido na classe pai. Como o próprio nome diz, especializa a classe pai para um tipo específico.

Usando a mesma imagem acima da generalização, podemos identificar quem é a generalização “subindo” e quem é a especialização “descendo”.

Realização

A realização é um relacionamento entre os itens que implementa o comportamento especificado por outro.
Um exemplo disso seria as classes abstratas e as interfaces que definem que o objeto “filho” deverá realizar alguma método, propriedade no momento da herança.

Dependência

Este é simples :) é um item (objeto) que depende de outro.

Com isto finalizamos este tópico, mas ainda temos muita coisa para ver.
Eu recomendo a leitura de alguns artigos sobre Programação Orientada à Objetos para fixar a idéia e ver a aplicação do que foi aprendido.

  1. Herança
  2. Definições – Avançado
  3. Abstração e Interface

Ver Índice

É isso ai pessoal :)
Até o próximo
♦ Marcelo

About Marcelo

Nascido em Juruaia/MG em uma fazenda de criação de búfalos. Está perdido em São Paulo trabalhando com desenvolvimento de aplicações desde os 17 anos. Atualmente é arquiteto de software, é um cara meia boca que fica entre a equipe de desenvolvimento e o gerente de projetos, no meio da ponte. Para saber mais ... http://desenvolvedores.net/marcelo []'s

UML – Índice

21
1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (7 votos, média: 5,00 de 5)
Loading ... Loading ...
8 de abril de 2011

Irei começar agora a escrever sobre UML (Unified Modeling Language) e falar sobre a história da UML, seus diagramas, suas visões e muito mais. Para isto basta acompanhar o índice e ler de acordo com seu interesse.

Recomendo a leitura do artigo sobre Programação Orientada a Objetos, caso você ainda não tenha conecimento em POO link: Índice (Programação Orientada a Objetos).

A ferramenta que eu escolhi, e gosto de trabalhar é a Enterprise Architect , você pode fazer o download em http://www.sparxsystems.com.au de uma versão de demonstração por 30 dias.

Com o tempo você poderá escolher a ferramenta que mais se adapte a sua necessidade ou ao seu gosto.

Segue abaixo uma lista de ferramentas. Não vou avaliar nenhuma, escolha a seu critério.

Enterprise Architect http://www.sparxsystems.com.au/
Rational http://rational.com
Visio http://office.microsoft.com/pt-br/visio/
Together http://www.borland.com/br/products/together/
ArgoUML http://argouml.tigris.org/
Visual Paradigm http://www.visual-paradigm.com/product/vpuml/

OK! Vamos deixar de falatório e começar a ver o que teremos.


É isso ai pessoal :)
Até o próximo
♦ Marcelo

About Marcelo

Nascido em Juruaia/MG em uma fazenda de criação de búfalos. Está perdido em São Paulo trabalhando com desenvolvimento de aplicações desde os 17 anos. Atualmente é arquiteto de software, é um cara meia boca que fica entre a equipe de desenvolvimento e o gerente de projetos, no meio da ponte. Para saber mais ... http://desenvolvedores.net/marcelo []'s

Definições – Avançado (POO)

4
1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (Sem votação.)
Loading ... Loading ...
7 de janeiro de 2011
Para um melhor entendimento deste Artigo veja o Índice (Programação Orientada a Objetos)
Generalização
Generalização é o ato de tornar um objeto geral, agrupar características comuns para objetos dentro de um mesmo contexto, abstrair.
Eu tenho, por hábito e não por regra, a minha classe “Pai de Todas”(superclass) ser sempre abstrata.Veja o diagrama:
Neste caso a minha classe “Pai de Todas”(superclass) é a classe “Pessoa”

Se olharmos de cima para baixo podemos ver todos os objetos gerais, no topo temos a Pessoa, que pode ser um Cliente, um Usuário. O Usuário por sua vez pode ser um Administrador, que tem poderes especiais, o mesmo pode Excluir ou Inserir novos usuários.
E se olharmos de baixo para cima? Aí teremos o próximo tópico Especialização. :)

Especialização
A especialização nada mais é do que a parte que “especializa” o objeto vindo de uma Generalização, trazer características próprias para o objeto. Seria o mesmo que olhar o diagrama acima de baixo para cima.
Veja:
O objeto Administrador  especializa o objeto Usuario que por sua vez especializa o objeto Pessoa.

Delegates
Os delegates  são ponteiros para funções (métodos).

O que são ponteiros?
Ponteiro é um valor atribuído em memória que aponta para outro valor em memória através de seu endereço. (não gostei, técnico demais pro meu gosto).

Quando há a necessidade de usarmos métodos, e ainda não sabemos qual método chamar, pois dependemos de algumas condições, podemos deixar o nosso código mais bonito usando um delegate.

O delegate irá chamar o método definido de acordo com a nossa necessidade ou condição.

Veja exemplo:
Abaixo temos um exemplo de uma aplicação Console em C#.

static class Program
{
//declara a assinatura do delegate.
//os métodos deverão ter a mesma assinatura
//para que possam ser utilizados pelo delegate
delegate int Calular(int a, int b);

static void Main()
{

//declara a variável do tipo delegate
Calular calc;

//uma condição qualquer
if (DateTime.Now.Second % 2 == 0)
//define o método dividir para ser usado no delegate
calc = new Calular(Dividir);
else
//define o método somar para ser usado no delegate
calc = new Calular(Somar);

//chama o método
Console.WriteLine(calc.Invoke(DateTime.Now.Millisecond,
DateTime.Now.Second));

Console.ReadKey();
}

//declara o método somar
private static int Somar(int a, int b)
{
return a + b;
}

private static int Dividir(int x, int y)
{
return x / y;
}
}

Eventos
Eventos são mensagens trocadas pelos sistemas, métodos e objetos para informar um acontecimento, uma ação que se inicia,  que termina dentro da aplicação, como o próprio nome diz, um evento ocorrido.
Vejamos, ao chamar o nosso método Andar() em Pessoa podemos informar que a Pessoa está Andando até que pare de andar , ou podemos informar que a pessoa vai parar de Andar antes de realmente ela parar de Andar. (AntesPararAndar), assim sendo o objeto chamante pode executar alguma ação antes de a Pessoa realmente parar de Andar.

Exemplo de eventos em C#:
Para usar eventos em C# temos que fazer uso de delegates como foi visto acima o delegate e um ponteiro para uma função (método), e eventos usam delegates para apontar a qual método o mesmo deverá chamar.

Declaração de Pessoa

public class Pessoa
{
//declaração da assinatura do delegate
//que irá tratar os eventos
public delegate void AndarHandler();

//este evento irá mostrar que podemos esperar
//retorno do objeto que chamou
//o parâmetro pararAndar irá retornar true or false
//dependendo do caso se for ou não para parar de andar
public delegate void AndandoHandler(out bool pararAndar);

//declaração dos eventos
public event AndarHandler AntesAndar;
public event AndarHandler AntesPararAndar;

//repare aqui que iremos usar o segundo delegate
public event AndandoHandler Andando;

//declaração do método andar
public void Andar()
{
//aqui iremos chamar o evento AntesAndar e avisar
//o objeto chamante que iremos começar a Andar.
AntesAndar();

DateTime pararAs = DateTime.Now.AddSeconds(30);

//aqui iremos andar por 30 segundos
while (pararAs > DateTime.Now)
{
bool pararAgora = false;
//aqui iremos notificar que a
//pessoa continua Andando
Andando(out pararAgora);

if (pararAgora)
{
//antes de parar, notificar que vou parar
AntesPararAndar();
break;
}

//aqui apenas iremos parar por um segundo.
//não se preocupem com esta linha
System.Threading.Thread.Sleep(1000);
}
}
}

Declaração do objeto para testes.
É uma aplicação do tipo Console.

static void Main()
{
//cria uma pessoa
Pessoa marcelo = new Pessoa();

//define os métodos que irão tratar os nossos eventos
marcelo.Andando +=
new Pessoa.AndandoHandler(marcelo_Andando);
marcelo.AntesAndar +=
new Pessoa.AndarHandler(marcelo_AntesAndar);
marcelo.AntesPararAndar +=
new Pessoa.AndarHandler(marcelo_AntesPararAndar);

//chamar o método para que marcelo possa Andar
marcelo.Andar();

Console.WriteLine("Marcelo parou de andar.");

Console.ReadKey();

}

static void marcelo_AntesPararAndar()
{
Console.WriteLine("Marcelo irá parar de andar.");
}

static void marcelo_AntesAndar()
{
Console.WriteLine("Marcelo irá começar a andar.");
}

static void marcelo_Andando(out bool pararAndar)
{
pararAndar = false;
//a pessoa marcelo só vai parar se a condição for verdadeira
if (DateTime.Now.Second % 7 == 0)
pararAndar = true;

Console.WriteLine("Marcelo está andando.");
}

Com isso terminamos a definição de POO. Aguardem agora os próximos artigos que vamos abordar nesse assunto, ainda temos muita coisa para ver.

Ver Índice

É isso ai pessoal :)
Até o próximo
♦ Marcelo

About Marcelo

Nascido em Juruaia/MG em uma fazenda de criação de búfalos. Está perdido em São Paulo trabalhando com desenvolvimento de aplicações desde os 17 anos. Atualmente é arquiteto de software, é um cara meia boca que fica entre a equipe de desenvolvimento e o gerente de projetos, no meio da ponte. Para saber mais ... http://desenvolvedores.net/marcelo []'s

Programação Orientada a Objetos (POO)

14
1 Estrela2 Estrelas3 Estrelas4 Estrelas5 Estrelas (3 votos, média: 5,00 de 5)
Loading ... Loading ...
13 de dezembro de 2010
Olá Pessoal.Agora vou iniciar uma série de artigos sobre Programação Orientada a Objetos (POO) ou Object-Oriented Programming (OOP).Na medida do possível irei mostrar como programar cada explicação em alguma linguagem.Este primeiro artigo irá servir como um índice para os outros, sempre que eu postar um item deste índice, irei modificar este artigo fazendo um link daqui para a explicação e vice-versa.Então vamos lá, mãos à obra e vamos ver o que teremos :)
É isso ai pessoal :)
Até o próximo
♦ Marcelo

About Marcelo

Nascido em Juruaia/MG em uma fazenda de criação de búfalos. Está perdido em São Paulo trabalhando com desenvolvimento de aplicações desde os 17 anos. Atualmente é arquiteto de software, é um cara meia boca que fica entre a equipe de desenvolvimento e o gerente de projetos, no meio da ponte. Para saber mais ... http://desenvolvedores.net/marcelo []'s