Construindo uma aplicação web completa com PHP e MySQL

Page 1

William Pereira Alves

Novatec


© Novatec Editora Ltda. 2017. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Revisão gramatical: Smirna Cavalheiro Editoração eletrônica: Carolina Kuwabata Capa: Carolina Kuwabata ISBN: 978-85-7522-536-3 Histórico de impressões: Janeiro/2017

Primeira edição

Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec


capítulo 1

Definição e gestão de projeto

Objetivos Apresentar os conceitos de projeto, ciclo de vida de um software, Norma NBR ISO/IEC 12207, diagrama de fluxo de dados, medições e análise de riscos. Descrever as fases e atividades que compõem um processo de desenvolvimento de software, além das técnicas de abstração, refinamento e modularidade.

Conteúdo • Definição do conceito de projetos. • Áreas de conhecimento necessárias a uma boa gestão. • Norma Técnica NBR ISO/IEC 12207. • Definição de ciclo de vida de um software. • Fases e atividades relacionadas com o processo de desenvolvimento de um software. • Fases que compõem o ciclo de vida de um projeto. • Definição dos conceitos de abstração, refinamento e modularidade. • Diagrama de Fluxo de Dados. • Conceito de medições, estimativas e análise de riscos.

18


Capítulo 1 ■ Definição e gestão de projeto

19

1.1 Considerações iniciais Antes de iniciarmos nosso estudo sobre desenvolvimento de aplicações para web, é necessário que sejam apresentados alguns conceitos e fundamentos, pois são muito importantes para melhor compreensão dos processos envolvidos em um projeto de desenvolvimento, independentemente de estar direcionado a uma aplicação web ou não. Precisamos saber o que é um projeto e conhecer as técnicas empregadas em sua elaboração e acompanhamento da evolução. Também devemos conhecer as tecnologias envolvidas no desenvolvimento da aplicação web, como linguagens HTML e PHP, servidores web e de banco de dados, além da definição de leiaute com uso de folhas de estilo CSS. Tudo isso veremos neste primeiro módulo do livro, começando com a definição de projetos.

1.2 Conceito de projetos Em nossa vida cotidiana, sempre nos deparamos com alguma atividade que exige um planejamento antecipado. Digamos que você tenha saído em férias e pretenda fazer uma viagem. Você deve, invariavelmente, tê-la planejado muito antes, escolhendo o local para onde irá, qual o hotel ou pousada em que deseja se hospedar, e até mesmo a companhia aérea, caso não vá de carro ou ônibus. Se a escolha for viajar de carro, deverá ainda decidir o melhor trajeto/roteiro, levando principalmente em consideração o fato de haver necessidade de abastecer o veículo durante a viagem. Se você pretende fazer uma reforma em sua casa ou apartamento, deve, em primeiro lugar, prover recursos financeiros. Em seguida, deve decidir o que e como deseja reformar. Então é preciso contratar mão de obra especializada (engenheiro e pedreiro) e comprar o material necessário. Toda essa preocupação para execução de uma atividade, seja a mais simples ou a mais complexa, tem uma razão: obter o resultado desejado sem que haja atraso ou desperdício de recursos. Sendo assim, podemos dizer que um projeto consiste basicamente em um evento com um tempo de duração predefinido e temporário. Em outras palavras, ele tem um início e um fim.


20

Construindo uma Aplicação Web Completa com PHP e MySQL

