You are on page 1of 61

ELEMENTOS DE PROGRAMAO

EDIO N 1 - 2007

LARCIO DA CRUZ LOUREIRO ___________________________________________________________________ Apoio Gesto e Execuo Contedo e Tecnologia

Elementos de Programao

SUMRIO
AULA 1 - MANIPULAO DE ARRAYS....................................................................9 AULA 2 - TRABALHANDO COM REGISTROS........................................................21 AULA 3 - PROGRAMAO ORIENTADA A OBJETOS..........................................30 AULA 4 - INTRODUO A UML...............................................................................42

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

Apresentao
Este livro didtico contm a disciplina de Elementos de Programao. O material apresenta aos alunos do EAD um passo adiante na construo 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 nmero de informaes para um bom desempenho como programador. Voc poder concluir que atualmente a atividade de programar computadores uma tarefa ampla, atravs de uma abordagem cada vez mais multidisciplinar e exigindo do profissional uma viso cada vez mais integrada de todos os elementos envolvidos. O principal objetivo deste curso voc obter esta viso ampla (alguns autores referem-se viso holstica). Sero apresentados aspectos importantes que faro uma composio estruturada para uma programao 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 contedo foi revisado com o intuito de oferecer uma linguagem simples, objetiva e estimulante. Lembre-se que a sua passagem por esta disciplina ser tambm 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 dvida ou dificuldade.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

Toda a equipe ter a maior alegria em atend-lo, pois a sua aquisio de conhecimento nessa jornada o nosso maior objetivo. Acredite no seu sucesso e bons momentos de estudo! Equipe Tupy Virtual.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

Carta do Professor
A programao de computadores divertida. Algumas vezes a programao uma cincia elegante. Ela tambm sobre a construo e o uso de novas ferramentas de software. A programao tambm sobre pessoas: qual o problema que realmente o meu cliente espera que eu resolva? Como eu posso fazer isso mais fcil, para que os usurios se comuniquem com o meu programa? A programao tambm me leva a aprender tpicos desde a qumica orgnica at as campanhas de Napoleo. (Bentley, 1988)

Caro aluno,

com esta mensagem que eu desejo iniciar este novo mdulo. Voc estar aqui, significa que j superou os primeiros passos na programao de computadores e concluiu que no to complexa como os outros comentavam. Na verdade, assim como outras atividades em nossa vida, a programao de computadores tornou-se uma cincia elegante, ou seja, possui uma maturidade que nos favorece aprender e criar solues poderosas. Nas primeiras duas aulas deste curso, faremos um avano na lgica de programao, aprendendo a trabalhar com arrays e tambm sobre registros. Esses dois assuntos ampliam a forma como trabalhamos com variveis em nossos programas e permite solues especficas para problemas estruturados mais complexos. A terceira aula que possui uma caracterstica especial: voc ter o primeiro contato com uma nova abordagem na construo de programas, a programao orientada a objetos. Esse assunto recebe uma aura de grande importncia diante dos desafios atuais, mas amplifica as preocupaes dos iniciantes em programao, j que fornece um novo enfoque na interpretao e construo de programas.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

Na aula seguinte, vamos conhecer como representar os programas orientados a objetos, usando uma notao especfica chamada UML (Unified Modeling Language, ou Linguagem Unificada de Modelagem). Assim como vimos a representao de programas em pseudocdigo ou fluxogramas, agora vamos aprender representaes grficas que apiam a modelagem de programas orientados a objetos, bem como, em vrias outras atividades associadas ao desenvolvimento de sistemas. Finalmente, na ltima aula vamos conhecer os componentes na criao de programas para interfaces grficas com o usurio (ou GUI - Graphic User Interface). As interfaces grficas referem-se forma como os usurios interagem com os sistemas operacionais, como Macintosh da Apple sendo o primeiro a implementar de forma mais popular, atravs do MacOS, e depois acompanhado dos sistemas operacionais Windows, Linux e Unix (pelo menos na forma popular que conhecemos hoje as interfaces grficas). Veremos as exigncias de conhecimento para esse tipo de programao e falaremos mais sobre as ferramentas atuais na construo 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 Larcio da Cruz Loureiro

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

Cronograma de Estudo
Acompanhe no cronograma abaixo os contedos das aulas, e atualize as possveis datas de realizao de aprendizagem e avaliaes. Semana
1

Carga horria
4 4 8

Aula
Trabalhando com Arrays Trabalhando com Registros Programao Orientada a Objetos Programao Orientada a Objetos (cont.) Introduo UML

Data / Avaliao
_/_ a _/_ _/_ a _/_ _/_ a _/_ _/_ a _/_ _/_ a _/_

8 16

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

Plano de Estudos
Ementa Continuidade do curso de Lgica de Programao. Arrays, vetores e matrizes. Trabalhar com registros. Programao orientada a objetos, aspectos iniciais e elementos fundamentais. Introduo UML e representao grfica de solues baseadas em objetos. Programao Visual e componentes grficos para a construo de sistemas.

Objetivos da Disciplina

Geral
Continuar os conhecimentos sobre lgica de programao; Compreender as bases da programao orientada a objetos; Obter uma viso geral sobre a notao UML; Conhecer o processo e os componentes na programao visual de sistemas Especficos Aprender como trabalhar com estruturas de programao, com parte das solues baseadas em programao estruturada; Conhecer os elementos principais do desenvolvimento de sistemas orientados a objetos, principalmente no que se refere s formas diferentes para a composio de solues baseadas em computador; Entender e conhecer como um programa orientado a objeto emprega os elementos programao e quais seus benefcios em relao programao estruturada; Aprender os componentes bsicos para a modelagem de sistemas usando a UML. . Carga Horria: 40 horas.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

Aula 1

MANIPULAO 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 Utilizar estruturas de dados nos algoritmos.

multidimensionais (matrizes);

Contedos da aula Acompanhe os assuntos desta aula, se preferir, ao terminar, assinale o contedo j estudado. Introduo s estruturas de dados Arrays Arrays Multidimensionais Aplicao prtica usando array

Prezado(a) aluno(a), seja bem-vindo(a) a nossa primeira aula. Conhea agora novas solues para problemas complexos, que devero ser consideradas em seus algoritmos. Voc ver que array um recurso poderoso e imprescindvel em vrias aplicaes computacionais. Este o primeiro passo no uso de estruturas de dados. Boa Aula!

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

10

1 INTRODUO S ESTRUTURAS DE DADOS Voc j aprendeu que comum na programao de computadores, trabalharmos com variveis na memria. Voc tambm deve recordar que o objetivo de trabalhar com variveis representar informaes armazenadas na memria para uso posterior. Isso significa que ser comum a necessidade de trabalhar com variveis em seus programas, com o objetivo de armazenar dados a partir dos algoritmos construdos. Vamos lembrar a regra de pseudocdigo para a criao e manipulao de variveis, conforme mostra a figura 1.

Figura 1 Regra do pseudocdigo para criao e manipulao de variveis Mas uma varivel pode armazenar apenas um valor por vez, e haver casos que voc precisar armazenar um grande volume de dados na memria. Nesse cenrio, o volume de trabalho e as dificuldades para manipular um grande volume de dados, apenas com variveis, uma atividade que exigir um esforo e uma lgica que dificultaria ainda mais o seu trabalho. Por exemplo, considere que voc precisa trabalhar com uma lista de cinco funcionrios da empresa, o pseudocdigo usando variveis seria:

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

11

