oo

Document Sample
oo Powered By Docstoc
					            Modelagem de Software
             Orientado a Objetos
                 utilizando a
               Linguagem UML

                               Alcides Calsavara



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   1
            Conteúdo Programático
       princípios de O-O
       método, casos de uso, classes
       relacionamentos, restrições, interfaces,
        tipos parametrizados, estereótipos,
        pacotes
       estados e eventos
       seqüência, colaboração, atividades,
        componentes, implantação
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   2
                    Bibliografia Básica
      UML Toolkit
      UML in a Nutshell
      Object-Oriented Software Construction
      Modelagem de Objetos através da UML
      Design Patterns: Elements of Reusable
       Object-Oriented Software
      Modelagem e Projeto baseados em
       Objetos
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   3
                      Princípios de
                  Orientação a Objetos




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   4
                                     Sumário
      Tipos de dados abstratos
      Classes e instâncias
      Operações e atributos
      Construção de objetos
      Referências para objetos
      Pacotes de classes
      Encapsulamento
      Modos de visibilidade/acesso
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   5
                                     Sumário
      Asserções e invariantes de classe
      Tratamento de exceções
      Objetos compostos
      Herança, sobrecarga, polimorfismo
      Herança múltipla
      Interfaces
      Tipos parametrizados


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   6
          Tipos de Dados Abstratos
                    (ADT)
       Um ADT é um modelo matemático para
        descrição de um tipo independente de
        sua representação física.
       Um tipo é uma coleção de objetos
        caracterizados através de funções,
        axiomas e pré-condições.
       Um objeto que pertence ao conjunto de
        objetos descritos por um ADT é dito ser
        uma instância do ADT.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   7
                        Exemplo de ADT
                         Pilha (Stack)
         Opções de representação:
            – array
            – listas
            – ...
         Questão básica:
          Como definir formalmente uma pilha de
          forma independente de sua
          representação?
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   8
                   Exemplo de ADT
                 Primeira Parte: Tipos

      Especificação ADT para pilhas

         TYPES
            – STACK [G]




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   9
               Exemplo de ADT
            Segunda Parte: Funções
         FUNCTIONS
            – put: STACK[G] X G --> STACK[G]
            – remove: STACK[G] -/-> STACK[G]
            – item: STACK[G] -/-> G
            – empty: STACK[G] --> BOOLEAN
            – new: STACK[G]



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   10
               Exemplo de ADT
            Terceira Parte: Axiomas
      AXIOMS
      Para todo x : G, s : STACK[G]
      A1 - item ( put ( s, x ) ) = x
      A2 - remove ( put ( s, x ) ) = s
      A3 - empty ( new )
      A4 - not empty ( put ( s, x ) )


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   11
                        Exemplo de ADT
          Quarta Parte: Pré-condições
         PRECONDITIONS
            – remove ( s : STACK[G] ) require not
              empty(s)
            – item ( s : STACK[G] ) require not empty(s)




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   12
                           Modularização
       Construção de software orientado a
        objetos é a construção de um sistema
        de software como uma coleção de
        implementações de ADTs
        possivelmente parciais.
       Um ADT corresponde a um módulo de
        um sistema de software.


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   13
                                       Classe
       Uma classe é um tipo abstrato de
        dados equipado com uma
        implementação possivelmente parcial.
       A definição de uma classe inclui uma
        lista de atributos e uma lista de
        operações.
       Um sistema de software orientado a
        objetos é definido por um conjunto de
        classes.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   14
                                   Instância
       Todo objeto é instância de alguma
        classe.
       A execução de um sistema de software
        orientado a objetos corresponde a
        interações entre objetos através de
        mensagens (chamadas de operações).
       Toda execução é iniciada em um
        objeto raiz, com a chamada de uma de
        suas operações.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   15
                         Classe X Objeto
       Um classe é um elemento de
        construção de software. Portanto, é um
        elemento definido e criado
        estaticamente.
       Um objeto é um elemento de run-time,
        isto é, só existe em tempo de execução
        de um sistema de software. Portanto, é
        criado dinamicamente.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   16
                                     Atributo
       A definição de uma classe inclui uma
        lista de atributos.
       Toda instância de uma classe contém
        todos os atributos definidos pela classe.
       Cada atributo tem um nome, um tipo e,
        opcionalmente, um valor default.
       O conjunto de valores dos atributos de
        um objeto define o seu estado.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   17
                                     Atributo
         Tipos de atributos:
            – de instância: há um valor específico para
              cada instância
            – de classe: há um único valor
              (compartilhado) para todas as instâncias
         O valor de um atributo pode ser uma
          constante.


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   18
                                  Operação
       A definição de uma classe inclui uma
        lista de operações que correspondem à
        interface da classe.
       Uma operação é uma função ou
        transformação que pode ser aplicada a
        todo e qualquer objeto de uma classe.
       Uma operação tem um nome, uma lista
        de argumentos, um tipo de retorno e
        uma implementação (um método).
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   19
                                  Operação
       Em um sistema de software, existe
        apenas uma única ocorrência de cada
        operação de uma classe,
        independentemente do número de
        instâncias da classe.
       Operações são definidas e criadas
        estaticamente.


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   20
              Construção de Objetos
       Toda classe define um ou mais
        operações específicas para a criação
        (iniciação) de novos objetos,
        normalmente denominadas
        construtores da classe.
       Toda vez que um novo objeto é criado,
        um construtor da correspondente classe
        deve ser selecionado para execução.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   21
              Referência para Objeto
         Uma referência é um valor de run-time que
          pode ser void ou attached.
         Quando o valor de uma referência for
          attached, a referência identifica um único
          objeto. (A referência está fixada em um certo
          objeto.)
         Podem existir várias referências para um
          mesmo objeto.
         Copiar uma referência é diferente de copiar
          um objeto.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   22
                     Pacote de Classes
      Classes podem ser logicamente
       organizadas em grupos denominados
       pacotes.
      Pacotes são estrurados de forma
       hierárquica.
      Há pacotes disponibilizados em
       bibliotecas.
      Usuários podem criar seus próprios
       pacotes.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   23
                        Encapsulamento
       Processo de ocultamento de partes
        internas da implementação de um
        objeto e permissão de acesso ao
        estado do objeto somente através de
        uma interface bem definida.
       Os atributos de um objeto são
        manipulados (para leitura e escrita)
        somente por operações definidas para
        o objeto.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   24
                        Modos de
                   Visibilidade/Acesso
         Pode-se controlar a manipulação de atributos
          e operações (membros, de forma geral)
          considerando-se os escopos de classe,
          subclasse e pacote, de forma combinada.
         Modificadores:
           – private
           – protected
           – package
           – public
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   25
                    Modificador private
         Um membro qualificado como private
          somente é acessível a partir de
          métodos da própria classe à qual
          pertence o membro.




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   26
                     Modificador public
         Um membro qualificado como public é
          acessível a partir de qualquer operação
          de qualquer classe, independentemente
          de subclasse e de pacote.




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   27
               Modificadores public e
                                     private -
      class Pessoa
                                  Exemplo 1
      { private int idade;     private int altura;
        public Pessoa(int i, int a) { idade = i; altura =
        a; }
        private void cresce( ) { idade++; altura++; }
        private void decresce( ) { idade++; altura--; }
        public void envelhece( )
        { if (idade < 22) cresce( ) else decresce( ); }
      }
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   28
               Modificadores public e
                                     private -
                  ExemploPessoa
     class Funcionario extends
                               2
     { private int nivel; private int horas;
       public Funcionario(int i, int a, int n, int
       h)
       { super(i, a); nivel = n; horas = h; }
       public double salario( )
       { return ( nivel * 80 * horas) ; }
     }
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   29
                 Modificador package
         Um membro qualificado como package
          é acessível a partir de qualquer
          operação de qualquer classe
          pertencente ao mesmo pacote que a
          classe à qual pertence o membro,
          independentemente de subclasse.



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   30
               Modificador protected
         Um membro qualificado como protected
          é acessível a partir de qualquer
          operação de qualquer classe, exceto se
          a classe de acesso estiver em pacote
          distinto e não for subclasse da classe à
          qual pertence o membro.



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   31
           Modificadores package e
                                  protected
      class Veiculo { Exemplo 1
                          int ano; // package
                          protected int potencia; ... }
      class Carro extends Veiculo
      { ... potencia++;
            ano++;              ... }
      class Retificadora
      { ... Carro c = new Carro (...) ;
             c.ano = 1980;
             c.potencia = 100; ... }
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   32
           Modificadores package e
                                  protected
                      Exemplo
     package Basico; // arquivo 1 2
     class Veiculo { int ano; // package
                         protected int potencia; ... }
     package Extensao; // arquivo 2
     class Carro extends Veiculo
     { ... potencia++; ... } // sem acesso a ano
     class Retificadora
     { ... Carro c = new Carro (...) ; ... }
      // sem acesso a ano e potencia
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   33
                                 Asserções
      P {A} Q
        A execução de A, iniciando em um
        estado no qual P é verdadeira,
        terminará em um estado no qual Q é
        verdadeira.
      P : pré-condição
      Q : pós-condição
      A : uma operação (ou parte de)
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   34
               Asserções - Exemplos
       {x >= 9} x := x + 5 {x >= 13}
       {x >= 0} y := sqrt(x) { true }
       {false} y := x * x { y >= 0 }
       {not full} put(x : G) { not empty AND
        item = x AND count = old count + 1 }



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   35
                  Invariante de Classe
       Uma invariante é uma propriedade
        inalterável durante todo o ciclo de vida
        de um objeto.
       Exemplos:
            – 0 <= count
            – count <= capacity
            – empty = (count = 0)


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   36
             Tratamento de Exceção
         Exceções são acontencimentos fora do
          comportamento normal ou desejado para um
          programa. O gerenciamento de exeções
          permite o controle sobre erros e
          possivelmente uma solução de contorno.
         Exemplos: entrada em formato inválido,
          arquivo corrompido, conexão de rede não
          disponível, índice inválido para vetor, ...


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   37
         Exemplo de código frágil
      class TestNullP
      { static String s = null;
           public static void main(String args[ ])
           {
                 char c1 = s.charAt(2);
                 // java.lang.NullPointerException (programa pára)
                 s = new String("Curitiba");
                 char c2 = s.charAt(2);
                 // c2 = 'r'
                 char c3 = s.charAt(8);
                 // java.lang.StringIndexOutOfBoundsException (programa
           pára)
           }
      } // fim
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML      38
         Exemplo de código frágil
      class TestNullP
      { static String s = null;
           public static void main(String args[ ])
           {
                 char c1 = s.charAt(2);
                 // java.lang.NullPointerException (programa pára)
                 s = new String("Curitiba");
                 char c2 = s.charAt(2);
                 // c2 = 'r'
                 char c3 = s.charAt(8);
                 // java.lang.StringIndexOutOfBoundsException (programa
           pára)
           }
      } // fim
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML      39
      Exemplo modificado com ifs
      class TestNullP
      { static String s = null;
         public static void main(String args[ ])
         {
                 if (s != null && s.length( ) > 2)
                           char c1 = s.charAt(2);
                 s = new String("Curitiba");
                 if (s != null && s.length( ) > 2)
                           char c2 = s.charAt(2);
                 // c2 = 'r'
                 if (s != null && s.length( ) > 8)
                           char c3 = s.charAt(8);
         } } // fim
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   40
          Exemplo modificado com
          tratamento de exceções
      class TestNullP
      {   static String s = null;
          public static void main(String args[])
          {
                try
                {
                         char c1 = s.charAt(2);
                }
                catch (Exception e)
                {
                         System.out.println("Exceção " + e);
                         // Exceção: java.lang.NullPointerException
                }                                                 // continua
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML            41
           Exemplo modificado com
           tratamento de exceções
                               (cont.)
             s = new String("Curitiba");

                try
                {
                          char c2 = s.charAt(2);
                          // c2 = 'r'
                }
                catch (Exception e)
                {
                        System.out.println("Exceção " + e);
                }
                                                                       // continua
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                 42
           Exemplo modificado com
           tratamento de exceções
                   (cont.)
                 try
                 {
                           char c3 = s.charAt(8);
                 }
                 catch (Exception e)
                 {
                         System.out.println("Exceção " + e);
                 // Exceção: java.lang.StringIndexOutOfBoundsException
                 }
           }
      } // fim

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML     43
             Hierarquia de exceções
                                     Throwable




                               Error             Exception


                                  ...

                         RuntimeException                  IOExcepti on
                                                                          ...
                                    ...                          ...
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML            44
                      A cláusula throws
      class TestNullP
      { static String s = null;
         static void work( ) throws Throwable
         {
               try
               { char c1 = s.charAt(2); }
               catch (Exception e)
               { System.out.println("Exceção"); throw(e); }
               catch (Error e)
               { System.out.println("Erro"); throw(e); }
               finally
               { System.out.println("Adios, amigos");}
         }                                                             // continua
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                 45
           A cláusula throws (cont.)
           public static void main(String args[ ])
           {
                try
                { work( ); }
                catch(Throwable t)
                { System.out.println("Erro ou Exceção " + t); }
                finally
                { System.out.println("Adios, amigos II");}
           }
      } // fim



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   46
             Definindo suas próprias
                    exceções

      class ProblemaEmWork extends Exception
      {
         public ProblemaEmWork( ) { }
         public ProblemaEmWork(String msg) { super(msg); }
      }




                                                                       // continua


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                 47
             Definindo suas próprias
                exceções (cont.)
      class TestNullP
      { static String s = null;
         static void work( ) throws ProblemaEmWork
         {
               try
               { char c1 = s.charAt(2); }
               catch (Exception e)
               { throw(new ProblemaEmWork("Exceção em work " + e)); }
               catch (Error e)
               { throw(new ProblemaEmWork("Erro em work " + e)); }
               finally
               { System.out.println("Adios, amigos");}
         }                                                 // continua
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML     48
             Definindo suas próprias
                exceções (cont.)
           public static void main(String args[ ])
           {
                try
                { work(); }
                catch(ProblemaEmWork p)
                { System.out.println(p); }
                finally
                { System.out.println("Adios, amigos II");}
           }
      } // fim



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   49
                       Objeto Composto
         Um objeto pode conter uma referência
          para outro objeto, recursivamente.
          Nesse caso, o objeto é dito ser
          composto ou complexo.




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   50
                           Generalização
       Relacionamento entre uma classe e
        uma ou mais versões refinadas ou
        especializadas da classe.
       Especialização: relacionamento inverso
       Superclasse: versão mais abstrata de
        outra classe, a subclasse
       Subclasse: versão mais refinada de
        outra classe, a superclasse
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   51
                                    Herança
       Mecanismo baseado em objetos que
        permite que as classes compartilhem
        atributos e operações baseados em um
        relacionamento, geralmente
        generalização.
       Uma subclasse herda atributos e
        operações da superclasse.


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   52
                   Classes Abstratas e
                       Concretas
         Classe abstrata: classe que não pode ter
          instâncias diretas, mas cujos descendentes
          sim; organizam características comuns a
          diversas classes; mecanismo para reutilizar
          código; pode definir operações abstratas
          (sem um correspondente método)
         Classe concreta: classe que pode ter
          instâncias diretas; não pode definir
          operações abstratas

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   53
                                    Interface
       Um classe totalmente abstrata é dita
        ser uma interface.
       A definição de uma interface não inclui
        qualquer implementação.




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   54
                          Interfaces
                     - definição básica -
          Uma interface possui um nome, e define apenas
           métodos abstratos e constantes (descreve uma
           abstração, normalmente um comportamento)
          Uma interface não pode ser instanciada
          Uma interface pode ser implementada por uma ou
           mais classes
          Cada classe pode estender somente uma classe,
           mas pode implementar diversas interfaces
           (alternativa para a falta de herança múltipla em Java)


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   55
                          Interfaces
                     - definição básica -
        Uma classe que implementa uma interface deve
         implementar todos os métodos abstratos definidos
         pela interface (não pode deixar qualquer
         implementação para suas subclasses)
        Uma interface pode estender uma ou mais interfaces
        Se uma classe herda duas constantes de duas
         interfaces distintas mas com o mesmo nome, deve
         fazer referência a cada constante precedendo-a com
         o nome da interface e um ponto


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   56
                  Interfaces
           - como usar - exemplo 1 -
      public interface F
      { int k = 10; // public, static, final (constante)
        int f ( ); // public, abstract
      }
      class C implements F
      {
        public int f ( ) { return k; } // tem que ser public
      }
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   57
                 Interfaces
          - como usar - exemplo 2 -
      public interface F
      { int k = 10;
          int f( );
      }
      interface G extends F
       // G e seus membros tem visibilidade package
      { void g( ); }
      class C implements G
      { public             int f( ) { return k; }
          public           void g( ) {}
      }
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   58
                  Interfaces
           - como usar - exemplo 3 -
      public interface F
      { int k = 10; int f( ); }
      interface H
      { int k = 10; int h( ); }
      interface G extends F, H
      { void g( ); }
      class C implements G
      { public             int f( ) { return F.k;}
         public            int h( ) { return H.k;}
         public            void g() {}
      }
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   59
                  Interfaces
           - como usar - exemplo 4 -
      public interface F
      { int k = 10; int f( ); }
      interface H
      { int k = 10; int h( ); }
      class D
      {}
      class E extends D implements F, H
      { public       int f( ) { return F.k;}
         public      int h( ) { return H.k;}
      }
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   60
                               Sobrecarga
         Atributos e operações podem ser
          redefinidos (sobrecarregados) por
          subclasses.




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   61
        Sobrecarga para extensão
         A nova operação é igual à operação
          herdada, exceto pelo fato de
          acrescentar alguns detalhes de
          comportamento, normalmente afetando
          novos atributos da subclasse.




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   62
        Sobrecarga para restrição
       A nova operação restringe o protocolo
        (assinatura da operação), podendo
        reduzir os tipos de argumentos.
       A operação herdada fica fechada
        (restrita) dentro de cada subclasse
        específica.



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   63
                       Sobrecarga para
                         otimização
       O novo método tem o mesmo protocolo
        externo e apresenta o mesmos
        resultados
       A implementação do novo método
        (algoritmo utilizado) pode ser
        completamente diferente



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   64
                         Sobrecarga por
                          conveniência
       Emprego adhoc de herança para
        reutilizar classes.
       Uma nova classe é tornada subclasse
        de uma classe existente e substitui os
        métodos inconvenientes.
       Semanticamente errado e conduz a
        problemas de manutenção; recomenda-
        se criar uma terceira classe
        (superclasse das demais)
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   65
                             Polimorfismo
         Assume muitas formas
         A propriedade segundo a qual uma operação
          pode comportar-se diferentemente em
          classes diferentes.
         A subclasse redefine a implementação de
          uma operação herdada da superclasse.
         Onde se espera uma instância de um certa
          classe pode aparecer uma instância de
          qualquer subclasse daquela classe.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   66
                       Herança Múltipla
       Uma classe possui mais de uma
        subclasse e herda características de
        todos os seus ancestrais.
       Maior capacidade de especificação de
        classes.
       Maior oportunidade de reutilização.
       Perda em simplicidade conceitual e de
        implementação.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   67
                   Tipo Parametrizado
       Um tipo pode receber como parâmetro
        uma lista de tipos.
       Exemplos:
            – pilha de inteiros
            – pilha de reais
            – pilha de pessoas
            – ...


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   68
             Modelagem Orientada a
                    Objetos
                             Use-Case Modeling




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   69
            Objetivos básicos de um
               modelo use-case
       Descrever o que um novo sistema deve
        fazer
       Descrever o que um sistema existente
        faz
       Formalizar os requisitos de um sistema,
        normalmente obtidos através de
        discussões entre os desenvolvedores e
        os clientes (usuários) do sistema.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   70
          Componentes de um use-
                  case
           um conjunto de use cases
             – Um use case representa uma
               funcionalidade do sistema, do ponto de
               vista do usuário do sistema (visão
               externa).
           um conjunto de actors
             – Um actor representa um tipo de usuário do
               sistema.
             – Um actor deve estar associado a pelo
               menos um use case
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   71
            O componente use case
       Um use case representa uma
        funcionalidade completa (mas pode
        haver dependências entre os diversos
        use-cases de um sistema)
       Um use case sempre faz algo solicitado
        por um actor e retorna alguma coisa
        para esse actor


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   72
                  O componente actor
       Um actor é uma entidade externa ao
        sistema que interage com o sistema.
       Um actor é normalmente um ser
        humano, mas pode ser outro sistema
        ou alguma espécie de hardware que
        interage com o sistema.



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   73
          Outros objetivos de use-
                         case a realização de
         Fornecer uma base para
            testes do sistema.
           Prover uma descrição clara, consistente e
            simples do que o sistema dever fazer,
            facilitando a discussão entre o desenvolvedor
            e o cliente do sistema e ainda facilitando a
            comunicação dentro da equipe de
            desenvolvedores
           Ser a base para definição das classes do
            sistema e para definição da dinâmica do
            sistema.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   74
          Exemplo de diagrama use-
                      case
                  Sistema de Seguros


                                     Assinatura de uma apólice de
                         Cliente
                                                seguro




                                    Levantamento de estatísticas de
                                                                        Corretor de
                                               vendas
                                                                         seguros




                                   Levantamento de estatísticas sobre
                                               clientes



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                  75
                      Mais sobre actors
       Um actor é uma classe no diagrama em
        UML
       Pode-se construir uma hierarquia de
        actors. Exemplo: Um cliente pode ser
        um cliente comum ou um cliente
        especial. Exemplo: Um cliente pode ser
        um cliente de telefone ou um cliente de
        água.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   76
                Mais sobre use-cases
         Um use-case pode ser estendido com
          outro(s) use case(s). Exemplo: Os use cases
          "Assinatura de seguro de carro" e "Assinatura
          de seguro de vida" são extensões do use
          case "Assinatura de apólice de seguro".
         Um use-case pode utilizar outro(s) use
          case(s). Exemplo: O use case "Assinatura do
          contrato de compra de um automóvel" utiliza
          o use case "Assinatura de uma apólice de
          seguro de carro".
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   77
             Modelagem Orientada a
                    Objetos
                                Relacionamentos




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   78
                                  Conteúdo
           Ligação entre objetos
           Associação entre classes
           Agregação
           Multiplicidade e Papel
           Atributo de ligação
           Associação como uma classe
           Associações ternárias
           Ordenação em associações
           Associação qualificada
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   79
                                     Ligação
       Uma conexão física ou conceitual entre
        objetos
       Exemplo: O país Brasil tem como
        capital a cidade de Brasília.
       Exemplo: O funcionário João trabalha
        na empresa Transamérica S.A.
       Exemplo: O artigo “OO Solutions” foi
        publicado na conferencia OOPSLA’99.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   80
                                Associação
       Relacionamento entre instâncias de
        duas ou mais classes descrevendo um
        grupo de ligações com estrutura e
        semântica comuns.
       Exemplo: Um país tem como capital
        uma cidade.
       Exemplo: Um funcionário trabalha numa
        empresa.
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   81
                               Agregação
       Forma especial de associação, entre o
        todo e suas partes, na qual o todo é
        composto pelas partes
       Também chamada de herança
        horizontal
       Exemplo: Um artigo é publicado em
        uma conferência, isto é, o artigo faz
        parte da conferência (ou dos anais da
        conferência).
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   82
                Multiplicidade e Papel
       Multiplicidade: Número de instâncias
        de uma classe que podem se relacionar
        a uma única instância de um classe
        associada (ou agregada).
       Papel: nome que identifica
        inequivocamente uma extremidade de
        uma associação.


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   83
                   Atributo de Ligação
          Um valor de dados presente em cada
           ligação (nível de instâncias) de uma
           associação (nível de classes)
          Uma propriedade da ligação entre
           objetos, e não dos objetos ligados,
           propriamente ditos
          Exemplos: permissão de acesso que
           um usuário possui para a um arquivo; o
           salário de uma pessoa em um emprego
           em uma companhia
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   84
               Associação como uma
                      Classe
         Cada ligação de uma associação é uma
          instância de uma classe
         Uma ligação é um objeto, com atributos
          e métodos
         Útil quando ligações podem participar
          em associações com outros objetos
         Útil quando ligações sofrem operações
         Exemplo: autorização para usuários em
          estações de trabalho
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   85
                  Associação Ternária
           Representa ligações entre 3 objetos
           Não pode ser dividida em associações
            binárias sem que haja perda de informações
           Associações de grau maior que 3 são raras e
            devem ser evitadas devido a complexidade
            de entendimento e implementação
           Exemplo: pessoas que são programadoras
            usam linguagens de programação em
            projetos
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   86
                          Ordenação em
                           Associações
        Em alguns casos o conjunto de objetos
         associados a um certo objeto apresenta
         uma ordem
        A palavra "ordenado" deve aparecer
         junto à multiplicade "muitos" de uma
         associação para indicar que existe uma
         ordem entre os objetos ligados
        Exemplos: as janelas visíveis em uma
         tela possuem uma ordem; os vértices
         de um polígono
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   87
             Associação Qualificada
       Relaciona dois objetos e um
        qualificador
       O qualificador reduz a multiplicidade
       Exemplo: Um diretório contém muitos
        arquivos, mas é o nome do arquivo
        dentro do diretório que identifica o
        arquivo (e identifica um único arquivo)
       Maior precisão na informação!!
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   88
                     Uso de Agregação
       Na dúvida, use associação!
       Herança não representa o
        relacionamento parte-todo
       Agregados recursivos são frequentes
       Agregação normalmente implica em
        propagação de operações


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   89
             Modelagem Orientada a
                    Objetos
                          Modelagem Dinâmica
                         Diagrama de Seqüência



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   90
          Objetivos de um diagrama
                de seqüência
       Ilustrar como objetos interagem entre si.
       Detalhar um use case em termos de
        objetos e mensagens.
            – objetos de acordo com diagrama de
              classes
            – mensagens são mapeadas em operações
              nas classes


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   91
             Modelagem Orientada a
                    Objetos
                           Modelagem Dinâmica
                           Diagrama de Estados



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   92
                    Objetivos de um
                 diagrama de estados

         Representar o comportamento dinâmico
          de classes individuais

         Representar o comportamento dinâmico
          de colaboração entre classes


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   93
                   Elementos de um
                 diagrama de estados
            os estados possíveis para os objetos de uma certa
             classe
            as transições de estado
            os eventos que causam transições de estados
            as ações decorrentes de
              – uma transição de estado
              – entrada em um estado
              – saída de um estado
            as ações realizadas por objetos enquanto estão em
             um certo estado
              – durante todo o tempo em que o objeto está no estado
              – decorrente de algum evento
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   94
               Diagramas de Estados
     Relaciona eventos e estados
     Um objeto muda de estado dependendo do evento
      e do estado atual.
     Transição: modificação de estado causada por
      um evento (mesmo quando estado final e inicial
      coincidem).
     Um evento pode ser irrelevante para um objeto em
      um certo estado.
     Exemplo: linha telefônica
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   95
          Diagramas de Estados
         Exemplo : Linha telefônica
                   no-gancho                                             no-gancho
                                              Inativa
                                   fora-do-gancho
                                                                  queda-da-linha   Queda-
                                         Sinal de discar                           da-linha
                     dígito( n )                    dígito( n )
                                                                       número Mensagem
                                             Discando
            Sinal de         número                                    invalido gravada
                             ocupado                número válido
            ocupado
                                              Ligando
         Sinal de ocu-       tronco
                                                    encaminhado
         pado rápido         ocupado
                                             Tocando                                  Mensagem
                                                    telefone chamado atende           terminada

                                           Interligando
                                                    telefone chamado desliga
                                            Desligando
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                              96
            Diagramas de Estados
           Exemplo : jogo de xadrez
                    Diagrama de estados de uma só passagem
                             para um jogo de xadrez


           Início            Vez das            cheque-mate            Pretas
                             brancas                                   vencem
                                             empate forçado
                    pretas   brancas
                    jogam    jogam                                     Empate
                                             empate forçado
                             Vez das                                   Brancas
                             pretas             cheque-mate            vencem


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML             97
               Diagramas de Estados
                 Exemplo : Veículo
                Diagrama de estados com transições guardadas
                                     tempo decorrido [ carros
                                                                          Norte / Sul
                 Norte / Sul         nas vias esquerdas N / S ]
                                                                         podem dobrar
              podem ir em frente
                                                                          à esquerda


            tempo                                                                tempo
            decorrido                                                            decorrido


                 Leste / Oeste
                                                                         Leste / Oeste
                podem dobrar
                                        tempo decorrido [ carros       podem ir em frente
                  à esquerda
                                        nas vias esquerdas L / O ]
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                         98
               Tipos de diagramas de
                      estados
    Diagrama de laço contínuo: representa um ciclo
     de vida; sem estado inicial ou final. Exemplo: linha
     telefônica.
    Diagrama de uma só passagem: representa
     objetos com vida finita; possuem um estado inicial
     (criação do objeto) e um estado final (destruição
     do objeto).
    Exemplo: jogo de xadrez

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   99
                                 Condições
         Uma condição é uma função booleana de
          valores, válida dentro de um intervalo de
          tempo.
         Condições funcionam como guardas nas
          transições: uma transição só dispara quando
          ocorre o evento e a condição de guarda for
          verdadeira.
         Exemplo: Pessoa com relação ao atributo
          "estar de luvas".
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   100
              Controle de Operações
       Atividades e ações podem ser
        vinculadas a estados e eventos a fim de
        se especificar o que faz o objeto
        quando está em um determinado
        estado e o que faz em resposta a
        estímulos externos.
       Definem o comportamento do objeto!



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   101
                                   Atividade
         Está sempre vinculada a um estado
         Consome tempo para se completar
         É executada continuamente durante o tempo em
          que o objeto está num certo estado
         Notação:          faça: atividade
         Exemplo: Um vendedor logo após ter recebido
          dinheiro para pagamento do item vendido deve
          calcular o troco.
                     faça: calcular troco

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   102
                                          Ação
         Está normalmente vinculada a um evento, mas
          também pode estar vinculada a um estado
          (ações de entrada, saída e internas)
         É executada "instantaneamente"
         Notação:         evento / ação
         Exemplo: Exibir um menu quando o botão direito
          do mouse é pressionado.
              botão direito pressionado / exibir menu


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   103
              Controle de Operações
                           Ações para um menu instantâneo



                          botão direito pressionado /
                          exibir menu instantâneo
                                                                   Menu
         Inativo
                                                                   visível
                          botão direito liberado /
                          apagar menu instantâneo
                                                                 cursor movimentado /
                                                                 iluminar item do menu

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                     104
         Diagrama de Estados com
               Operações
      Notação


                                  Evento 1 ( atributos )
           Estado 1               [ condição 1 ] / ação 1              Estado 2
       faça : atividade 1                                                 ...