Um projeto pode durar uma semana, seis meses ou vários anos. Tudo vai depender da sua complexidade e da quantidade de recursos alocados para sua realização. Os profissionais que atuam na área de desenvolvimento de sistemas, sejam softwares de gestão, aplicativos para comércio, jogos ou aplicações web (sites e lojas virtuais), constantemente estão envolvidos em projetos, cuja complexidade e duração podem ser de nível pequeno, médio ou grande. Embora, às vezes, um projeto possa ser executado por apenas uma pessoa, normalmente é empregado um grande número profissionais, cada um com funções já estabelecidas, ou seja, cada pessoa é encarregada da execução de uma atividade/ tarefa específica. O resultado final após a execução de um projeto pode ser um produto novo ou um serviço a ser lançado. Tendo em vista a limitada disponibilidade de recursos (mão de obra, material, equipamento, orçamento), faz-se necessária uma gestão para que o projeto possa ser acompanhado da forma mais minuciosa possível, visando ao uso desses recursos de maneira eficiente para evitar que sejam consumidos em sua totalidade antes mesmo do término do projeto, o que traria prejuízos para a empresa que o está implementando. Por outro lado, um projeto bem planejado e gerenciado resulta em produto ou serviço entregue dentro do cronograma preestabelecido. E por falar em cronograma cumprido, o que, em outras palavras, significa sistema entregue no prazo definido e com qualidade, a administração do tempo é o item que merece mais atenção no gerenciamento de projetos de software. Segundo Pressman (1996, p. 129), “O tempo é o bem mais valioso que está disponível a um Engenheiro de Software”. Sendo assim, você, como desenvolvedor, deve estar preparado para conviver com a pressão de tempo, muitas vezes ocasionada por clientes/usuários que desejam uma solução rápida. Outra causa é a definição de prazos difíceis de cumprir por não refletirem a realidade do problema, ou seja, são muito curtos para um problema muito grande. As áreas de conhecimentos necessárias a uma boa gestão de projeto podem ser classificadas conforme a Tabela 1.1.


Capítulo 1 ■ Definição e gestão de projeto

21

Tabela 1.1 – Áreas de conhecimento para gestão de um projeto de software Área

Descrição

Gerenciamento de integração

Coordena a integração das diversas áreas que estão envolvidas no projeto. Responsável por gerenciar tarefas relacionadas com o que deve ou não fazer Gerenciamento do escopo parte do projeto. Responsável pela administração do tempo na realização das atividades do Gerenciamento do tempo projeto. Controla o uso dos recursos financeiros (orçamento) aprovados para execução Gerenciamento de custos do projeto. Procura garantir que todas as funcionalidades previstas funcionem perfeitaGerenciamento da qualidade mente e apresentem um bom desempenho. Tem como função coordenar a alocação de pessoas para as atividades a serem Gerenciamento dos recursos humanos executadas. Responsável por organizar e distribuir informações entre os membros da Gerenciamento de comunicações equipe de projeto. Procura identificar possíveis riscos que possam ocorrer durante a execução Gerenciamento de riscos do projeto. Responsável pela obtenção de recursos materiais ou de mão de obra para o Gerenciamento de suprimento andamento do projeto.

1.3 Processo de desenvolvimento de software Certamente você já se questionou quais são as tarefas ou atividades envolvidas no processo de desenvolvimento de um software. O software é o resultado de um processo produtivo e embora existam ferramentas capazes de gerar códigos de programas, o envolvimento de pessoas no projeto, produção e posterior manutenção é indispensável. No entanto, o software também pode ser considerado um serviço, tendo em vista que ele não é um objeto concreto, ou seja, o que o cliente recebe do desenvolvedor é um sistema já instalado e totalmente funcional. Para garantir a qualidade do software, existem normas e padrões que fazem parte de um conjunto de documentos elaborados por uma entidade denominada International Organization for Standardization (ISO), que são conhecidos mundialmente como Normas ISO. Essa entidade desenvolveu uma norma denominada ISO/IEC 12207 especificamente para aplicação no desenvolvimento de software. No Brasil, ela foi publicada pela Associação Brasileira de Normas Técnicas (ABNT) com a denominação NBR ISO/IEC 12207.


22

Construindo uma Aplicação Web Completa com PHP e MySQL