Imagine se a lista de funcionrios fosse referente quantidade de 100 pessoas, voc iria ter um trabalho exagerado para declarar e atribuir dados para as variveis e depois seria no mnimo trabalhoso utiliz-las. Ento, com a finalidade de organizar a memria do computador e responder ao desafio acima, voc pode utilizar uma nova forma de representao de dados na memria, as chamadas estruturas de dados. Estrutura de dados apenas um termo tcnico, que se refere a um armazenamento de dados mais eficiente no algoritmo construdo (http://en.wikipedia.org/wiki/Data_structures, acessado em 26/04/2007). Usando as linguagens de programao e os tipos de dados especiais aplicados s variveis, poderemos obter todo o potencial dessa tcnica de desenvolvimento de programas. Os arrays tambm so conhecidos, na teoria de estrutura de dados, como variveis compostas homogneas. 2 ARRAYS Array uma estrutura de dados que representa uma varivel em memria, que ser composta de um conjunto de elementos do mesmo tipo e representada por um nico nome. Para representar um array em pseudocdigo, a linha de comando a seguinte: variavel [tipo de dados] [nome] [dimenso]

Repare que a declarao de uma varivel agora recebe mais um componente: dimenso. Esse componente refere-se ao nmero de elementos necessrios no array para a individualizao de cada informao dentro da estrutura de dados. A ttulo de exemplo, veja, na figura 2, a declarao de array em pseudocdigo: variavel real NotasBimestrais [3] Sendo:

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

12

Figura 2 Detalhes sobre a declarao de um array Nesse exemplo, podero ser armazenadas quatro informaes na mesma varivel. Agora passe para a seo seguinte e vamos explorar em mais detalhes o uso dessa tcnica.

2.1 TRABALHANDO COM ARRAYS Implementar arrays em programao de computadores, segue as mesmas orientaes para trabalhar com variveis, adicionando-se apenas as dimenses envolvidas na operao que est sendo realizada. So trs operaes comuns no uso de arrays: criar um array, armazenar informaes em um elemento do array e recuperar informao de um elemento desejado. Como j vimos na seo O que um array, para criar um array em pseudocdigo, utilize a seguinte declarao: variavel [tipo de dados] [nome] [dimenso]

Vamos agora, olhando a figura 3, avaliar como fica a representao de um exemplo e a estrutura armazenada na memria.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

13

Figura 3 Representao de um array armazenado na memria Cada rea de memria poder armazenar informaes mantendo-se o mesmo tipo de dados. O armazenamento das informaes realizado atravs da seguinte declarao (em pseudocdigo): variavel [dimenso] valor/informao

Ento, o pseudocdigo de exemplo e a representao na memria: NotasBimestrais[0] NotasBimestrais[1] NotasBimestrais[2] NotasBimestrais[3] 7,5 8 6,5 7

Figura 4 Representao de um array na memria com dados armazenados Repare na figura 4, que cada dimenso representada pelo nome da varivel e o ndice da dimenso do array que se deseja armazenar a informao. Na memria, as informaes ficam armazenadas em reas de memria reservadas e associadas ao array. Finalmente, para recuperar a informao de um elemento do array, voc pode utilizar a seguinte representao que, neste caso, escrever o contedo do elemento do array: ESCREVER variavel [dimenso]

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

14

2.2 TAMANHO DE UM ARRAY Repare que no exemplo de array apresentado na seo 2.1, o nmero de elementos na dimenso informado foi 3. Isso significa que o array possui QUATRO elementos, considerando que o ndice inicia em zero. Essa informao extremamente importante para o seu entendimento sobre o uso de arrays, pois existem diferenas em algumas linguagens de programao de mercado. Por exemplo, a declarao de um array em Pascal ou em Visual Basic 6.0 define que o ndice de dimenses inicia em 1. J as linguagens mais atuais como o Java da fabricante Sun e o C# (fala-se c chrp) da Microsoft, incluindo a nova verso do Visual Basic para a nova plataforma de desenvolvimento chamada .NET (alguns autores falam ponto nt outros falam dote nt), iniciam o ndice de dimenses em 0. Neste mdulo estamos utilizando o padro das linguagens mais atuais, com o ndice iniciando em 0 (zero). Como concluso, importante voc entender que o ltimo nmero de um array N, ser sempre N-1, ou seja, se for necessrio um array de 10 elementos, a declarao 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 dimenso, ou seja, representamos apenas um valor entre os colchetes da declarao do array (por exemplo, [2]). Esse tipo de array chamado array unidimensional, tambm conhecido como vetor. Podemos ento definir que um VETOR uma estrutura de dados representada por um array com uma nica dimenso, ou seja, um conjunto de informaes organizado em uma simples coluna ou linha (Microsoft Computer Dicionary, 2002). possvel aprimorarmos ainda mais a tcnica de manipulao de informaes nos algoritmos, usando vrias dimenses. Esse o nosso prximo assunto.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

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 dimenso no suficiente para representar adequadamente a informao no algoritmo. Alm disso, comum desejarmos associar as informaes para a comparao de dados. Veja o exemplo que podemos ter (tabela 1): Tabela 1 Associao de informaes para comparao de dados
Vendas Janeiro $ 1.000,00 $ 2.500,00 Vendas Fevereiro $ 1.100,00 $ 2.200,00

Diante dessa tabela, podemos armazenar as informaes em um array multidimensional, chamado de matriz, considerando sua abordagem baseada no mesmo conceito matemtico de matrizes. 3.1 TRABALHANDO COM ARRAYS MULTIDIMENSIONAIS A nica diferena na declarao de um array multidimensional a agregao de mais um elemento no comando, conforme o comando abaixo em pseudocdigo. variavel [tipo de dados] [nome] [dimenso1 dimenso2 dimensoN] Ento, podemos declarar um array multidimensional para suportar a tabela de vendas exemplo nesta seo usando o seguinte comando: variavel real Vendas[2,2] Depois vamos armazenar os dados atravs dos seguintes comandos: Vendas[1,1] Vendas[1,2] Vendas[2,1] Vendas[2,2] 1000,00 2500,00 1100,00 2200,00

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

16

Na memria, o armazenamento se dar da seguinte forma (figura 5):

Figura 5 Representao de exemplo de array multidimensional

4 APLICAO PRTICA USANDO ARRAY Vamos considerar agora uma abordagem prtica no uso de arrays, com a ferramenta Portugol. 4.1 PROBLEMA Dado um conjunto de 10 idades, calcule e fornea os seguintes resultados: Mdia das idades informadas; Quantidade de pessoas acima da mdia calculada; Quantidade de pessoas abaixo da mdia calculada. 4.2 SOLUO O nmero total de entradas que sero fornecidas informado no problema (10 idades), portanto a lgica para a leitura de dados dever ser controlada por um contador. Vamos utilizar um lao de repetio com contador automtico. Para calcular a mdia, ser necessrio receber todas as idades. Depois vamos comparar cada entrada de idade usando um vetor de 10 elementos. Vamos utilizar dois laos de repetio: um para leitura e soma das idades e o outro para a comparao de cada valor armazenado no vetor com a mdia calculada.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

17

4.3 PROCEDIMENTO 1. Executar o software Portugol; 2. Apague a linha escrever "PORTUGOL IDE 3. Digite o seguinte comentrio:
//L o valor das 10 idades, calcula e fornece a mdia das //idades a quantidade de pessoas acima e abaixo da mdia

6-12-2006";

4. Declare as variveis:
variavel inteiro idades [ 10 ] , contar , total , acima , abaixo variavel real media

5. Inicialize as variveis
total <- 0 acima <- 0 abaixo <- 0

6. Vamos agora declarar o lao de repetio para obter as idades:


para contar de 0 ate 9 passo 1 ler idades [ contar ] total <- total + idades [ contar ] proximo

7. Aps receber a entrada de todas as idades, vamos obter a mdia das idades. Insira o seguinte pseudocdigo:
// Calculando a mdia mdia <- total / 10

8. Vamos agora implementar o lao de repetio para separar as idades informadas abaixo e acima da mdia calculada:
para contar de 0 at 10 passo 1 se idades[contar] > mdia ento acima <- acima + 1 fimse se idades[contar] < mdia ento abaixo <- abaixo + 1 fimse

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

18

proximo

9. Finalmente, vamos apresentar os resultados usando os seguintes comandos:


escrever "Total das Idades: ", total, "\n" escrever "Mdia das Idades: ", mdia, "\n" escrever "Total das Idades Acima: ", acima, "\n" escrever "Total das Idades Abaixo: ", abaixo, "\n"

10. Execute o pseudocdigo 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 cdigo final do programa dever se apresentar conforme abaixo:
inicio //L o valor das 10 idades, calcula e fornece a mdia das idades //a quantidade de pessoas acima e abaixo da mdia 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 mdia mdia <- total / 10 // Agora vamos separar as idades informadas que esto abaixo

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

19

// e acima da mdia para contar de 0 at 10 passo 1 se idades[contar] > mdia ento acima <- acima + 1 fimse se idades[contar] < mdia ento abaixo <- abaixo + 1 fimse proximo escrever "Total das Idades: ", total, "\n" escrever "Mdia das Idades: ", mdia, "\n" escrever "Total das Idades Acima: ", acima, "\n" escrever "Total das Idades Abaixo: ", abaixo, "\n" fim

SNTESE Nesta aula realizamos o primeiro passo para o desenvolvimento de solues mais complexas. O uso de arrays uma abordagem muito comum, principalmente em solues que exigem o tratamento de um grande volume de informaes, apesar de que tambm comum seu uso em pequenas solues. Veja que o array estende as capacidades de manipulao de dados na linguagem e uso, e sua utilizao facilita no tratamento de informaes de forma estruturada. O conhecimento em estruturas mais complexas apenas comeou. Vamos em frente!

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

20

EXERCCIOS PROPOSTOS 1) Defina vetor e exemplifique.

