sábado, 29 de junho de 2013

Relacionamentos

Objetos se relacionam entre si através de operações (métodos);


Tipos de Relacionamentos:

Associação Simples

  • Utilizada para relacionar duas classes cujos objetos podem se comunicar;
  • Semanticamente representam que as classes "conhecem uma a outra", "estão conectadas com", "para cada X existe um Y“;
  •  Deve-se identificar o papel das classes na associação;

  • Representação por diagrama UML:
          







  • Exemplo de código fonte em Java
           public class Funcionario {

                 // Atributos do funcionario
                    private String nome;
                    private String cpf;

                // Papeis (atributos) do relacionamento
                   // Cardinalidade 1  
                   private Funcionario gerente; 
                   // Cardinalidade *  
                         private List<Funcionario> subordinados = new ArrayList<Funcionario>(0); 

                // Método Construtor
                   public Funcionario() {
                   }
   
               // Métodos set e get
                  public String getCpf() {
                      return cpf;
                  }

                  public void setCpf(String cpf) {
                      this.cpf = cpf;
                 }

           }                    
                      

Agregação x Composição


  • Estas duas formas de relacionamento geralmente confunde as pessoas, o que as difere é o seguinte: Um objeto contem uma lista de outros objetos, se estes outros objetos podem "existir" sem a existência do objeto que os contém, isto é uma agregação;  Na composição um objeto também possui uma lista de outros objetos porém um objeto não pode "existir" se o outro for "excluído".

  • Representação por diagrama UML:

     


  • Exemplo de código fonte em Java
                 
             AGREGAÇÃO
                Classe Atleta
                public class Atleta {
                    //propriedades
                      private String nome;
                      private int idade;
                      private String posicao;   
   
                    //metodo construtor
                      public Atleta() {
                      }
    
                   //metodos get e set 
                            //código                 
 
                }


                Classe Time
                public class Time {
                   //propriedades
                     private String nomeTime;
                     private String tecnico;
   
                  //O objeto time possui uma lista de atleta
                     private List<Atleta> atleta = new ArrayList<>(0);
   
                 //metodo construtor
                    public Time() {
                    }
   
                 //metodos get e set
                    //código          

                 //metodos de usuario
                   public void addAtleta(Atleta atleta){
                        this.atleta.add(atleta);      
                   }
   
                   public String listaAtleta(){
                        String atl = "";
                        List<Atleta> atls = new ArrayList<>(0);
                        atls = this.getAtleta();      
                        for (int i=0; i < atls.size(); i++) {
                             atl += atls.get(i).getNome() + atls.get(i).getIdade()
                             + atls.get(i).getPosicao();  
                        }      
                       return atl;    
                   }

                               
             COMPOSIÇÃO
                    Classe Pedido
                    public class Pedido {
                           //propriedades
                             private int numero;
                             private String nomeCliente;
   
                          //pedido possui uma lista de item pedido
                            private List<ItemPedido> itempedido = new ArrayList<>(0);
   
                         //metodo construtor
                           public Pedido() {
                           }
 
                         //metodos get e set
                             //código

                         //metodos de usuario  
                           public void addItemPedido(ItemPedido itempedido){
                                 this.itempedido.add(itempedido);
                           }
 
                           public String listaItem(){
                                 String itp =  "";
                                 List<ItemPedido> itps = new ArrayList<>(0);      
                                 itps = this.getItempedido();      
                                 for (int i=0; i < itps.size(); i++) {
                                     itp += itps.get(i).getCodigo() + itps.get(i).getDescricao()
                                     + itps.get(i).getFabricante();
                                 }
                                 return itp;
                           }  
 
                    }    

                    Classe ItemPedido
                    public class ItemPedido {
                         //propriedades
                           private int codigo;
                           private String descricao;
                           private String fabricante;
    
                         //metodo construtor
                           public ItemPedido() {
                           }
   
                         //metodos get e set
                            //codigo    

                     }            
                                   

Herança


É um principio da orientação a objeto que permite o compartilhamento de atributos e métodos entre classes. Tem como objetivo o reaproveitamento de código comum. Na herança existe a Superclasse  (classe pai) que possui os atributos ou métodos comuns entre as classes, e a classe que herda (classe filho) possui os atributos ou métodos herdados da classe pai e mais os atributos específicos dela (isto se possuir).


  • Representação por diagrama UML:












  • Exemplo de código fonte em Java:
          Classe Pessoa
             public class Pessoa {
                  //atributos
                    private String nome;
      
                 //construtor
                   public Pessoa() {
                   }
    
                //metodos get e set
                  public String getNome() {
                      return nome;
                  }

                  public void setNome(String nome) {
                          this.nome = nome;
                  }
    
                 //metodo do usuario
                   public void escreverNome(){
                         System.out.println(this.getNome());
                   }    
    
             }       


         Classe Fisica
           //utiliza-se extends para herdar da classe pessoa
             public class Fisica extends Pessoa{
                  //atributos
                    public String cpf;
      
                 //construtor
                   public Fisica() {
                  }
    
                //metodos get e set
                  public String getCpf() {
                       return cpf;
                  }

                  public void setCpf(String cpf) {
                      this.cpf = cpf;
                  }
    
               //método do usuario
                 public boolean validarCpf(){
                        if (this.getCpf().length() == 11){
                              return true;
                        } else {
                              return false;
                           }
                 }      
    
            }


         Classe Juridica
           //utiliza-se extends para herdar da classe pessoa
             public class Juridica extends Pessoa{

                   //atributos
                     private String cnpj;
      
                  //construtor
                    public Juridica() {
                    }
    
                  //metodos get e set
                    public String getCnpj() {
                            return cnpj;
                    }

                    public void setCnpj(String cnpj) {
                           this.cnpj = cnpj;
                    }
    
                  //metodo do usuario
                    public boolean validarCnpj(){
                         if (this.getCnpj().length() == 14){
                            return true;
                        } else {
                             return false;
                           }
                    }   
    
             }

Dependência


A dependência é um tipo de relacionamento entre classes onde se há mudança em uma especificação do elemento de uma classe esta altera a especificação do elemento dependente que está na outra classe.


  • Representação por diagrama UML:




  • Exemplo de código fonte em Java:
          public class Moeda {
                 public Moeda(double umValor, String umNome) {
                 }

                  public double getValor() {
                  }
          }


          public class CaixaRegistradora {
                   public CaixaRegistradora() {
                   }

                   public void entrePagamento (int qtdMoeda, Moeda tipoMoeda) {
                   }
          }

   

Nenhum comentário:

Postar um comentário