Engenharia de Software Orientada a Objetos
Transcrição
Engenharia de Software Orientada a Objetos
Universidade Federal de Goiás Instituto de Informática Ciência da Computação Engenharia de Software Orientada a Objetos OOSE Método de Jacobson Projeto de Software Amanda Lira Gomes Lucas Balbino de Melo Ferreira Mycke Richard Guntijo Renato Gomes Borges Júnior 1. Introdução Com o surgimento da orientação a objetos, viu-se necessário criar métodos eficazes para modelar estes novos sistemas. Cada método possui suas próprias terminologias, bem como a descrição do processo e a notação utilizada. Neste trabalho descrevemos o método OOSE (Object-Oriented Software Engineering Engenharia de Software Orientada a Objeto), desenvolvido por Ivar Jacobson em 1992, que se caracteriza principalmente por utilizar casos de uso para descrever o sistema, também descrita em [2] como uma abordagem orientada a cenários. A metodologia de projeto orientado a objeto OOSE é a primeira a utilizar o conceito de Casos de Uso para definir os paradigmas do projeto de Software. Ivar Jacobson, nascido em 2 de Setembro de 1939, é um cientista da computação sueco que teve se formou Mestre em engenharia eletrônica no Chalmers Institute of Technology de Gotemburgo (em 1962) e PhD no Royal Institute of Technology de Estocolmo (já em 1985). Ele teve fundamental função no desenvolvimento da UML (Unified Modelign Language), junto com Grady Booch e James Rumbaugh, além do RUP (Rational Unified Process - Processo Unificado Racional). Para implementar a metodologia OOSE, a ferramenta Objectory foi criada pela equipe da Objectory AB para implementar a metodologia OOSE. Esta foi a pioneira, porém após o grande sucesso, outras ferramentas que suportavam OOSE surgiram [7]. A Objectory AB foi fundida com a Rational e com isso a notação, metodologia e ferramentas da OOSE foram substituídas pelas usadas pela Rational. Com o desenvolvimento da UML e da metodologia RUP, o OOSE foi se tornando obsoleta, pois o RUP já havia integrado os principais conceitos [9]. Na seção 2 explicamos os processos obtidos pela divisão realizada pelo método e como eles interagem entre si durante o desenvolvimento do projeto. A seção 3 ilustra os principais diagramas usados pelo método de Jacobson e como eles são aplicados na modelagem do sistema. A seção 4 descreve as principais heuristicas e a seção 5 mostra um estudo de caso realizado aplicando o modelo estudado. 2. Processo de funcionamento O desenvolvimento do projeto se divide em 3 processos que podem ser iterados e sobrepostos: análise, construção e teste. No processo de análise está incluído a análise de requisitos e a de robustez. Como a base desse modelo são os requisitos do cliente, ou do usuário final, é extremamente importante o entendimento (por parte do analista) dessas exigências. Para isso, faz-se uso do modelo de Casos de Uso (‘Use Cases’ ) com as descrições de interface e o modelo dos objetos do domínio em questão. O modelo Use Case é basicamente composto pelos atores, que constituem a parte externa do sistema e são a principal ferramenta pra se encontrar as funcionalidades necessárias (podem executar uma ou mais tarefas), e a interação, onde os atores conseguem se comunicar com alguma funcionalidade interna do sistema. Após ter desenvolvido o modelo de requisitos, e o mesmo ter sido aprovado pelo cliente, pode-se começar a pensar na criação e estruturação do sistema. Como o modelo gerado é totalmente orientado a aplicação, cria-se então um modelo Conceitual de configuração do sistema. Seu objetivo é encontrar a estrutura e robustez necessária no sistema, criando uma base para a sua futura construção. A estrutura geral do processo de análise é mostrada na figura 1. Figura 1. Etapa de Análise. Retirado de [6]. Já na construção, que é composta pelo desenho e implementação, há o refinamento e a formalização do modelo de análise, onde é levado em conta as possíveis consequências do ambiente de implementação. No modelo de desenho é definido explicitamente as interfaces dos objetos e também a semântica das operações. Nele também são atribuídas decisões em relação a base de dados, linguagem de programação, etc. Depois de identificar a arquitetura do sistema, é necessário descrever como os packages (onde os objetos estão agrupados) e os design objects irão se comunicar. Para cada caso de uso, deve ser desenhado um diagrama de interação (explicado em detalhes na seção 3), onde será descrito como o caso de uso é feito através da comunicação entre os packages. Os diagramas de interação obtidos podem ser utilizados em um nível intermediário de desenvolvimento, antes da implementação. Como eles tem uma descrição mais simplificada, aumentam a compreensão dos design objects ou até de um package, já que não são dependentes de nenhuma linguagem de programação específica. A implementação em código fonte deve ocorrer quando a interface dos packages se estabilizar. Nessa etapa, utiliza-se os design objects como guias, já que a maioria deles corresponde exatamente a uma classe, facilitando o mapeamento. Em outros casos algumas classes são implementadas para um dado design object, o que inclui implementação de atributos, utilização de componentes, separação de funcionalidades, etc. Isso irá garantir que que cada design object irá suportar as demais classes que forem adicionadas ao sistema. Durante esse procedimento, deve-se evitar que duas classes ofereçam funcionalidades iguais ou semelhantes, a não ser que esteja sendo utilizado um sistema de herança. Há outros meios para se criar um bom desenho de classes, mas o tempo é extenso e nem sempre se consegue obter um sistema eficiente e com classes mais genéricas. O esquema geral do processo de construção é mostrado na figura 2. A fase de desenho, chamada de projeto, realiza o refinamento dos casos de uso obtidos na fase de análise e gera os diagramas e especificações necessárias para a fase de implementação. Figura 2. Etapa de Construção. Retirado de [6]. Já na fase de testes deve ser feita a verificação do sistema construído e isso deve ser feito inteiramente dentro do processo de desenvolvimento, seu esquema geral é mostrado na figura 3. Se até esse momento os envolvidos na construção tiverem feito uso da disciplina e da boa organização, essa fase terá seu custo diminuído. O grande objetivo dessa fase é, principalmente, a integração das diferentes classes criadas através da utilização de Use Cases e isso pode ser feito bem cedo, já na parte de identificação e especificação dos mesmos. Ao definir os processos e seus respectivos modelos gerados, podemos então fazer uma apanhado geral do método de Jacobson. A figura 4 ilustra como os processos são obtidos a partir dos casos de uso: primeiramente expressamos o modelo de requisitos, então estruturamos o modelo de análise especificando os casos de uso, seguido da análise de robustez do sistema. Realizamos então o modelo de desenho (design) em que especificamos a estrutura geral do sistema, tanto em relação ao domínio do mundo real quanto a nível de implementação, a partir desta especificação podemos então implementar o sistema, o que é feito no modelo de implementação. Por fim o modelo de testes permite verificar e validar a consistência do sistema. Figura 3. Etapa de Teste. Retirado de [6]. Figura 4. Visão geral do Processo de desenvolvimento, tendo como base diagramas ‘Use Case’. Retirado de [8]. 3. Principais diagramas e suas aplicações na modelagem Os principais diagramas, encontrados na literatura, para definir a estrutura do sistema são os diagramas de caso de uso, os diagramas de análise, diagramas de interação e de transição de estados, porém de acordo com Jacobson et al (1992) também é necessário descrever as interfaces que não podem ser contempladas pelos diagramas, que podem corresponder a interfaces externas do sistema, bem como as sequências descritas de forma textual para facilitar a implementação em uma linguagem de programação [1]. O diagrama de caso de uso descreve um cenário que mostra as funcionalidades do sistema do ponto de vista do usuário. Estes diagramas são compostos por atores, que representam um usuário do sistema, podendo ser humano ou outro sistema computacional, por casos de uso que representam uma funcionalidade do sistema, e pelo relacionamento entre atores e casos de uso. Eles são produzidos na fase inicial, no modelo de requisitos de modo a facilitar a comunicação entre o analista e o cliente e para permitir que o cliente tenha uma visão geral das principais funcionalidades do sistema. Os diagramas de análise (desenvolvidos durante o processo de análise), também chamados de diagramas de classes de análise, concentram-se em identificar os conceitos do domínio do problema e transformá-los em classes de análise. Tais classes descrevem abstrações no domínio do problema do mundo real, a figura 5 ilustra um diagrama de classes, utilizado na seção 5 no estudo de caso apresentado. Os diagramas de interação são usados no modelo de desenho, incluso no processo de construção. Cada use case identificado no processo de análise recebe um diagrama de interação, que consiste em descrever a forma como é realizada a comunicação entre os objetos do caso de uso, bem como definir as mensagem (estímulos) trocadas entre eles para facilitar a fase de implementação. Dois tipos específicos de diagrama de interação são os diagramas de sequência e colaboração. Os diagramas de sequência ilustram como as mensagens são trocadas entre objetos no decorrer do tempo para realizar uma operação, a figura 6 mostra um exemplo de diagrama de sequência em que os objetos transmitem mensagens entre si. Os diagramas de colaboração são semelhantes aos de sequência, porém o tempo não é mais representado por linhas verticais e sim através de uma numeração, como mostrado na figura 7. Os diagramas de transição de estados descrevem quais estímulos podem ser recebidos e qual o resultado nos objetos ou sistema quando eles são recebidos. Estes diagramas são utilizados antes da fase de implementação e logo após a descrição dos diagramas de interação. Um exemplo simples é denotado na figura 8, que representa um diagrama de transição de estados de um semáforo, inicialmente ele se encontra em um estado e, então, recebe um estimulo para mudar de cor e passar para um novo estado que representa uma nova situação. Figura 5. Diagrama de classes de análise. Retirado de [5]. Figura 6. Exemplo de um diagrama de sequência. Retirado de [3]. Figura 7. Exemplo de um diagrama de colaboração. Retirado de [3]. Figura 8. Diagrama de transição de estados de um semáforo. Retirado de [4]. 4. Principais heurísticas Temos como características do método OOSE, UML como linguagem de modelagem, Direcionado por casos de uso, Centrado na arquitetura, Iterativo, Incremental. O que reflete nas seguintes etapas: ● Concepção: estudo de viabilidade, análise de riscos e elicitação dos principais requisitos; ● Elaboração: determina a arquitetura e os componentes para o projeto, junto com protótipos iniciais; ● Construção: completa o desenvolvimento com base na arquitetura inicial. Em suma, são características que acompanham do início ao fim de um projeto, não podendo ser esquecidas, se bem aproveitadas o resultado tende a satisfazer o propósito do projeto. 5. Estudo de caso Sistema para Controle de Bibliotecas [5], será construído um software para controlar o empéstimo e a devolução de exemplares de uma biblioteca. O usuário pode fazer um empréstimo de um exemplar durante um certo período e, ao final desse tempo, o exemplar deve ser devolvido. Renovações não são aceitas. A atendente é uma funcionária que interage com os usuários e com o sistema de controle da biblioteca através de um terminal. Dadas as características, serão seguidos os seguintes passos: 1) Criação dos diagramas de casos de usos; 2) Identificar Classes de Análise; 3) Estabelecer o domínio; 4) Construir um dicionário de dados; 5) Criar relacionamento entre as classes de Análise; 6) Identificar/Refinar atributos; 7) Iterar e refinar. Como produto final temos um ótimo diagrama de classes de Análise baseado em um método de análise Orientado a Objetos. 6. Referências [1] YAMAGUTI, Silvio Yochio. Orientação a Objetos no Desenvolvimento de Sistemas: Conceitos e Características. Engenharia de Sistemas PósGraduação Lato Sensu da Escola Superior Aberta do Brasil - ESAB. www.esab.edu.br/arquivos/monografias/ monografia_9850_v1.pdf [2] GNHOATO, André Ricardo; JUNIOR, Antônio Carlos Gimenez; KAZUOMATSUMOTO, Henrique. Linguagem de Modelagem Orientada a Objetos. Histórico e Aplicabilidade da UML(Unified Modeling Language). Instituto de Informática, Universidade Tecnológica Federal do Paraná. http://pt.scribd.com/andregnhoato/d/33369212-Linguagem-de-Modelagem-Orientada-a-ObjetosHistorico-e-Aplicabilidade-da-UML-Unified-Modeling-Language [3] SAMPAIO, Marcus Costa; NETO, Eloi Rocha. Material sobre UML. Universidade Federal de Campina Grande. http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/uml/diagramas/ interacao/interacao.htm [4] Diagrama de Transição de Estados. http://pt.wikipedia.org/wiki/ Diagrama_de_transi%C3%A7%C3%A3o_de_estados [5] CARVALHO, Ariadne. Modelagem Estática. Engenharia de Software, UNICAMP. http:// www.ic.unicamp.br/~ariadne/mc436/1s2012/cap03.pdf [6] BORGES, Gilene do Espírito Santo; NASCIMENTO, Maria Elenita Menezes. Uma avaliação de Métodos Orientados a Objetos e Modelos de Processo. Universidade de Brasilia. http:// pt.scribd.com/doc/82863321/52/Metodo-OOSE [7] BRETERNITZ, Vivaldo José. Uma introdução ao software baseado em objetos. http:// br.monografias.com/trabalhos/uma/uma.shtml [8] Carlos; Jardel; Ricardo; Sandro. Modelo OOSE. Faculdade de Informática de Taquara. http://fit.faccat.br/~franzen/analise2/oose/ [9] ASTIAZARA, Mauricio Volkweis; SOUZA, Marcelo Waihrich. Objectory. Universidade Luterana do Brasil. http://pt.scribd.com/doc/31791340/Objectory