___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________

2)

Qual a vantagem em utilizarmos um array multidimensional?

___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________

3)

Apresente exemplos de declarao para um vetor e de uma matriz.

___________________________________________________________________ ___________________________________________________________________ _______________

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

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 manipulao de registros; Diferenciar array de registro.

Contedos da aula Acompanhe os assuntos desta aula, se preferir, ao terminar, assinale o contedo j estudado. Variveis compostas heterogneas Aplicao prtica 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 informaes 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 construo simples e extremamente poderosa. Mos obra e boa Aula!

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

22

1 VARIVEIS COMPOSTAS HETEROGNEAS Como vimos na aula anterior, um array pode armazenar dados com os mesmos tipos (por exemplo: tipos numricos ou texto), em uma forma de matriz, mas h necessidade de armazenamento de informaes, usando a mesma abordagem de um array, com tipos de dados diferentes. A construo de uma estrutura de dados, na forma de matriz, que permite o armazenamento de diferentes tipos de dados em seus elementos conhecida como varivel composta heterognea. importante ressaltar que esse tipo de estrutura de dados tambm conhecido como registro e cada um de seus elementos so chamados de campos. Esse tipo de abordagem busca associar composio de um registro de informaes, por exemplo: um cadastro de clientes. A figura 7 mostra os campos para que sejam registradas informaes sobre um cliente.
Cadastro de Clientes

Nome Endereo Bairro Cidade Estado Idade

Campos

Salvar

Cancelar

Figura 7 Exemplo de campos para registro de informaes A representao na memria de um registro voc pode visualizar na figura 8.

Figura 8 Representao de registro na memria

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

23

1.1 REPRESENTAO DE UM REGISTRO EM PSEUDOCDIGO Para criar um registro, utilizamos um nome e um conjunto de variveis, especificando o tipo de cada varivel. Vamos avaliar a instruo de pseudocdigo 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 pseudocdigo (figura 9), utilizando como exemplo o Cadastro de Clientes que foi apresentado.

Figura 9 Componentes do pseudocdigo de um registro 1.2 MANIPULAO DE REGISTROS Quando criamos um registro, na memria h uma rea de armazenamento, na forma de matriz, cujo elemento corresponde a um campo do registro. Cada campo

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

24

pode conter tipos de dados diferentes. No exemplo de Cadastro de Clientes, que estamos utilizando, visualizemos a figura 10, para entender como a informao armazenada na memria.

Figura 10 Exemplo de um conjunto de registros Observe que, a cada registro armazenado na memria (ou linha de informao) corresponde um conjunto de dados que esto associados e participam de uma estrutura maior de dados. Outro aspecto fundamental a ser observado que a estrutura de dados armazena as informaes como uma matriz. Por isso, cada linha possui uma referncia numrica na memria, para que possamos encontrar as informaes armazenadas. Em pseudocdigo, para determinarmos o nmero de registros do conjunto de dados e criarmos uma matriz de registros, utilizamos a seguinte instruo: [nome do registro]: [nome da matriz] [dimenses]

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

25

A instruo acima precisa ser informada logo aps a construo do registro. Para recuperar uma informao de determinado campo de um registro em pseudocdigo, voc deve utilizar a seguinte instruo: IDENTIFICADOR[ndice].Campo Identificador o nome utilizado para a criao 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 informaes de um registro Para armazenar uma informao em um registro, em pseudocdigo voc deve utilizar a seguinte instruo: IDENTIFICADOR[ndice].Campo [Valor]

2 APLICAO PRTICA USANDO REGISTROS Usando os conceitos apresentados nessa aula, vamos realizar uma abordagem prtica na construo e manipulao de registros, atravs de pseudocdigo. Infelizmente, a ferramenta Portugol, bem como as demais ferramentas conhecidas

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

26

como Interpretador de Linguagem Algortmica (ILA), no suportam variveis compostas heterogneas. Por isso, neste mdulo vamos construir o nosso pseudocdigo usando o bloco de notas (ou um editor de textos de sua preferncia). 2.1 PROBLEMA Dado um conjunto de 40 registros contendo informaes de alunos, calcular a mdia e a situao desses alunos. O algoritmo dever exibir uma lista dos alunos contendo a mdia e a situao. 2.2 SOLUO O nmero total de entradas que sero fornecidas informado no problema (10 idades), portanto, a lgica para a leitura de dados dever ser controlada por um contador. Vamos utilizar um lao de repetio com contador automtico. Para obter a mdia e a situao dos alunos, primeiramente vamos obter as informaes usando a entrada de dados pelo usurio. 2.3 PROCEDIMENTO 13. Executar o Bloco de Notas; 14. Digite a abertura e fechamento do pseudocdigo:
Inicio Fim

15. Abaixo da instruo Incio, vamos declarar as variveis:


Inicio Reg_Alunos: REGISTRO Texto Nome, Situacao Real Nota1, Nota2, Nota3, Nota4, Media Inteiro Faltas, Contador FIM REGISTRO Fim

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

27

16. Agora vamos declarar a quantidade de registros que sero armazenados na estrutura de dados. Informe a instruo abaixo do texto Fim Registro.
Reg_Alunos:aluno[40]

17. Vamos obter as informaes do usurio:


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 Prximo

18. Agora vamos realizar os clculos necessrios. Insira as instrues acima da palavra Prximo no lao anterior (Item 5), considerando que vamos efetuar o clculo a cada entrada de dados.
Aluno[Contador].Media (Nota1+Nota2+Nota3+Nota4)/4 SE Aluno[Contador].Media >= 7 E Aluno[Contador].Faltas <= 10 ENTO Aluno[Contador].Situacao Seno Aluno[Contador].Situacao FIMSE Reprovado Aprovado

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 Prximo

20. Observe que, na instruo Escrever, h um texto a ser apresentado na tela com a seguinte composio: \nAluno: . Os caracteres \n, no texto, sero interpretados como uma quebra de linha, ou seja, antes de apresentar na tela a informao, ser realizada uma quebra de linha. Tambm observe que a instruo no cabe no leiaute da apostila, por isso o smbolo
,

ao final da primeira linha da instruo Escrever, significando

que uma linha contnua.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

28

SNTESE O conceito de variveis compostas um instrumento de grande importncia na programao de computadores. Primeiro, porque o uso permite realizar um conjunto de tarefas de forma rpida e organizada; segundo, porque permite o armazenamento de informaes de diferentes tipos de dados. Varivel composta , na verdade, uma ampliao das capacidades de um array, este permite o armazenamento de informaes apenas do mesmo tipo; aquela (varivel composta ou registro) permite o armazenamento de informaes com tipos de dados diferentes. Como o processamento das informaes realizado na memria RAM do computador, sua utilizao permite um nvel de resposta de processamento altamente performtico. Ficamos aqui com o final dos tpicos relacionados programao estruturada. Prepare-se que, na prxima aula, voc ter contato com uma nova abordagem de programao, muito poderosa e uma resposta para as complexidades atuais dos negcios. Fique firme na obteno desse conhecimento e nos encontramos na prxima aula. At l.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

