Baixe o app para aproveitar ainda mais
Prévia do material em texto
ELEMENTOS DE PROGRAMAÇÃO EDIÇÃO Nº 1 - 2007 LAÉRCIO DA CRUZ LOUREIRO ___________________________________________________________________ Apoio Gestão e Execução Conteúdo e Tecnologia Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 2 SUMÁRIO AULA 1 - MANIPULAÇÃO DE ARRAYS....................................................................9 AULA 2 - TRABALHANDO COM REGISTROS........................................................21 AULA 3 - PROGRAMAÇÃO ORIENTADA A OBJETOS..........................................30 AULA 4 - INTRODUÇÃO A UML...............................................................................42 Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 3 Apresentação Este livro didático contém a disciplina de Elementos de Programação. O material apresenta aos alunos do EAD um passo adiante na construção de programas para computador. Você será submetido a um novo desafio: obter os conhecimentos mais atuais para o desenvolvimento de sistemas e principalmente ampliar o grande número de informações para um bom desempenho como programador. Você poderá concluir que atualmente a atividade de programar computadores é uma tarefa ampla, através de uma abordagem cada vez mais multidisciplinar e exigindo do profissional uma visão cada vez mais integrada de todos os elementos envolvidos. O principal objetivo deste curso é você obter esta “visão ampla” (alguns autores referem-se à visão holística). Serão apresentados aspectos importantes que farão uma composição estruturada para uma programação mais poderosa. É importante ressaltar que o livro foi desenvolvido com o objetivo de oferecer um aprendizado independente, que está inerente aos estudos do EAD, e o conteúdo foi revisado com o intuito de oferecer uma linguagem simples, objetiva e estimulante. Lembre-se que a sua passagem por esta disciplina será também acompanhada pelo Sistema de Ensino Tupy Virtual, seja por correio postal, fax, telefone, e-mail ou Ambiente Virtual de Aprendizagem. Sempre entre em contato conosco quando surgir alguma dúvida ou dificuldade. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 4 Toda a equipe terá a maior alegria em atendê-lo, pois a sua aquisição de conhecimento nessa jornada é o nosso maior objetivo. Acredite no seu sucesso e bons momentos de estudo! Equipe Tupy Virtual. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 5 Carta do Professor “A programação de computadores é divertida. Algumas vezes a programação é uma ciência elegante. Ela também é sobre a construção e o uso de novas ferramentas de software. A programação também é sobre pessoas: qual o problema que realmente o meu cliente espera que eu resolva? Como eu posso fazer isso mais fácil, para que os usuários se comuniquem com o meu programa? A programação também me leva a aprender tópicos desde a química orgânica até as campanhas de Napoleão.” (Bentley, 1988) Caro aluno, É com esta mensagem que eu desejo iniciar este novo módulo. Você estar aqui, significa que já superou os primeiros passos na programação de computadores e concluiu que não é tão complexa como os “outros” comentavam. Na verdade, assim como outras atividades em nossa vida, a programação de computadores tornou-se uma ciência “elegante”, ou seja, possui uma maturidade que nos favorece aprender e criar soluções poderosas. Nas primeiras duas aulas deste curso, faremos um avanço na lógica de programação, aprendendo a trabalhar com arrays e também sobre registros. Esses dois assuntos ampliam a forma como trabalhamos com variáveis em nossos programas e permite soluções específicas para problemas estruturados mais complexos. A terceira aula é que possui uma característica especial: você terá o primeiro contato com uma nova abordagem na construção de programas, a programação orientada a objetos. Esse assunto recebe uma “aura” de grande importância diante dos desafios atuais, mas amplifica as preocupações dos iniciantes em programação, já que fornece um novo enfoque na interpretação e construção de programas. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 6 Na aula seguinte, vamos conhecer como representar os programas orientados a objetos, usando uma notação específica chamada UML (Unified Modeling Language, ou Linguagem Unificada de Modelagem). Assim como vimos a representação de programas em pseudocódigo ou fluxogramas, agora vamos aprender representações gráficas que apóiam a modelagem de programas orientados a objetos, bem como, em várias outras atividades associadas ao desenvolvimento de sistemas. Finalmente, na última aula vamos conhecer os componentes na criação de programas para interfaces gráficas com o usuário (ou GUI - Graphic User Interface). As interfaces gráficas referem-se à forma como os usuários interagem com os sistemas operacionais, como Macintosh da Apple sendo o primeiro a implementar de forma mais popular, através do MacOS, e depois acompanhado dos sistemas operacionais Windows, Linux e Unix (pelo menos na forma popular que conhecemos hoje as interfaces gráficas). Veremos as exigências de conhecimento para esse tipo de programação e falaremos mais sobre as ferramentas atuais na construção de programas, baseadas em Ambiente de Desenvolvimento de Interfaces (IDE – Interface Development Environment). É isso! Sinta-se desafiado. Espero que eu possa ajudar em mais esta etapa de seu conhecimento e mantenha-se motivado a continuar seus estudos, pois agora a aventura fica mais instigante. Bom estudo! Professor Laércio da Cruz Loureiro Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 7 Cronograma de Estudo Acompanhe no cronograma abaixo os conteúdos das aulas, e atualize as possíveis datas de realização de aprendizagem e avaliações. Semana Carga horária Aula Data / Avaliação 1 4 Trabalhando com Arrays _/_ a _/_ 4 Trabalhando com Registros _/_ a _/_ 8 Programação Orientada a Objetos _/_ a _/_ 2 8 Programação Orientada a Objetos (cont.) _/_ a _/_ 16 Introdução à UML _/_ a _/_ Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 8 Plano de Estudos Ementa Continuidade do curso de Lógica de Programação. Arrays, vetores e matrizes. Trabalhar com registros. Programação orientada a objetos, aspectos iniciais e elementos fundamentais. Introdução à UML e representação gráfica de soluções baseadas em objetos. Programação Visual e componentes gráficos para a construção de sistemas. Objetivos da Disciplina • Geral Continuar os conhecimentos sobre lógica de programação; Compreender as bases da programação orientada a objetos; Obter uma visão geral sobre a notação UML; Conhecer o processo e os componentes na programação visual de sistemas • Específicos Aprender como trabalhar com estruturas de programação, com parte das soluções baseadas em programação estruturada; Conhecer os elementos principais do desenvolvimento de sistemas orientados a objetos, principalmente no que se refere às formas diferentes para a composição de soluções baseadas em computador; Entender e conhecer como um programa orientado a objeto emprega os elementos programação e quais seus benefícios em relação à programação estruturada; Aprender os componentes básicos para a modelagem de sistemasusando a UML. . Carga Horária: 40 horas. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 9 Aula 1 MANIPULAÇÃO DE ARRAYS Objetivos da aula Ao final desta aula, você deverá ser capaz de: • Construir algoritmos mais complexos usando arrays; • Implementar arrays unidimensionais (vetores) e arrays multidimensionais (matrizes); • Utilizar estruturas de dados nos algoritmos. Conteúdos da aula Acompanhe os assuntos desta aula, se preferir, ao terminar, assinale o conteúdo já estudado. � Introdução às estruturas de dados � Arrays � Arrays Multidimensionais � Aplicação prática usando array Prezado(a) aluno(a), seja bem-vindo(a) a nossa primeira aula. Conheça agora novas soluções para problemas complexos, que deverão ser consideradas em seus algoritmos. Você verá que array é um recurso poderoso e imprescindível em várias aplicações computacionais. Este é o primeiro passo no uso de estruturas de dados. Boa Aula! Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 10 1 INTRODUÇÃO ÀS ESTRUTURAS DE DADOS Você já aprendeu que é comum na programação de computadores, trabalharmos com variáveis na memória. Você também deve recordar que o objetivo de trabalhar com variáveis é representar informações armazenadas na memória para uso posterior. Isso significa que será comum a necessidade de trabalhar com variáveis em seus programas, com o objetivo de armazenar dados a partir dos algoritmos construídos. Vamos lembrar a regra de pseudocódigo para a criação e manipulação de variáveis, conforme mostra a figura 1. Figura 1 – Regra do pseudocódigo para criação e manipulação de variáveis Mas uma variável pode armazenar apenas um valor por vez, e haverá casos que você precisará armazenar um grande volume de dados na memória. Nesse cenário, o volume de trabalho e as dificuldades para manipular um grande volume de dados, apenas com variáveis, é uma atividade que exigirá um esforço e uma lógica que dificultaria ainda mais o seu trabalho. Por exemplo, considere que você precisa trabalhar com uma lista de cinco funcionários da empresa, o pseudocódigo usando variáveis seria: Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 11 Imagine se a lista de funcionários fosse referente à quantidade de 100 pessoas, você iria ter um trabalho exagerado para declarar e atribuir dados para as variáveis e depois seria no mínimo trabalhoso utilizá-las. Então, com a finalidade de organizar a memória do computador e responder ao desafio acima, você pode utilizar uma nova forma de representação de dados na memória, as chamadas estruturas de dados. Estrutura de dados é apenas um termo técnico, que se refere a um armazenamento de dados mais eficiente no algoritmo construído (http://en.wikipedia.org/wiki/Data_structures, acessado em 26/04/2007). Usando as linguagens de programação e os tipos de dados especiais aplicados às variáveis, poderemos obter todo o potencial dessa técnica de desenvolvimento de programas. Os arrays também são conhecidos, na teoria de estrutura de dados, como variáveis compostas homogêneas. 2 ARRAYS Array é uma estrutura de dados que representa uma variável em memória, que será composta de um conjunto de elementos do mesmo tipo e representada por um único nome. Para representar um array em pseudocódigo, a linha de comando é a seguinte: variavel [tipo de dados] [nome] [dimensão] Repare que a declaração de uma variável agora recebe mais um componente: dimensão. Esse componente refere-se ao número de elementos necessários no array para a individualização de cada informação dentro da estrutura de dados. A título de exemplo, veja, na figura 2, a declaração de array em pseudocódigo: variavel real NotasBimestrais [3] Sendo: Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 12 Figura 2 – Detalhes sobre a declaração de um array Nesse exemplo, poderão ser armazenadas quatro informações na mesma variável. Agora passe para a seção seguinte e vamos explorar em mais detalhes o uso dessa técnica. 2.1 TRABALHANDO COM ARRAYS Implementar arrays em programação de computadores, segue as mesmas orientações para trabalhar com variáveis, adicionando-se apenas as dimensões envolvidas na operação que está sendo realizada. São três operações comuns no uso de arrays: criar um array, armazenar informações em um elemento do array e recuperar informação de um elemento desejado. Como já vimos na seção “O que é um array”, para criar um array em pseudocódigo, utilize a seguinte declaração: variavel [tipo de dados] [nome] [dimensão] Vamos agora, olhando a figura 3, avaliar como fica a representação de um exemplo e a estrutura armazenada na memória. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 13 Figura 3 – Representação de um array armazenado na memória Cada área de memória poderá armazenar informações mantendo-se o mesmo tipo de dados. O armazenamento das informações é realizado através da seguinte declaração (em pseudocódigo): variavel [dimensão] � valor/informação Então, o pseudocódigo de exemplo e a representação na memória: NotasBimestrais[0] � 7,5 NotasBimestrais[1] � 8 NotasBimestrais[2] � 6,5 NotasBimestrais[3] � 7 Figura 4 – Representação de um array na memória com dados armazenados Repare na figura 4, que cada dimensão é representada pelo nome da variável e o índice da dimensão do array que se deseja armazenar a informação. Na memória, as informações ficam armazenadas em áreas de memória reservadas e associadas ao array. Finalmente, para recuperar a informação de um elemento do array, você pode utilizar a seguinte representação que, neste caso, escreverá o conteúdo do elemento do array: ESCREVER variavel [dimensão] Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 14 2.2 TAMANHO DE UM ARRAY Repare que no exemplo de array apresentado na seção 2.1, o número de elementos na dimensão informado foi 3. Isso significa que o array possui QUATRO elementos, considerando que o índice inicia em zero. Essa informação é extremamente importante para o seu entendimento sobre o uso de arrays, pois existem diferenças em algumas linguagens de programação de mercado. Por exemplo, a declaração de um array em Pascal ou em Visual Basic 6.0 define que o índice de dimensões inicia em 1. Já as linguagens mais atuais como o Java da fabricante Sun e o C# (fala-se “cê chárp”) da Microsoft, incluindo a nova versão do Visual Basic para a nova plataforma de desenvolvimento chamada .NET (alguns autores falam “ponto nét” outros falam “dote nét”), iniciam o índice de dimensões em 0. Neste módulo estamos utilizando o padrão das linguagens mais atuais, com o índice iniciando em 0 (zero). Como conclusão, é importante você entender que o último número de um array N, será sempre N-1, ou seja, se for necessário um array de 10 elementos, a declaração do array deverá ser 9 (0 a 9 fornecerá 10 elementos). 2.3 ARRAYS UNIDIMENSIONAIS – VETORES Você reparou que, até o momento, foram apresentados os conceitos e exemplos de arrays usando apenas uma dimensão, ou seja, representamos apenas um valor entre os colchetes da declaração do array (por exemplo, [2]). Esse tipo de array é chamado array unidimensional, também conhecido como vetor. Podemos então definir que um VETOR é uma estrutura de dados representada por um array com uma única dimensão, ou seja, um conjunto de informações organizado em uma simples coluna ou linha (MicrosoftComputer Dicionary, 2002). É possível aprimorarmos ainda mais a técnica de manipulação de informações nos algoritmos, usando várias dimensões. Esse é o nosso próximo assunto. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 15 3 ARRAYS MULTIDIMENSIONAIS Até agora vimos como trabalhar com um grande volume de dados usando arrays unidimensionais (ou vetores). Mas em alguns casos, apenas uma dimensão não é suficiente para representar adequadamente a informação no algoritmo. Além disso, é comum desejarmos associar as informações para a comparação de dados. Veja o exemplo que podemos ter (tabela 1): Tabela 1 – Associação de informações para comparação de dados Vendas Janeiro Vendas Fevereiro $ 1.000,00 $ 1.100,00 $ 2.500,00 $ 2.200,00 Diante dessa tabela, podemos armazenar as informações em um array multidimensional, chamado de matriz, considerando sua abordagem baseada no mesmo conceito matemático de matrizes. 3.1 TRABALHANDO COM ARRAYS MULTIDIMENSIONAIS A única diferença na declaração de um array multidimensional é a agregação de mais um elemento no comando, conforme o comando abaixo em pseudocódigo. variavel [tipo de dados] [nome] [dimensão1 dimensão2 dimensãoN] Então, podemos declarar um array multidimensional para suportar a tabela de vendas exemplo nesta seção usando o seguinte comando: variavel real Vendas[2,2] Depois vamos armazenar os dados através dos seguintes comandos: Vendas[1,1] � 1000,00 Vendas[1,2] � 2500,00 Vendas[2,1] � 1100,00 Vendas[2,2] � 2200,00 Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 16 Na memória, o armazenamento se dará da seguinte forma (figura 5): Figura 5 – Representação de exemplo de array multidimensional 4 APLICAÇÃO PRÁTICA USANDO ARRAY Vamos considerar agora uma abordagem prática no uso de arrays, com a ferramenta Portugol. 4.1 PROBLEMA Dado um conjunto de 10 idades, calcule e forneça os seguintes resultados: • Média das idades informadas; • Quantidade de pessoas acima da média calculada; • Quantidade de pessoas abaixo da média calculada. 4.2 SOLUÇÃO O número total de entradas que serão fornecidas é informado no problema (10 idades), portanto a lógica para a leitura de dados deverá ser controlada por um contador. Vamos utilizar um laço de repetição com contador automático. Para calcular a média, será necessário receber todas as idades. Depois vamos comparar cada entrada de idade usando um vetor de 10 elementos. Vamos utilizar dois laços de repetição: um para leitura e soma das idades e o outro para a comparação de cada valor armazenado no vetor com a média calculada. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 17 4.3 PROCEDIMENTO 1. Executar o software Portugol; 2. Apague a linha “escrever "PORTUGOL IDE 6-12-2006"”; 3. Digite o seguinte comentário: //Lê o valor das 10 idades, calcula e fornece a média das //idades a quantidade de pessoas acima e abaixo da média 4. Declare as variáveis: variavel inteiro idades [ 10 ] , contar , total , acima , abaixo variavel real media 5. Inicialize as variáveis total <- 0 acima <- 0 abaixo <- 0 6. Vamos agora declarar o laço de repetição para obter as idades: para contar de 0 ate 9 passo 1 ler idades [ contar ] total <- total + idades [ contar ] proximo 7. Após receber a entrada de todas as idades, vamos obter a média das idades. Insira o seguinte pseudocódigo: // Calculando a média média <- total / 10 8. Vamos agora implementar o laço de repetição para separar as idades informadas abaixo e acima da média calculada: para contar de 0 até 10 passo 1 se idades[contar] > média então acima <- acima + 1 fimse se idades[contar] < média então abaixo <- abaixo + 1 fimse Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 18 proximo 9. Finalmente, vamos apresentar os resultados usando os seguintes comandos: escrever "Total das Idades: ", total, "\n" escrever "Média das Idades: ", média, "\n" escrever "Total das Idades Acima: ", acima, "\n" escrever "Total das Idades Abaixo: ", abaixo, "\n" 10. Execute o pseudocódigo usando o comando Executar do menu Algoritmo; 11. Informe as idades e veja o resutlado do programa (figura 6) Figura 6 – Janela do Portugol solicitando dados 12. O código final do programa deverá se apresentar conforme abaixo: inicio //Lê o valor das 10 idades, calcula e fornece a média das idades //a quantidade de pessoas acima e abaixo da média variavel inteiro idades [ 10 ] , contar , total , acima , abaixo variavel real media total <- 0 acima <- 0 abaixo <- 0 para contar de 0 ate 9 passo 1 ler idades [ contar ] total <- total + idades [ contar ] proximo // Calculando a média média <- total / 10 // Agora vamos separar as idades informadas que estão abaixo Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 19 // e acima da média para contar de 0 até 10 passo 1 se idades[contar] > média então acima <- acima + 1 fimse se idades[contar] < média então abaixo <- abaixo + 1 fimse proximo escrever "Total das Idades: ", total, "\n" escrever "Média das Idades: ", média, "\n" escrever "Total das Idades Acima: ", acima, "\n" escrever "Total das Idades Abaixo: ", abaixo, "\n" fim SÍNTESE Nesta aula realizamos o primeiro passo para o desenvolvimento de soluções mais complexas. O uso de arrays é uma abordagem muito comum, principalmente em soluções que exigem o tratamento de um grande volume de informações, apesar de que também é comum seu uso em pequenas soluções. Veja que o array estende as capacidades de manipulação de dados na linguagem e uso, e sua utilização facilita no tratamento de informações de forma estruturada. O conhecimento em estruturas mais complexas apenas começou. Vamos em frente! Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 20 EXERCÍCIOS PROPOSTOS 1) Defina vetor e exemplifique. ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________ 2) Qual a vantagem em utilizarmos um array multidimensional? ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________ 3) Apresente exemplos de declaração para um vetor e de uma matriz. ___________________________________________________________________ ___________________________________________________________________ _______________ Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 21 Aula 2 TRABALHANDO COM REGISTROS Objetivos da aula Ao final desta aula, você deverá ser capaz de: • Utilizar registros, identificando as suas vantagens; • Construir algoritmos utilizando-se da manipulação de registros;• Diferenciar array de registro. Conteúdos da aula Acompanhe os assuntos desta aula, se preferir, ao terminar, assinale o conteúdo já estudado. � Variáveis compostas heterogêneas � Aplicação prática usando registros Prezado(a) aluno(a), nesta aula você terá o primeiro contato na forma de armazenamento mais comum dos dados em um computador. Normalmente desejamos armazenar um conjunto de informações para depois utilizá-las das mais variadas formas. Vimos na aula anterior, que um array nos permite trabalhar com um grande conjunto de dados, mas ele é limitado a um único tipo de dados. Já um registro, amplia a abordagem do array, permitindo que seus elementos possam armazenar tipos de dados diferentes. É uma construção simples e extremamente poderosa. “Mãos à obra” e boa Aula! Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 22 1 VARIÁVEIS COMPOSTAS HETEROGÊNEAS Como vimos na aula anterior, um array pode armazenar dados com os mesmos tipos (por exemplo: tipos numéricos ou texto), em uma forma de matriz, mas há necessidade de armazenamento de informações, usando a mesma abordagem de um array, com tipos de dados diferentes. A construção de uma estrutura de dados, na forma de matriz, que permite o armazenamento de diferentes tipos de dados em seus elementos é conhecida como variável composta heterogênea. É importante ressaltar que esse tipo de estrutura de dados também é conhecido como “registro” e cada um de seus elementos são chamados de “campos”. Esse tipo de abordagem busca associar à composição de um registro de informações, por exemplo: um cadastro de clientes. A figura 7 mostra os campos para que sejam registradas informações sobre um cliente. Cadastro de ClientesCadastro de Clientes Nome Endereço Bairro Cidade Estado Salvar Cancelar Idade Figura 7 – Exemplo de campos para registro de informações A representação na memória de um registro você pode visualizar na figura 8. Figura 8 – Representação de registro na memória Campos Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 23 1.1 REPRESENTAÇÃO DE UM REGISTRO EM PSEUDOCÓDIGO Para criar um registro, utilizamos um nome e um conjunto de variáveis, especificando o tipo de cada variável. Vamos avaliar a instrução de pseudocódigo abaixo: [nome do registro]: REGISTRO [campo 1] [tipo de dados] [campo 2] [tipo de dados] [campo n] [tipo de dados] FIM REGISTRO Agora vamos entender cada componente do pseudocódigo (figura 9), utilizando como exemplo o Cadastro de Clientes que foi apresentado. Figura 9 – Componentes do pseudocódigo de um registro 1.2 MANIPULAÇÃO DE REGISTROS Quando criamos um registro, na memória há uma área de armazenamento, na forma de matriz, cujo elemento corresponde a um “campo” do registro. Cada campo Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 24 pode conter tipos de dados diferentes. No exemplo de Cadastro de Clientes, que estamos utilizando, visualizemos a figura 10, para entender como a informação é armazenada na memória. Figura 10 – Exemplo de um conjunto de registros Observe que, a cada registro armazenado na memória (ou linha de informação) corresponde um conjunto de dados que estão associados e participam de uma estrutura maior de dados. Outro aspecto fundamental a ser observado é que a estrutura de dados armazena as informações como uma matriz. Por isso, cada linha possui uma referência numérica na memória, para que possamos encontrar as informações armazenadas. Em pseudocódigo, para determinarmos o número de registros do conjunto de dados e criarmos uma “matriz de registros”, utilizamos a seguinte instrução: [nome do registro]: [nome da matriz] [dimensões] Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 25 A instrução acima precisa ser informada logo após a construção do registro. Para recuperar uma informação de determinado campo de um registro em pseudocódigo, você deve utilizar a seguinte instrução: IDENTIFICADOR[índice].Campo “Identificador” é o nome utilizado para a criação do registro, entre colchetes o índice ou linha correspondente, seguido do sinal ponto (.) e, finalmente, o nome do campo que se deseja utilizar. Veja um exemplo na figura 11: Figura11 – Como obter informações de um registro Para armazenar uma informação em um registro, em pseudocódigo você deve utilizar a seguinte instrução: IDENTIFICADOR[índice].Campo � [Valor] 2 APLICAÇÃO PRÁTICA USANDO REGISTROS Usando os conceitos apresentados nessa aula, vamos realizar uma abordagem prática na construção e manipulação de registros, através de pseudocódigo. Infelizmente, a ferramenta Portugol, bem como as demais ferramentas conhecidas Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 26 como Interpretador de Linguagem Algorítmica (ILA), não suportam variáveis compostas heterogêneas. Por isso, neste módulo vamos construir o nosso pseudocódigo usando o bloco de notas (ou um editor de textos de sua preferência). 2.1 PROBLEMA Dado um conjunto de 40 registros contendo informações de alunos, calcular a média e a situação desses alunos. O algoritmo deverá exibir uma lista dos alunos contendo a média e a situação. 2.2 SOLUÇÃO O número total de entradas que serão fornecidas é informado no problema (10 idades), portanto, a lógica para a leitura de dados deverá ser controlada por um contador. Vamos utilizar um laço de repetição com contador automático. Para obter a média e a situação dos alunos, primeiramente vamos obter as informações usando a entrada de dados pelo usuário. 2.3 PROCEDIMENTO 13. Executar o Bloco de Notas; 14. Digite a abertura e fechamento do pseudocódigo: Inicio Fim 15. Abaixo da instrução Início, vamos declarar as variáveis: Inicio Reg_Alunos: REGISTRO Texto Nome, Situacao Real Nota1, Nota2, Nota3, Nota4, Media Inteiro Faltas, Contador FIM REGISTRO Fim Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 27 16. Agora vamos declarar a quantidade de registros que serão armazenados na estrutura de dados. Informe a instrução abaixo do texto “Fim Registro”. Reg_Alunos:aluno[40] 17. Vamos obter as informações do usuário: Para Contador de 0 até 39 passo Ler Aluno[Contador].Nome Ler Aluno[Contador].Nota1 Ler Aluno[Contador].Nota2 Ler Aluno[Contador].Nota3 Ler Aluno[Contador].Nota4 Ler Aluno[Contador].Faltas Próximo 18. Agora vamos realizar os cálculos necessários. Insira as instruções acima da palavra “Próximo” no laço anterior (Item 5), considerando que vamos efetuar o cálculo a cada entrada de dados. Aluno[Contador].Media � (Nota1+Nota2+Nota3+Nota4)/4 SE Aluno[Contador].Media >= 7 E Aluno[Contador].Faltas <= 10 ENTÃO Aluno[Contador].Situacao � “Aprovado” Senão Aluno[Contador].Situacao � “Reprovado” FIMSE 19. Agora vamos imprimir a lista de alunos: Contador � 0 Para Contador 0 até 39 passo Escrever “\nAluno: “,Aluno[Contador].Nome, � Aluno[Contador].Media, Aluno[Contador].Situacao Próximo 20. Observe que, na instrução “Escrever”, há um texto a ser apresentado na tela com a seguinte composição: “\nAluno: “. Os caracteres \n, no texto, serão interpretados como uma quebra de linha, ou seja, antes de apresentar na tela a informação, será realizada uma quebra de linha. Também observe que a instrução não cabe no leiaute da apostila, por isso o símbolo �, ao final da primeira linha da instrução“Escrever”, significando que é uma linha contínua. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 28 SÍNTESE O conceito de variáveis compostas é um instrumento de grande importância na programação de computadores. Primeiro, porque o uso permite realizar um conjunto de tarefas de forma rápida e organizada; segundo, porque permite o armazenamento de informações de diferentes tipos de dados. Variável composta é, na verdade, uma ampliação das capacidades de um array, este permite o armazenamento de informações apenas do mesmo tipo; aquela (variável composta ou registro) permite o armazenamento de informações com tipos de dados diferentes. Como o processamento das informações é realizado na memória RAM do computador, sua utilização permite um nível de resposta de processamento altamente performático. Ficamos aqui com o final dos tópicos relacionados à programação estruturada. Prepare-se que, na próxima aula, você terá contato com uma nova abordagem de programação, muito poderosa e é uma resposta para as complexidades atuais dos negócios. Fique firme na obtenção desse conhecimento e nos encontramos na próxima aula. Até lá. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 29 EXERCÍCIOS PROPOSTOS 1) Apresente quatro exemplos de aplicação de variáveis compostas. ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________ 2) Você é responsável pela construção de um sistema para o gerenciamento de veículos em um estacionamento. Crie um registro para o armazenamento dos dados de cadastro de veículos. ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________ 3) Crie um registro que armazene informações de dados pessoais de uma pessoa. Os dados deverão ser: nome, endereço, bairro, cidade, estado e CPF. ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________ Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 30 Aula 3 PROGRAMAÇÃO ORIENTADA A OBJETOS Objetivos da aula Ao final desta aula, você deverá ser capaz de: • Mostrar diferenças entre a programação estruturada e a • programação orientada a objetos; • Compreender os motivos que formam a necessidade da adoção • da programação orientada a objetos; • Conceituar programação orientada a objetos. Conteúdos da aula Acompanhe os assuntos desta aula, se preferir, ao termino, assinale o conteúdo já estudado. � O que é a programação orientada a objetos? � O desafio da OOP � A história da OOP � Terminologia � Vantagens e Desvantagens Prezado(a) aluno(a), É com grande satisfação que lhe dou boas-vindas a um assunto tão instigante: a programação orientada a objetos. Procuraremos, nessa aula, oferecer-lhe uma visão geral do método de programação e buscaremos fazer com que perceba as vantagens de sua adoção. Espero que você se sinta motivado a absorver estes assuntos tão relevantes para suas atividades como profissional. Novamente, bem-vindo(a) e bons estudos. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 31 1 O QUE É A PROGRAMAÇÃO ORIENTADA A OBJETOS 1.1 A PROGRAMAÇÃO ESTRUTURADA E OS NOVOS DESAFIOS EM DESENVOLVER SISTEMAS Como você deve lembrar, a “arte” de programar computadores é basicamente resolver problemas. Em essência, a principal função do programador é interpretar adequadamente um problema e apresentar uma solução, usando um método que possa ser entendido pelo “cliente” que lhe trouxe o problema, bem como pelo computador. Nesse sentido, vimos que existem duas formas de representação de um programa de computador: • O fluxograma, que serve tanto para melhor entendimento do problema junto ao cliente, como para suportar a lógica na construção do programa; • O pseudocódigo, para auxiliar na especificação do programa para o programador, com uma abordagem usando uma “linguagem comum”. O método a que nos referimos até o momento é baseado em uma abordagem chamada “programação estruturada”, que decompõe o problema em partes lógicas e estabelece um conjunto de instruções a serem executadas como solução. As duas grandes vantagens desse modelo são: • Maior facilidade na manutenção do programa; • Capacidade em localizar problemas e resolvê-los de maneira mais simples. À medida que o programador desenvolve a solução, um grande número de “pedaços” de programas é construído e integrado, exigindo controle dos algoritmos e suas interdependências. Outro problema desse modelo de programação é a dificuldade na reutilização de rotinas, produzindo o que os autores chamam de “código espaguete”, as interdependências entre os programas geram um constante Início e Fim, em uma seqüência procedimental cheia de desvios, laços e elementos condicionais. É comum, em caso de alteração de uma instrução, acarretar mudanças em todos os pontos onde a instrução é utilizada, gerando uma cascata de alterações. Devemos então, considerar quatro aspectos dificultadores no uso da programação estruturada: Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 32 1. Os programas não possuem a capacidade de ser alterados sem a necessidade de abrir o código-fonte, ou seja, os programas não são extensíveis; 2. Um programa não pode se basear em outro programa, gerando, na maioria dos casos, construções condicionais em ambos ou até a repetição das linhas de programação. Algumas linguagens mais atuais fornecem alternativas para resolver esse problema; 3. Com o aumento do tamanho e da complexidade das aplicações, há necessidade constante de otimização do processo de desenvolvimento de sistemas e as respostas da programação estruturada para os desafios atuais não são mais suficientes; 4. Com o advento do desenvolvimento de sistemas gráficos e também para a Internet, a abordagem do desenvolvimento estruturado não resolve mais os desafios que as tecnologias atuais impõem, exigindo uma nova forma de pensamento e interpretação dos problemas. 1.2 A PROGRAMAÇÃO ORIENTADA A OBJETOS É nesse contexto que o método de “programação orientada a objetos” se apresenta: como uma evolução para os desafios atuais no desenvolvimento de sistemas, oferecendo um arcabouço fundamental para uma nova abordagem de soluções computacionais aos problemas. A expressão “Programação orientada a objetos” pode ser substituída pelo acrônimo POO, ou o que é mais comum, usando o acrônimo em inglês – OOP (Object Oriented Programming), modo como vamos tratá-la daqui por diante. A novidade da OOP está principalmente na reutilização de programas e em uma modularização mais suscetível às dinâmicas que as regras de negócio exigem na atualidade. A OOP introduz uma abordagem na qual o programador interpreta o problema e concebe o seu programacomo uma coleção de objetos interdependentes, ao invés de procedimentos e funções, cujos objetos se comunicam por mensagens. Cada um dos objetos é uma derivação de uma classe e todas as classes formam uma hierarquia no sistema. Uma classe é apenas um modelo de objeto. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 33 O objetivo principal dessa nova abordagem, no desenvolvimento de sistemas, está na busca de uma forma mais clara para interpretar problemas, abstraindo-lhe a solução. Veja que todo problema submetido à construção de um sistema envolve uma série de elementos, por exemplo: equipamentos, veículos e notas fiscais. Esses elementos podem ser representados como objetos cujos atributos podem ser: cor do equipamento, tamanho do veículo e data de emissão da nota fiscal. Desta forma, as rotinas serão representadas e implementadas através de classes, ao invés de desenvolver um procedimento para cada uma. Para facilitar ainda esta explicação, vamos considerar o exemplo de registro utilizado na aula passada. O registro de clientes possui uma série de campos, e podemos ter um conjunto de registros de clientes armazenados. Usando a OOP, o registro Clientes seria uma Classe, um cliente seria um Objeto e os campos do registro seriam os Atributos da classe. 2 O DESAFIO DA OOP Como você pôde perceber, há uma nova forma de trabalhar com a programação de sistemas usando o método de orientação a objetos. Na verdade, hoje, a adoção desse método ainda está longe do que poderia ser aplicado na programação de computadores. Vários dificultadores acabaram criando certa resistência na adoção da OOP. Vamos conhecer alguns deles nesta seção. A programação de computadores ainda é tratada como algo que é de difícil entendimento e de grande complexidade, o método de programação estruturada acabou sendo absorvido ao longo dos anos de estudo e construção de programas, por parte dos programadores. Isso acabou criando uma grande geração de profissionais que nasceram e cresceram “pensando de forma estruturada” para resolver os problemas submetidos à programação. Quando a OOP tomou força, com o advento de linguagens populares que suportavam o método, houve um movimento de mudança para os programadores e uma decisão a ser tomada: mudar a maneira de interpretar os problemas e a maneira como as soluções eram construídas. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 34 Atualmente, com o advento de linguagens de programação de alto nível, que facilitam a vida do programador na absorção dos conceitos da OOP, o método acabou recebendo um número cada vez maior de adeptos. A linguagem Java pode ser considerada como a precursora desse movimento, trazendo um amplo conjunto de benefícios e totalmente construída usando o método de programação orientada a objetos. Diante desse cenário, podemos resumir os seguintes desafios para aprendermos OOP: 1. Exige uma forma diferente de como interpretamos os problemas; 2. Exige que a construção dos programas tenha definição também diferente do modelo de programação estruturada; 3. Fornece nova forma para apresentar solução ao usuário, exigindo maior nível de abstração; 4. Novos conceitos e formas de construção de programas, com o objetivo de explorar o potencial do método OOP, exigem uma forma diferente de pensar do programador; 5. Alguns preconceitos foram criados contra a OOP como: o esforço necessário para a construção de sistemas, a construção de recursos mais amigáveis ao usuário são trabalhosos demais e algumas promessas do método que acabam na prática exigindo do programador esforços parecidos como havia na programação estruturada. Hoje, o sentimento é de que realmente há preconceitos; antes, o que havia era uma grande falta de domínio sobre a oferta do método e a forma como ele deveria ser utilizado. 3 A HISTÓRIA DA OOP A origem da OOP remonta a 1966, quando os escandinavos Ole-Johan Dahl e Kristen Nygaard criaram a linguagem Simula para a construção de modelos de simulação. Para obter uma visão histórica desse momento, acesse o site: http://heim.ifi.uio.no/~kristen/FORSKNINGSDOK_MAPPE/F_OO_start.html Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 35 Essa linguagem influenciou a criação do Smalltalk na Xerox, em Palo Alto, Califórnia, nos anos setenta, o que podemos observar em detalhes no seguinte endereço na internet: http://www.smalltalk.org/smalltalk/TheEarlyHistoryOfSmalltalk_TOC.html Posteriormente, a Simula influenciou outras linguagens, ora construídas com base nos conceitos originais, como o Eiffel, ou inspiradas na sintaxe de outras já existentes, como é o caso do C++, Java, Object Pascal, Delphi e Ada95. 4 TERMINOLOGIA 4.1 ABSTRAÇÃO DE DADOS Um recurso que recebeu destaque na OOP chama-se “programação com tipos de dados abstratos” cujos tipos fornecem a implementação dos conceitos da OOP, chamados encapsulamento e modularidade. Como vimos anteriormente, os tipos de dados são utilizados como uma operação comum na programação de computadores. Na declaração de uma variável, definimos o tipo de dados para armazenamento, delimitando, dessa forma, o conjunto de valores que podem ser armazenados. As linguagens de programação oferecem um conjunto de tipos de dados básicos e pré-definidos (também chamados de tipos primitivos), mas algumas linguagens oferecem a construção de tipos específicos e complexos, são as variáveis compostas heterogêneas que vimos na segunda aula do módulo. Esse tipo de dado complexo abstrai os dados armazenados na variável. Na OOP cria-se um novo tipo de dado chamado objeto, que pode conter, além de atributos específicos, dados e procedimentos embutidos. Nesse tipo de dado, o programador se preocupa apenas em saber como utilizar os recursos disponíveis pelo objeto, sem a necessidade de saber como o objeto foi construído e como funciona os procedimentos internos. Com essa abordagem, conseguimos obter uma verdadeira “abstração de dados”, ou seja, o usuário conhece apenas o necessário para seu uso, sem precisar conhecer detalhes complexos do objeto. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 36 4.2 ENCAPSULAMENTO A abordagem de programação usando tipos de dados abstratos inclui o conceito de encapsulamento que, basicamente, “esconde e protege” as informações contidas no objeto. O encapsulamento consiste em ocultarmos ao usuário o funcionamento interno de uma classe. 4.3 OBJETOS Os objetos são reconhecidos como uma entidade autônoma que combina a representação da informação (estruturas de dados) e meios de sua manipulação (procedimentos), uma vez que possuem capacidade de processamento e armazenam um estado local, usando variáveis encapsuladas no objeto. Um objeto é composto de: • Propriedades: são as informações, estruturas de dados que representam o estado interno do objeto; • Comportamentos: também conhecidos como métodos, que agem sobre as propriedades. Os métodos são acionados quando o objeto recebe uma mensagem solicitando sua execução; • Identidade: é uma propriedade que diferencia um objeto do outro; ou seja, o seu nome. 4.4 MENSAGENS Um objeto sozinho não é muito útil e geralmente aparece como componente de um grande programa que contém muitos outros objetos. Pela interação desses objetos, pode-se obter uma grande funcionalidade e comportamentos mais complexos. Objetos de software interagem e comunicam-se com os outros por mensagens, formadas por três componentes básicos: • o objeto a quem a mensagem é endereçada (receptor); • o nome do método que se deseja executar; • os parâmetros (se existirem) necessáriosao método. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 37 4.5 MÉTODOS Um método implementa algum aspecto do comportamento do objeto. Comportamento é a forma como um objeto age e reage, em termos das suas trocas de estado e troca de mensagens. Um método é uma função ou procedimento definido na classe e tipicamente pode acessar o estado interno de um objeto da classe para realizar alguma operação. 4.6 CLASSES Objetos de estrutura e comportamento idênticos são descritos como pertencendo a uma classe, de tal forma que a descrição de suas propriedades pode ser feita de uma só vez, de forma concisa, independente do número de objetos idênticos em termos de estrutura e comportamento que possam existir em uma aplicação. A noção de um objeto é equivalente ao conceito de uma variável em programação convencional, pois especifica uma área de armazenamento, enquanto a classe é vista como um tipo abstrato de dados, uma vez que representa a definição de um tipo. Cada objeto criado, a partir de uma classe, é denominado de instância dessa classe. Uma classe provê toda a informação necessária para construir e utilizar objetos de um tipo particular, ou seja, descreve a forma da memória privada e como se realizam as operações das suas instâncias. Os métodos residem nas classes, uma vez que todas as instâncias de uma classe possuem o mesmo conjunto de métodos, a mesma interface. 4.7 HERANÇA O mecanismo de herança permite a reutilização das propriedades de uma classe na definição de outra. A classe mais generalizada é chamada superclasse e a mais especializada, subclasse. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 38 4.8 POLIMORFISMO Polimorfismo refere-se à capacidade de dois ou mais objetos responderem à mesma mensagem, cada um a seu próprio modo. A utilização da herança torna-se fácil com o polimorfismo. 4.9 SIMILARIDADES ENTRE A PROGRAMAÇÃO ESTRUTURADA E A OOP É possível identificarmos similaridades entre a programação estruturada e a programação orientada a objetos, com o objetivo de facilitar o entendimento do conceitos de OOP, observe a tabela 2: Tabela 2 – Comparação básica entre Programação Estruturada e OOP Programação Estruturada OOP Tipos de dados Classes Variável Objetos Função/Procedimento Operação/Método Chamada de função Envio de mensagem 5 LINGUAGENS ORIENTADAS A OBJETOS Nem todas as linguagens de programação do mercado são orientadas a objetos, que é uma técnica de programação, ou melhor, um “paradigma” para escrever um bom programa cuja finalidade é resolver um determinado problema. Então, para que possamos considerar uma linguagem orientada a objetos, a linguagem deverá possuir mecanismos que suportem o estilo de programação que o método OOP apresenta. É importante, nesse contexto, você entender que muitas linguagens se apresentam como baseadas em objetos e outras suportam claramente a orientação a objetos. As linguagens baseadas em objetos suportam recursos que facilitam a construção de sistemas usando a programação estruturada, usando recursos visuais e elementos facilitadores. Um exemplo muito comum é a linguagem Visual Basic da Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 39 Microsoft, cuja versão atual, baseada em .NET, oferecia formas de construção que se utilizavam de conceitos baseados em objetos, mas não havia na linguagem suporte aos padrões que a OOP oferece. Esse tipo de linguagem e método de programação é conhecido como programação orientada a eventos. As linguagens mais populares que suportam efetivamente a programação orientada a objetos são: Java (Pura), C++ (Híbrida), SmallTalk (Pura), Object Pascal (Pura) e C# (Pura). As linguagens consideradas “puras”, no suporte à OOP, nasceram com base nos padrões da OOP e as linguagens consideradas “híbridas” são linguagens que nasceram no modelo de programação estruturada e evoluíram para suportar os recursos da OOP. SÍNTESE Nesta aula você percebeu a dimensão da programação orientada a objetos. É uma abordagem atual e que atende às demandas atuais do mundo globalizado. O primeiro assunto que abordamos procurou lhe fornecer a percepção das diferenças entre a programação estruturada e a programação orientada a objetos. A programação estruturada possui limitações para os desafios atuais porque: • Os efeitos em cascata são gerados pela modificação de programas; • Com a grande quantidade de programas, procedimentos e funções implementados, a localização de um problema tornou-se algo mais difícil de se resolver; • Seções reutilizáveis de código de programação são muito difíceis de serem construídas. O objetivo da OOP (programação orientada a objetos) é desenhar e construir uma solução baseada nos objetos existentes no problema e não mais através de procedimentos e situações interdependentes. Isso faz com que o programa seja quebrado em módulos gerenciáveis e auto-suficientes. Então, a OOP permite um programa mais adequado aos desafios que as áreas de negócios impõem às soluções de Tecnologia da Informação. Porque o código de programação criado é: • Modular; • Extensível; Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 40 • Reutilizável; • Mais fácil de manter; • Mais simples de depurar. Como o próprio nome sugere, a programação orientada a objetos é baseada no conceito de software objeto e busca manter total similaridade aos conceitos de objetos do mundo real (caneta, mesa, cadeira, etc.). Dessa forma, os objetos compartilham algumas características com outros objetos, devido às suas propriedades e comportamentos. As propriedades, também conhecidas como estados do objeto, são implementadas pelas variáveis e o comportamento do objeto é desenvolvido pelos seus métodos. A reunião dos métodos e propriedades de um objeto é denominada abstração de dados, pois o usuário do objeto não precisa saber como as propriedades e os métodos foram construídos, ele precisa saber apenas como utilizá-los. Considerando que uma aplicação poderá conter vários objetos, esses podem relacionar-se uns com os outros. A comunicação que ocorre entre os objetos é realizada por mensagens que, por sua vez, são realizadas pelo uso do objeto, da execução de um método associado ao objeto, e da passagem de informações para que o método seja executado adequadamente. À medida que os objetos são construídos, poderá haver similaridades e a OOP oferece o uso de classes para criar estruturas pré-construídas. É fazendo uso desse mecanismo de classes que podemos nos utilizar dos recursos de reuso que o método nos oferece. Além disso, o agrupamento de classes com características comuns é utilizado pela OOP para criar uma hierarquia de classes e com isto estabelecer uma lógica de reuso. As práticas de extensões, sobreposições e de herança se utilizam dessa hierarquia para a construção de novos objetos que, futuramente, se beneficiarão de qualquer mudança que ocorrer na classe superior. A conseqüência no uso dessas práticas implementa um dos principais recursos da OOP: o polimorfismo, ou seja, o objeto possui um comportamento diferente de acordo com o contexto em que é utilizado. Esses são os principais conceitos da OOP que você precisa levar para as futuras linguagens de desenvolvimento que oferecem suporte ao método. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 41 Na próxima aula, vamos aprender como representar graficamente os sistemas orientados a objetos. Até lá. EXERCÍCIOS PROPOSTOS 1) Defina com as suas palavras o que é a programação orientada a objetos. ______________________________________________________________________________________________________________________________________ ___________________________________________________________________ _______________ 2) O que é encapsulamento? ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________ 3) Podemos afirmar que toda linguagem de programação é orientada a objetos? Justifique. ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 42 Aula 4 INTRODUÇÃO A UML Objetivo da Aula Ao final desta aula, você deverá ser capaz de: • Explicar a necessidade da modelagem de soluções; • Comparar a modelagem de sistemas orientados a objetos com a modelagem de sistemas estruturados; • Explicar o que é a UML e sua história; • Obter um conhecimento essencial sobre os diagramas da UML. Conteúdo da Aula Acompanhe os assuntos desta aula, se preferir, ao terminar, assinale o conteúdo já estudado. � Porque modelar aplicações � O que é UML? � O modelo conceitual da UML � Ferramentas de modelagem UML Prezado(a) aluno(a), Como vimos na aula passada, a OOP é uma poderosa abordagem para a construção de sistemas, trazendo novos conceitos, métodos e práticas na construção de sistemas. Nesse sentido, a representação visual das soluções orientadas a objetos também precisa de um novo conjunto de práticas para atender às particularidades dessa nova implementação. Nesta aula você aprenderá os conceitos básicos da representação visual de sistemas orientados a objetos, chamada UML. Espero que você perceba a importância da modelagem de aplicações usando UML e receba este primeiro contato como uma alavanca para obter maior conhecimento e domínio da programação Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 43 orientada a objetos. Desejo-lhe uma excelente aula. 1 PORQUE MODELAR APLICAÇÕES Diante da quantidade de detalhes e conhecimentos que o programador precisa manter em mente, podemos afirmar que, semanalmente, novas tecnologias e recursos são disponibilizados pela indústria de software, fazendo com que a experiência e o conhecimento fiquem obsoletos com grande velocidade e facilidade. Modelar uma solução para um sistema de computador tem como principal finalidade “simplificar a realidade” (Pencer, 2002), ou seja, fornecer uma representação visual da interpretação de um problema. O ditado popular que “uma imagem vale mais que mil palavras” é a afirmativa que nos remete à necessidade da modelagem de aplicações. Diante das complexidades atuais do mundo dos negócios e da amplitude que um programa de computador pode atingir, é fundamental a adoção de uma representação visual da solução. O modelo de uma aplicação para computador oferece a mesma importância de um projeto de arquitetura para a construção civil. A aplicação modelada será um ingrediente fundamental nas relações entre os profissionais envolvidos na construção do programa, desde o cliente que solicitou a solução até os programadores que efetivamente irão desenvolvê-la. Devemos ainda ressaltar que, no caso de um programa de computador, vários pontos de vista são necessários para compreender o modelo apresentado. Dessa forma, significa que um modelo nunca é suficiente e podemos utilizar vários modelos visuais conectados entre si, para tornar possível entender qualquer aspecto do sistema. 1.1 COMPONENTES DE UM MODELO COMPUTACIONAL A importância da modelagem de um sistema está baseada nos seguintes elementos: visualização, especificação, construção e documentação (Pencer, 2002). • Visualização: há uma diferença muito grande entre pensar na solução de um sistema e sua construção em código de programação. Alguns detalhes Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 44 nos sistemas não podem ser completamente compreendidos sem a construção de um modelo que vá além da frieza dos códigos de programação. Além disso, um modelo visualmente representado facilita a comunicação; • Especificação: é um conjunto de instruções que são definidas junto ao modelo visual, com um nível de aplicação técnica para que o programador possa seguir corretamente para a construção do programa; • Construção: os atuais pacotes de software utilizados para a modelagem de sistemas fornecem alguma forma de geração de código de programação, com o objetivo de facilitar e acelerar o processo de construção do programa. Algumas ferramentas, inclusive, permitem a chamada “engenharia reversa”, que significa a criação automática de um modelo visual a partir de um código de programação já construído; • Documentação: um dos aspectos mais importantes no desenvolvimento de sistemas é a documentação de seus componentes. Além disso, é uma das tarefas mais difíceis de se empregar em uma equipe de programadores, pois, normalmente, há preocupação natural com a tecnologia e pouca com a documentação do projeto. Um modelo visual permite que a documentação seja criada e dinamicamente mantida, facilitando o entendimento e as possíveis transformações que o sistema pode receber durante a fase de levantamento e depuração dos programas. 1.2 BENEFÍCIOS DA MODELAGEM DE APLICAÇÕES Diante do que você leu nos tópicos anteriores, podemos então resumir os seguintes benefícios na modelagem de aplicações: • Os modelos ajudam na visualização de como o sistema é ou deverá ser; • Os modelos permitem a especificação da estrutura do programa ou do comportamento de um sistema; • Os modelos fornecem guias e orientações para a construção de um sistema; • Os modelos documentam as decisões que foram tomadas para o sistema; Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 45 • Os modelos fornecem uma linguagem comum que poderá ser utilizada por vários profissionais, contendo vários pontos de vista, mas mantendo uma visão ampla do sistema todo. Agora que você percebeu a importância da modelagem de aplicações, vamos conhecer, na próxima seção, a linguagem de modelagem de aplicações mais utilizadas na atualidade. 2 O QUE É UML? A UML é um padrão para a criação de modelos utilizados na representação de sistemas orientados a objetos e soluções complexas de negócios, combinando as melhores práticas de diagramação utilizadas pelos engenheiros de software nos últimos 40 anos. Na verdade, a UML padroniza os elementos para a representação dos sistemas, mas não determina rigidamente como os modelos são aplicados. Por isso, você encontrará sua utilização em áreas afins da programação, como na modelagem de banco de dados ou na modelagem de processos de negócios, por exemplo. A UML é o acrônimo de Unified Modeling Language, ou Linguagem Unificada de Modelagem. Apesar de haver uma tradução para o padrão, seu uso comum é UML (fala-se “ú-emi-ele”). 2.1 CONHECENDO A HISTÓRIA DA UML A UML está em desenvolvimento formal desde 1994. È a “unificação” de três grandes notações para a especificação de sistemas e foi influenciada por um grande número de técnicas de modelagem, utilizadas nas últimas décadas. Desenvolvida especificamente para representar sistemas orientados a objetos, em 1990, alguns profissionais renomados e experientes, no campo de metodologias para o desenvolvimento de sistemas, iniciaram informalmente suacomposição. As três grandes notações que “dispararam” os fundamentos da UML foram: • Engenharia de Software Orientada a Objetos, ou Object-Oriented Software Engineering (OOSE): desenvolvida por Ivar Jacobson, é baseada no conceito de “casos de uso”, que são formas simples de Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 46 entendimento do problema a partir da visão do usuário e objetivando a construção de um sistema (figura 12); Figura 12 – Processo OOSE • Técnica de Modelagem de Objetos, ou Object-Modeling Technique (OMT): desenvolvida por James Rumbaugh, tem como ênfase a análise de negócios e o claro entendimento dos dados utilizados para a definição do problema (figura 13); Figura 13 – Símbolos utilizados na OMT • Método de Booch, ou Booch Method: desenvolvida por Grady Booch, tem características importantes para o desenho e a implementação da solução, buscando definir e mapear a solução às necessidades de negócios (figura 14). Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 47 Figura 14 – Símbolos utilizados no método Booch Em Outubro de 1994, Booch e Rumbaugh, trabalhavam na Rational Corp. e iniciaram a unificação de seus dois métodos. Seus esforços geraram uma notação única e simplificada, usando o melhor de cada uma das suas notações. Esse período é considerado como o início formal da composição da UML e, após um ano, seus autores publicaram a primeira versão como Unified Modeling Language versão 0.8. Nesse mesmo período, a empresa de Ivar Jacobson foi adquirida pela Rational e iniciaram os trabalhos para a integração da OOSE ao padrão UML. O resultado dessa colaboração gerou as versões 0.9 e .9.1, em 1996. Outros padrões de mercado existiam na época e alguns deles eram mantidos pela OMG (Object Management Group), mas a adoção da UML por várias empresas e instituições acadêmicas, fez com que a OMG estabelecesse um consórcio com a Rational e várias outras empresas, dentre elas a IBM, HP, Microsoft, Oracle e Unisys. Em virtude desse consórcio e da contribuição de várias especificações de cada um dos seus participantes, foi publicada a versão 1.0 da UML, em Janeiro de 1997. Várias revisões foram aplicadas à UML e muitas versões intermediárias foram publicadas (1.1 até 1.5), mas o mundo mudou muito após a publicação dessas versões e as mudanças ocorreram fundamentalmente na captura e no mapeamento das necessidades dos sistemas. Além disso, a UML 1.x foi criada para humanos, ou seja, ela tinha fundamentalmente a busca pelo entendimento do ser humano sobre a solução que estava sendo desenhada. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 48 Então, a versão 2.0 da UML teve os seguintes objetivos: • Aprimorar a linguagem para tornar-se mais fácil de usar, implementar e personalizar; • Aumentar o suporte ao desenvolvimento baseado em componentes. Esse tipo de desenvolvimento foi amplamente utilizado após a publicação das primeiras versões da UML, tendo por objetivo “decompor” o sistema em componentes lógicos e funcionais; • Aumentar a capacidade da linguagem para atender às demandas complexas no relacionamento entre os modelos, atualizar as notações e a criação de novos diagramas (figura 15). Figura 15 – História da UML 3 O MODELO CONCEITUAL DA UML Os autores da UML sugerem que uma aplicação pode ser descrita fazendo-se uso de cinco visões, conforme menciona Bezerra (2002), e cada visão enfatiza aspectos diferentes do sistema a ser construído. São elas: • Visão de casos de uso: descrevem as necessidades do sistema estritamente do ponto de vista externo, apresentando o grau de Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 49 atendimento que o sistema oferece para o usuário. Em resumo, é através dessa visão que se obtém o entedimento do que precisa ser construído no sistema, do ponto de vista de como o trabalho é realizado hoje ou como deverá ser realizado, baseando-se em regras de negócios detalhadas pelo usuário; • Visão de Projeto: focaliza a estrutura do sistema e o comportamento de seus componentes, através da definição de classes, colaborações e as interfaces do sistema; • Visão de Implementação: tem por finalidade representar os aspectos físicos do sistema (programas, bibliotecas, banco de dados e etc.), que serão os componentes da montagem final. Também acompanha e controla as versões dos elementos e do próprio sistema; • Visão de Implantação: representa os recursos físicos da solução (hardware), disponibilização e instalação do sistema, incluindo suas especificações de integração com outros elementos de hardware; • Visão de Processo: fornece as informações relacionadas ao processamento do sistema, mais especificamente o desempenho e a escalabilidade, incluindo a capacidade de resposta das demandas de processamento. Figura 16 – Visões da UML É importante ressaltar que nem todas as visões precisam ser utilizadas. Seu uso depende do tamanho do projeto, complexidade e exigências nas especificações funcionais do sistema. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 50 Para cada visão a UML oferece um diagrama ou notação. Um diagrama é uma representação gráfica de um conjunto de elementos e são desenhados para permitir a visualização sob diferentes perspectivas. 3.1 DIAGRAMAS DA UML A UML oferece nove diagramas ou notações gráficas: diagrama de classes, diagrama de objetos, diagrama de componentes, diagrama de implantação, diagrama de caso de uso, diagrama de seqüência, diagrama de colaboração, diagrama de estados e diagrama de atividades. Segundo Furlan (1998), os diagramas da UML possuem uma notação padrão e bastante compreensível que permite abstrair certos aspectos do sistema, ficando, assim, fácil de entendê-lo através de suas partes. Ao final da modelagem, essas partes se completam e representam o sistema em sua totalidade. São eles: 1. Diagramas de Caso de Uso: um caso de uso, ou situação, é aonde o sistema é utilizado para atender um ou mais requisitos de negócio do usuário. Segundo Bezerra (2002), esse diagrama molda os requisitos funcionais do sistema. Com o uso desse diagrama “desenhamos” a necessidade do cliente ou do negócio, utilizando de uma notação padrão, conforme mostra a figura 17: Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 51 Figura 17 – Exemplo de Caso de Uso 2. Diagrama de Classes: modela os recursos utilizados para construir e operar o sistema. Apresenta as classes do sistema, seus relacionamentos, as operações e os atributos da classe. É o principal diagrama da UML, pois todos os demais diagramas obtêm informações a partir do modelo representado nesse diagrama. Veja a figura 18: Figura 18 – Exemplo de Diagrama de Classes Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 52 Enquanto o diagrama de classes apresenta a definição dos recursos, o diagrama de objetos modela os fatos ou exemplos. O principal objetivo desse diagrama é validar o diagrama de classe, fazendo uso de exemplos e testes; 3. Diagrama de Interação: ajudam a documentar e compreender os aspectos dinâmicos do sistema, descrevendo a seqüência de mensagens enviadas e recebidas pelos objetos. Na UML 1.4, os diagramas de interação são referenciados aos diagramas de seqüência e de colaboração. Basicamente, esses dois diagramas descrevem a comunicação entre os objetos para realizar uma determinada ação. Vamos ver na figura 19, um exemplo de um diagrama de seqüência: Figura 19 – Diagrama de interação5. O diagrama de colaboração é quase a mesma representação do diagrama de seqüência, sendo a perspectiva a diferença entre eles. Ambos os diagramas apresentam as interações para uma tarefa específica, mas enquanto o diagrama de seqüência procura apresentar a seqüência de interações ao longo do tempo, o diagrama de colaboração apresenta como as interações utilizam a estrutura dos objetos e seus relacionamentos. 6. Diagrama de Estados: esse diagrama apresenta como estímulos externos causam alterações ao objeto durante o seu ciclo de vida. O diagrama de atividades é uma derivação do diagrama de estados, pois Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 53 normalmente estados é um momento da ação, e as transições são normalmente disparadas a partir do término das ações; 7. Diagrama de implementação: é composto por dois diagramas: o diagrama de componentes, que representa as partes de software no ambiente de implementação, e o diagrama de implantação, modela os elementos de hardware do ambiente de implementação. Cada nó no diagrama representa um tipo de hardware, como uma unidade de disco, memória, computador, ou processador. 3.2 VISÃO GERAL DOS DIAGRAMAS DA UML À medida que o sistema é modelado, um conjunto de diagramas é construído e um grande volume de documentações é gerado. Então, o grande desafio é manter uma visão completa da solução, manter um entendimento completo sobre a interdependência dos diagramas e a manutenção das mudanças que ocorrem à medida que os levantamentos são obtidos. Como vimos anteriormente, a UML pode ser dividida em visões. Com esta divisão, poderemos estabelecer o posicionamento dos diagramas e sua aplicação em cada visão, conforme mostra a figura 20. Figura 20 – As visões da UML e os diagramas Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 54 Vários autores buscam apresentar visões mais claras sobre os relacionamentos entre os diagramas da UML, principalmente as influências e definições que são realizadas entre os diagramas. Uma outra forma de agrupamento é representar os aspectos dinâmicos e estáticos do sistema. A condição estática do projeto pode ser representada pelos diagramas de classes, de objetos, de componentes e de casos de uso e a condição dinâmica pode ser representada pelos diagramas de estados, de atividade, de seqüência e de colaboração. Diante disso, podemos obter uma visão mais ampla, segundo Song (2003). Veja na figura 21 os diagramas e relacionamentos da UML. Figura 21 – Visão Geral sobre a UML, seus diagramas e relacionamentos 4 FERRAMENTAS DE MODELAGEM UML Como a UML oferece um conjunto de orientações para a modelagem de sistemas, fazendo uso de uma notação padrão e um conjunto de especificações Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 55 públicas, o uso de ferramentas para a modelagem UML é uma situação comum. Atualmente, existem dezenas de soluções direcionadas para esse fim e muitas oferecem um modelo de licenciamento baseado em software livre. Na Internet, existem vários sites que apresentam análises e sugestões para uma grande variedade de ferramentas, com destaque o site da Wikipedia no seguinte endereço (em inglês): http://en.wikipedia.org/wiki/List_of_UML_tools Finalmente, há também um site com um conjunto amplo de informações: http://www.objectsbydesign.com/tools/umltools_byCompany.html Cada ferramenta oferece um potencial específico para apoiar o processo de modelagem, pois alguns projetos exigem apenas o uso de um modelo e outros, o uso de várias modelos. Algumas vantagens que podem ser obtidas usando uma ferramenta de UML: • A ferramenta pode suportar todos os padrões da UML, inclusive suas regras de semântica, o que garante a geração do modelo dentro das especificações da linguagem; • Geração de código com base nos modelos gerados, acelerando a construção de código de programação. Também permite a geração de modelos a partir de um programa, que é chamada de “engenharia reversa”; • A integração entre os modelos é reforçada, garantindo que nenhuma especificação seja quebrada e acelera a construção dos modelos; • Também através da integração fornece informações relevantes para o gerenciamento do projeto e instrumentos para a condução das atividades de modelagem e construção do programa, inclusive uma ampla documentação dos elementos e de todo o projeto; • Outro aspecto relevante, fornecido pela integração dos modelos de uma ferramenta UML, é a colaboração entre os participantes de uma equipe de desenvolvimento da solução. Várias soluções oferecem excelentes recursos para a colaboração e interação de um modelo sendo utilizado e mantido por várias pessoas, mantendo um controle de segurança, versionamento e registro de alterações; Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 56 • Normalmente, as ferramentas de UML apresentam um repositório de dados, oferecendo uma abordagem segura de informações do projeto e que pode ser compartilhada por vários componentes do processo de construção do programa. Em grandes e complexos projetos, esse tipo de recurso auxilia no controle de mudanças e na dinâmica que a solução pode sofrer. 4.1 FERRAMENTAS GRATUITAS Vamos registrar aqui algumas ferramentas gratuitas para modelagem UML. 4.1.1 Argo UML Ferramenta baseada em Java, apresenta uma solução elegante e gratuita para a construção de diagramas. Para usuários iniciantes e com o objetivo de utilizar uma solução simples, rápida e executada em várias plataformas, é uma excelente opção. Não oferece o nível de poder, suporte a diagramas e integração que as ferramentas proprietárias. http://argouml.tigris.org/ 4.1.2 Violet Ferramenta também baseada em Java, tem uma abordagem mais simples, podendo ser executada utilizando a plataforma “Java Web Start”. Também é uma abordagem simples para a criação de diagramas, mas seu uso é extremamente simples, fácil e rápido. Das ferramentas avaliadas é o pacote de instalação de menor tamanho e de facilidade de execução (figura 22). http://www.horstmann.com/violet/ Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 57 Figura 22 – Ambiente do Violet 4.1.3 EclipseUML O Eclipse é uma solução largamente utilizada por programadores Java. Esse software oferece uma abordagem baseada em integração com várias ferramentas auxiliares, chamadas plug-in, que podem ser integradas ao ambiente de desenvolvimento e facilitar o uso integrado entre as várias faces da construção de programas. Várias ferramentas proprietárias e de software livre oferecem plug-ins para integração com o Eclipse, dentre elas o Rational Rose e o Enterprise Architect. Há também um amplo conjunto de opcões de add-ins em forma de software livre. http://www.eclipse.org 4.2 FERRAMENTAS PROPRIETÁRIAS Apesar de pagas, as ferramentas UML proprietárias oferecem um amplo conjunto de recursos, integrados e ricos em funcionalidades para facilitar a vida do profissional que irá modelar um sistema. Elementos de Programação SOCIESC – Sociedade Educacional de Santa Catarina 58 4.2.1 Rational Rose É uma ferramenta de modelagem, faz parte de uma suite de software da Rational que possui um amplo conjunto de ferramentas para atender a todos os aspectos envolvidos na construção de sistemas (figura 23). Seu foco principal está na abordagem visual para a criação dos modelos e sua completa integração. É a ferramenta mais utilizada para a construção de programas utilizando a UML, mas seu custo e complexidade acabam não facilitando sua adoção. http://www-306.ibm.com/software/rational/
Compartilhar