Nela estão agrupados diversos processos que são capazes de definir o “ciclo de vida” de um software, mas não estabelece uma ordem para execução de cada um deles. Podemos considerar o ciclo de vida como uma expressão utilizada para definir que um produto ou serviço tem diversas fases no processo de desenvolvimento, como entendimento, construção, implantação e manutenção. A fase de entendimento compreende uma exploração inicial das necessidades que devem ser contempladas pelo sistema. Em outras palavras, é quando se define a solução para o problema. A segunda fase, denominada construção, é responsável pela definição de como a solução deverá ser desenvolvida, ou seja, nela se determina a escolha das ferramentas e linguagens de programação e qual banco de dados deve ser adotado. Já na fase de implantação, após todo o desenvolvimento e testes terem sido executados, dá-se a instalação do software no cliente, ou, no caso de aplicações web, publicação no servidor de hospedagem para colocar à disposição para acesso pelo público. Por fim, temos a fase de manutenção, que corresponde às implementações posteriores ao processo de implantação/instalação, e que podem ser de três tipos: preventivas, quando se detecta algum problema no sistema que pode causar algum transtorno ao cliente, como perda de dados ou geração de resultados inesperados; corretivas, quando se refere a alterações no sistema para corrigir erros detectados após a instalação; e adaptativas, quando as implementações no sistema são efetuadas em função de alguma alteração ocorrida no ambiente. Outro importante ponto presente nessa norma é a estruturação do ciclo de vida em diversos processos que, por sua vez, são formados por um número grande de atividades. Veja na Figura 1.1 o detalhamento dessa hierarquia. Segundo a Norma NBR ISO/IEC 12207, as atividades relacionadas com o processo de desenvolvimento podem ser resumidas em aquisição de conhecimento sobre o produto/serviço, especificação, projeto, construção e teste. A Tabela 1.2 apresenta as fases de cada atividade.


Capítulo 1 ■ Definição e gestão de projeto

23

Figura 1.1 – Hierarquia de processos segundo Norma NBR ISO/IEC 12207. Tabela 1.2 – Fases em que são divididas as atividades Atividade

Descrição das tarefas • Definição do modelo de ciclo de vida. • Documentação de todas as informações levantadas. • Seleção de padrões de desenvolvimento e ferramentas/linguagens de Implementação do processo programação. • Definição, documentação e execução dos planos de desenvolvimento. • Certificar a entrega do software com todas as funcionalidades em perfeito estado de operação. • Especificação dos requisitos do sistema. Análise dos requisitos do sistema • Avaliação dos requisitos para certificar-se de que estão de acordo com a norma técnica. • Definição da arquitetura de alto nível do sistema. Desenho da arquitetura do sistema • Avaliação da arquitetura para certificar-se de que está de acordo com a norma técnica. • Identificação, definição, modelagem e documentação dos requisitos do software a ser desenvolvido. Análise dos requisitos do software • Avaliação dos requisitos do software para certificar-se de que estão de acordo com a norma técnica. • Estabelecer revisões da documentação. • Transformação dos requisitos do software em arquitetura de alto nível. • Elaboração de documentos de alto nível da interface e da base de dados. Desenho da arquitetura do software • Elaboração de versão preliminar do manual de usuário. • Definição dos requisitos para execução de testes de validação.


24

Construindo uma Aplicação Web Completa com PHP e MySQL Atividade

Descrição das tarefas

• Elaboração da documentação que descreve cada componente, a interface com o usuário e a base de dados. Desenho detalhado do software • Atualização da versão preliminar do manual de usuário. • Atualização dos requisitos para execução de testes. • Elaboração da documentação de cada módulo/unidade do software e os procedimentos necessários aos testes de validação. • Atualização que for necessário ao manual de usuário. Codificação e testes • Avaliação do código e dos resultados dos testes para certificar-se de que estão de acordo com a norma. • Elaboração dos planos de integração do software. • Execução dos testes de integração e preparação do documento contendo Integração do software os resultados. • Atualização do manual de usuário se houver necessidade. • Preparação do plano de instalação no cliente. Instalação do software e suporte à • Instalação do software conforme definição do plano elaborado anteriorsua aceitação mente. • Fornecimento de suporte técnico e treinamento dos usuários.

No decorrer dos anos, surgiram diversas propostas de ciclo de vida, sendo o mais conhecido o ciclo de vida básico, também conhecido como ciclo de vida linear ou ciclo de vida em cascata, que se encontra representado na Figura 1.2.

Figura 1.2 – Modelo de ciclo de vida em cascata.


Capítulo 1 ■ Definição e gestão de projeto

25