29

EXERCCIOS PROPOSTOS 1) Apresente quatro exemplos de aplicao de variveis compostas. ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________

2) Voc responsvel pela construo de um sistema para o gerenciamento de veculos em um estacionamento. Crie um registro para o armazenamento dos dados de cadastro de veculos. ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________

3) Crie um registro que armazene informaes de dados pessoais de uma pessoa. Os dados devero ser: nome, endereo, bairro, cidade, estado e CPF. ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

30

Aula 3

PROGRAMAO ORIENTADA A OBJETOS


Objetivos da aula Ao final desta aula, voc dever ser capaz de: Mostrar diferenas entre a programao estruturada e a programao orientada a objetos; Compreender os motivos que formam a necessidade da adoo da programao orientada a objetos; Conceituar programao orientada a objetos.

Contedos da aula Acompanhe os assuntos desta aula, se preferir, ao termino, assinale o contedo j estudado. O que a programao orientada a objetos? O desafio da OOP A histria da OOP Terminologia Vantagens e Desvantagens

Prezado(a) aluno(a), com grande satisfao que lhe dou boas-vindas a um assunto to instigante: a programao orientada a objetos. Procuraremos, nessa aula, oferecer-lhe uma viso geral do mtodo de programao e buscaremos fazer com que perceba as vantagens de sua adoo. Espero que voc se sinta motivado a absorver estes assuntos to relevantes para suas atividades como profissional. Novamente, bem-vindo(a) e bons estudos.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

31

1 O QUE A PROGRAMAO ORIENTADA A OBJETOS 1.1 A PROGRAMAO ESTRUTURADA E OS NOVOS DESAFIOS EM DESENVOLVER SISTEMAS Como voc deve lembrar, a arte de programar computadores basicamente resolver problemas. Em essncia, a principal funo do programador interpretar adequadamente um problema e apresentar uma soluo, usando um mtodo que possa ser entendido pelo cliente que lhe trouxe o problema, bem como pelo computador. Nesse sentido, vimos que existem duas formas de representao de um programa de computador: O fluxograma, que serve tanto para melhor entendimento do problema junto ao cliente, como para suportar a lgica na construo do programa; O pseudocdigo, para auxiliar na especificao do programa para o programador, com uma abordagem usando uma linguagem comum. O mtodo a que nos referimos at o momento baseado em uma abordagem chamada programao estruturada, que decompe o problema em partes lgicas e estabelece um conjunto de instrues a serem executadas como soluo. As duas grandes vantagens desse modelo so: Maior facilidade na manuteno do programa; Capacidade em localizar problemas e resolv-los de maneira mais simples. medida que o programador desenvolve a soluo, um grande nmero de pedaos de programas construdo e integrado, exigindo controle dos algoritmos e suas interdependncias. Outro problema desse modelo de programao a dificuldade na reutilizao de rotinas, produzindo o que os autores chamam de cdigo espaguete, as interdependncias entre os programas geram um constante Incio e Fim, em uma seqncia procedimental cheia de desvios, laos e elementos condicionais. comum, em caso de alterao de uma instruo, acarretar mudanas em todos os pontos onde a instruo utilizada, gerando uma cascata de alteraes. Devemos ento, considerar quatro aspectos dificultadores no uso da programao estruturada:

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

32

1. Os programas no possuem a capacidade de ser alterados sem a necessidade de abrir o cdigo-fonte, ou seja, os programas no so extensveis; 2. Um programa no pode se basear em outro programa, gerando, na maioria dos casos, construes condicionais em ambos ou at a repetio das linhas de programao. Algumas linguagens mais atuais fornecem alternativas para resolver esse problema; 3. Com o aumento do tamanho e da complexidade das aplicaes, h necessidade constante de otimizao do processo de desenvolvimento de sistemas e as respostas da programao estruturada para os desafios atuais no so mais suficientes; 4. Com o advento do desenvolvimento de sistemas grficos e tambm para a Internet, a abordagem do desenvolvimento estruturado no resolve mais os desafios que as tecnologias atuais impem, exigindo uma nova forma de pensamento e interpretao dos problemas. 1.2 A PROGRAMAO ORIENTADA A OBJETOS nesse contexto que o mtodo de programao orientada a objetos se apresenta: como uma evoluo para os desafios atuais no desenvolvimento de sistemas, oferecendo um arcabouo fundamental para uma nova abordagem de solues computacionais aos problemas. A expresso Programao orientada a objetos pode ser substituda pelo acrnimo POO, ou o que mais comum, usando o acrnimo em ingls OOP (Object Oriented Programming), modo como vamos trat-la daqui por diante. A novidade da OOP est principalmente na reutilizao de programas e em uma modularizao mais suscetvel s dinmicas que as regras de negcio exigem na atualidade. A OOP introduz uma abordagem na qual o programador interpreta o problema e concebe o seu programa como uma coleo de objetos interdependentes, ao invs de procedimentos e funes, cujos objetos se comunicam por mensagens. Cada um dos objetos uma derivao de uma classe e todas as classes formam uma hierarquia no sistema. Uma classe apenas um modelo de objeto.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

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 soluo. Veja que todo problema submetido construo de um sistema envolve uma srie de elementos, por exemplo: equipamentos, veculos e notas fiscais. Esses elementos podem ser representados como objetos cujos atributos podem ser: cor do equipamento, tamanho do veculo e data de emisso da nota fiscal. Desta forma, as rotinas sero representadas e implementadas atravs de classes, ao invs de desenvolver um procedimento para cada uma. Para facilitar ainda esta explicao, vamos considerar o exemplo de registro utilizado na aula passada. O registro de clientes possui uma srie 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 pde perceber, h uma nova forma de trabalhar com a programao de sistemas usando o mtodo de orientao a objetos. Na verdade, hoje, a adoo desse mtodo ainda est longe do que poderia ser aplicado na programao de computadores. Vrios dificultadores acabaram criando certa resistncia na adoo da OOP. Vamos conhecer alguns deles nesta seo. A programao de computadores ainda tratada como algo que de difcil entendimento e de grande complexidade, o mtodo de programao estruturada acabou sendo absorvido ao longo dos anos de estudo e construo de programas, por parte dos programadores. Isso acabou criando uma grande gerao de profissionais que nasceram e cresceram pensando de forma estruturada para resolver os problemas submetidos programao. Quando a OOP tomou fora, com o advento de linguagens populares que suportavam o mtodo, houve um movimento de mudana para os programadores e uma deciso a ser tomada: mudar a maneira de interpretar os problemas e a maneira como as solues eram construdas.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

34

Atualmente, com o advento de linguagens de programao de alto nvel, que facilitam a vida do programador na absoro dos conceitos da OOP, o mtodo acabou recebendo um nmero cada vez maior de adeptos. A linguagem Java pode ser considerada como a precursora desse movimento, trazendo um amplo conjunto de benefcios e totalmente construda usando o mtodo de programao orientada a objetos. Diante desse cenrio, podemos resumir os seguintes desafios para aprendermos OOP: 1. Exige uma forma diferente de como interpretamos os problemas; 2. Exige que a construo dos programas tenha definio tambm diferente do modelo de programao estruturada; 3. Fornece nova forma para apresentar soluo ao usurio, exigindo maior nvel de abstrao; 4. Novos conceitos e formas de construo de programas, com o objetivo de explorar o potencial do mtodo OOP, exigem uma forma diferente de pensar do programador; 5. Alguns preconceitos foram criados contra a OOP como: o esforo necessrio para a construo de sistemas, a construo de recursos mais amigveis ao usurio so trabalhosos demais e algumas promessas do mtodo que acabam na prtica exigindo do programador esforos parecidos como havia na programao estruturada. Hoje, o sentimento de que realmente h preconceitos; antes, o que havia era uma grande falta de domnio sobre a oferta do mtodo e a forma como ele deveria ser utilizado. 3 A HISTRIA DA OOP A origem da OOP remonta a 1966, quando os escandinavos Ole-Johan Dahl e Kristen Nygaard criaram a linguagem Simula para a construo de modelos de simulao. Para obter uma viso histrica desse momento, acesse o site: http://heim.ifi.uio.no/~kristen/FORSKNINGSDOK_MAPPE/F_OO_start.html

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

