Baixe o app para aproveitar ainda mais
Prévia do material em texto
1ºAula Orientação a objetos Objetivos de aprendizagem Ao término desta aula, vocês serão capazes de: • conhecer os conceitos de Orientação a Objetos; • compreender as dificuldades de se observar um problema e transformar em uma solução; • entender os benefícios da orientação a objetos. Prezados(as) alunos(as), Em nossa primeira aula, vamos estudar os conceitos importantes sobre orientação a objetos. Se ao final desta aula tiverem dúvidas, vocês poderão saná- las através das ferramentas da plataforma de ensino. Conto com a sua participação, aproveite para ler e refletir os objetivos de aprendizagem, afinal da sua participação dependerá seu aprendizado. Bom Trabalho! Bons estudos! 141 Análise de Sistemas II 6 Seções de estudo 1 – Conceitos da orientação a objetos 2 – A complexidade do domínio do problema 3 – Benefícios da orientação a objetos 1 - Conceitos da orientação a objetos CONCEITO CURIOSIDADE “Uma abordagem orientada a objetos para o desenvolvimento de software O conceito de orientação a objetos já vem sendo discutido há algum tempo. Por volta de 1970, surgiram as primeiras publicações, mas a sua maior disseminação ocorreu nos anos 90, quando se tornou uma das principais metodologias de desenvolvimento de software. Desde o lançamento da primeira linguagem orientada a objetos, a SIMULA, várias referências da engenharia de software mundial como: Peter Coad, Edward Yourdon e Roger Pressman abordaram extensamente a análise orientada a objetos como um grande avanço no desenvolvimento de sistemas. No início dos anos 80, surgiu a análise essencial para sistemas em tempo real, que ajudaram a análise estruturada por eventos, delimitando a área de atuação do sistema, através da utilização da lista de eventos, o conceito de “tecnologia introduzindo o modelo Entidade Relacionamento (DER). As suas principais vantagens residem em oferecer critérios objetivos para o particionamento do sistema, observando suas características, facilita a obtenção da solução, através dos eventos, isola os requisitos de restrições de implementação, de análise e sincroniza a modelagem de dados com a de processos. Entretanto, os sistemas desenvolvidos baseados nas técnicas estruturadas ainda apresentam algumas limitações, principalmente quando da inclusão de novas funções ou alterações em funções já existentes, que na maior parte das vezes, provocam problemas em outras partes do software. A grande esperança que levou aos estudos da orientação a objetos com mais intensidade foi a de suprir algumas das principais preocupações das empresas de software: a necessidade cada vez mais crescente de se construir softwares corporativos de forma muito mais rápida, com baixo custo, em desenvolvimento de software, de Orientação a Objetos. apresenta a sua visão do que entende por essa abordagem. Alguns dos conceitos encontrados são: • a orientação a objetos pode ser vista como a abordagem de modelagem e desenvolvimento de sistemas que facilita a construção de sistemas complexos a partir de componentes individuais; • o desenvolvimento orientado a objetos é a técnica de construção de software na forma de uma coleção estruturada de implementações de tipos abstratos de dados; • desenvolvimento de sistemas orientado a objetos é um estilo de desenvolvimento de aplicações onde o encapsulamento potencial e real de processos e dados é reconhecido num estágio inicial de desenvolvimento e num alto nível de abstração, com vistas a construir de forma econômica o que • a orientação a objetos é uma forma de organizar o software como uma coleção de objetos discretos que incorporam estrutura de dados e comportamento; • quando construídos corretamente, sistemas possuem estruturas bem conhecidas e provêm a oportunidade de criar e implementar componentes totalmente reutilizáveis; • modelos orientados a objetos são implementados convenientemente, utilizando uma linguagem de programação orientada a objetos. A engenharia de software orientada a objetos é muito mais que utilizar mecanismos de sua linguagem de programação, é saber utilizar, da melhor forma possível, todas as técnicas da modelagem orientada a objetos; • a orientação a objetos não é só teoria, mas uma usadas em inúmeros projetos e para construção de diferentes tipos de sistemas; • a orientação a objetos requer um método que integre o processo de desenvolvimento e a linguagem de modelagem com a construção de técnicas e ferramentas adequadas. A Orientação a Objetos é um dos maiores, e talvez o maior avanço em software destes últimos anos. Ela nos oferece uma forma mais natural de se analisar o mundo e transformar as necessidades em programas que irão resolver nossos problemas. Ela nos permite construir sistemas melhores e mais fáceis de dar manutenção. As técnicas de análise estruturadas ainda hoje são as mais sempre tiveram grande aceitação desde que foram lançadas sendo utilizadas, a decomposição das funções (chamada mostrou-se inadequada em situações de sistemas complexos aperfeiçoamentos foram introduzidos desde então, e ajudaram existe uma probabilidade maior de que os sistemas criados 142 7 com as técnicas estruturadas sejam mais difíceis de serem incrementados com novas funções e as alterações em funções já existentes, muitas vezes, provocam sérios problemas em outras partes do software. A orientação a objetos permite modelar de forma mais natural o mundo real, pois as estruturas de dados são vistas como objetos, ou seja, têm características e funções. Seu maior objetivo é aumentar a produtividade do desenvolvimento de software através de uma maior expansibilidade e reutilização de código, além de controlar a complexidade e o custo de manutenção. 1.1 Por muitos anos, o termo “orientado a objetos” (OO) foi usado para denotar uma abordagem de desenvolvimento de software que usava uma das linguagens de programação orientadas a objeto (ex. Ada 95, C++ , Eiffel, Smalltalk). Hoje, o paradigma abrange uma visão completa da Engenharia de Software. Edward Berard, citado por Pressman (2006, p.552) Os benefícios da tecnologia orientada a objetos são incrementados se ele for endereçado cedo - através do processo de engenharia de software, considerando que a tecnologia OO deve avaliar seu impacto em todo este processo. Simplesmente empregar a programação OO (OOP) não irá produzir os melhores resultados. Os engenheiros de software e seus gerentes devem considerar também itens como Análise de Requisitos OO (OORA), projeto OO (OOD), análise de domínio OO (OODA), sistemas de banco de dados OO (OODBMS) e engenharia de software auxiliada por computador orientada a objetos (OOCASE). (PRESSMAN, 2006, s/p) A orientação ao objeto se dedica a desenvolver um modelo orientado a objetos do domínio da aplicação. Os estão associadas com o problema a ser resolvido. O enfoque da orientação a objetos é uma visão sobre um mundo como uma coletânea de objetos que interagem entre si, apresentando características próprias que são representadas pelos seus atributos e operações. No paradigma orientado a objetos, os dados e as funções são vistos de forma agregada, não ocorrendo uma modelagem separada para cada um desses componentes; portanto, sob esse ponto de vista, a orientação a objetos favorece uma modelagem mais natural, que melhor retrata a realidade, pois processos e dados estão coligados, não se encontram dissociados em nenhuma atividade real. software 2 problema A tarefa da equipe de desenvolvimento de software é construir a ilusão da simplicidade (Booch, 2005), como mostra software o usuário. Para o usuário, não importa o quão complexa é a estrutura interna do software, para ele o que importa é se o software resolve suas necessidades de forma fácil, rápida e segura. Para o usuário, o sistema deve ser simples. A complexidade de um software é uma propriedade essencial e não acidental. Observa-se que a herança da complexidade deriva de quatro elementos:• A complexidade do domínio do problema – o domínio do problema que estamos citando aqui não está relacionado com “dominar o problema”, mas sim a abrangência, o escopo do problema, este escopo envolve os dados, informações, procedimentos, o problema. Geralmente a pessoa que desenvolve não é quem conhece o domínio do problema que está sendo analisado. É preciso destacar também que a tarefa de levantamento das necessidades do sistema é complicada e demorada, além disso, estas necessidades podem mudar ao longo do trabalho, ou seja, são instáveis. Devemos pensar também que o sistema precisará evoluir para continuar sendo útil para a empresa, portanto o domínio do problema não está apenas nos requisitos atuais levantados, mas também nas possibilidades de necessidades futuras que devem ser percebidas pela equipe de análise. • – os desenvolvedores devem criar a ilusão da simplicidade, ou seja, por mais complexo que o software possa ser na sua arquitetura interna e nos seus procedimentos, para o usuário deve parecer sempre uma coisa simples e de fácil utilização. Outro ponto importante é que o tamanho do software não está ligado á sua qualidade, programas grandes demais não são ou mais complexos que outros menores, nem mesmo podemos dizer que programas menores são melhores porque foram melhor estruturados, tudo vai depender de como o software é construído e com que desenvoltura ele resolve os problemas do usuário. Outro problema importante que precisa ser gerenciado é a comunicação entre os integrantes da equipe de desenvolvimento, para evitar • – Um mesmo problema pode ser resolvido de várias de interesses entre integrantes da equipe de desenvolvimento, que podem querer, cada um dos integrantes, defender sua alternativa de solução como sendo a melhor entre todas as outras. Algumas vezes o desenvolvedor pode acabar 143 Análise de Sistemas II 8 perdendo tempo tentando “reinventar a roda”, ou seja, criar coisas que já existem, ou ainda não querer aproveitar recursos já disponíveis, seria como se um construtor quisesse fabricar os tijolos que irá usar na sua obra, ou plantar as árvores para ter a madeira que precisará durante a construção. A falta de padronização dos procedimentos é outro problema que é comum na indústria de software muito o trabalho em equipe. • um sistema deverá se comportar em determinadas situações é uma tarefa que exige um grande esforço de equipe e uma grande percepção das necessidades e limitações do usuário. software Podemos dizer que sistemas complexos são aqueles que possuem algumas das características fundamentais, como: • possuem um longo ciclo de vida; • todos os detalhes do projeto; • a complexidade pode ultrapassar a capacidade da percepção humana, o que vai exigir um esforço em conjunto para resolver determinados problemas; • em alguns sistemas, a complexidade estará sempre presente e pode apenas ser gerenciada e não superada, mesmo que este gerenciamento deva ser Serão descritos a seguir alguns princípios para administrar a complexidade, ou seja, levar ordem ao caos. Figura 1.1. A complexidade do software Fonte: Booch (2005) 2.1 trazendo ordem ao caos Administrar a complexidade dos sistemas é tarefa essencial, pois sem ela os sistemas acabam por não atender todas as necessidades dos usuários, ou podem atender de forma errada, além disso, os prazos não serão cumpridos e o de construção do sistema. 2.1.1 Dividir um problema maior em partes menores é importante para facilitar o entendimento das necessidades, pois é muito mais tranquilo administrar problemas menores um sistema de software complexo está sendo projetado é essencial decompô-lo em partes cada vez menores, cada Dessa forma, é possível satisfazer a uma restrição real que existe sobre a capacidade de cognição humana: para entender qualquer nível de um sistema, é necessário compreender somente um pequeno número de partes de uma vez (ao invés inteligente endereça diretamente a complexidade inerente do software através de uma divisão forçada do espaço do estado do sistema” (BOOCH, 2005, s/p). Para entender melhor o problema como um todo, é preciso que se tenha inicialmente uma visão geral sobre ele, sem se preocupar inicialmente com os detalhes procedimentais que possam aparecer no decorrer do processo de desenvolvimento. A partir daí, esse problema “grande” deverá ser subdividido em problemas menores e, aí sim, a cada subdivisão, os detalhes irão aparecer naturalmente, mas aí já será mais fácil administrar a complexidade desses problemas, uma vez que eles irão aparecer em porções menores. A complexidade é organizada como uma hierarquia, um sistema complexo é composto por subsistemas inter- relacionados que, por sua vez, têm seus próprios subsistemas e assim por diante, até que se chegue a componentes quais serão os componentes mais elementares de um sistema e quais são os mais primitivos será uma decisão arbitrária da equipe de análise e depende basicamente da visão que o observador do sistema terá. pois descobrir as abstrações e mecanismos comuns num sistema Um dos maiores problemas para os desenvolvedores de software é conseguir transformar necessidades de gerenciamento de informação em soluções de software. Os experimentos de Miller, citados por Booch (2005) relatam que ele concluiu que “um indivíduo pode compreender somente sete (mais ou menos duas) partes de informação ao mesmo tempo. Este número aparece como sendo independente do conteúdo da informação”. Miller observou que “o espaço do julgamento absoluto e o espaço de memória imediata impõem várias limitações na quantidade de informação que as pessoas estão aptas a receber, processar e relembrar. Através da organização dos estímulos de entrada simultaneamente em várias direções e sucessivamente 144 Highlight 9 dentro de uma sequência de partes, o ser humano é capaz de interromper esse engarrafamento (entrave) de informação.” perceber até sete níveis de informação sem se perder, com uma variação de mais ou menos duas. A partir deste número da informação. Em termos contemporâneos, este processo é chamado . Uma forma de facilitar o entendimento de sistemas complexos é descobrir abstrações, mecanismos comuns e elementos já conhecidos em outras situações. CURIOSIDADE Um motorista consegue dirigir um novo modelo de carro Wulf, citado por Booch, (2005) descreve que: os humanos desenvolveram uma técnica poderosa e excepcional para lidar com a complexidade. Eles a abstraem. Uma vez que o ser humano é inábil para dominar um objeto complexo por total, ele escolhe ignorar os detalhes não essenciais, lidando, no lugar, com um modelo de objetos idealizado e generalizado” (BOOCH, 2005, s/p). Em cada nível de abstração, os elementos cooperam entre si para desempenharem suas funcionalidades por meio de uma interface e oferecem serviços para os níveis mais altos. 3 O benefício principal do desenvolvimento Orientado a Objetos não é reduzir o tempo de desenvolvimento. Ele pode levar mais tempo que o desenvolvimento convencional porque na Orientação a Objetos se pretende que haja a promoção da reutilização futura e a redução dos erros posteriores e futuras manutenções. O tempo transcorrido até que o código esteja completo pela primeira vez é possivelmente ou em alguns casos ligeiramente maior. O benefício da Orientação a Objetos consiste em que as interações subsequentes são mais rápidas e mais fáceis do que empregando um método convencional, porque as revisões estão mais localizadas. A prática mostra que é necessário um menor número de interações porque um maior número de problemas são descobertos e corrigidos durante o desenvolvimento. As técnicas de Orientação a Objeto pressupõem que se possam criar sistemas compondo-se objetos previamente criados e, consequentemente, reduzindo-se o tempo produtividade e qualidade. Durante as seções anteriores comentamos sobre algumas das vantagens do uso datecnologia de orientação a objetos para desenvolvimento de sistemas, vamos agora destacar detalhes de alguns dos principais benefícios: • desenvolvimento estruturado, em que se elabora um projeto e depois se faz os programas, podemos ter seus objetivos depois de implementado. No desenvolvimento OOP (Object Oriented Project, ou Projeto Orientado a Objetos), devido ao fato deste ser feito de maneira quase que interativa com o A pouca quantidade de código programável projeto. • reage aos erros imprevistos como: uma falha na impressora, ou um disco cheio. Tanto maior for a potencialidade, maior a capacidade do programa em causar o menor “estrago” possível aos dados e evitar uma saída drástica do sistema. • - Dizemos que quanto maior for a extensibilidade do software, maior será sua capacidade analistas. • - A capacidade de se otimizar a produtividade do programador depende diretamente da maneira como o software disponibiliza a reutilização do código (programa fonte) gerado. já reutiliza código anteriormente gerado, porém a perfeita reutilização consiste na utilização completa de um código gerado para algum sistema sem qualquer outra adaptação prévia. • - A aplicação dos conceitos da orientação a objetos na análise de sistemas permitirá modelar a empresa ou as áreas da aplicação de uma forma mais natural, visto que os recursos a serem aplicados retratam com mais facilidade o mundo real. A capacidade de retratar o universo pesquisado é moldado em diagramas mundo real. A própria transição entre etapas na construção do software, aplicando- se o paradigma os mesmos conceitos e linguagem. • de métodos reduz a complexidade na construção do código dos programas. Isso traz simplicidade software. Devemos lembrar que os benefícios da orientação a objetos serão maiores e mais evidentes se ela for adotada do software. Na prática, podemos dizer que a maior vantagem da orientação a objetos é a facilidade de manutenção do sistema (quando OO é aplicado corretamente). Mas, tem como desvantagem um maior tempo para desenvolvimento. Levantar um sistema orientado a objetos dá um pouco mais de 145 Highlight Highlight Análise de Sistemas II 10 trabalho que um sistema procedural, pois temos que planejar o sistema pensando nos objetos e suas funções e não apenas nas funções que o sistema irá executar. A orientação a objetos também possui algumas desvantagens • maior tempo necessário para o desenvolvimento do projeto do sistema; • complexidade no aprendizado para desenvolvedores de linguagens estruturadas – com o desenvolvimento estruturado sentem maior orientação a objetos; • maior uso de memória, por exemplo para aplicações móveis em algumas linguagens como o JavaME; • maior esforço na modelagem de um sistema OO do que um sistema estruturado, porém oferece menor • dependência de funcionalidades já implementadas em superclasses no caso da herança, implementações espalhadas em classes diferentes (veremos o CURIOSIDADE Retomando a aula A orientação a objetos surgiu com o intuito de tornar possível criar sistemas mais complexos de forma mais rápida e que pudessem receber manutenção de forma que não fosse necessário fazer muitas mudanças na estrutura do projeto do sistema. Apesar da maior complexidade nos trabalhos iniciais, a orientação a objetos permite que sistemas mais complexos possam ser desenvolvidos mais rapidamente. 2 – A complexidade do domínio do problema A complexidade dos sistemas precisa ser administrada, mas isto não é uma tarefa simples, pois envolve uma série de problemas relacionados a: complexidade do domínio do caracterização do comportamento de sistemas. Uma das formas de gerenciar a complexidade é a decomposição, que permite dividir problemas grandes em partes menores, tornando-os problemas menores e mais facilmente gerenciáveis. Os principais benefícios da orientação a objetos são: exatidão, potencialidade, extensibilidade, reutilização, mais simples. No entanto, vamos observar que foram citadas várias outras vantagens, entre elas, a maior facilidade quando se software. Podemos apontar outros benefícios importantes como o ciclo de vida mais longo para os sistemas, desenvolvimento mais acelerado sem que isto implique em perda da qualidade, possibilidade de se construir sistema muito mais complexos pela incorporação de funções prontas (reutilização), menor custo para desenvolvimento e manutenção de sistemas. Vale a pena PRESSMAN, Roger. Engenharia de Software. São Paulo- SP: Makron Books, 2006. SOMMERVILLE, I. Engenharia de Software. 8ª Edição. Addison Wesley, 2007. BOOCH, Grady, JACOBSON, Ivar; RUMBAUGH, James. UML – guia do usuário. Elsevier, Rio de Janeiro. 2005. pena ler • YOUTUBE. Conceitos básicos de orientação a objetos. Disponível em: <http://www.youtube.com/ pena assistir Minhas anotações 146 2ºAula Características de objetos Objetivos de aprendizagem Ao término desta aula, vocês serão capazes de: • entender as definições dos termos mais utilizados na orientação a objetos; • compreender as dificuldades de se observar um problema e transformar em uma solução; • entender os benefícios da orientação a objetos. Prezados(as) alunos(as), Nesta segunda aula, vamos conhecer as definições dos Se ao final desta aula tiverem dúvidas, vocês poderão saná- las através das ferramentas da plataforma de ensino. Conto com a sua participação, aproveite para ler e refletir os objetivos de aprendizagem, afinal da sua participação dependerá seu aprendizado. Bom Trabalho! Bons estudos! 147 Análise de Sistemas II 12 Seções de estudo 1 – Objetos 2 – Classes 3 – Características da orientação a objetos 1 CONCEITO Grady Booch (1955-) é um informático americano. Seu livro “Software Engineering with Ada” lançou as raízes do projeto orientado a objetos. Esse trabalho evoluiu para uma metodologia de desenvolvimento de sistemas orientados a objetos publicada em seu livro “Object- Oriented Analysis and Design with Applications”. Em 1996, em parceria com Ivar Jacobson e James Rumbaugh, lançou uma linguagem que se tornou um padrão da indústria, a UML. (Wikipedia, 2013) Um objeto pode entidade do mundo real que tem uma identidade. citados por Booch (2005, p. 91) oferecem a seguinte No mundo real um objeto limita-se a existir, mas, no que se refere ao mundo da tecnologia da informação, cada qual pode ser referenciado inequivocamente (RUMBAUGH et al., 2005). Os objetos podem representar uma entidade concreta (o parágrafo de um documento, a janela num computador, um aluno deste curso, o carro do aluno, um arquivo do computador) ou uma entidade conceitual (uma regra num sistema ou uma estratégia de jogo). Figura 2.1. Características do objeto. Fonte: Booch (2005) A estrutura de um objeto é representada por um conjunto de atributos. O comportamento do objeto é representado por um conjunto de operações que podem ser executadas sobre o objeto. Objetos com a mesma estrutura e o mesmo comportamento são agrupados em uma estrutura que chamamos de . Em outras palavras, um é algo distinguível que contém um (atributos ou propriedades) e possui um . O comportamento é como um objeto age e reage, em termos de mudanças em seu estado e troca de mensagens. Uma é alguma ação que um objeto executa sobre outro para obter uma reação. Cada objeto tem uma e é distinguível de outro, mesmo que seus atributos sejam idênticos. Instâncias de classes são chamadas de objetos. do mudanças do estado do objeto interagindo com o seu mundo externo, através das operações realizadas pelo objeto. A comunicação entre objetos se dá por meio de troca de mensagens. Assim, para acessar a estrutura de dados de outro objeto, um objeto deve enviar uma mensagem para aquele outro objeto. Uma mensagem consiste do nome de uma operação e dos argumentos requeridos para que a operação seja executada. O comportamento de um objeto representa como este objeto reage, em termosde suas mudanças de estado, mensagens a que um objeto pode responder representa seu comportamento. A troca de mensagens é uma parte da equação comportamento de um objeto, uma vez que o estado de um objeto afeta seu comportamento. Na maioria das linguagens de programação orientadas a objetos, as operações que os clientes podem executar são tipicamente declaradas como métodos, que fazem parte da declaração das classes (veremos o conceito de classe mais adiante). O estado de um objeto representa os resultados cumulativos de seu comportamento (BOOCH, 2005). Um objeto é, pois, uma entidade que tem seus atributos representados por tipos de dados e seu comportamento representado por operações. A criação de um objeto é chamada de . Cada instância tem seus próprios valores para seus atributos, mas compartilha o nome e os comportamentos dos atributos com as outras instâncias da mesma classe. A orientação a objetos possui alguns conceitos fundamentais que norteiam todas as formulações e facilitam a sua aplicação em software. As seções que seguem apresentam outra sã s e metodologias baseadas em objetos. 2 - Classes Uma e é o agrupamento de objetos que possuem características idênticas, ou seja, com a mesma estrutura de atributos ou propriedades) e comportamento (operações). 148 Highlight 13 Os atributos são “variáveis” ou campos que indicam possíveis informações armazenadas por um objeto de uma classe. Por exemplo: nome, cpf, endereço. Métodos são funcionalidades da classe. Exemplo: calcular saldo, atualizar estoque, lançar nota. O conceito de classe é bastante semelhante ao conceito de tipo de dados de outras linguagens tradicionais. Da mesma o um conjunto de valores numéricos que possuem casas decimais, ou strings como um conjunto de valores alfanuméricos, chamados de cadeia de caracteres, o conceito de uma classe. As classes são um conjunto de “coisas”. Posteriormente, veremos que essas coisas são chamadas de objetos que apresentam características semelhantes. Numa classe, além seu “comportamento”, que é expresso através de funções e procedimentos. Uma classe é uma abstração que descreve as propriedades importantes para uma aplicação e não leva em conta as outras. Exemplos de classes: Parágrafo, Janela, Aluno, Carro. Cada de objetos individuais. Cada objeto é uma de uma classe. Assim, cada instância de classe tem seus próprios valores para cada um dos atributos da classe, mas compartilham os nomes dos atributos e métodos com as outras instâncias da classe. Pensemos na classe CARRO. Essa classe define os comportamentos e atributos de um carro, e existem atributos que serão comuns a todos os carros. As rodas e o motor são atributos comuns a qualquer carro. Já uma Ferrari possui atributos que são específicos dela, o valor por exemplo. Figura 2.2. Classe de objetos – Classe Carro. Fonte: Booch (2005) Uma classe é um conjunto de objetos do mesmo tipo. Todos os objetos de uma classe têm a mesma característica e realizam as mesmas funções. Fazendo uma comparação entre o Modelo Entidades Relacionamentos (MER ou DER) e o Modelo Orientado a objetos (OO), podemos dizer que: MER....................................................................................OO Entidades.......................................................................Classes Ocorrência.....................................................................Objeto Atributo.......................................................................Atributo 3 objetos A Orientação a Objetos se caracteriza principalmente Usando como exemplo um sistema de cadastramento de veículos, teríamos, entre outras, a classe VEÍCULOS que conteria um conjunto de registros ou ocorrência, um para cada veículo cadastrado. Cada um destes registros representa um OBJETO para a OOA (Object Oriented Analysis - Análise Orientada a Objetos). Se aprofundássemos a nossa análise, descobriríamos que existem tipos diferentes de veículos tais como: veículo- caminhão, veículo-de-passeio e veículo- ônibus. Estaríamos diante das subclasses da classe veículo. É interessante notar que, a cada uma das subclasses, também existem atributos e comportamentos comuns entre elas, isto é, as subclasses herdam características das classes hierarquicamente superiores. Este aspecto – HERANÇA – é profundamente explorado e é uma das razões de ser das tecnologias orientadas a objeto. Pelo que foi exposto até agora parece não haver muita diferença entre a Análise Orientada a Objetos e a Modelagem Entidade-Relacionamento, mas essa diferença existe e é fundamental. Na OOA, guardamos nas classes de objeto mais que simplesmente os dados ou atributos; guardamos também, os serviços exclusivos sobre esses dados. No exemplo da classe VEÍCULOS, teríamos os atributos Placa, Proprietário, Data-Compra, Potência, Marca, Cor etc. E os serviços Incluir- Veículo, Calcular-idade-Veículo, Deletar-Veículo, entre outros. Para a subclasse VEÍCULOS – CAMINHÃO, além do que foi herdado, teríamos os atributos Capacidade-de-cargas e Distância-entre-Eixos, e mais os serviços de Calcular- Tempo-Vida-Útil e Reservar- Espaço-para-frete. Na OOA, só é possível incluir, alterar, acessar e excluir objetos de uma classe através de um acionamento de seus serviços exclusivos. Trata-se do conceito de ENCAPSULAMENTO, que dá a uma classe de objetos, características de “caixa-preta”. Para acionar estes serviços, o usuário ou outro objeto deve emitir uma mensagem para o objeto receptor, indicando qual função deve ser executada e quais os argumentos servirão de parâmetros para essa função. Nas linguagens tradicionais, não orientadas a objetos, seria algo parecido com acionar uma sub- rotina chamando um procedimento ou função. 3.1 - Abstração A abstração consiste em enfocar os aspectos mais importantes de um objeto (visão externa; o que é e o que ele faz), ignorando suas características internas (visão interna; como ele deve ser implementado). 149 Análise de Sistemas II 14 Abstração é uma das formas fundamentais do ser humano lidar com complexidade. Shaw, citado por Booch (2005, p. sistema que dá ênfase a alguns dos detalhes ou propriedades do sistema enquanto suprimem outros. Uma boa abstração é aquela que enfatiza detalhes que que são, para o momento, imateriais ou desviadores do foco.” Uma abstração denota as características essenciais de um objeto que o distinguem de todos os outros tipos de objetos e desta maneira, fornece limites conceituais do observador. A abstração enfoca a visão exterior de um objeto e serve para separar o comportamento essencial do objeto de sua implementação. (BOOCH, 2005) Figura 2.3. A abstração enfoca as características essenciais de um objeto, relativas à visão do observador. Fonte: Booch (2005) a abstração diferente do objeto focado, enquanto a vovó vê o gato como uma bola de pelos, a veterinária vê sua anatomia. Cada uma vê da forma do seu interesse. Abstração é o princípio de ignorar os aspectos de um assunto não relevante para o propósito em questão, tornando possível uma concentração maior nos assuntos principais. A abstração consiste então na seleção que um analista faz de alguns aspectos, ignorando outros (COA Figura 2.4. Transformação do problema em modelo de sistema, através da abstração Fonte: http://www.cpdee.ufmg.br e estamos considerando é complexo; em vez de tentar compreender o todo, selecionamos parte dele. Sabemos que existem detalhes adicionais; simplesmente optamos por não considerá-los neste momento. Ao aplicar a abstração de dados, um analist atributos e os serviços que manipulam exclusivamente esses atributos. O único jeito de chegar até os atributos é através de um serviço. Os atributos e seus serviços podem ser tratados como um todo intrínseco (COAD OURDON, 1992). 3.2 s abstrações. A estrutura do objeto é importante uma vez que ilustra como diferentes objetos colaboram uns com os outros através de padrões de interação, chamadosmecanismos. A estrutura de classes é igualmente importante, uma vez que destaca a estrutura comum e comportamento dentro de um s dentro de um sistema de software complexo não é uma tarefa fácil, uma vez que requer a descoberta de padrões entre vários objetos. No entanto, a partir do momento em que essas estruturas estiverem mapeadas, a estrutura do sistema e seu entendimento se tornam bastante 3.3 - Encapsulamento O encapsulamento consiste em ocultar ao usuário o funcionamento interno de uma classe. A principal vantagem do encapsulamento é permitir que os programadores mudem a implementação de uma classe sem que precisem alterar algum código gerado. O encapsulamento é o empacotamento de dados (atributos) e de operações sobre estes (métodos), também conhecido como a capacidade de “esconder informação” de detalhes de implementação (abstração). No caso da orientação a objetos, os dados não podem ser acessados diretamente, mas através de mensagens enviadas para as operações. O uso de encapsulamento permite que a implementação d sem afetar as aplicações que usam este objeto ou a forma de acessá-lo. Figura 2.5. O encapsulamento esconde os detalhes da implementação de um objeto. Fonte: Booch (2005) No encapsulamento, os usuários têm conhecimento apenas das operações que podem ser realizadas e precisam estar cientes apenas do que as operações realizam e não como elas estão implementadas (BOOCH, 2005). 150 Highlight Highlight 15 O encapsulamento é mais frequentemente alcançado através do ocultamento das informações, que é o processo de esconder os detalhes de um objeto que não contribuem para suas características essenciais; tipicamente a estrutura de um objeto é escondida, bem como a implementação de seus métodos. Por exemplo, para se cadastrar uma localização turística e suas atrações através de um sistema desenvolvido para Web, uma pessoa não precisa conhecer sua estrutura interna (tabelas, atributos, classes) nem tão pouco como se dá a implementação de seus métodos. Sabe-se que é necessário acessar a página via Internet, mas não é preciso saber como esta operação é implementada (construída). Dessa forma, o usuário precisa conhecer apenas a interface (neste caso, as telas) que permite a ele executar operações do tipo incluir, alterar, excluir ou consultar, e não como essas operações são de fato implementadas. 3.4 A Herança é uma das principais características da orientação ao objetos, pois permite o reaproveitamento de métodos e atributos, diminuindo o tempo de desenvolvimento do sistema e facilita as futuras manutenções. A herança consiste no compartilhamento de atributos e operações entre as classes baseado num relacionamento de hierarquia. Permite que uma nova classe seja descrita a partir de outra classe já existente (reutilização). A subclasse herda as características e o comportamento da superclasse, além de poder adicionar novas características e comportamentos aos herdados; por exemplo, a classe herda da classe algumas propriedades e operações, pois a classe automóvel pertenc A Herança é um mecanismo onde temos uma classe outra, adicionando todas as funcionalidades e propriedades daquela primeira (chamada de superclasse) e podendo adicionar outras funcionalidades e propriedades para a classe criada a partir da primeira (chamada de subclasse). Sua utilização força que a subclasse inclua todos os métodos e propriedades de sua superclasse; A utilização da herança representa mais que uma simples economia na criaçã o um comportamento (método) é alterado, todas as classes que descendem dela terão acesso aos métodos atualizados, sem a necessidade de serem refeitos. Uma (como no caso do exemplo anterior) e posteriormente termos de subclasses e assim sucessivamente. Podemos dizer com isso que a classe automóvel é uma subclasse da classe veículo e que a classe veículo é uma superclasse. O conceito de herança para o paradigma da orientação a objetos é bastante semelhante ao conceito de herança que conhecemos no nosso dia a dia. Cada um de nós herdou características existentes em nossos antecessores, sejam elas características físicas ou de comportamento. Da mesma forma, as classes e, por consequência, seus objetos, também têm a possibilidade de herdar características e métodos para seus antecessores. Figura 2.6. Exemplo de Herança. Fonte: Microsoft.com Esta relação entre classes é uma das grandes vantagens de sistemas orientados a objetos por causa da redução de trabalho resultante durante o projeto e a programação destes. Existem dois tipos de herança: • herança simples, onde uma subclasse tem somente uma superclasse, ou seja, uma subclasse herda apenas as características de uma superclasse; • herança múltipla, na qual uma subclasse herda simultaneamente de várias superclasses. 3.5 - o pode se comportar de forma diferente em classes diferentes. que é diferente para as instâncias de classe círculo e polígono ou a operação diferente para janela de computador e para uma peça de um jogo de xadrez. Uma operação que tem mais de um método que a implementa é dita , ou seja, pode possuir várias formas. Uma mesma função pode apresentar diferentes “comportamentos”, daí o nome do O usuário não precisa saber quantas implementações existem para uma operação, ou explicitar qual método deve ser utilizado: a linguagem de programação deve ser capaz de selecionar o método correto a partir do nome da operação, classe do objeto e argumentos (parâmetros) para a operação. Assim, novas classes podem ser adicionadas sem a necessidade á existente, pois cada classe apenas os seus métodos e atributos. Retomando a aula Um objeto é qualquer “coisa”, lugar, relatório, evento, tela ou conceito que se aplique ao sistema. Todo objeto pertence a uma classe e tem seus próprios atributos. Os 151 Análise de Sistemas II 16 atributos dos objetos são mutáveis e podem receber valores diferentes conforme as características do objeto. Uma classe representa um conjunto de objetos. Estes, apesar de possuírem atributos iguais, têm valores diferentes em seus atributos. Uma classe é um modelo e todos os seus objetos têm os mesmos atributos, embora sejam atributos que podem ter valores diferentes, e os mesmos métodos. Na abstração, nós isolamos os objetos que queremos representar do ambiente complexo em que se situam, e nesses objetos representamos someta as características que são relevantes para o problema em questão. O encapsulamento é um dos pilares da orientação a objetos, sua característica é ocultar partes da implementação, e assim construir softwares que atinjam suas funcionalidades e escondam os detalhes de implementação do mundo exterior. Os objetos encapsulados funcionam como uma caixa preta, sabe- se da sua interface externa, mas não precisa se preocupar com o que acontece dentro dela. A herança é uma das principais características das linguagens de programação orientadas a objetos, permite o reaproveitamento de métodos e atributos diminuindo o tempo de desenvolvimento, ainda reduz as linhas de código, desta forma facilita as manutenções futuras. das classes, este trabalha com a redeclararão de métodos herdados, ou seja, os métodos têm a mesma assinatura (têm o mesmo nome), mas a forma de implementação utilizada diferem o da superclasse. Vale a pena PRESSMAN, Roger. Engenharia de Software. São Paulo- SP: Makron Books, 2006. SOMMERVILLE, I. Engenharia de Software. 8ª Edição. Addison Wesley, 2007. BOOCH, Grady, JACOBSON, Ivar; RUMBAUGH, James. UML – guia do usuário. Elsevier, Rio de Janeiro. 2005. pena ler • YouTube. Vídeo aula de orientação a objetos. Disponível em: <http://www.youtube.com/watch?v=t9Cd7EWL0eo . Acesso em 01/12/2013 pena assistir Minhas anotações 152 3ºAula Técnicas orientadas a Objetos Objetivos de aprendizagem Ao término desta aula, vocês serão capazes de: • entender os objetivos das técnicas de modelagem orientadas a objetos; • conhecer as principaistécnicas criadas; • comparar as técnicas; • observar pontos positivos e negativos em cada uma delas. Prezados (as) alunos (as), Continuando nosso aprendizado, na aula 3 vamos conhecer algumas das mais importantes técnicas utilizadas na orientação a objetos. Se ao final desta aula tiverem dúvidas, vocês poderão saná- las através das ferramentas da plataforma de ensino. Conto com a sua participação, aproveite para ler e refletir os objetivos de aprendizagem, afinal, da sua participação dependerá seu aprendizado. Bom Trabalho! Bons estudos! 153 Análise de Sistemas II 18 Seções de estudo 1 – Introdução 2 – Principais Técnicas 3 – Discussão sobre as metodologias 1 - Introdução O desenvolvimento orientado a objetos diz respeito aos procedimentos de concepção de sistemas a partir dos conceitos básicos anteriores e envolve a utilização de e implementação. A metodologia consiste na construção de um modelo de um domínio de aplicação e na posterior adição a este dos detalhes de implementação durante o projeto de um sistema. Existem atualmente várias Metodologias Orientadas a Objetos, mas apenas algumas serão descritas a seguir, não de forma exaustiva, mas sim apresentando uma breve descrição dos conceitos, processos e técnicas utilizadas em cada uma delas, de forma a ser possível encontrar semelhanças e diferenças. Existem várias técnicas, ou métodos, para o desenvolvimento orientado a objetos. Estas técnicas se tornaram populares nos anos 90. Suas principais características serão citadas a seguir. 2 2.1 O método de Grady Booch para desenvolvimento orientado a objetos é dividido em 3 fases: análise de requisitos, análise de domínios e projeto, com ênfase maior no projeto. Este método provê os seguintes diagramas: de classes, de transição de estados, de objetos, temporais, de módulos e de processos. O método Booch está disponível em muitas versões. de um número de visões, em que cada visão é descrita por um número de modelos e diagramas. Ele traz uma simbologia complexa de ser desenhada a mão, contém também o processo pelo qual os sistemas são analisados por macro e micro visões. O método descrito por Booch (2005) é constituído, basicamente, pelas fases de , do domínio e . Tem como providenciar uma notação e um processo de desenvolvimento, dando especial atenção ao aspecto da comunicação entre a fase de análise e desenho de um sistema de software Orientado a Objetos. Este método tem um caráter amplo que, endereçando os aspectos das ferramentas de análise e desenho Orientado a Objetos, inclui modelagem dos objetos, modelagem da análise, desenho da aplicação, desenho da implementação e ciclo de vida dos processos. Booch propõe diferentes visões para descrever os sistemas. O modelo lógico, isto é, o domínio do problema, é representado na estrutura de classes e objetos. O diagrama de objetos mostra como os objetos interagem uns com os outros, enquanto que os diagramas de classe são de índole mais estática. Assim, os diagramas de objetos descrevem o comportamento dinâmico do sistema. O conceito de subsistema, neste método, é entendido como um diagrama de módulos, tendo um paralelismo, em termos do papel que representa, com os diagramas de categoria e de classes. Os subsistemas representam conjuntos de módulos relacionados de uma forma lógica. Um dos grandes pressupostos do método de Booch (1996) é criar um modelo do sistema, passível de ser implementado. Os vários conceitos deste método estão distribuídos, com diferentes níveis de abstração, nas três fases do processo, indicados a seguir: - produz dois tipos de das funções principais do sistema. Devem ser inputs e outputs do sistema, ou uma lista de referências para planos de ação, procedimentos, mecanismos chave que o sistema deve providenciar, incluindo o estado de entrada, saída e as mudanças de estado esperadas. Estes mecanismos chave servem para validar o domínio do modelo, descobrir operações, bem como testar determinados casos. - - esta fase inclui: • Diagramas de classe abstratos; • • Herança; • Diagramas de cenários dos objetos; • - análise, adicionando as estruturas e comportamentos necessários para implementação do domínio em estudo. O modelo iniciado durante a análise serve como base para a construção do modelo de desenho. São adicionadas as seguintes contribuições ao modelo: • descrições arquiteturais; • descrições do protótipo; • diagramas de categoria; • diagramas de classe; • diagramas de objeto; • 2.2 Esta técnica utiliza um modelo único para todas as fases, OOA – Object Oriented Analysis (Análise Orientada a Objeto), OOD - Object Oriented Design (Projeto Orientado a Objeto) e OOP – Object Oriented Programming (Implementação Orientada a Objeto), o que torna mais simples e compreensível o 154 19 desenvolvimento. Este método é tido como adequado para o desenvolvimento de sistemas segundo o paradigma dos entre as fases de análise, desenho e implementação, bem questão. São encontrados 4 grandes benefícios na utilização deste método em relação aos métodos de análise tradicionais: • melhoramento da Interação entre o analista e o cliente do sistema; • aumento da consistência interna entre análise, • reutilização; • providencia uma representação consistente entre as diversas fases; De acordo com Coad/Yourdon, o maior benefício da análise OO, resulta da redução da complexidade de um determinado problema. Segundo os autores deste método, uma aproximação OO consiste de classes, objetos, herança e comunicação via mensagens. O principal objetivo deste método é permitir a práticas e estratégias para a prossecução do mesmo. Trata- se de um método de desenvolvimento orientado ao objeto com um domínio de aplicação bastante alargado, incidindo na manipulação de classes e objetos respeitantes ao domínio do problema, no interface homem-máquina e na gestão das tarefas inerentes ao processo de desenvolvimento. Disponibiliza uma extensão que abarca o conceito de reengenharia, de forma a ser possível desenvolver um modelo com base no redesenho dos processos organizacionais. Este método utiliza uma arquitetura de desenvolvimento constituída por quatro componentes principais: • interação humana; • domínio do problema; • gestão de tarefas de tempo real; • gestão dos dados; 2.3 Método criado por Sally Shlaer e Stephen Mellor em 1988, que fornece um conjunto integrado de modelos de análise e que depois são traduzidos (Recursive Design) durante o projeto. informação consiste em uma organização e uma representação conceitualização do domínio de um problema. A técnica propõe uma forma de pensar de modo abstrato, problemas a resolver empregando conceitos do mundo real ao invés de conceitos de computadores. Trata- para o desenvolvimento de software a uma escala industrial. É baseado no paradigma dos objetos, tendo sido desenvolvido no ambiente de projetos do mundo real. Estes projetos incluíam manufatura e aplicações de controle de processos, operações bancárias, telecomunicações, e aplicações de defesa governamental. de software visualizando o problema sem recorrer de forma de modelos de análise orientados ao objeto, que podem ser Recursive Design (RD), que produz o desenho do sistema através da translação dos modelos de análise. O Modelo de Informação, baseado no modelo relacional dos dados, se fundamenta em pensar acerca de problemas a resolver empregando modelos que estão organizados, informações numa estrutura formal. “Coisas”, ou exemplos como objetos, as características destas instâncias são resumidas como atributos são resumidas como relacionamentos. Os modelos de estado de dados mostram a sequência, podendo cada processo ser Este processo de sumarização requer que cada situação esteja sujeita e conforme as políticas ou as normas problema. As regras e a formalidade permitem que os modelos sejam matematicamente transformados noutros tipos de dados pode ser transformada numa lista ligada,árvore, ou um conjunto de listas baseado em classes equivalentes. O processo de construção dos modelos de análise OO é no modelo de informação de objetos, sendo depois descrito Em resumo, este método apresenta os seguintes benefícios: • funcional do sistema, na fase de análise; • aproximação integrada - O método providencia uma cobertura extensiva ao ciclo de vida com transições utilizando o Recursive Design; • reutilização - Sistematiza e suporta a reutilização de todos os domínios, pois estes são tratados em transportados para outros sistemas; • automação - Porque o processo é baseado na translação do modelo de análise, é altamente susceptível de automação; 2.4 Objectory Os métodos OOSE e o Objectory foram desenvolvidos baseados no mesmo ponto de vista formado por Ivar 155 Análise de Sistemas II 20 Jacobson. O método OOSE é a visão de Jacobson de um método orientado a objetos, já o Objectory é usado para a construção de sistemas tão diversos quanto forem. Ambos os métodos são baseados na utilização de use- um ator externo. O método Objectory também foi adaptado para a engenharia de negócios, na qual é usado para modelar e melhorar os processos envolvidos no funcionamento de empresas. Esses métodos permitem, durante a análise, aprofundar o entendimento de como o sistema deve ser realmente utilizado. centrando-se na compreensão da forma como o sistema está e será utilizado antes de ser feita a alteração pretendida. Organizando a análise e o desenho através de sequências de interações com o utilizador e utilizando cenários, o método produz sistemas bastante robustos e amigáveis, adaptando as alterações de uma forma suave. Este método divide o desenvolvimento em processos, que, diferentemente das fases de desenvolvimento tradicionais, podem ser iterados e sobrepostos. Estes processos produzem uma série de modelos interligados, facilitando posteriormente a junção dos mesmos através de uma modelagem consistente. Para Jacobson, todos os sistemas se alteram durante o seu ciclo de vida, tendo a manutenção dos mesmos um peso muito grande em termos de custos de desenvolvimento. Muitos métodos de desenvolvimento adequam-se a novos desenvolvimentos, mas tratando as revisões do modelo de uma forma pouco adequada. Os desenvolvimentos iniciais devem ser vistos como uma atividade importante, a base do sistema. O método é descrito como um conjunto de processos que interagem entre si durante o desenvolvimento do projeto, através de diferentes modelos. Os processos principais são a análise, construção e teste. dos requisitos. Consiste num modelo orientado ao caso em estudo, com descrições da interface com o utilizador, e um modelo dos objetos do domínio. Este modelo é baseado nos conceitos de actors (atores) e use cases (casos de uso). que deve ser executado pelo sistema, respectivamente. Os actors podem ser pessoas ou máquinas. Cada um deles pode executar um número diferente de tarefas, bem como participar na operação do sistema. Executa uma sequência de transações em permanente diálogo com o sistema. A uma use case. Cada use case é use cases corresponde aos requisitos funcionais do sistema a construir. o desenvolvimento do sistema passa para a construção do independentemente do ambiente de implementação selecionado. Embora possa ser utilizado o modelo de base para a implementação, isto não resulta numa estrutura robusta. O modelo de análise representa uma estrutura mais estável e fácil manutenção. No processo de análise é criado um modelo Conceitual do sistema a construir. Nesta fase, os modelos são desenvolvidos de forma a facilitar a compreensão do sistema, privilegiando a comunicação com o cliente. No processo de construção, é desenvolvido o sistema a partir dos modelos criados anteriormente. A construção inclui o desenho e a implementação, resultando um sistema completo. O processo de teste integra os componentes do sistema, testando-o e decidindo se está pronto a ser distribuído ao cliente. 2.5 Vários são os métodos para modelagem de sistemas orientados a objetos (por exemplo, Rumbaugh, Booch, Wirfs-Brock, Coad, etc.), entre eles estão os métodos Fusion e OMT, porém alguns são muito menos abordados pelos autores de livros e artigos do meio. O método OMT possui um número maior de material disponível enquanto que o Fusion parece ser o método menos popular dentre os outros. Métodos estruturados são limitados na descrição do comportamento dinâmico dos sistemas orientados a objetos. A seguir, serão apresentadas algumas características importantes dos métodos citados e, em seguida, será mostrada uma abordagem comparativa entre esses métodos, fazendo uma análise do processo de desenvolvimento adotado em ambos os métodos, com uma visão técnica e operações. 2.6 Object Modelling Technique É um método desenvolvido pela GE (General Electric) onde James Rumbaugh trabalhava e foi proposta por ele em 1991, baseada na modelagem Entidades/Relacionamentos com extensão para o modelo de classes, herança e métodos. A técnica foi estendida para focalizar o projeto de banco de dados relacional. Possuidor de uma grande variedade de conceitos, talvez o maior de todos, esta metodologia é composta de quatro fases: análise, projeto do sistema, projeto dos objetos e implementação, como mostra a Figura 3.1. O método é especialmente voltado para o teste dos do sistema. O modelo total do sistema baseado no método OMT é composto pela junção dos modelos de objetos, funcional e use-cases. A técnica OMT se distingue pela sua divisão em 4 fases: 2.6.1 - Análise • 156 21 • construir o modelo de objetos, com as suas sub- atividades; • desenvolver o modelo dinâmico, com as suas sub- atividades; • construir o modelo funcional, com as suas sub- atividades; • subatividades. 2.6.2 • organizar o sistema em subsistemas; • • alocar os subsistemas aos processadores e tarefas; • encontrar uma estratégia básica para implementar o armazenamento dos dados; • determinar mecanismos para controlar o acesso aos recursos globais; • escolher a natureza da implementação; • manipular as condições de fronteira. 2.6.3 • obter operações do modelo funcional e dinâmico; • desenhar os algoritmos que implementam as operações; • otimizar os caminhos de acesso aos dados; • ajustar a estrutura das classes de forma a permitir a herança entre as mesmas; • desenhar a implementação das associações; • determinar a representação exata dos atributos dos objetos; • colocar as classes e associações em módulos. 2.6.4 - Implementação • desenho da base de dados; • escrita do código. Como principais características, destacam-se a separação clara entre análise e projeto, a inclusão de todos os conceitos A fase de análise é composta por três modelos, os quais recomenda-se que sejam seguidos na ordem apresentada a seguir: - modelo de objetos; - modelo dinâmico; - modelo funcional. O modelo de objetos descreve a estrutura estática do sistema, com as classes, os relacionamentos existentes entre as classes, os atributos e operações que caracterizam cada classe; como resultado, tem-se um diagrama Entidade/ Relacionamento estendido. Figura 3.1. Visão geral de desenvolvimento do método OMT. Fonte: Acervo pessoal O modelo dinâmico captura os aspectos temporais do modelo de objetos utilizando diagramas de máquina de estados. A modelagem funcional descreve a transformação dos dados em termos de como os valores de saída são derivados dos valores de entrada, utilizando para isso os DFD. 2.7 A técnica Fusion (Fusão) corresponde a uma integração das técnicas OMT e de Booch, na qual os dois modelos de objeto e de interface visam a representar os aspectos estáticos e dinâmicos do problema. O método Fusion sistema, fornecendo uma interface mais amigável com a documentação sobre o comportamento dinâmico dos objetos e tratamento completo a respeito do ciclo de vida associado ao desenvolvimento de software. dos requisitose a implementação com o uso de uma linguagem de programação. O método Fusion é formado por uma sequência de etapas dentro de cada fase e os resultados de cada uma das fases são explicitamente enviados para uma alguns tipos de sistemas concorrentes. O processo de desenvolvimento do método Fusion é dividido em análise, projeto e implementação. sistema, produzindo modelos que descrevem os seguintes elementos; - classes de objetos existentes; - relacionamentos; - operações que podem ser executadas; - sequências disponíveis para as operações. Na fase de projeto, o modelo de operações gerado modelos: - como as operações serão implementadas pelas 157 Análise de Sistemas II 22 interações entre os objetos; - como as classes farão referências mútuas e como estarão relacionadas através da herança; - os atributos das classes e suas operações. Na implementação, o projeto será transformado em - na forma de métodos pertencentes a uma classe selecionada; - as sequências permitidas para as operações são reconhecidas por máquinas de estado. utilizando pré-condições e pós-condições (Figura 3.2). A pré- condição caracteriza as condições sob as quais a operação poderá ser ativada. A pós-condição descreve como o estado do sistema será alterado pela operação, e quais os eventos que serão enviados aos agentes. Alteração ocorrida Figura 3.2. Operações do sistema O modelo de operações é mostrado em forma de uma de cada ação: Abrir conta novo cliente Figura 3.3. Exemplo de modelo de operações do método Fusion 2.8 O RUP ( ) é um framework genérico para processos de desenvolvimento de software, criado pela empresa Rational Software Corporation, que está fortemente centrado na arquitetura, funcionalidade (caso de uso) e o desenvolvimento iterativo e incremental (inspirado no ciclo de vida espiral de Boehm), que aplica a UML, para o projeto e a documentação. O RUP é um processo de desenvolvimento de software e, como tal, descreve os papéis e as atividades que cada membro da equipe de projeto deve desempenhar ao longo do ciclo de desenvolvimento do software e os produtos que devem ser gerados como resultado destas atividades, os chamados artefatos. O RUP usa a UML, que é uma notação consistente que pode ser aplicada tanto para a engenharia de sistemas quanto a engenharia de negócios. Uma notação padrão serve aos seguintes papéis: • serve como uma linguagem para comunicar decisões que não são óbvias ou que não podem ser deduzidas do próprio código. • todas as decisões estratégicas e táticas importantes. • pessoas raciocinem e para que as ferramentas sejam manipuladas. 2.9 - UML UML ou métodos OMT, Booch e OOSE que está sendo submetido a OMG para a padronização. A UML é uma linguagem de modelagem para documentar análise e desenho de um sistema. A UML é uma linguagem totalmente orientada a objetos, que une as melhores práticas e metodologias da Engenharia de Software. É considerada a sintaxe geral para criar um modelo lógico de um sistema. Ela é utilizada para descrever pontos de um sistema e da forma como ele é percebido de várias visões durante a análise e sua arquitetura. É uma linguagem que visa capturar conhecimento e expressar esse conhecimento. Seu propósito é a modelagem de sistemas, documentar de maneira interativa e visual, proporcionar melhor compreensão e sinergia entre o analista e o cliente envolvido no processo de desenvolvimento. A UML ( ) é uma tentativa de padronizar a modelagem orientada a objetos de uma forma que qualquer sistema, seja qual for o tipo, possa ser modelado corretamente, com consistência, fácil de se comunicar com outras aplicações, simples de ser atualizado e compreensível. Existem várias metodologias de modelagem orientada a objetos que até o surgimento da UML causavam muitas discussões entre a comunidade de desenvolvedores orientado trazendo as melhores ideias de cada uma destas metodologias. construção e documentação de sistemas, estabelecida pela OMG (Object Management Group). uma linguagem de modelagem e não uma metodologia, ou seja, não tem noções do processo. Um método consiste de uma linguagem de modelagem e de um processo. A linguagem desenhar projetos. O processo é o caminho de quais passos serão utilizados na elaboração de um projeto, ou seja, pode-se utilizar os permitindo que o desenvolvedor faça o seu próprio processo de acordo com as necessidades, em função do tipo de software a ser desenvolvido (tempo real, sistema de informações, produto desktop), o tamanho da equipe a ser envolvida, o nível de formalismo exigido e a facilidade de comunicação desejada, 158 23 tipos de processos e em todo o ciclo de desenvolvimento de software. A técnica UML será descrita mais detalhadamente mais adiante. 3 - Discussão sobre as metodologias É muito difícil que uma comparação sistemática possa fazer justiça a ambos os métodos apresentados, Fusion e OMT. Muitos aspectos precisam ser analisados; o ideal seria os dois métodos e pela mesma equipe de trabalho. Entretanto, mostraremos algumas vantagens e desvantagens de cada um dos métodos em relação ao outro. comum também em vários outros métodos, está no processo, considerado fraco na orientação dos integrantes da equipe de desenvolvimento pelas diversas fases do desenvolvimento do software. Porém, a fase de análise tem um processo muito bem inter-relacionamento. O modelo de operações do método Fusion fornece uma base descritiva do sistema muito mais clara, deixando transparentes as entradas, saídas e alterações com a mas deixa a desejar na visão global do sistema. No método OMT, o modelo funcional não é muito comportamentos em virtude dos DFD’s serem essencialmente operacionais. Já no modelo de objetos, é possível registrar uma grande quantidade de informações estruturais. O OMT é afetado pelo projeto de Banco de Dados Relacional e muitos conceitos essenciais são introduzidos para muitos trabalhos. Nele se dá pouca ênfase aos relacionamentos existentes entre as funções a serem executadas por um sistema e como elas determinam as interfaces de classes. As diferenças afetam o processo de desenvolvimento e em última análise, o próprio software desenvolvido. Aqui citamos algumas: - Deslocamento do esforço de desenvolvimento para a análise: Uma abordagem baseada em objetos concentra a maior parte do esforço de desenvolvimento do software na fase de análise do ciclo de vida. Esse esforço adicional é compensado pela implementação mais rápida e simples. Como o projeto resultante é mais limpo e adaptável, as - Ênfase na estrutura de dados e não nas funções: A encapsulados que ocultam sua implementação - Processo de desenvolvimento inteiriço: Não existem descontinuidades nas quais a notação de uma fase seja substituída por outra em outra fase; - Iterativo, não sequencial: Embora a descrição da OMT seja necessariamente linear, o processo real é iterativo. Cada iteração acrescenta ou esclarece feito, o conduz a menores possibilidades de erros e inconsistências. No método Fusion, há uma grande facilidade no entendimento do modelo de operações por ser bem descritivo e detalhado, fornecendo até os resultados alcançados pelos muito pela modelagem funcional, que não considera a seqüência dos processos de valores ou as decisões. Nenhum dos dois métodos apresentados pode ser de um sistema, haja vista que cada um possui características muito importantes para concepção do processo. a critério da equipe de trabalho. relacionamentos entre as classes é mais clara no método OMT, sem contar a facilidade de utilização, ou até migração, por parte dos projetistas por utilizar conceitos da modelagem estática, muito absorvida pela equipe de trabalho. O método Fusion usa o dicionário de dados como um repositório central. Retomando a aula As técnicas existentes permitem e aprimoram a construção do modelo do sistema, para posterior inclusão de detalhes da implementação(programação). Várias são as metodologias existentes, cada uma delas com suas características, pontos fortes e fracos. É importante ler e aprimorar o conhecimento em cada uma delas para podermos entender de que forma cada uma pode ajudar no projeto do sistema. Nesta seção, vimos características das técnicas de Booch, Coad/Yourdon, Shlaer/Mellor, OOSE/Objectory, OMT, Fusion, UML e RUP. Conhecemos pontos importantes de cada uma delas. técnicas Fusion e OMT, apontando pontos fortes e fracos de cada uma delas. 159 Análise de Sistemas II 24 Vale a pena PRESSMAN, Roger. Engenharia de Software. São Paulo- SP: Makron Books, 2006. SOMMERVILLE, I. Engenharia de Software. 8ª Edição. Addison Wesley, 2007. BOOCH, Grady, JACOBSON, Ivar; RUMBAUGH, James. UML – guia do usuário. Elsevier, Rio de Janeiro. 2005. pena ler Minhas anotações 160 4ºAula Análise orientada a objetos Objetivos de aprendizagem Ao término desta aula, vocês serão capazes de: • conhecer os modelos da análise orientada a objetos; • entender os conceitos de associações entre os objetos. Prezados (as) alunos (as), Nesta aula 4 estudaremos sobre os modelos da Análise Orientada a Objetos. Se ao final desta aula tiverem dúvidas, vocês poderão saná- las através das ferramentas da plataforma de ensino. Conto com a sua participação, aproveite para ler e refletir os objetivos de aprendizagem, afinal da sua participação dependerá seu aprendizado. Bom Trabalho! Bons estudos! 161 Análise de Sistemas II 26 Seções de estudo 1 – Modelos: Objeto, Dinâmico e Funcional 2 – Objetos e classes 3 – Ligações e associações 1 Funcional modelagem da aplicação e do domínio no qual ela opera. Esta fase focaliza o quê necessita ser feito e não como deve ser feito. A etapa inicial da fase de análise consiste no estabelecimento dos requisitos do problema a ser resolvido, fornecendo uma visão conceitual do sistema proposto. O diálogo subsequente com o usuário, o conhecimento da área e a experiência adquirida do mundo real são elementos adicionais que servem de entrada para a análise. A saída desta fase de análise é um modelo “formal” que captura os aspectos de controle e transformação funcional de dados. Um modelo é uma abstração que tem como propósito entender um problema antes de solucioná-lo. A partir de modelos, é possível simular e testar sistemas antes de construí- los, facilitar a comunicação com os usuários e os outros membros da equipe de desenvolvimento, visualizar e reduzir a complexidade dos problemas a tratar. No caso da metodologia OMT, obtém-se os modelos objeto, dinâmico e funcional. 1.1 O Modelo Objeto serve para representar os aspectos estáticos, estruturais, de “dados” de um sistema. O modelo objeto descreve a estrutura de objetos no sistema: sua identidade, suas relações com os outros objetos, seus atributos e suas operações. Este modelo tenta capturar a estrutura estática dos componentes do mundo real que se pretende representar. O modelo objeto tem uma representação com seus atributos e operações, e organizados segundo hierarquias e associações com os diagramas de outras classes. Para construir o modelo objeto, é necessário seguir os seguintes passos: • • preparar um dicionário de dados; • objetos; • • herança; • • • agrupar as classes em módulos. 1.2 - Modelo Dinâmico O Modelo Dinâmico serve para representar os aspectos temporal, comportamental e de “controle” de um sistema. Para construir o modelo dinâmico, é necessário seguir os seguintes passos: • reparar cenários de sequências de interação típicas; • • preparar um rastro de eventos para cada cenário; • construir um diagrama de estados; • consistência. 1.3 - Modelo Funcional O Modelo Funcional serve para representar os aspectos transformacionais e de “função” de um sistema. Para construir o modelo funcional, é necessário seguir os seguintes passos: • • construir um DFD mostrando dependências funcionais; • descrever funções; • entre objetos; • 2 Todos os objetos têm uma identidade e são distinguíveis. Eles são instâncias (ocorrências) de classes de objetos que descrevem grupos de objetos com similaridade nas propriedades (atributos), comportamento (operações ou métodos), relações com os outros objetos e semântica. Figura 4.1. Representação de uma classe. Fonte: Acervo pessoal Figura 4.2. Representação de classe e objetos. Fonte: Acervo pessoal 162 27 relações é composta de dois tipos de diagramas mostrados na • um , que representa classes de objetos e tem a função de ser um esquema, um padrão ou um “template” para os dados; • um , utilizado para representar instâncias de classes e tem o objetivo de descrever como um conjunto particular de objetos se relaciona com outro. O atributo é colocado na segunda parte da caixa, como por detalhes opcionais tais como tipo (precedido por “:”) e de objeto não são necessários no modelo objeto, pois cada objeto já tem a sua própria identidade (a partir de seus valores). Figura 4.3. Ilustração de Classes e Objetos. Fonte: Acervo pessoal Figura 4.4. Ilustração de Atributos e Valores. Fonte: Acervo pessoal Uma operação pode ser aplicada a ou por objetos numa classe. A mesma operação pode se aplicar a várias classes métodos em várias classes, eles devem ter a mesma assinatura (em número e tipos de argumentos). As operações se 4.5. Cada operação pode ser seguida de detalhes opcionais tais como lista de argumentos (colocada entre parênteses após o nome, separados por “,” ) e tipo de resultado (precedido por “:”). A notação generalizada para classes de objetos se Figura 4.5. Operações com Objetos. Fonte: Acervo pessoal Figura 4.6. Generalização da notação de modelagem de objetos. Fonte: Acervo pessoal 3 - Ligações e associações A ou link é uma conexão física ou conceitual entre instâncias de objetos. Por exemplo: Marco Aurélio Freitas Santos UNIGRAN. Uma ligação é uma túpla correspondente a uma lista ordenada de instâncias de objetos. Uma ligação é uma instância de uma associação (relacionamento). Figura 4.7. Exemplo de associação. Fonte: Acervo pessoal Uma associação descreve um grupo de ligações com estrutura e semântica comuns. Por exemplo: uma pessoa uma instituição. Todas as ligações de uma associação conectam objetos das mesmas classes. O base de dados. Associações e ligações são descritas por verbos. Associações são inerentemente bidirecionais e podem ser lidas nos dois sentidos. Por exemplo: num primeiro sentido pode-se ler: Marco Aurélio Freitas Santos UNIGRAN e no sentido inverso, UNIGRAN Marco Aurélio Freitas Santos. Associações são muitas vezes implementadas em linguagens de programação como apontadores (atributo de um objeto que contém referência explícita a outro) de um objeto para outro. Por exemplo: objeto Pessoa pode conter atributo empregado que aponta para um conjunto de objetos Instituição. Uma ligação mostra a relação entre dois ou mais objetos. correspondentes. Observa-se, nesta notação, que a associação corresponde a uma linha entre classes e que os nomes de associação aparecem em itálico. Figura 4.8. Associação um-para-um e links. Fonte: Acervo pessoal 163 Análise de Sistemas II 28 As associações (relacionamentos) podem ser binárias, ternárias ou de ordem maior. De fato, a maior parte é será comentado a seguir). A simbologia OMT para ternária ou n-ário é um losango com linhas conectando as classes relacionadas. O nome da associação é escrito dentre do losango; entretanto, os nomes de associação são opcionais. A Figura 4.9. Associação ternária e links. Fonte: Acervo pessoal A uma classe podem se relacionar a uma única instância de classe associada. Esse conceito é também conhecido como cardinalidade de relacionamento. A multiplicidade restringe o número de objetos relacionados. A multiplicidade problema. Requisitos vagos tornam a multiplicidade incerta. Não é possível determinar muito cedo a multiplicidade no processo de desenvolvimento de software;num primeiro tempo, determinam-se objetos, classes, ligações e associações e depois se decide a respeito de multiplicidade. A distinção mais importante é entre “um” e “vários”; entretanto existem símbolos especiais para “exatamente um”, “um ou mais”, “intervalos”, “”zero ou mais”, “zero ou um”, conforme Figura 4.10. Notação para associações múltiplas. Fonte: Acervo pessoal 3.1 - Ligações e associações avançadas 3.1.1 - Associação Recursiva É possível conectar uma classe a ela mesma através de uma associação e que ainda representa semanticamente a conexão entre dois objetos, mas os objetos conectados são da mesma classe. Uma associação deste tipo é chamada de associação recursiva. Figura 4.11. Exemplo de uma associação recursiva. Fonte: Acervo pessoal 3.1.2 - Atributo de ligação É similar ao caso da classe, onde um atributo é uma propriedade dos objetos desta, um atributo de ligação é uma apresenta o caso onde permissão-de-acesso é um atributo da associação Acessível-por. Cada atributo de ligação tem um valor É ainda possível ter atributos de ligações para associações ligações ternárias. Apesar de poder substituir os atributos de ligação por atributos de objetos da associação, é preferível manter atributos de ligação. Figura 4.12. Atributo de ligação para associação “muitos-para-muitos”. Fonte: Acervo pessoal Figura 4.13. Atributos de ligação para associação um para vários (papéis). Fonte: Acervo pessoal 3.1.3 - Modelagem de associação como classe Às vezes, é útil modelar uma associação como classe. mostra um exemplo disto. Essa opção é particularmente útil quando ligações podem participar em associações com outros objetos ou quando ligações são sujeitas a operações. Figura 4.14. Modelando uma associação como Classe. Fonte: Acervo pessoal 164 29 3.1.4 As associações entre objetos podem ter uma ordem implícita. O padrão para uma associação é desordenado (ou associação pode ser muito útil em casos como este: janelas de um sistema têm que ser ordenadas na tela (uma está no topo, uma está no fundo e assim por diante). A associação ordenada de associação entre as duas classes. 3.1.5 especial que reduz a multiplicidade efetiva de uma associação, distinguindo objetos dentro do conjunto na extremidade com associações de um para vários (1..*) ou vários para vários 3.1.6 - Agregação A agregação é uma relação “parte-todo” ou “uma-parte- de” na qual os objetos representando os componentes de algo são associados com um objeto representando a junção deles (“assembly”). Algumas propriedades da classe junção classe junção e uma classe componente. A agregação é então uma forma especial de associação. A simbologia da agregação é similar a da associação (linha), exceto pelo fato de um pequeno losango indicar o lado da junção da relação, Figura 4.16. Agregação. Fonte: Acervo pessoal 3.1.7 Generalizações e herança são abstrações poderosas que permitem compartilhar similaridades entre as classes, apesar de preservar suas diferenças. é uma relação do tipo “é um” entre uma Por exemplo, numa farmácia, a classe PRODUTOS é uma superclasse de MEDICAMENTOS e PERFUMARIA. Atributos e operações comuns a um grupo de subclasses são reagrupados na superclasse e compartilhados por cada subclasse. Diz-se que cada subclasse herda as características de sua superclasse. A notação para a generalização é um triângulo conectando 4.17. As palavras próximas ao triângulo no diagrama são discriminadores (atributos de um tipo enumeração que indica qual propriedade de um objeto está sendo abstraído por uma relação de generalização particular). Os discriminadores estão relacionados em correspondência um-a-um com as subclasses da generalização. 165 Análise de Sistemas II 30 É possível relação de herança em vários níveis. A herança em 2 ou 3 níveis (até 5 em alguns casos) de profundidade é aceitável; já a mais de 10 níveis é excessiva. A generalização facilita a modelagem a partir de classes estruturadas e da captura do que é similar e do que é diferente nas classes. A herança de operação é de grande ajuda durante a implementação para facilitar a reutilização de código. entre classes, enquanto a herança diz respeito ao mecanismo de compartilhar atributos e operações usando a relação de generalização. Generalização e especialização são dois pontos de vista da mesma relação, no primeiro caso vista a partir da superclasse e no segundo da subclasse: a superclasse generaliza 3.1.8 Um módulo é uma construção lógica para reagrupar classes, associações e generalizações. Um módulo captura uma perspectiva ou uma vista de uma situação, como no caso de um , existem várias visões correspondentes a , , . Um modelo objeto consiste de um ou vários módulos. A noção de módulo força a particionar um modelo objeto em peças gerenciáveis. Uma mesma classe pode ser referenciada em módulos diferentes. De fato, referenciando a mesma classe em múltiplos módulos é o mecanismo para interligar módulos entre si. Retomando a aula Na primeira seção, vimos que o modelo Objeto descreve a estrutura de objetos no sistema: sua identidade, suas relações com os outros objetos, seus atributos e suas operações. O modelo Dinâmico serve para representar os aspectos temporal, comportamental e de “controle” de um sistema. O modelo Funcional serve para representar os aspectos transformacionais e de “função” de um sistema. Um , que representa classes de objetos e tem a função de ser um esquema, um padrão ou um “template” para os dados. Um , utilizado para representar instâncias de classes e tem o objetivo de descrever como um conjunto particular de objetos se relaciona com outro. A ou link é uma conexão física ou conceitual entre instâncias de objetos. Uma associação recursiva é quando uma classe se conecta a ela mesma através de uma associação entre dois objetos desta mesma classe. Vale a pena PRESSMAN, Roger. Engenharia de Software. São Paulo- SP: Makron Books, 2006. SOMMERVILLE, I. Engenharia de Software. 8ª Edição. Addison Wesley, 2007. pena ler Minhas anotações 166 5ºAula Modelagem dinâmica Objetivos de aprendizagem Ao término desta aula, vocês serão capazes de: • entender os conceitos de estados e eventos; • diferenciar atividades e ações; • compreender o diagrama de estados. Prezados (as) alunos (as), Nesta aula 5 veremos as características dos modelos dinâmico e funcional. Se ao final desta aula tiverem dúvidas, vocês poderão saná- las através das ferramentas da plataforma de ensino. Conto com a sua participação, aproveite para ler e refletir os objetivos de aprendizagem, afinal da sua participação dependerá seu aprendizado. Bom Trabalho! Bons estudos! 167 Análise de Sistemas II 32 Seções de estudo 1 – O modelo Dinâmico 2 – O modelo Funcional 3 – Comparações entre modelos 1 O modelo dinâmico descreve os aspectos do sistema que Esse modelo tenta capturar o controle, aspecto de um sistema que descreve as sequências de operação que ocorrem em resposta a estímulos externos, sem levar em conta o que as operações fazem, quem as ativa e como são implementadas. Os conceitos utilizados nesta modelagem dinâmica são os de eventos que representam os estímulos externos e de estados que representam os valores de objetos. representa os estados e a sequência de eventos permitidos num sistema para uma classe de objetos. Os estados e eventos podem ainda ser organizados de forma hierárquica e representados num diagrama de estados estruturados. 1.1 - Eventos e estados Um é caracterizado pelos valores dos atributos e pelas ligações mantidas por um objeto. Um corresponde a um estímulo individual de um objeto a outro. O representa o modelo de eventos, estados e transições de estado para uma classe dada. O modelo consiste de vários diagramas de estados, um para cada classe com comportamento dinâmico importante; ele mostra o modelo de atividade para um sistema completo. Cada máquina de estados se executa de forma concorrente
Compartilhar