Modelagem de Software Orientado a Objetos utilizando a Linguagem UML              105
               Diagramas de Estados
                     Nivelados
         Permitem refinamentos sucessivos do modelo
          dinâmico
         Permitem uma descrição estruturada do sistema
         Pode-se expandir:
           – um evento e sua correspondente ação
           – uma atividade realizada em um certo estado
         Exemplo: Máquina de vender



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   106
                    Nivelados
                Exemplo : máquina de
                      vender
                         moedas introduzidas
                         ( quantia ) verificar saldo              Recolhendo dinheiro
         Inativa                                              moedas introduzidas ( quantia ) /
                                                                  acrescentar ao saldo
                       cancelar / devolver moedas
                                                                   Selecionar ( item )
                                                [ item vazio ]
                                                                                  [ troco < 0 ]

                                                          faça : testar item e calcular troco

                                                         [ troco = 0 ]          [ troco < 0 ]

                                       faça : entregar                        faça : preparar
                                            item                                   troco

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                              107
                    Nivelados
                Exemplo : máquina de
                      vender
 Atividade entregar item da máquina de vender
                         braço pronto                braço pronto                   empurrado
             Faça : mover               Faça : mover                   faça : empurrar
             braço para a               braço para a                    item para fora
            fileira correta            coluna correta                    da prateleira



 Transição selecionar                                   dígito( n )
 item da máquina de vender
                                                                                 Selecionar( item )
                                    dígito( n )             faça :
                faça : preparar
                     item                                acrescentar
                                                            dígito          enter
                                     clear
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                            108
      Generalização de Estados

     Os estados de um objeto podem ser organizados de forma
      hierárquica, em super-estados e sub-estados.
     Um sub-estado é um refinamento de um super-estado, i.e.,
      um sub-estado é um dos possíveis estados do objeto
      dentro daquele super-estado.
     Um sub-estado herda as transições do super-estado;
      transições que se aplicam ao super-estado também se
      aplicam ao sub-estado.
     Exemplos: linha telefônica, transmissão automática de um
      automóvel

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   109
         Generalização de Estados
               Exemplo : transmissão de um carro


                                                     apertar R
                                          Neutro                       Ré
                                                      apertar N
                             apertar N             apertar F

      Para a frente
      pára                         sobe                        sobe
                      Primeira                Segunda                       Terceira
                                   reduz                       reduz


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                   110
         Generalização de Eventos
     Os eventos que ocorrem em um sistema podem ser
      organizados de forma hierárquica, em super-eventos e
      sub-eventos.
     Um sub-evento herda atributos do super-evento.
     Onde um evento é descrito qualquer sub-evento seu é
      implicitamente descrito.
     A generalização de eventos facilita a abstração e permite
      concisão na representação de diagramas.
     Exemplo: Entrada do usuário.



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   111
         Generalização de Eventos
           Exemplo : eventos de
                  teclado
         evento                                                        Hierarquia parcial de
         tempo                                                         eventos para eventos
                               Entrada do usuário                                de teclado
                                   dispositivo

          Botão do mouse                     caracter do teclado
            localização                           caracter

      Botão do          Botão do            controle            gráfico
       mouse             mouse
      apertado          liberado
                                             espaço         alfanumérico         pontuação
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                      112
                        Concorrência de
                          Agregação
     O estado de um objeto composto (um agregado) é determinado
      pelos estados dos objetos que o compõem.
     Exemplo: O estado de um carro é determinado pelo estado da
      ignição, da transmissão, do freio, do acelerador, do motor, ...
     Os componentes de um agregado normalmente interagem entre si:
      a mudança de estado de um componente pode disparar uma
      transição em outro componente.
     A interação entre diagramas de estados de componentes é
      representada através de eventos compartilhados e/ou condições de
      guarda.



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   113
                        Concorrência de
                          Agregação
         Carro
                        Ignição         Transmissão             Freio       Acelerador

        Ignição                 Girar chave para dar partida             liberar
                                [ transmissão em Neutro ]
                                                                         chave
                    Desligada                                  Partida              Ligada

                                        desligar a chave

     Acelerador         apertar                       Freio              apertar
                       acelerador                                         freio
         Desligado                      Ligado             Desligado                     Partido
                   liberar acelerador                                    liberar freio
Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                               114
            Concorrência Interna de
                   Objetos
         O diagrama de estados de um objeto pode ser
          particionado de acordo com atributos e ligações
          em sub-diagramas.
         O estado do objeto compreende um estado de
          cada sub-diagrama.
         Um mesmo evento pode causar transições em
          mais de um sub-diagrama.
         Exemplo: Jogo de bridge rubber.



Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   115
            Concorrência Interna de
                   Objetos
 Jogo de bridge com estados concorrentes

                              Jogando rubber

                         Vulnerabilidade N - S

                               jogo N - S                      jogo N - S
           Não vulnerável                        Vulnerável                 N-S vence rubber


                         Vulnerabilidade L - O

                               jogo L - O                      jogo L - O
           Não vulnerável                        Vulnerável                 L - O vence rubber


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                           116
                Transição Automática
         Disparada quando a atividade vinculada a
          um estado termina
         O "evento" que causa a transição é o
          término da atividade
         Exemplo: Máquina de vender no estado
          correspondente a atividade testar item e
          calcular troco pode disparar uma de
          quatro transições automáticas.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   117
               Ações de Entrada e de
                      Saída
       Ações vinculadas ao ato de entrar ou
        sair de um estado
       Não adicionam poder de expressão,
        mas permitem uma representação mais
        concisa
       Exemplo: Controle de uma porta de
        garagem

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   118
                       Envio de Eventos
     Uma ação pode ser especificada como enviar um
      certo evento para outro objeto.
     Notação:         enviar E (atributos)
           (palavra enviar pode ser omitida)
     Exemplo: Uma linha telefônica envia o evento
      ligar(número-de-telefone) para o comutador quando
      um número completo é discado.
      número completo / ligar(número-de-telefone)


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   119
          Sincronização de Eventos
                Concorrentes
       Um objeto pode executar várias
        atividades de forma concorrente
        (paralela).
       As atividades não são necessariamente
        sincronizadas, mas todas devem
        terminar para que ocorra transição de
        estado.
       Exemplo: Caixa automática.

Modelagem de Software Orientado a Objetos utilizando a Linguagem UML   120
         Sincronização de Eventos
               Concorrentes

                                            Emitindo

                                                                   dinheiro
                                                                   recolhido
                                   Faça : entregar dinheiro
                                                                               Pronta para
    Preparação
                                                                               reinicializar
                                      Faça : ejetar cartão         cartão
                                                                   recolhido


Modelagem de Software Orientado a Objetos utilizando a Linguagem UML                           121

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:5
posted:9/16/2012
language:Unknown
pages:121