35

Essa linguagem influenciou a criao do Smalltalk na Xerox, em Palo Alto, Califrnia, nos anos setenta, o que podemos observar em detalhes no seguinte endereo na internet: http://www.smalltalk.org/smalltalk/TheEarlyHistoryOfSmalltalk_TOC.html Posteriormente, a Simula influenciou outras linguagens, ora construdas 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 ABSTRAO DE DADOS Um recurso que recebeu destaque na OOP chama-se programao com tipos de dados abstratos cujos tipos fornecem a implementao dos conceitos da OOP, chamados encapsulamento e modularidade. Como vimos anteriormente, os tipos de dados so utilizados como uma operao comum na programao de computadores. Na declarao de uma varivel, definimos o tipo de dados para armazenamento, delimitando, dessa forma, o conjunto de valores que podem ser armazenados. As linguagens de programao oferecem um conjunto de tipos de dados bsicos e pr-definidos (tambm chamados de tipos primitivos), mas algumas linguagens oferecem a construo de tipos especficos e complexos, so as variveis compostas heterogneas que vimos na segunda aula do mdulo. Esse tipo de dado complexo abstrai os dados armazenados na varivel. Na OOP cria-se um novo tipo de dado chamado objeto, que pode conter, alm de atributos especficos, dados e procedimentos embutidos. Nesse tipo de dado, o programador se preocupa apenas em saber como utilizar os recursos disponveis pelo objeto, sem a necessidade de saber como o objeto foi construdo e como funciona os procedimentos internos. Com essa abordagem, conseguimos obter uma verdadeira abstrao de dados, ou seja, o usurio conhece apenas o necessrio para seu uso, sem precisar conhecer detalhes complexos do objeto.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

36

4.2 ENCAPSULAMENTO A abordagem de programao usando tipos de dados abstratos inclui o conceito de encapsulamento que, basicamente, esconde e protege as informaes contidas no objeto. O encapsulamento consiste em ocultarmos ao usurio o funcionamento interno de uma classe. 4.3 OBJETOS Os objetos so reconhecidos como uma entidade autnoma que combina a representao da informao (estruturas de dados) e meios de sua manipulao (procedimentos), uma vez que possuem capacidade de processamento e armazenam um estado local, usando variveis encapsuladas no objeto. Um objeto composto de: Propriedades: so as informaes, estruturas de dados que representam o estado interno do objeto; Comportamentos: tambm conhecidos como mtodos, que agem sobre as propriedades. Os mtodos so acionados quando o objeto recebe uma mensagem solicitando sua execuo; Identidade: uma propriedade que diferencia um objeto do outro; ou seja, o seu nome. 4.4 MENSAGENS Um objeto sozinho no muito til e geralmente aparece como componente de um grande programa que contm muitos outros objetos. Pela interao 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 trs componentes bsicos: o objeto a quem a mensagem endereada (receptor); o nome do mtodo que se deseja executar; os parmetros (se existirem) necessrios ao mtodo.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

37

4.5 MTODOS Um mtodo 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 mtodo uma funo ou procedimento definido na classe e tipicamente pode acessar o estado interno de um objeto da classe para realizar alguma operao. 4.6 CLASSES Objetos de estrutura e comportamento idnticos so descritos como pertencendo a uma classe, de tal forma que a descrio de suas propriedades pode ser feita de uma s vez, de forma concisa, independente do nmero de objetos idnticos em termos de estrutura e comportamento que possam existir em uma aplicao. A noo de um objeto equivalente ao conceito de uma varivel em programao convencional, pois especifica uma rea de armazenamento, enquanto a classe vista como um tipo abstrato de dados, uma vez que representa a definio de um tipo. Cada objeto criado, a partir de uma classe, denominado de instncia dessa classe. Uma classe prov toda a informao necessria para construir e utilizar objetos de um tipo particular, ou seja, descreve a forma da memria privada e como se realizam as operaes das suas instncias. Os mtodos residem nas classes, uma vez que todas as instncias de uma classe possuem o mesmo conjunto de mtodos, a mesma interface. 4.7 HERANA O mecanismo de herana permite a reutilizao das propriedades de uma classe na definio de outra. A classe mais generalizada chamada superclasse e a mais especializada, subclasse.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

38

4.8 POLIMORFISMO Polimorfismo refere-se capacidade de dois ou mais objetos responderem mesma mensagem, cada um a seu prprio modo. A utilizao da herana torna-se fcil com o polimorfismo. 4.9 SIMILARIDADES ENTRE A PROGRAMAO ESTRUTURADA E A OOP possvel identificarmos similaridades entre a programao estruturada e a programao orientada a objetos, com o objetivo de facilitar o entendimento do conceitos de OOP, observe a tabela 2: Tabela 2 Comparao bsica entre Programao Estruturada e OOP Programao Estruturada Tipos de dados Varivel Funo/Procedimento Chamada de funo Classes Objetos Operao/Mtodo Envio de mensagem OOP

5 LINGUAGENS ORIENTADAS A OBJETOS Nem todas as linguagens de programao do mercado so orientadas a objetos, que uma tcnica de programao, ou melhor, um paradigma para escrever um bom programa cuja finalidade resolver um determinado problema. Ento, para que possamos considerar uma linguagem orientada a objetos, a linguagem dever possuir mecanismos que suportem o estilo de programao que o mtodo OOP apresenta. importante, nesse contexto, voc entender que muitas linguagens se apresentam como baseadas em objetos e outras suportam claramente a orientao a objetos. As linguagens baseadas em objetos suportam recursos que facilitam a construo de sistemas usando a programao estruturada, usando recursos visuais e elementos facilitadores. Um exemplo muito comum a linguagem Visual Basic da

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

39

Microsoft, cuja verso atual, baseada em .NET, oferecia formas de construo que se utilizavam de conceitos baseados em objetos, mas no havia na linguagem suporte aos padres que a OOP oferece. Esse tipo de linguagem e mtodo de programao conhecido como programao orientada a eventos. As linguagens mais populares que suportam efetivamente a programao orientada a objetos so: Java (Pura), C++ (Hbrida), SmallTalk (Pura), Object Pascal (Pura) e C# (Pura). As linguagens consideradas puras, no suporte OOP, nasceram com base nos padres da OOP e as linguagens consideradas hbridas so linguagens que nasceram no modelo de programao estruturada e evoluram para suportar os recursos da OOP.

SNTESE Nesta aula voc percebeu a dimenso da programao orientada a objetos. uma abordagem atual e que atende s demandas atuais do mundo globalizado. O primeiro assunto que abordamos procurou lhe fornecer a percepo das diferenas entre a programao estruturada e a programao orientada a objetos. A programao estruturada possui limitaes para os desafios atuais porque: Os efeitos em cascata so gerados pela modificao de programas; Com a grande quantidade de programas, procedimentos e funes implementados, a localizao de um problema tornou-se algo mais difcil de se resolver; Sees reutilizveis de cdigo de programao so muito difceis de serem construdas. O objetivo da OOP (programao orientada a objetos) desenhar e construir uma soluo baseada nos objetos existentes no problema e no mais atravs de procedimentos e situaes interdependentes. Isso faz com que o programa seja quebrado em mdulos gerenciveis e auto-suficientes. Ento, a OOP permite um programa mais adequado aos desafios que as reas de negcios impem s solues de Tecnologia da Informao. Porque o cdigo de programao criado : Modular; Extensvel;

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

40

Reutilizvel; Mais fcil de manter; Mais simples de depurar.