O ciclo de vida de um projeto pode ser dividido em quatro fases, assim denominadas: • Concepção – Fase em que o projeto tem suas funcionalidades definidas. Compreende, principalmente, as seguintes atividades: definição do problema; identificação das necessidades; definição de objetivos e metas; estudo da viabilidade dos objetivos e metas; definição dos recursos necessários; elaboração de proposta; e decisão se o projeto deve ou não ser executado. • Planejamento – Fase que define como o projeto deve ser executado e quais os recursos necessários. As atividades dessa fase são: detalhamento das metas e objetivos; definição do cronograma das atividades; determinação dos pontos de controle; estabelecimento da utilização dos recursos disponíveis; análise dos riscos; e elaboração do plano geral do projeto. • Execução – A execução propriamente dita fica a cargo dessa fase, assim adequadamente denominada. • Conclusão – Consiste basicamente na implantação do projeto em si, além do treinamento dos usuários envolvidos na utilização do sistema, salvo o caso de aplicações para web. Deve-se ressaltar que o fim de uma fase pode sobrepor ao início de fase seguinte. Veja a Figura 1.3.

Figura 1.3 – Fases de ciclo de vida se sobrepondo.

1.4 Abstração, refinamento e modularidade Um sistema grande e complexo é mais fácil de ser entendido quando decomposto em partes menores, utilizando-se para isso os conceitos de abstração, refinamento e modularidade.


26

Construindo uma Aplicação Web Completa com PHP e MySQL

A abstração consiste na análise do problema sem levar em consideração os aspectos menos relevantes, para que o projetista possa com isso se concentrar naqueles que realmente têm importância para a solução. A maneira mais fácil de entender esse conceito é utilizar um exemplo. Suponha a necessidade de se desenvolver uma aplicação web de e-commerce, para uma livraria, que inclui a baixa de estoque após a concretização da venda. Não é necessário saber todos os detalhes para se efetuar a baixa do estoque. O que precisamos é apenas saber que ao ser emitida a nota fiscal de venda de um livro, o sistema precisa atualizar seu estoque deduzindo a quantidade vendida. Isso é abstração, ou seja, prendemos nossa atenção aos aspectos e fatos mais importantes, deixando de lado o que for irrelevante. Já o refinamento, como o próprio nome sugere, compreende a decomposição do problema em níveis cada vez mais detalhados. Após ser elaborada uma concepção inicial dessas funções, um processo de decomposição desses detalhes funcionais é aplicado até se chegar ao ponto em que seja possível a criação de algoritmos e codificação numa linguagem de programação. Em nosso caso de venda de livro, a função de baixa do estoque pode ser refinada, descrevendo-se todo o processo necessário para que essa operação seja executada. Como exemplo, podemos citar o fato de que o estoque somente pode ser baixado após a emissão da nota fiscal eletrônica (NFe). Isso porque, nesse ponto, o arquivo XML correspondente já foi gerado e autorizado pela Secretaria da Fazenda. Antes do retorno da autorização de uso da NFe, não se pode efetuar a baixa do estoque, pois se a nota fiscal não for autorizada, será necessário retornar o estoque aos valores anteriores. Essa é apenas uma das inúmeras preocupações que o analista deve ter para esse caso em especial. Por fim, temos a modularidade, que é na verdade uma decorrência do processo de refinamento. Isso significa que, após o refinamento, o que temos em mãos são grupos de funções direcionadas à execução de operações específicas. Desse modo, o código final obtido é mais fácil de compreender e, em consequência, dar manutenção futura. A divisão do sistema em funções resulta em diversos módulos com grande coesão e pouca dependência. O desenho do sistema procura identificar como fazê-lo e, segundo Pressman (2006), os estágios ou fases que compõem o projeto de sistemas podem necessitar do desenvolvimento dos seguintes itens: a. Projeto arquitetural do sistema, cujo objetivo é a produção de um modelo conceitual, separado em módulos.


Capítulo 1 ■ Definição e gestão de projeto

27

b. Projeto de interface com usuário. c. Projeto detalhado de cada módulo que compõe o sistema, em linguagem de pseudocódigo, preferencialmente. d. Projeto da estrutura de dados utilizada pelo sistema. Deve-se destacar que a análise e o projeto de sistemas não são uma única atividade, mas duas pertencentes à Engenharia de Software, que, de acordo com Pressman (2006), é uma tecnologia dividida em camadas, sendo a mais externa a que agrupa atividades que permitem unir as outras camadas. A segunda camada compreende os métodos que são utilizados na construção do software. Já a camada mais interna abrange todas as ferramentas utilizadas no apoio ao processo e aos métodos. Veja a representação desse conceito na Figura 1.4.