Como o prprio nome sugere, a programao 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 caractersticas com outros objetos, devido s suas propriedades e comportamentos. As propriedades, tambm conhecidas como estados do objeto, so implementadas pelas variveis e o comportamento do objeto desenvolvido pelos seus mtodos. A reunio dos mtodos e propriedades de um objeto denominada abstrao de dados, pois o usurio do objeto no precisa saber como as propriedades e os mtodos foram construdos, ele precisa saber apenas como utiliz-los. Considerando que uma aplicao poder conter vrios objetos, esses podem relacionar-se uns com os outros. A comunicao que ocorre entre os objetos realizada por mensagens que, por sua vez, so realizadas pelo uso do objeto, da execuo de um mtodo associado ao objeto, e da passagem de informaes para que o mtodo seja executado adequadamente. medida que os objetos so construdos, poder haver similaridades e a OOP oferece o uso de classes para criar estruturas pr-construdas. fazendo uso desse mecanismo de classes que podemos nos utilizar dos recursos de reuso que o mtodo nos oferece. Alm disso, o agrupamento de classes com caractersticas comuns utilizado pela OOP para criar uma hierarquia de classes e com isto estabelecer uma lgica de reuso. As prticas de extenses, sobreposies e de herana se utilizam dessa hierarquia para a construo de novos objetos que, futuramente, se beneficiaro de qualquer mudana que ocorrer na classe superior. A conseqncia no uso dessas prticas 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 so os principais conceitos da OOP que voc precisa levar para as futuras linguagens de desenvolvimento que oferecem suporte ao mtodo.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

41

Na prxima aula, vamos aprender como representar graficamente os sistemas orientados a objetos. At l. EXERCCIOS PROPOSTOS 1) Defina com as suas palavras o que a programao orientada a objetos. ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________ 2) O que encapsulamento? ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________ 3) Podemos afirmar que toda linguagem de programao orientada a objetos? Justifique. ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

42

Aula 4

INTRODUO A UML
Objetivo da Aula Ao final desta aula, voc dever ser capaz de: Explicar a necessidade da modelagem de solues; Comparar a modelagem de sistemas orientados a objetos com Explicar o que a UML e sua histria; Obter um conhecimento essencial sobre os diagramas da UML.

a modelagem de sistemas estruturados;

Contedo da Aula Acompanhe os assuntos desta aula, se preferir, ao terminar, assinale o contedo j estudado. Porque modelar aplicaes 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 construo de sistemas, trazendo novos conceitos, mtodos e prticas na construo de sistemas. Nesse sentido, a representao visual das solues orientadas a objetos tambm precisa de um novo conjunto de prticas para atender s particularidades dessa nova implementao. Nesta aula voc aprender os conceitos bsicos da representao visual de sistemas orientados a objetos, chamada UML. Espero que voc perceba a importncia da modelagem de aplicaes usando UML e receba este primeiro contato como uma alavanca para obter maior conhecimento e domnio da programao
SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

43

orientada a objetos. Desejo-lhe uma excelente aula. 1 PORQUE MODELAR APLICAES Diante da quantidade de detalhes e conhecimentos que o programador precisa manter em mente, podemos afirmar que, semanalmente, novas tecnologias e recursos so disponibilizados pela indstria de software, fazendo com que a experincia e o conhecimento fiquem obsoletos com grande velocidade e facilidade. Modelar uma soluo para um sistema de computador tem como principal finalidade simplificar a realidade (Pencer, 2002), ou seja, fornecer uma representao visual da interpretao de um problema. O ditado popular que uma imagem vale mais que mil palavras a afirmativa que nos remete necessidade da modelagem de aplicaes. Diante das complexidades atuais do mundo dos negcios e da amplitude que um programa de computador pode atingir, fundamental a adoo de uma representao visual da soluo. O modelo de uma aplicao para computador oferece a mesma importncia de um projeto de arquitetura para a construo civil. A aplicao modelada ser um ingrediente fundamental nas relaes entre os profissionais envolvidos na construo do programa, desde o cliente que solicitou a soluo at os programadores que efetivamente iro desenvolv-la. Devemos ainda ressaltar que, no caso de um programa de computador, vrios pontos de vista so necessrios para compreender o modelo apresentado. Dessa forma, significa que um modelo nunca suficiente e podemos utilizar vrios modelos visuais conectados entre si, para tornar possvel entender qualquer aspecto do sistema. 1.1 COMPONENTES DE UM MODELO COMPUTACIONAL A importncia da modelagem de um sistema est baseada nos seguintes elementos: visualizao, especificao, construo e documentao (Pencer, 2002). Visualizao: h uma diferena muito grande entre pensar na soluo de um sistema e sua construo em cdigo de programao. Alguns detalhes

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

44

nos sistemas no podem ser completamente compreendidos sem a construo de um modelo que v alm da frieza dos cdigos de programao. Alm disso, um modelo visualmente representado facilita a comunicao; Especificao: um conjunto de instrues que so definidas junto ao modelo visual, com um nvel de aplicao tcnica para que o programador possa seguir corretamente para a construo do programa; Construo: os atuais pacotes de software utilizados para a modelagem de sistemas fornecem alguma forma de gerao de cdigo de programao, com o objetivo de facilitar e acelerar o processo de construo do programa. Algumas ferramentas, inclusive, permitem a chamada engenharia reversa, que significa a criao automtica de um modelo visual a partir de um cdigo de programao j construdo; Documentao: um dos aspectos mais importantes no desenvolvimento de sistemas a documentao de seus componentes. Alm disso, uma das tarefas mais difceis de se empregar em uma equipe de programadores, pois, normalmente, h preocupao natural com a tecnologia e pouca com a documentao do projeto. Um modelo visual permite que a documentao seja criada e dinamicamente mantida, facilitando o entendimento e as possveis transformaes que o sistema pode receber durante a fase de levantamento e depurao dos programas. 1.2 BENEFCIOS DA MODELAGEM DE APLICAES Diante do que voc leu nos tpicos anteriores, podemos ento resumir os seguintes benefcios na modelagem de aplicaes: Os modelos ajudam na visualizao de como o sistema ou dever ser; Os modelos permitem a especificao da estrutura do programa ou do comportamento de um sistema; Os modelos fornecem guias e orientaes para a construo de um sistema; Os modelos documentam as decises que foram tomadas para o sistema;

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

45

Os modelos fornecem uma linguagem comum que poder ser utilizada por vrios profissionais, contendo vrios pontos de vista, mas mantendo uma viso ampla do sistema todo.

Agora que voc percebeu a importncia da modelagem de aplicaes, vamos conhecer, na prxima seo, a linguagem de modelagem de aplicaes mais utilizadas na atualidade. 2 O QUE UML? A UML um padro para a criao de modelos utilizados na representao de sistemas orientados a objetos e solues complexas de negcios, combinando as melhores prticas de diagramao utilizadas pelos engenheiros de software nos ltimos 40 anos. Na verdade, a UML padroniza os elementos para a representao dos sistemas, mas no determina rigidamente como os modelos so aplicados. Por isso, voc encontrar sua utilizao em reas afins da programao, como na modelagem de banco de dados ou na modelagem de processos de negcios, por exemplo. A UML o acrnimo de Unified Modeling Language, ou Linguagem Unificada de Modelagem. Apesar de haver uma traduo para o padro, seu uso comum UML (fala-se -emi-ele). 2.1 CONHECENDO A HISTRIA DA UML A UML est em desenvolvimento formal desde 1994. a unificao de trs grandes notaes para a especificao de sistemas e foi influenciada por um grande nmero de tcnicas de modelagem, utilizadas nas ltimas dcadas. 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 sua composio. As trs grandes notaes 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 so formas simples de

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

46

entendimento do problema a partir da viso do usurio e objetivando a construo de um sistema (figura 12);

Figura 12 Processo OOSE Tcnica de Modelagem de Objetos, ou Object-Modeling Technique (OMT): desenvolvida por James Rumbaugh, tem como nfase a anlise de negcios e o claro entendimento dos dados utilizados para a definio do problema (figura 13);

Figura 13 Smbolos utilizados na OMT Mtodo de Booch, ou Booch Method: desenvolvida por Grady Booch, tem caractersticas importantes para o desenho e a implementao da soluo, buscando definir e mapear a soluo s necessidades de negcios (figura 14).

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

47

Figura 14 Smbolos utilizados no mtodo Booch Em Outubro de 1994, Booch e Rumbaugh, trabalhavam na Rational Corp. e iniciaram a unificao de seus dois mtodos. Seus esforos geraram uma notao nica e simplificada, usando o melhor de cada uma das suas notaes. Esse perodo considerado como o incio formal da composio da UML e, aps um ano, seus autores publicaram a primeira verso como Unified Modeling Language verso 0.8. Nesse mesmo perodo, a empresa de Ivar Jacobson foi adquirida pela Rational e iniciaram os trabalhos para a integrao da OOSE ao padro UML. O resultado dessa colaborao gerou as verses 0.9 e .9.1, em 1996. Outros padres de mercado existiam na poca e alguns deles eram mantidos pela OMG (Object Management Group), mas a adoo da UML por vrias empresas e instituies acadmicas, fez com que a OMG estabelecesse um consrcio com a Rational e vrias outras empresas, dentre elas a IBM, HP, Microsoft, Oracle e Unisys. Em virtude desse consrcio e da contribuio de vrias especificaes de cada um dos seus participantes, foi publicada a verso 1.0 da UML, em Janeiro de 1997. Vrias revises foram aplicadas UML e muitas verses intermedirias foram publicadas (1.1 at 1.5), mas o mundo mudou muito aps a publicao dessas verses e as mudanas ocorreram fundamentalmente na captura e no mapeamento das necessidades dos sistemas. Alm disso, a UML 1.x foi criada para humanos, ou seja, ela tinha fundamentalmente a busca pelo entendimento do ser humano sobre a soluo que estava sendo desenhada.
SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

48

Ento, a verso 2.0 da UML teve os seguintes objetivos: Aprimorar a linguagem para tornar-se mais fcil de usar, implementar e personalizar; Aumentar o suporte ao desenvolvimento baseado em componentes. Esse tipo de desenvolvimento foi amplamente utilizado aps a publicao das primeiras verses da UML, tendo por objetivo decompor o sistema em componentes lgicos e funcionais; Aumentar a capacidade da linguagem para atender s demandas complexas no relacionamento entre os modelos, atualizar as notaes e a criao de novos diagramas (figura 15).

Figura 15 Histria da UML

3 O MODELO CONCEITUAL DA UML Os autores da UML sugerem que uma aplicao pode ser descrita fazendo-se uso de cinco vises, conforme menciona Bezerra (2002), e cada viso enfatiza aspectos diferentes do sistema a ser construdo. So elas: Viso de casos de uso: descrevem as necessidades do sistema estritamente do ponto de vista externo, apresentando o grau de

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

49

atendimento que o sistema oferece para o usurio. Em resumo, atravs dessa viso que se obtm o entedimento do que precisa ser construdo no sistema, do ponto de vista de como o trabalho realizado hoje ou como dever ser realizado, baseando-se em regras de negcios detalhadas pelo usurio; Viso de Projeto: focaliza a estrutura do sistema e o comportamento de seus componentes, atravs da definio de classes, colaboraes e as interfaces do sistema; Viso de Implementao: tem por finalidade representar os aspectos fsicos do sistema (programas, bibliotecas, banco de dados e etc.), que sero os componentes da montagem final. Tambm acompanha e controla as verses dos elementos e do prprio sistema; Viso de Implantao: representa os recursos fsicos da soluo (hardware), disponibilizao e instalao do sistema, incluindo suas especificaes de integrao com outros elementos de hardware; Viso de Processo: fornece as informaes relacionadas ao processamento do sistema, mais especificamente o desempenho e a escalabilidade, incluindo a capacidade de resposta das demandas de processamento.

Figura 16 Vises da UML importante ressaltar que nem todas as vises precisam ser utilizadas. Seu uso depende do tamanho do projeto, complexidade e exigncias nas especificaes funcionais do sistema.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

50

Para cada viso a UML oferece um diagrama ou notao. Um diagrama uma representao grfica de um conjunto de elementos e so desenhados para permitir a visualizao sob diferentes perspectivas. 3.1 DIAGRAMAS DA UML A UML oferece nove diagramas ou notaes grficas: diagrama de classes, diagrama de objetos, diagrama de componentes, diagrama de implantao, diagrama de caso de uso, diagrama de seqncia, diagrama de colaborao, diagrama de estados e diagrama de atividades. Segundo Furlan (1998), os diagramas da UML possuem uma notao padro e bastante compreensvel que permite abstrair certos aspectos do sistema, ficando, assim, fcil de entend-lo atravs de suas partes. Ao final da modelagem, essas partes se completam e representam o sistema em sua totalidade. So eles: 1. Diagramas de Caso de Uso: um caso de uso, ou situao, aonde o sistema utilizado para atender um ou mais requisitos de negcio do usurio. Segundo Bezerra (2002), esse diagrama molda os requisitos funcionais do sistema. Com o uso desse diagrama desenhamos a necessidade do cliente ou do negcio, utilizando de uma notao padro, conforme mostra a figura 17:

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

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 operaes e os atributos da classe. o principal diagrama da UML, pois todos os demais diagramas obtm informaes a partir do modelo representado nesse diagrama. Veja a figura 18:

Figura 18 Exemplo de Diagrama de Classes

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

52

Enquanto o diagrama de classes apresenta a definio 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 Interao: ajudam a documentar e compreender os aspectos dinmicos do sistema, descrevendo a seqncia de mensagens enviadas e recebidas pelos objetos. Na UML 1.4, os diagramas de interao so referenciados aos diagramas de seqncia e de colaborao. Basicamente, esses dois diagramas descrevem a comunicao entre os objetos para realizar uma determinada ao. Vamos ver na figura 19, um exemplo de um diagrama de seqncia:

Figura 19 Diagrama de interao 5. O diagrama de colaborao quase a mesma representao do diagrama de seqncia, sendo a perspectiva a diferena entre eles. Ambos os diagramas apresentam as interaes para uma tarefa especfica, mas enquanto o diagrama de seqncia procura apresentar a seqncia de interaes ao longo do tempo, o diagrama de colaborao apresenta como as interaes utilizam a estrutura dos objetos e seus relacionamentos. 6. Diagrama de Estados: esse diagrama apresenta como estmulos externos causam alteraes ao objeto durante o seu ciclo de vida. O diagrama de atividades uma derivao do diagrama de estados, pois
SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

53

normalmente estados um momento da ao, e as transies so normalmente disparadas a partir do trmino das aes; 7. Diagrama de implementao: composto por dois diagramas: o diagrama de componentes, que representa as partes de software no ambiente de implementao, e o diagrama de implantao, modela os elementos de hardware do ambiente de implementao. Cada n no diagrama representa um tipo de hardware, como uma unidade de disco, memria, computador, ou processador.

3.2 VISO GERAL DOS DIAGRAMAS DA UML medida que o sistema modelado, um conjunto de diagramas construdo e um grande volume de documentaes gerado. Ento, o grande desafio manter uma viso completa da soluo, manter um entendimento completo sobre a interdependncia dos diagramas e a manuteno das mudanas que ocorrem medida que os levantamentos so obtidos. Como vimos anteriormente, a UML pode ser dividida em vises. Com esta diviso, poderemos estabelecer o posicionamento dos diagramas e sua aplicao em cada viso, conforme mostra a figura 20.

Figura 20 As vises da UML e os diagramas

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

54

Vrios

autores

buscam

apresentar

vises

mais

claras

sobre

os

relacionamentos entre os diagramas da UML, principalmente as influncias e definies que so realizadas entre os diagramas. Uma outra forma de agrupamento representar os aspectos dinmicos e estticos do sistema. A condio esttica do projeto pode ser representada pelos diagramas de classes, de objetos, de componentes e de casos de uso e a condio dinmica pode ser representada pelos diagramas de estados, de atividade, de seqncia e de colaborao. Diante disso, podemos obter uma viso mais ampla, segundo Song (2003). Veja na figura 21 os diagramas e relacionamentos da UML.

Figura 21 Viso Geral sobre a UML, seus diagramas e relacionamentos

4 FERRAMENTAS DE MODELAGEM UML Como a UML oferece um conjunto de orientaes para a modelagem de sistemas, fazendo uso de uma notao padro e um conjunto de especificaes

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