Figura 1.4 – Camadas da divisão da engenharia de software, segundo Pressman (2006).

1.5 Gestão do fluxo de informações Informações são o bem mais valioso dentro de uma empresa, e o fluxo delas resulta da adoção de políticas organizacionais capazes de criar uma sincronização entre as áreas que compõem essa empresa. Entre essas políticas podemos citar a criação de um mapeamento que identifique as pessoas responsáveis pela produção e uso das informações, além dos métodos utilizados para obtê-las e distribuí-las.


28

Construindo uma Aplicação Web Completa com PHP e MySQL

A produção de um mapeamento de fluxo das informações pode ser realizada por meio de uma técnica denominada Diagrama de Fluxo de Dados (DFD), no qual representamos graficamente os processos que ocorrem na execução das atividades. Na Figura 1.5 podemos ver os símbolos gráficos utilizados na construção de um DFD, nas notações DeMarco/Yourdon e Gane/Sarson.

Figura 1.5 – Símbolos utilizados em Diagramas de Fluxo de Dados.

Cada símbolo gráfico, independentemente da notação adotada, tem uma função específica dentro do diagrama, que pode ser vista na Tabela 1.3. Tabela 1.3 – Descrição dos componentes de um DFD Tipo de símbolo

Descrição da função

Local de processamento dos dados. Utiliza-se um verbo no infinitivo para nomeá-los, como, por exemplo, CADASTRAR CLIENTE. Representam a movimentação dos dados entre os componentes. Para nomeá-lo, utilizamos Fluxos uma expressão simples que identifica os dados do fluxo, como por exemplo, numero_pedido. Qualquer entidade externa capaz de se comunicar com o sistema, podendo ser outros sistemas, Terminadores órgãos do governo, outras empresas ou pessoas etc. Local de armazenamento dos dados, que podem ser resultado da atividade de um processo. São nomeados com um substantivo que possa representar o fluxo de dados, como Produtos Depósitos ou Clientes. Processos

A Figura 1.6 exibe um pequeno exemplo de DFD elaborado utilizando-se a notação DeMarco/Yourdon.


Capítulo 1 ■ Definição e gestão de projeto

29

Figura 1.6 – Exemplo de Diagrama de Fluxo de Dados (DFD).

1.6 Medições e estimativas A medição é um conceito que permite identificar o grau de qualidade do produto/ serviço ou os benefícios que eles podem proporcionar. Dessa forma é possível ter uma ideia se o projeto está caminhando para um final certo ou desejável, comparando o resultado com um valor/índice aceitável. Conforme Pressman (1995), podemos considerar algumas razões que levam à necessidade de se medir um software: a. Verificação da sua qualidade. b. Avaliação dos benefícios proporcionados por ele. c. Formação de linha básica para definição de estimativas. d. Aquisição de novas ferramentas.


30

Construindo uma Aplicação Web Completa com PHP e MySQL

As medidas empregadas pela Engenharia de Software podem ser classificadas em: a. Medidas diretas – A medição é realizada por meio de uma contagem. Exemplo: quantidade de linhas de códigos presentes num determinado módulo do sistema. b. Medidas indiretas – A medição é obtida por meio de cálculos efetuados com as medidas diretas. Exemplo: produtividade de um programador, obtida pela divisão do total de linhas de códigos do módulo em que ele trabalhou pelo total de horas gastas na sua conclusão. Ainda segundo Pressman (2006), podemos considerar cinco atividades existentes em um processo de medição, a saber: a. Formulação – Quando se escolhe uma medida a ser empregada na medição do software. b. Coleta – Técnica utilizada no levantamento dos dados da medição. c. Análise – Execução dos cálculos das métricas utilizando-se ferramentas matemáticas apropriadas. d. Interpretação – Atividade na qual os resultados dos cálculos das métricas são avaliados. e. Realimentação – A partir da interpretação das métricas, ações podem ser recomendadas para aplicação de melhorias no produto final. Ao lado das medições encontramos as estimativas, que podem ser consideradas como projeções de resultados que devem ser esperados. Podemos ter vários tipos de estimativas, como estimativa de custo, que projeta quanto deverá ser gasto num projeto (recursos financeiros) ou estimativa de recursos humanos, que projeta o número de pessoas que devem fazer parte do projeto para que ele possa ser realizado no prazo estipulado e com os recursos financeiros disponíveis.

1.7 Análise de riscos Uma das atividades mais importantes para o bom andamento do projeto é a análise de riscos, que se baseia na realização das tarefas apresentadas na Tabela 1.4. Tabela 1.4 – Tarefas necessárias à análise de risco


Capítulo 1 ■ Definição e gestão de projeto Tarefa

31 Descrição

Identificar os riscos possíveis

Levantamento dos riscos que podem influenciar no andamento do projeto. Também conhecida como estimativa, permite definir a probabilidade de o risco Projetar os riscos identificados ocorrer e as consequências advindas da ocorrência de um risco. Permite processar as informações inerentes ao risco, o impacto que ele pode Avaliar os riscos provocar e sua probabilidade de ocorrência. Com os possíveis riscos identificados, projetados e avaliados, essa tarefa é responMonitorar os riscos. sável pela sua administração e monitoramento.

Conforme Pressman (1996), a identificação de riscos pode ser categorizada da seguinte forma: a. Riscos de projeto – Ocasionados por problemas do processo de desenvolvimento. b. Riscos técnicos – Associados a problemas de implementação, ambientes, codificação, ferramentas etc. c. Riscos de produto – Associados aos problemas que o software pode enfrentar ao ser colocado no mercado. Com os riscos identificados e seus impactos estimados, é hora de avaliar esses impactos quanto ao grau de influência que terão no projeto, assim como a probabilidade de ocorrência desses riscos. No entanto, essa avaliação somente é possível se for adotado um nível de risco que sirva de referência, como custo, prazo e produtividade/desempenho. Todas essas atividades devem ser documentadas em detalhe no que comumente é conhecido como plano de administração e monitoração de riscos, utilizado posteriormente pelo gerente de projetos na elaboração do plano de projeto ao final do planejamento.

Hora de recordar Este capítulo apresentou os fundamentos e a importância da gestão de projetos, os tipos de projetos conhecidos, os conceitos de análise e projeto de sistemas, introdução à norma NBR ISO/IEC 12207 que contém diretrizes para a execução de um bom planejamento/projeto de software. Os princípios de abstração, refinamento e modularidade também foram abordados, assim como as divisões do ciclo de vida de um projeto em suas diversas atividades e tarefas. O próximo capítulo abordará o conceito de modelagem de sistemas.


32

Construindo uma Aplicação Web Completa com PHP e MySQL

1.8 Exercícios 1. Descreva resumidamente a definição de projeto. 2. Cite quatro áreas de conhecimento que devem fazer parte de um projeto. 3. Quais são as fases que compõem o desenvolvimento de um sistema? 4. Quais são as atividades relacionadas com o processo de desenvolvimento de software? 5. Qual é a norma técnica publicada especificamente para servir de orientação e padronização no desenvolvimento de softwares? 6. Cite as fases em que o ciclo de vida de um projeto pode ser dividido. 7. Descreva o seu conceito sobre abstração. 8. Descreva o seu conceito sobre refinamento. 9. Descreva o seu conceito sobre modularidade. 10. O que são Diagramas de Fluxo de Dados e qual a sua utilidade no projeto de sistemas? 11. Qual o objetivo em se utilizar uma medição no projeto? 12. Quais são as tarefas que devem ser realizadas para análise de risco de um projeto?

Para saber mais Engenharia de software: <https://pt.wikipedia.org/wiki/Engenharia_de_software>. NBR ISO/IEC 12207: <https://pt.wikipedia.org/wiki/ISO/IEC_12207>. Modelo em cascata: <https://pt.wikipedia.org/wiki/Modelo_em_cascata>. Qualidade de software: <https://pt.wikipedia.org/wiki/Qualidade_de_software>. Modelos de ciclo de vida: <https://pt.wikipedia.org/wiki/Modelos_ciclo_de_vida>.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.