55

pblicas, o uso de ferramentas para a modelagem UML uma situao comum. Atualmente, existem dezenas de solues direcionadas para esse fim e muitas oferecem um modelo de licenciamento baseado em software livre. Na Internet, existem vrios sites que apresentam anlises e sugestes para uma grande variedade de ferramentas, com destaque o site da Wikipedia no seguinte endereo (em ingls): http://en.wikipedia.org/wiki/List_of_UML_tools Finalmente, h tambm um site com um conjunto amplo de informaes: http://www.objectsbydesign.com/tools/umltools_byCompany.html Cada ferramenta oferece um potencial especfico para apoiar o processo de modelagem, pois alguns projetos exigem apenas o uso de um modelo e outros, o uso de vrias modelos. Algumas vantagens que podem ser obtidas usando uma ferramenta de UML: A ferramenta pode suportar todos os padres da UML, inclusive suas regras de semntica, o que garante a gerao do modelo dentro das especificaes da linguagem; Gerao de cdigo com base nos modelos gerados, acelerando a construo de cdigo de programao. Tambm permite a gerao de modelos a partir de um programa, que chamada de engenharia reversa; A integrao entre os modelos reforada, garantindo que nenhuma especificao seja quebrada e acelera a construo dos modelos; Tambm atravs da integrao fornece informaes relevantes para o gerenciamento do projeto e instrumentos para a conduo das atividades de modelagem e construo do programa, inclusive uma ampla documentao dos elementos e de todo o projeto; Outro aspecto relevante, fornecido pela integrao dos modelos de uma ferramenta UML, a colaborao entre os participantes de uma equipe de desenvolvimento da soluo. Vrias solues oferecem excelentes recursos para a colaborao e interao de um modelo sendo utilizado e mantido por vrias pessoas, mantendo um controle de segurana, versionamento e registro de alteraes;

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

56

Normalmente, as ferramentas de UML apresentam um repositrio de dados, oferecendo uma abordagem segura de informaes do projeto e que pode ser compartilhada por vrios componentes do processo de construo do programa. Em grandes e complexos projetos, esse tipo de recurso auxilia no controle de mudanas e na dinmica que a soluo 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 soluo elegante e gratuita para a construo de diagramas. Para usurios iniciantes e com o objetivo de utilizar uma soluo simples, rpida e executada em vrias plataformas, uma excelente opo. No oferece o nvel de poder, suporte a diagramas e integrao que as ferramentas proprietrias. http://argouml.tigris.org/ 4.1.2 Violet Ferramenta tambm baseada em Java, tem uma abordagem mais simples, podendo ser executada utilizando a plataforma Java Web Start. Tambm uma abordagem simples para a criao de diagramas, mas seu uso extremamente simples, fcil e rpido. Das ferramentas avaliadas o pacote de instalao de menor tamanho e de facilidade de execuo (figura 22). http://www.horstmann.com/violet/

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

57

Figura 22 Ambiente do Violet 4.1.3 EclipseUML O Eclipse uma soluo largamente utilizada por programadores Java. Esse software oferece uma abordagem baseada em integrao com vrias ferramentas auxiliares, chamadas plug-in, que podem ser integradas ao ambiente de desenvolvimento e facilitar o uso integrado entre as vrias faces da construo de programas. Vrias ferramentas proprietrias e de software livre oferecem plug-ins para integrao com o Eclipse, dentre elas o Rational Rose e o Enterprise Architect. H tambm um amplo conjunto de opces de add-ins em forma de software livre. http://www.eclipse.org 4.2 FERRAMENTAS PROPRIETRIAS Apesar de pagas, as ferramentas UML proprietrias oferecem um amplo conjunto de recursos, integrados e ricos em funcionalidades para facilitar a vida do profissional que ir modelar um sistema.

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

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 construo de sistemas (figura 23). Seu foco principal est na abordagem visual para a criao dos modelos e sua completa integrao. a ferramenta mais utilizada para a construo de programas utilizando a UML, mas seu custo e complexidade acabam no facilitando sua adoo. http://www-306.ibm.com/software/rational/

Figura 23 Ambiente do Rational Rose

4.2.2 Enterprise Architect Uma excelente opo ao Rational Rose o Enterprise Architect. Seu principal diferencial est na abordagem facilitadora na criao de diagramas, com apelo visual e menor consumo de recursos do computador. Alm disso, possui recursos poderosos para a colaborao dos diagramas entre os integrantes de uma equipe de projeto. Assim como o Rational, possui suporte completo s atuais especificaes da UML. http://www.sparxsystems.com.au/
SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

59

SNTESE Com certeza a UML um assunto amplo, que exige dedicao e estudo especfico e dedicado. Nesta aula tivemos por principal meta lhe oferecer uma ampla viso da modelagem de sistemas usando a UML, apresentando um nvel genrico de detalhes de sua implementao. Reforo que uma notao importante, muito utilizada atualmente, independente das plataformas de tecnologias envolvidas. Lembre-se de que a UML um padro para a modelagem de aplicaes e o conhecimento aqui adquirido poder servir como base para participao de projetos de sistemas orientados a objetos. Modelos so normalmente representados por representaes grficas, usando algum tipo de notao, que define um conjunto de regras na forma de smbolos grficos e conexes visuais. O principal objetivo dos modelos facilitar o entendimento da estrutura complexa de um sistema. Usando modelos tambm conseguimos obter consistncia durante o processo de desenvolvimento, pois estabelecem padres que sero mantidos durante todo o tempo do projeto. Isso particularmente importante, pois a comunicao entre os participantes de uma equipe um dos principais fatores de insucesso de um projeto de software. A UML (Unified Modeling Language) uma notao para a construo de solues orientadas a objetos e consiste em um conjunto de diagramas que representam diferentes vises do projeto de software. Nesta aula obtivemos uma viso geral sobre a UML e seus componentes. Voc pde perceber as vantagens e as facilidades que a notao oferece. Perceba ainda que toda proposta da UML baseia-se em modelos interdependentes, que fornecem elementos visuais facilitadores do entendimento e da conduo de um projeto de software. Chegamos ao final de mais um mdulo. Espero que voc tenha atingido seus objetivos e que utilize os conhecimentos aqui apresentados como um apoio para evoluir o seu domnio sobre o processo de desenvolvimento de sistemas. Um grande abrao e at a prxima. Prof. Larcio da Cruz Loureiro

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

60

EXERCCIOS PROPOSTOS 1) Apresente os mtodos principais que deram a origem para a UML. ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________

2)

Defina com as suas prprias palavras, a finalidade do diagrama de Casos de Uso.

___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________

3)

Descreva com as suas prprias palavras as vantagens da adoo de uma notao grfica para a anlise e construo de software.

___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ ___________________________________________________________________ _______________

SOCIESC Sociedade Educacional de Santa Catarina

Elementos de Programao

61

REFERNCIAS FORBELLONE, A. e EBERSPACHER, H. Lgica de programao: a construo de algoritmos e estrutura de dados. 2.ed. So Paulo: Makron Books, 2000. GILLEANES T. A. GUEDES. UML: uma abordagem prtica. So Paulo: Novatec, 2004. GRADY BOOCH, JAMES RUMBAUGH E IVAR JACOBSON. UML: Guia do usurio. Rio de Janeiro: Campus, 2005. JIM KEOGH, MARIO GRANNINI. OOP desmistificado - programao orientada a objetos. Rio de Janeiro: Altabooks, 2005. LAFORE, ROBERT. Aprenda em 24 horas estrutura de dados e algoritmo. Rio de Janeiro: Campus, 1999. SINTES, ANTHONY. Aprenda em 21 dias programao orientada a objetos. So Paulo: Makron Books, 2002. TOM PENDER. Livro UML a bblia. Rio de Janeiro: Campus / Elsevier, 2004. VILLAS, MARCOS VIANNA. Estruturas de dados - conceitos e tcnicas de implementao. Rio de Janeiro: Campus BB, 1999.

SOCIESC Sociedade Educacional de Santa Catarina

You might also like