Issuu on Google+

Arte -Python.pdf

C

M

Y

CM

MY

CY

CMY

K

1

17/04/15

16:14


Distribuição

Lidel – edições técnicas, lda

Sede R. D. Estefânia, 183, R/C Dto. – 1049-057 LISBOA Tel: +351 213 511 448 * Fax: +351 213 522 684 Revenda: revenda@lidel.pt Exportação: depinternacional@lidel.pt Venda online: livraria@lidel.pt Marketing: marketing@lidel.pt Livraria Av. Praia da Vitória, 14 – 1000-247 LISBOA Tel: +351 213 511 448 * Fax: +351 213 173 259 livraria@lidel.pt Edição

FCA – Editora de Informática

Av. Praia da Vitória, 14 – 1000-247 LISBOA Tel: +351 213 511 448 Email: fca@fca.pt Copyright © abril 2015 FCA – Editora de Informática, Lda. ISBN: 978-972-722-813-3 Capa: José M. Ferrão – Look-Ahead Pré-impressão: Alice Simões Impressão e acabamento: Tipografia Lousanense, Lda. – Lousã Depósito Legal N.º 391603/15 Livro segundo o Novo Acordo Ortográfico Todos os nossos livros passam por um rigoroso controlo de qualidade, no entanto, aconselhamos a consulta periódica do nosso site (www.fca.pt) para fazer o download de eventuais correções. Os nomes comerciais referenciados neste livro têm patente registada.  

   Marcas Registadas de FCA – Editora de Informática, Lda. – ®

 

 

®

®

Reservados todos os direitos. Esta publicação não pode ser reproduzida, nem transmitida, no todo ou em parte, por qualquer processo eletrónico, mecânico, fotocópia, digitalização, gravação, sistema de armazenamento e disponibilização de informação, sítio Web, blogue ou outros, sem prévia autorização escrita da Editora, exceto o permitido pelo CDADC, em termos de cópia privada pela AGECOP – Associação para a Gestão da Cópia Privada, através do pagamento das respetivas taxas.


ÍNDICE GERAL AGRADECIMENTOS ........................................................................................... XIII 0. SOBRE O LIVRO ................................................................................................ 1 0.1. A linguagem Python........................................................................................................................... 1 0.2. Organização do livro .......................................................................................................................... 1 0.3. O público-alvo ..................................................................................................................................... 2 0.4. Complementos no site da editora...................................................................................................... 3 0.5. Convenções utilizadas ........................................................................................................................ 3 0.6. Suporte ................................................................................................................................................. 4 1. INTRODUÇÃO ................................................................................................... 5 1.1. Desenvolvimento de software para a web ......................................................................................... 5 1.2. Algoritmia e estruturas de dados ..................................................................................................... 8 1.3. Engenharia de software ..................................................................................................................... 11 1.4. Engenharia web .................................................................................................................................. 15 1.4.1. Concorrência ........................................................................................................................... 17 1.4.2. Número de transações na rede ............................................................................................. 17 1.4.3. Desempenho............................................................................................................................ 17 1.4.4. Disponibilidade permanente ................................................................................................ 18 1.4.5. Orientação aos dados ............................................................................................................. 18 1.4.6. Sensibilidade estética ............................................................................................................. 18 1.4.7. Usabilidade.............................................................................................................................. 19 1.4.8. Evolução contínua do software .............................................................................................. 19 1.4.9. Segurança informática ........................................................................................................... 19 1.5. A web semântica (web 3.0) ................................................................................................................ 20 1.6. Desenvolvimento de software em Python....................................................................................... 23 2. LINGUAGEM DE PROGRAMAÇÃO PYTHON ............................................................... 25 2.1. A evolução da linguagem Python................................................................................................... 26 2.2. Os diferentes paradigmas da programação................................................................................... 26 2.3. Elementos da linguagem de programação Python....................................................................... 29 2.4. Instalação e configuração do ambiente de programação ............................................................. 31 2.5. Utilização de um editor Python ...................................................................................................... 34 2.6. Variáveis, valores e tipos de dados................................................................................................. 41 2.7. Instruções de leitura e escrita .......................................................................................................... 43 2.8. Expressões matemáticas simples .................................................................................................... 44 2.9. Ciclos e estruturas condicionais ...................................................................................................... 45 2.9.1. Estrutura if ............................................................................................................................. 45 2.9.2. Ciclo for .................................................................................................................................. 46 2.10. Módulos e funções .......................................................................................................................... 47 2.11. Vetores e matrizes (arrays) ............................................................................................................. 50 3. ALGORITMOS E ESTRUTURAS DE DADOS EM PYTHON ................................................ 57 3.1. Tipos e estruturas de dados ............................................................................................................. 57 3.2. Processamento de strings ................................................................................................................. 59 © FCA – Editora de Informática


VIII

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB

3.3. Pilhas (stacks) ..................................................................................................................................... 64 3.3.1. Representação de uma pilha ................................................................................................. 65 3.3.2. Operação de inserção (push) .................................................................................................. 66 3.3.3. Operação de eliminação (pop) ............................................................................................... 67 3.3.4. Implementação em Python.................................................................................................... 68 3.4. Filas (queues) ...................................................................................................................................... 70 3.4.1. Representação de uma fila .................................................................................................... 72 3.4.2. Inserção numa fila .................................................................................................................. 73 3.4.3. Eliminação numa fila ............................................................................................................. 74 3.4.4. Implementação em Python.................................................................................................... 75 3.5. Listas encadeadas.............................................................................................................................. 76 3.5.1. Estruturas de dados encadeadas .......................................................................................... 77 3.5.2. Listas em Python .................................................................................................................... 78 3.6 . Estruturas de dados não lineares ................................................................................................... 81 3.6.1. Terminologia e definições para a representação de árvores ............................................. 81 3.6.2. Representação encadeada...................................................................................................... 84 3.6.3. Algoritmos de travessia ......................................................................................................... 86 3.6.4. Inserção ordenada numa árvore binária.............................................................................. 88 3.6.5. Implementação em Python de uma árvore de pesquisa ................................................... 90 3.7. Grafos ................................................................................................................................................. 93 3.7.1. Características de um grafo ................................................................................................... 93 3.7.1.1. Grafo completo .......................................................................................................... 94 3.7.1.2. Grafo conexo .............................................................................................................. 95 3.7.1.3. Grafo não conexo ....................................................................................................... 95 3.7.2. Representação de um grafo ................................................................................................... 96 3.7.2.1. Representação matricial ............................................................................................ 96 3.7.2.2. Representação encadeada ......................................................................................... 96 3.7.3. Algoritmos para travessia de um grafo ............................................................................... 99 3.7.3.1. Travessia (ou percurso) em profundidade (Depth-First-Search – DFS) ............... 99 3.7.3.2. Travessia em largura (Breath-First-Search – BFS) ................................................. 102 3.8. Conjuntos e dicionários em Python .............................................................................................. 105 3.8.1. Manipulação de dicionários em Python ............................................................................ 105 3.8.2. Representação de grafos com dicionários ......................................................................... 109 4. PROGRAMAÇÃO ORIENTADA AOS OBJETOS EM PYTHON ........................................... 113 4.1. Abstração dos dados e a orientação aos objetos ......................................................................... 113 4.2. Design de software com orientação aos objetos ............................................................................ 116 4.2.1. Conceitos e mecanismos orientados aos objetos .............................................................. 117 4.2.2. Análise orientada aos objetos.............................................................................................. 120 4.3. Programação orientada aos objetos .............................................................................................. 122 4.3.1. Classes e objetos em Python ................................................................................................ 123 4.3.1.1. Estrutura de uma classe em Python ...................................................................... 125 4.3.1.2. Especificação de atributos ...................................................................................... 127 4.3.1.3. Comportamentos dos objetos................................................................................. 128 4.3.1.4. Método construtor init ......................................................................................... 130 4.3.1.5. Atributos de classe................................................................................................... 132 © FCA – Editora de Informática


ÍNDICE GERAL

IX

4.3.1.6. Encapsulamento....................................................................................................... 134 4.3.2. Mecanismo de herança ........................................................................................................ 135 4.3.2.1. Herança simples....................................................................................................... 136 4.3.2.2. Herança múltipla ..................................................................................................... 141 4.3.2.3. Polimorfismo ............................................................................................................ 142 4.4. Resumo dos elementos principais da linguagem ....................................................................... 145 4.4.1. Módulos e funções................................................................................................................ 146 4.4.2. Tipagem dinâmica ................................................................................................................ 147 4.4.3. Classes e objetos.................................................................................................................... 147 5. ARQUITETURA DE APLICAÇÕES WEB .................................................................. 151 5.1. Componentes de uma aplicação web ............................................................................................ 151 5.2. Arquitetura em três camadas ........................................................................................................ 152 5.3. Desenvolvimento de bases de dados............................................................................................ 154 5.4. Componentes e ferramentas de desenvolvimento ..................................................................... 154 5.4.1. Ambiente de desenvolvimento de software ....................................................................... 156 5.4.1.1. IDE NetBeans ........................................................................................................... 156 5.4.1.2. IDE Eclipse ............................................................................................................... 157 5.4.1.3. IDE Wingware.......................................................................................................... 159 5.4.1.4. Ferramentas Microsoft para a programação em Python .................................... 160 5.4.2. Servidores web ....................................................................................................................... 161 5.4.3. Linguagens de programação do lado do servidor ........................................................... 165 5.4.3.1. Python ....................................................................................................................... 166 5.4.3.2. Java ............................................................................................................................ 167 5.4.3.3. Ruby .......................................................................................................................... 167 5.4.3.4. ASP.NET e C# .......................................................................................................... 168 5.4.3.5. PHP............................................................................................................................ 169 5.4.4. Linguagens e bibliotecas do lado do cliente ..................................................................... 169 5.4.4.1. HTML5 ...................................................................................................................... 170 5.4.4.2. JavaScript .................................................................................................................. 172 5.4.4.3. Cascading Style Sheets (CSS) .................................................................................... 173 5.4.4.4. jQuery........................................................................................................................ 174 5.4.4.5. AngularJS.................................................................................................................. 176 5.4.5. Gestor de bases de dados .................................................................................................... 177 6. TECNOLOGIAS DE PROGRAMAÇÃO WEB EM PYTHON ............................................... 181 6.1. Programação Python para a web ................................................................................................... 181 6.2. Desenvolvimento de aplicações web ............................................................................................. 183 6.2.1. Instalação da biblioteca CherryPy ...................................................................................... 184 6.2.2. Primeira aplicação web em Python ..................................................................................... 185 6.2.3. Integração de HTML, JavaScript e CSS.............................................................................. 189 6.2.4. Sistema de gestão de ficheiros ............................................................................................ 190 6.2.5. Exemplo de um conversor de unidades de medida......................................................... 192 6.2.6. Exemplo de um sistema de autenticação com login ......................................................... 195 6.3. Persistência e bases de dados ........................................................................................................ 200 6.3.1. Gestão e armazenamento de ficheiros ............................................................................... 201 6.3.2. Motor de base de dados SQLite .......................................................................................... 204 © FCA – Editora de Informática


X

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB

6.4. Processamento de ficheiros XML em Python .............................................................................. 205 6.4.1. Sintaxe XML .......................................................................................................................... 205 6.4.2. XML parser interfaces ........................................................................................................... 206 6.4.3. Parser XML com a API SAX................................................................................................. 208 6.4.4. Parser XML com a API DOM .............................................................................................. 211 7. PYTHON WEB FRAMEWORKS ........................................................................... 215 7.1. Frameworks Python para o desenvolvimento web ....................................................................... 215 7.2. Django web framework ..................................................................................................................... 216 7.3. Instalação da framework Django..................................................................................................... 218 7.4. Criar um projeto Django ................................................................................................................ 220 7.5. Configuração de um gestor de bases de dados ........................................................................... 223 7.6. Servidor de desenvolvimento ....................................................................................................... 224 7.7. Modelos Django e interação com bases de dados ....................................................................... 226 7.7.1. Projetos e aplicações Django ............................................................................................... 227 7.7.2. Criação de uma aplicação (Django app) ............................................................................. 227 7.7.3. Ativação de modelos Django .............................................................................................. 230 7.7.4. Django API ............................................................................................................................ 234 7.7.5. Administração e desenvolvimento web ............................................................................. 236 7.7.5.1. Criação da conta de administrador ....................................................................... 237 7.7.5.2. Servidor web de desenvolvimento ......................................................................... 237 7.7.5.3. Gestão de aplicações (site admin) ........................................................................... 239 7.7.5.4. Desenvolvimento de uma aplicação web .............................................................. 242 7.7.5.5. Django views ............................................................................................................. 245 7.7.5.6. Django templates ....................................................................................................... 249 7.8. Web2py enterprise framework ........................................................................................................ 253 7.8.1. Instalação da framework web2py ......................................................................................... 255 7.8.2. Servidor de desenvolvimento web2py .............................................................................. 257 7.8.3. Interface de administração web2py ................................................................................... 259 7.8.4. Desenvolvimento de aplicações web2py ........................................................................... 262 7.8.4.1. Primeira aplicação web2py .................................................................................... 262 7.8.5. Python in the cloud ................................................................................................................ 270 8. PROJETO DE SOFTWARE WEB .......................................................................... 279 8.1. Especificação dos requisitos do domínio ..................................................................................... 279 8.1.1. Descrição do domínio .......................................................................................................... 279 8.1.2. Requisitos funcionais ........................................................................................................... 280 8.1.3. Requisitos não funcionais .................................................................................................... 281 8.2. Software design e modelo de dados................................................................................................ 283 8.3. Desenvolvimento da aplicação web .............................................................................................. 284 8.3.1. Implementação do software em Django .............................................................................. 284 8.3.1.1. Projeto Django .......................................................................................................... 284 8.3.1.2. Aplicação Django e desenvolvimento dos modelos............................................ 285 8.3.1.3. Django admin site ..................................................................................................... 288 8.3.1.4. Ativação dos modelos Django ............................................................................... 291 8.3.2. Testes à aplicação (protótipo) web ...................................................................................... 293 8.4. Conclusões e considerações finais ................................................................................................ 298 © FCA – Editora de Informática


ÍNDICE GERAL

XI

BIBLIOGRAFIA ................................................................................................. 303 GLOSSÁRIO DE TERMOS – PORTUGUÊS EUROPEU/PORTUGUÊS DO BRASIL ...................... 307 ÍNDICE REMISSIVO ........................................................................................... 309

© FCA – Editora de Informática


0 0.1

SOBRE O LIVRO

1

A LINGUAGEM PYTHON

O desenvolvimento de software está atualmente focado na programação e integração de aplicações para a World Wide Web (web). Este livro tem como principal objetivo apresentar as principais tecnologias e tendências de programação de aplicações web com a linguagem Python. Neste sentido, são apresentadas as principais características da linguagem de programação, incluindo um conjunto de algoritmos e estruturas de dados e os mecanismos de programação orientada aos objetos. A influência e aplicação da linguagem Python tem vindo a crescer em diferentes áreas académicas e empresariais. Globalmente, um número significativo de universidades, incluindo universidades portuguesas, tem vindo a aplicar esta linguagem para introduzir as ciências da computação, a algoritmia, a engenharia de software e a programação de computadores. No contexto empresarial, o Python tem sido aplicado no desenvolvimento de jogos digitais, na construção de aplicações para a gestão de dados científicos e no desenvolvimento de aplicações web.

0.2

ORGANIZAÇÃO DO LIVRO

O primeiro capítulo (“Introdução”) apresenta os fundamentos para a construção de aplicações web, incluindo a arquitetura em camadas para o desenvolvimento e programação de aplicações web com bases de dados, e a área relacionada das tecnologias de programação do lado do servidor. O objetivo principal da introdução é a compreensão dos requisitos e arquitetura de software para o desenvolvimento de aplicações web. Independentemente das linguagens de programação a aplicar, é necessário compreender a integração dos componentes de software para o desenvolvimento de uma aplicação web com ligação a uma ou mais bases de dados. Neste capítulo é também abordada a importância da algoritmia na área das ciências da computação, a evolução da engenharia de software conducente à engenharia web e a nova geração da web: a web Semântica. Nos capítulos seguintes (Capítulo 2 – “Linguagem de Programação Python”, Capítulo 3 – “Algoritmos e Estruturas de Dados em Python”, e Capítulo 4 – “Programação Orientada aos Objetos em Python”) são analisados os principais mecanismos para o desenvolvimento de software com esta linguagem, incluindo algoritmos e estruturas de © FCA – Editora de Informática


2

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB

dados especificados em Python. Dado que a linguagem Python incorpora o paradigma de programação com orientação aos objetos, alguns exemplos (programas) com classes Python são implementados. Em síntese, o segundo, o terceiro e o quarto capítulos focam-se na linguagem de programação Python e nas principais características e técnicas de programação para o desenvolvimento de aplicações. Neste sentido, a linguagem Python é inicialmente apresentada na sua vertente de programação procedimental com um conjunto de algoritmos e estruturas de dados. O Capítulo 4 – “Programação Orientada aos Objetos em Python” – introduz o paradigma de programação com orientação aos objetos. A segunda parte do livro foca-se no desenvolvimento e implementação de aplicações web. O leitor no final do livro será capaz de desenvolver aplicações web em Python com recurso a frameworks existentes e com ligação a bases de dados, incluindo o gestor SQLite. Adicionalmente, poderá desenvolver competências para aplicar boas práticas de construção de software para a web, assim como compreender a arquitetura de software subjacente ao desenvolvimento de aplicações web. O Capítulo 5 – “Arquitetura de Aplicações Web” – apresenta os principais componentes de uma aplicação web com base na arquitetura de software em três camadas. O Capítulo 6 – “Tecnologias de Programação Web em Python” –, por sua vez, dá a conhecer um conjunto de tecnologias de programação para o desenvolvimento de aplicações web em Python. No mesmo sentido,os Capítulos 7 e 8, respetivamente intitulados “Python Web Frameworks” e “Projeto de Software para a Web”, descrevem as principais abordagens e tecnologias para a construção de aplicações web, envolvendo um dos ambientes (web framework) mais aplicados no desenvolvimento de aplicações web com base na linguagem Python: a framework Django.

0.3

O PÚBLICO-ALVO

O público-alvo preferencial são os profissionais e alunos das áreas das tecnologias de informação, da gestão e da engenharia que pretendem desenvolver competências na área do desenvolvimento de software e da programação de aplicações web com a linguagem Python. É desejável que o leitor possua noções de algoritmia e programação de computadores. Contudo, o livro também poderá ser aplicado à introdução das ciências da computação, à algoritmia e estruturas de dados, bem como à referente programação de computadores. Este livro apresenta e aplica as principais técnicas algorítmicas e de programação, e pretende desenvolver novas capacidades para a construção de aplicações web. Com base nas linguagens de programação referidas e nas frameworks associadas, tem também por objetivo incentivar alunos, docentes universitários, profissionais e gestores de sistemas e tecnologias de informaçãoem relação à importância da programação e da engenharia de software para a web, e no desenvolvimento de novas ideias e projetos inovadores nas organizações. © FCA – Editora de Informática


SOBRE O LIVRO

0.4

3

COMPLEMENTOS NO SITE DA EDITORA

Todos os exemplos contidos no livro podem ser descarregados gratuitamente no site da editora em www.fca.pt.

0.5

CONVENÇÕES UTILIZADAS

Ao longo do livro, optou-se por seguir um conjunto de convenções que devem facilitar a interpretação do código. Assim, todos os excertos de código são apresentados no seguinte formato: >>>texto = 'Python Web Programming' >>> texto2 = "Algorithms and Data Structures in 'Python 3.3.5'" >>>print (texto,texto2)

Para além do código, há também comentários ao mesmo, assinalados a cinzento, como ilustrado no exemplo abaixo: EXEMPLO 3.5 Function Pop (ST,TOP) FUNÇÃO QUE ELIMINA (DESEMPILHA) O ELEMENTO DO TOPO DE UMA PILHA QUE É REPRESENTADA PELO VETOR ST. TOP INDICA A POSIÇÃO DO ÚLTIMO ELEMENTO INSERIDO. O ELEMENTO ELIMINADO É DEVOLVIDO AO PROGRAMA (ALGORITMO) PRINCIPAL. 1 [PILHA VAZIA?]

If TOP = 0 Then Write (‘Não existem elementos (stack underflow)’) Return 2 [DECREMENTAR O TOP]

TOP  TOP - 1 3 [DEVOLVER O ELEMENTO ELIMINADO AO PROGRAMA PRINCIPAL]

Return(ST[TOP+1])

E todas as notas e observações importantes poderão ser encontradas no interior de uma secção semelhante à seguinte: Nota importante sobre um tópico.

© FCA – Editora de Informática


4

0.6

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB

SUPORTE

Este livro foi escrito durante o ano de 2014 e início de 2015 com a versão 3.3.5 da linguagem Python e com a versão 1.8 (última versão de desenvolvimento referente a março de 2015) da framework web Django. No âmbito da sintaxe e dos construtores aplicados, a linguagem Python apresentada neste livro não sofrerá qualquer alteração. Se, por acaso, o leitor encontrar informação que lhe pareça incorreta ou incoerente por algum motivo, ou se tiver sugestões em relação ao conteúdo, então, poderá enviar um e-mail com as suas questões para jbraga@acm.org. Eventuais atualizações serão publicadas no site da editora, em www.fca.pt.

© FCA – Editora de Informática


1

INTRODUÇÃO

1

A fundamentação deste livro tem por base a importância das aplicações web no contexto da indústria de desenvolvimento de software. As aplicações na web estão em crescimento exponencial. Para facilitar o seu desenvolvimento, têm surgido diferentes abordagens, frameworks e ambientes de desenvolvimento entre as linguagens de programação existentes para o desenvolvimento de software. Neste livro focamos uma das linguagens que teve mais crescimento nos últimos anos: a linguagem Python. A grande versatilidade do Python e das frameworks associadas permitem o desenvolvimento de aplicações web mais complexas e de grande dimensão, tendo em conta os requisitos atuais de transações na web.

1.1

DESENVOLVIMENTO DE SOFTWARE PARA A WEB

Uma aplicação web envolve um conjunto de recursos que necessitam de ter uma perspetiva holística, distribuída por diferentes camadas. Uma aplicação web não é um simples artefacto de software. A arquitetura tem subjacente diferentes camadas (Figura 1.2) de forma a integrar diferentes visões e requisitos do servidor, da lógica da aplicação, da base de dados e do cliente, através do seu browser. Uma parte dos componentes de software reside no servidor e outra parte reside no computador (cliente) do utilizador. Existe uma camada intermédia, designada por middleware (Figura 1.1), que reflete os componentes entre o servidor e o cliente que permitem a comunicação entre ambos.

FIGURA 1.1 – Arquitetura geral de uma aplicação web

Com base na figura (simplificada) anterior podemos concluir que uma aplicação web é uma infraestrutura de componentes de software. Consiste de partes (software) que residem no servidor e de outras partes que residem no computador do utilizador, normalmente designado por cliente (web browser). Neste sentido, existem linguagens de programação do lado do cliente (client-side), como é o caso do JavaScript, e linguagens do lado do servidor (server-side), como é o caso das linguagens Python, Java e C#. Ambas as partes (cliente e servidor) são importantes. Por um lado, o servidor assegura a gestão (pedidos do cliente e respostas do servidor) dos dados e implementa a lógica da aplicação

© FCA – Editora de Informática


6

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB

web. Por outro lado, os dados são visualizados através da aplicação web executada através do browser do cliente e das respetivas interfaces e controlos (user controls) do utilizador. O desenvolvimento de software para a web e consequente programação e integração de recursos tem sistematicamente presente a gestão da interação entre as diferentes camadas (layers) de aplicação web. Temos a programação do código do cliente, a programação do código do servidor que determina a lógica da aplicação, e temos ainda a programação do código que estabelece a ligação (middleware) às bases de dados. Deste modo, a conceção e desenvolvimento para a web efetua a integração de diferentes linguagens, de modo a manipular os diferentes requisitos de programação das diferentes camadas da aplicação. Em síntese, o desenvolvimento de software para a web envolve a manipulação e interação de recursos entre a base de dados, a lógica da aplicação, o servidor web e o cliente (browser). Como abordagem para o processo de construção da aplicação web, podemos focar-nos nas diferentes camadas no sentido de efetuar as escolhas (tecnologias de programação) adequadas com base nos requisitos definidos. Quando nos focarmos no cliente e pretendermos uma interface web mais sofisticada (design), podemos aplicar a linguagem JavaScript com a biblioteca jQuery em conjunto com a linguagem de marcação HTML5. Quando nos focarmos no lado do servidor, um aspeto essencial é a definição da linguagem de programação, a qual irá refletir outras escolhas, como é o caso do ambiente de desenvolvimento e do motor de base de dados. Neste livro aplicamos a linguagem Python para representar a lógica da aplicação e efetuar a gestão e interação (Figura 1.2) entre as diferentes camadas (layers) referidas anteriormente. Após enfoque nas partes cliente e servidor, é necessário definir a arquitetura dos componentes de modo a tomar decisões relativas às tecnologias de programação e gestão de bases de dados. Os principais componentes (Figura 1.2) do lado do servidor asseguram os dados (gestor de bases de dados e ficheiros); o código-fonte da aplicação; e os serviços web para a comunicação com o cliente. O navegador (browser) executa e visualiza a aplicação no lado do cliente. Este processo é composto por um conjunto sistemático de tarefas: Aceder a dados do servidor e estruturar o conteúdo através de ficheiros HTML; Executar código (por exemplo, JavaScript) do lado do cliente para melhorar a interface (design) com o utilizador e a apresentação de informação, assim como efetuar validações aos dados (client-side) para evitar desnecessárias chamadas ao servidor.

© FCA – Editora de Informática


INTRODUÇÃO

Servidor Servidor  Web 

Lógica da  Aplicação 

Base de  Dados 

7

Cliente (browser) Extração  (information retrieval)  Apresentação  da informação Interface com   o utilizador 

FIGURA 1.2 – Interação entre o cliente e o servidor

Uma vantagem visível do facto de nos focarmos nas diferentes camadas é a manutenção do sistema de software. Se porventura for necessário alterar a linguagem do lado do servidor para, por exemplo, Java, não necessitamos de alterar a arquitetura e as linguagens implementadas no lado do cliente. A próxima figura apresenta a arquitetura geral e resume os principais componentes e tarefas de uma aplicação web. Cada camada de software define um conjunto de funcionalidades. No âmbito do hardware, o qual não é objeto de análise específica neste livro, também existem diferentes configurações para a implementação de uma aplicação web. Outro aspeto importante nesta arquitetura são os componentes de rede (computer networking), os quais não são objeto de análise neste livro, que se foca essencialmente no desenvolvimento de software para a web. No caso de uma aplicação de grande dimensão, normalmente existem diferentes servidores (computadores e dispositivos de memória secundária) para acomodar as diferentes camadas. É usual existir uma máquina dedicada ao servidor web e aplicação e outra máquina para o servidor de bases de dados. Nos próximos exemplos, por se tratar de aplicações simples, as diferentes camadas serão suportadas pelo mesmo computador. Em muitos casos, incluindo aplicações de médio porte, o código referente à lógica da aplicação faz parte da infraestrutura (Figura 1.3) de software do servidor web.

© FCA – Editora de Informática


8

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB

FIGURA 1.3 – Diferentes camadas (layers) de uma aplicação web

1.2

ALGORITMIA E ESTRUTURAS DE DADOS

A especificação de algoritmos para a resolução de problemas do mundo real é uma atividade intelectual subjacente ao processo de desenvolvimento de software. Com base no conhecimento e requisitos de um determinado domínio, a abordagem algorítmica tem fundamentalmente três passos e dimensões: 1)

2)

3)

Descrever de forma estruturada o problema. Este passo envolve capacidades cognitivas de aquisição (e eliciação) de conhecimento, formação de conceitos, assim como tarefas de explicitação. Desenvolver e especificar um esquema mental (modelo) para a resolução do problema. Este passo envolve essencialmente tarefas de modelação, representação de dados e raciocínio. Especificar (pseudocódigo e/ou linguagem de programação) a solução. Este passo envolve competências de raciocínio lógico (matemático) e representação (e manipulação) de estruturas de dados.

No âmbito do processo de design e construção de software, a algoritmia e a engenharia de software são disciplinas relacionadas. A algoritmia é uma disciplina basilar na área das ciências da computação (Tremblay & Sorenson, 1984; Cormen et al., 2003; Braga de Vasconcelos & Carvalho, 2005) e o seu entendimento poderá ser muito relevante no desenvolvimento de competências noutras áreas do conhecimento. Um programa de computador não existe sem um algoritmo associado e especificado. As aplicações de © FCA – Editora de Informática


LINGUAGEM DE PROGRAMAÇÃO PYTHON

2.3

29

ELEMENTOS DA LINGUAGEM DE PROGRAMAÇÃO PYTHON

O Python é uma linguagem multiparadigma e tem uma sintaxe simples e de alto nível, muito próxima da linguagem natural. Neste sentido, tem uma componente sintática clara e de fácil leitura e interpretação. Adicionalmente, assegura um conjunto de mecanismos de programação avançados para a implementação de algoritmos e consequente resolução de problemas, razão pela qual várias empresas multinacionais aplicam esta linguagem no desenvolvimento dos seus produtos e serviços, tais como a Google, a NASA e a Yahoo. O Python é uma linguagem não “tipada”, ou seja, aplica uma “tipagem” dinâmica (dynamic typing) na manipulação de variáveis. A tipagem dinâmica é uma característica de algumas linguagens de programação que não necessitam de declarações explícitas de tipos de dados. Deste modo, estas linguagens aplicam tipos de dados dinamicamente para cada variável, sendo possível alterar os tipos durante a especificação e execução dos programas. Por outro lado, temos as linguagens de programação com tipagem estática (static typing), as quais exigem a declaração explícita das variáveis, como é o caso das linguagens C, C++, Java e VBasic. A linguagem Python tem associado vários ambientes de desenvolvimento de software (IDE). Os IDE Python (ver próxima secção) contêm um conjunto integrado de ferramentas de software para facilitar o desenvolvimento, teste e execução dos programas. Um IDE Python contém um editor para criar e atualizar o código-fonte, um interpretador para executar os programas (código) e um corretor de erros (debugger) para auxiliar no desenvolvimento e correção de erros de sintaxe e de execução (run time). Um IDE Python contém também uma linha de comando designada por Python shell para o desenvolvimento interativo de código e funções Python. A linguagem Python foi criada e desenvolvida por Guido Van Rossum (investigador e professor na área das ciências da computação). Python é uma linguagem de altíssimo nível (Very High Level Language), orientada a objetos e com tipagem forte e dinâmica, isto é, não existe declaração explícita de variáveis e pode conter diferentes objetos. O Python é uma linguagem modular, multiplataforma, e de fácil aprendizagem. A sua implementação não está sujeita a licenças de software.

Os próximos pontos resumem a linguagem Python no sentido de iniciar a escrita de programas simples. Em primeiro lugar, a noção de variável (variable) de modo a permitir a entrada (input), o processamento de dados e a saída (output) de resultados e, posteriormente, a forma simples de processamento (cálculo) numérico de dados. Neste contexto, a variável é um dos principais conceitos de algoritmia e programação. Uma variável tem uma designação (nome) e tem atribuído um valor, conforme apresenta o próximo exemplo (Exemplo 2.1).

© FCA – Editora de Informática


30

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB EXEMPLO 2.1 >> num = 15 # a variavel num toma o valor 15 >> num = num * 34 >> print (num)

O símbolo ‘#’ permite especificar comentários no código-fonte. À variável num é atribuído o valor 15 e posteriormente é efetuado um cálculo aritmético e visualizado (print) o resultado 170 (conteúdo final da variável num). Conforme qualquer outra linguagem de programação, o Python contém os operadores aritméticos básicos: adição (+), subtração (-), multiplicação (*), divisão (/) e exponenciação (**). Com exceção da exponenciação, os operadores computacionais Python têm a mesma sintaxe dos correspondentes operadores matemáticos. Uma forma simples de efetuar a leitura de dados de entrada é através da instrução input, conforme indica o próximo exemplo (código e resultados). EXEMPLO 2.2 >>> pnome = input('Insira o seu primeiro nome: ') Insira o seu primeiro nome: António

>>> print (pnome) António

>>> unome = input('Insira o seu último nome: ') Insira o seu último nome: Alves

>>> nome = pnome + " " + unome >>> print (nome) António Alves >>>

Os carateres entre plicas representam strings. Neste caso o operador ‘+’ tem o significado de concatenação de strings. Outras operações de processamento de strings serão efetuadas posteriormente noutros exemplos e código-fonte. Para visualizar dados (output, saída de resultados), podemos utilizar a instrução print. Para finalizar este resumo dos elementos essenciais da linguagem e ambiente Python, temos um componente (Figura 2.4) fundamental para a programação e integração de recursos: a biblioteca de módulos predefinidos (Python Standard Library) que contêm um conjunto de funcionalidades essenciais ao desenvolvimento (programação) de software, tais como o módulo de matemática (math), que contém as funções matemáticas (lógicas, trigonométricas, algébricas e aritméticas), ou o módulo random, que contém funções para a geração de valores aleatórios. © FCA – Editora de Informática


LINGUAGEM DE PROGRAMAÇÃO PYTHON

31

FIGURA 2.4 – Biblioteca de software (Python Standard Library)

Outros módulos mais específicos permitem o desenvolvimento de software em determinadas áreas de aplicação, como é o caso do módulo Pygame para a programação de jogos. A instrução import é utilizada no início (cabeçalho) dos programas Python, de modo a referenciar os módulos de funções aplicados durante o processo de codificação. Como vamos ver e aplicar posteriormente, também podemos criar os nossos módulos de funções, de forma a reutilizar código e funcionalidades ao longo do repositório de software e referente processo de construção e programação. Python é uma linguagem de aplicação geral utilizada em diversos tipos de problemas e áreas de conhecimento. Ultimamente tem sido aplicada no desenvolvimento de aplicações web. A biblioteca padrão (Python Standard Library) inclui módulos para processamento de texto (strings) e expressões regulares, protocolos de rede (HTTP, FTP, SMTP, POP, IMAP), acesso a serviços do sistema operativo, segurança, criptografia, interfaces gráficas, entre outras bibliotecas de módulos Python.

2.4

INSTALAÇÃO E CONFIGURAÇÃO DO AMBIENTE DE PROGRAMAÇÃO

A instalação do ambiente Python é muito simples. O editor e interpretador Python pode ser instalado nos sistemas operativos mais utilizados: Windows, Linux e Mac OS. Neste sentido, é necessário selecionar, efetuar o download e executar o ficheiro de instalação (software) adequado do sítio oficial www.python.org (Figura 2.5). Depois de instalado, o interpretador é um programa que entende e executa as instruções Python especificadas pelo programador. © FCA – Editora de Informática


32

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB

FIGURA 2.5 – Sítio web oficial da linguagem Python

Os próximos passos dizem respeito à instalação do ambiente Python para o sistema operativo Windows. Contudo, para os restantes sistemas, o processo é idêntico e igualmente simples. O primeiro passo deverá ter em conta a seleção da última versão de instalação, de modo a utilizar a versão mais atual e estável. Os próximos pontos resumem o processo de instalação do ambiente (Python IDE) designado por Integrated DeveLopment Environment (IDLE):

1)

Download do ficheiro de instalação (Figura 2.6).

2)

Executar ficheiro e instalar o ambiente.

3)

Abrir o ambiente IDLE (Python 3.3.5 -> IDLE (Python GUI)).

4)

Efetuar um teste de modo a verificar o sucesso da instalação.

A comunidade (organização) de programação Python é muito dinâmica. Diferentes versões do ambiente Python foram lançadas desde a sua criação e primeira versão oficial em 1991:       …

Python 0.9.0 - fevereiro 1991 Python 1.0 - janeiro 1994 Python 1.5 - dezembro 1997 Python 1.6 - setembro 2000 Python 2.0 - outubro 2000 Python 2.1 - abril 2001

© FCA – Editora de Informática

      

Python 2.7 - julho 2010 Python 3.0 - dezembro 2008 Python 3.1 - junho 2009 Python 3.2 - fevereiro 2011 Python 3.3 - setembro 2012 Python 3.3.5 - março 2014 Python 3.4 - março 2014


3

ALGORITMOS E ESTRUTURAS DE DADOS EM PYTHON 3

A linguagem Python contém um conjunto de instruções para a manipulação de estruturas de dados simples e compostas (lineares e não lineares), tais como vetores e matrizes (arrays), pilhas (stacks), filas (queues), listas (lists), árvores binárias (binary trees) e grafos (graphs). Incluem-se também neste capítulo as strings como exemplo de um array de carateres alfanuméricos. As próximas secções contêm um conjunto de algoritmos e respetivos programas em Python, com aplicação destas importantes estruturas de dados, fundamentais para o desenvolvimento de software e resolução de problemas. Algumas destas estruturas de dados também serão representadas no próximo capítulo, através de classes com base na utilização da linguagem Python, sob o paradigma de programação com orientação aos objetos.

3.1

TIPOS E ESTRUTURAS DE DADOS

O Python é uma linguagem não tipada, na medida em que podemos utilizar variáveis sem uma declaração prévia do respetivo tipo de dados. Contudo, a compreensão e aplicação de tipos e estruturas de dados é igualmente importante na linguagem Python como em qualquer outra linguagem de programação (tipada). Uma estrutura de dados define a forma como os dados de um algoritmo são relacionados e agrupados de modo coerente (Braga de Vasconcelos & Carvalho, 2005). Estruturas de dados primitivas definem dados como uma ou mais instâncias de tipos de dados atómicos. Estruturas mais complexas (não primitivas) apresentam organizações mais complexas de dados, como por exemplo estruturas de dados que referenciam outras estruturas. Os tipos de dados primitivos permitem manipular valores atómicos, como valores booleanos, numéricos e alfanuméricos. As próximas secções apresentam um resumo dos tipos de estruturas de dados primitivos: tipo booleano (ou binário), tipo numérico (inteiros e reais) e tipo alfanumérico para o tratamento de cadeias de carateres (strings) e respetivo tratamento de texto. A Figura 3.1 ilustra as principais estruturas de dados.

© FCA – Editora de Informática


58

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB

FIGURA 3.1 – Estruturas de dados (Braga de Vasconcelos & Carvalho, 2005)

A algoritmia centra-se na forma como representamos entidades e objetos reais através de estruturas de dados e não na forma como os armazenamos fisicamente na memória do computador. A definição das estruturas de dados a utilizar por um algoritmo também deverá ter em atenção as operações a executar sobre os dados. Diferentes operações podem ser executadas, tais como operações para criar, alterar e eliminar estruturas de dados; operações para inserir, alterar e eliminar elementos das estruturas de dados; e operações para aceder a elementos da estrutura de dados. Em síntese, uma eficiente manipulação das estruturas de dados associadas à resolução de um problema e consequente construção de um algoritmo envolve uma análise das seguintes questões: Compreender a relação entre os dados; Compreender a gestão das estruturas dos dados e dos dados em memória (primária e secundária); Decidir operações a executar nos dados logicamente relacionados; Representar os elementos dos dados; Manter as relações lógicas entre os dados; Executar de forma eficiente as operações sobre os dados;

© FCA – Editora de Informática


ALGORITMOS E ESTRUTURAS DE DADOS EM PYTHON

59

De um modo geral, especificar os algoritmos e as estruturas de dados e implementar numa linguagem de programação da forma mais natural e expressiva possível. As estruturas de dados primitivas definem dados como uma ou mais instâncias de tipos de dados atómicos. As estruturas complexas (não primitivas) apresentam organizações mais complexas de dados, como por exemplo estruturas de dados que referenciam outras estruturas. Assim, temos os seguintes tipos de dados (primitivos) para a manipulação de estruturas de dados: Tipo de dados booleano – Este tipo é aplicado em situações reais que unicamente denotam dois estados possíveis: verdadeiro (true) ou falso (false). Estes dois estados também podem ser representados através dos valores 0 (false) ou 1 (true); Tipo de dados numérico – Este tipo é representativo de valores numéricos no domínio dos números inteiros e reais. De uma forma simples, os tipos de dados numéricos dividem-se em tipos inteiros e tipos reais; Tipo de dados alfanumérico – O tipo de dados alfanumérico é constituído por uma sequência de carateres contendo letras, dígitos e símbolos especiais. A próxima secção apresenta um conjunto de instruções, funções, operações e algoritmos para o processamento de cadeias de carateres (strings) em Python.

Os tipos de dados numéricos dividem-se em tipos inteiros e reais. Os tipos de dados reais são normalmente designados por números de vírgula flutuante (float point numbers). Estes três tipos de dados (lógicos ou booleanos, numéricos e alfanuméricos) são considerados primitivos porque estão incorporados nas linguagens de programação. Atualmente, uma parte significativa dos tipos de dados não primitivos (complexos ou compostos), como um array, lista ou pilha, está também incorporada no núcleo das linguagens de programação. Ainda temos os tipos de dados definidos pelo utilizador que serão alvo de análise e aplicação no capítulo referente à programação orientada aos objetos, e subsequentes.

3.2

PROCESSAMENTO DE STRINGS

No âmbito da representação e manipulação de strings em Python são utilizadas várias instruções e funções que se inserem no seguinte conjunto de operações de tratamento de texto (strings): Criar uma string; Determinar o comprimento de uma string; © FCA – Editora de Informática


60

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB Concatenar strings; Determinar a posição de uma substring numa string; Obter (extrair) uma substring de uma string; Comparar strings.

Criar uma string na linguagem Python é uma tarefa simples. Uma string é expressa por uma qualquer sequência de carateres entre plicas ou entre aspas. A criação de uma string pode ser efetuada pela atribuição a uma variável, exatamente da mesma forma como criamos e inicializamos uma variável do tipo numérico (Exemplo 3.1). EXEMPLO 3.1 >>> texto = 'Python Web Programming' >>> texto2 = "Algorithms and Data Structures in 'Python 3.3.5'" >>> print (texto,texto2)

A concatenação de strings em Python é também uma operação muito simples. Para concatenar strings aplicamos o operador ‘+’, o qual, neste caso, tem a função de concatenar (juntar) o conteúdo dos operandos (strings). Esta operação permite juntar duas strings para formar uma outra, como indica o seguinte exemplo (Exemplo 3.2) na shell Python. EXEMPLO 3.2 >>> text1 = 'String processing' >>> text2 = 'using Python' >>> pvers = '3.3.5' >>> text = text1 + ' ' + text2 + ' ' + pvers >>> print (text) String processing using Python 3.3.5

A pesquisa de uma substring dentro de uma string determina a posição da substring dentro da string. No caso de a substring (padrão) não existir, a função find() devolve o valor -1 (Figura 3.2).

© FCA – Editora de Informática


6

TECNOLOGIAS DE PROGRAMAÇÃO WEB EM PYTHON 1

Este capítulo concretiza a construção de software para a web com a linguagem Python e os respetivos recursos e bibliotecas anteriormente analisados. O objetivo principal é integrar de modo coerente as camadas de software a fim de programar e construir uma aplicação web. Neste sentido, alguns exemplos e programas em Python são especificados com base numa arquitetura web de simples configuração e manutenção, na qual aplicamos o servidor web (framework http) CherryPy e o motor de base de dados SQLite incorporado no ambiente de desenvolvimento Python. Este capítulo apresenta também outras formas de programar para a web em Python e os mecanismos de interação entre o ambiente de programação e as bases de dados. Resumindo, este capítulo descreve alguns métodos que aplicam a linguagem Python em conjunto com um determinado servidor web e motor de base de dados, de modo a construir aplicações de software interativas com interface web. No final, apresenta-se também o processamento de ficheiros XML em Python.

6.1

PROGRAMAÇÃO PYTHON PARA A WEB

Tendo em conta o incremento da complexidade dos sistemas de software e a evolução da Internet no sentido da web semântica (web 3.0), assim como, por um lado, as questões de performance, segurança, manutenção e escalabilidade e, por outro, as questões estéticas e de interface, torna-se necessário a integração de tecnologias e linguagens de programação adequadas às novas necessidades de desenvolvimento desses sistemas de software para a web, cada vez mais exigentes e solicitados. A programação web tornou-se um tópico em ascensão desde o final da década de 90 do século passado, com a transição para a web 2.0 (Kubica, 2014). A linguagem e o ambiente de desenvolvimento Python têm associado um conjunto de tecnologias e frameworks que permitem a programação de aplicações web com um nível de complexidade e sofisticação adequado às necessidades atuais do mercado. Desde o início da década do século XXI, mais concretamente desde o ano 2000 que o Python contém um conjunto de recursos adequados ao desenvolvimento web. Contudo, mais recentemente, surgiram ferramentas e tecnologias de apoio focadas na programação, integração e manutenção de aplicações web de maior dimensão e com superior robustez.

© FCA – Editora de Informática


182

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB

Neste sentido, existem determinadas bibliotecas Python que facilitam o processo de construção de aplicações web. Conforme foi analisado em capítulos anteriores, os diferentes componentes de software entre o servidor e o cliente são programados e agregados de forma a criar uma aplicação web, a qual pode ser interpretada como uma pilha (stack) de camadas (layers) de software (Figura 6.1).

FIGURA 6.1 – Diferentes camadas e tecnologias de uma aplicação web

No momento que um utilizador (cliente) entra na aplicação web, o seu navegador (browser) efetua uma conexão (pedido / request) ao servidor web da aplicação. O servidor analisa o ficheiro (pedido) através do sistema de ficheiros e envia uma resposta para o cliente (browser), e este apresenta a informação. Este processo entre o pedido do cliente (request) e a resposta do servidor (response) é gerido através do protocolo HyperText Transfer Protocol (HTTP). Os sítios e aplicações web mais recentes e dinâmicos (interativos) substituem o sistema de ficheiros do servidor por programas estruturados (software), que são executados no servidor, no momento em que um pedido do cliente é efetuado. Estes programas especificados em linguagens de programação do lado do servidor manipulam a gestão e a lógica (business logic) da aplicação, e gerem o resultado e informação estruturada para o cliente. A maior parte dos servidores web suportam a linguagem Python, no entanto, dado que os respetivos serviços HTTP são geralmente especificados nas linguagens C e C++, os servidores não executam diretamente código Python. Para resolver esta situação, foram criadas interfaces (bridges) específicas (algumas descritas neste capítulo) para gerir a comunicação entre os programas em Python e o servidor HTTP. Para cada camada, temos um conjunto de tecnologias e linguagens. Os próximos programas especificados em Python utilizam o servidor web CherryPy e o motor de base de dados SQLite. Contudo, a abordagem de desenvolvimento e o código-fonte seriam idênticos a outros servidores web mais robustos (Microsoft IIS ou o Apache), assim como com outros motores de bases de dados de maior dimensão (SQL Server, MySQL ou PostgreSQL).

© FCA – Editora de Informática


TECNOLOGIAS DE PROGRAMAÇÃO WEB EM PYTHON

6.2

183

DESENVOLVIMENTO DE APLICAÇÕES WEB

Conforme foi referido no capítulo anterior, o CherryPy é um servidor web selecionado neste livro para o desenvolvimento e testes de programas web em Python. O CherryPy é uma biblioteca Python de software com capacidade para o desenvolvimento de aplicações web (http server). O CherryPy é uma framework (Figura 6.2) para o desenvolvimento de aplicações web com base na linguagem Python. O CherryPy também é interpretado como uma biblioteca de software (framework http) para a programação Python na web com orientação aos objetos.

FIGURA 6.2 – CherryPy web framework (cherrypy.org)

A biblioteca CherryPy é baseada em Python (pythonic) e tem associado o paradigma de desenvolvimento de software orientado aos objetos. O CherryPy é aplicado como um servidor web (http) de leve e simples dimensão. Como podemos verificar nos próximos exemplos, o CherryPy permite o desenvolvimento de aplicações web da mesma forma que construímos um programa orientado aos objetos. O CherryPy inclui um conjunto de objetivos determinantes para o desenvolvimento de software sem utilização de grandes (e pesados) recursos, razão fundamental para a escolha desta solução como servidor web. Assim, temos um servidor web leve e de simples configuração e manutenção. O CherryPy permite uma integração simples entre conteúdos estáticos e dinâmicos, característica fundamental para o desenvolvimento web e é composto por componentes de software reutilizáveis, de modo a facilitar o processo de desenvolvimento de software e aplicações web.

© FCA – Editora de Informática


216

7.2

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB

DJANGO WEB FRAMEWORK

Django é um ambiente (framework) de desenvolvimento de software que simplifica  significativamente  o  processo  de  construção  de  uma  aplicação  web.  A  framework  Django  foi  concebida  para  facilitar  o  design,  programação  e  integração  de  recursos  de  software  para a web. A abordagem principal é minimizar os detalhes de implementação no âmbito  da programação web, reduzindo os aspetos técnicos e os detalhes de integração com uma  base de dados, assim como a gestão das diferentes sessões (e URL) de uma aplicação web. 

FIGURA 7.1 – Sítio web da framework Django 

A  framework  Django  foi  construída  com  base  na  linguagem  de  programação  Python. Como vimos anteriormente, o Python possui muitos recursos avançados, além de  uma  biblioteca  padrão  de  software  poderosa,  o  que  faz  com  que  esta  linguagem,  em  conjunto com o ambiente de software Django, possam ser usados em aplicações complexas  em servidores web, assim como em dispositivos móveis.   A  conceção  deste  ambiente  (framework)  assim  como  o  desenvolvimento  subja‐ cente  de  aplicações  web  rege‐se  pela  metáfora  e  princípio  designado  por  Don´t  Repeat  Yourself (DRY, Figura 7.2), o qual enfatiza a redução de erros de implementação com base  na eliminação de repetições (duplicações) de funções e procedimentos e respetivo código‐ ‐fonte.  No  âmbito  da  programação  e  integração  de  componentes  de  software,  ou  seja,  numa  abordagem  à  engenharia  de  software,  a  metáfora  DRY  pretende  representar  que  uma determinada função, procedimento, processo, entidade ou área de conhecimento do  sistema em análise tem associado um artefacto (componente) de software reutilizável. Esta 

© FCA – Editora de Informática


PYTHON WEB FRAMEWORKS

217

abordagem tem também por objetivo minimizar aspetos do processo de manutenção de  software.  

  FIGURA 7.2 – Metáfora Don´t Repeat Yourself 

A  framework  Django  assegura  um  ambiente  de  desenvolvimento  de  software  de  alto nível de abstração, o que permite construir aplicações web, de dimensão considerável,  com  um  número  reduzido  de  linhas  de  código‐fonte.  O  Django  é  considerado  uma  ferramenta  simples,  robusta  e  flexível  no  sentido  de  conceber  e  desenvolver  aplicações  web com o mínimo possível de tarefas de programação intensiva. O Django foi construído  em  Python  e  combina  a  capacidade  das  linguagens  orientadas  aos  objetos  com  as  linguagens  de  scripting  (ex.:  Ruby).  Esta  característica  integradora  permite  aos  programadores web a criação de aplicações para a resolução de um leque mais alargado  de problemas do mundo real e das empresas.  O Django é uma framework escrita em Python para o desenvolvimento de aplica‐ ções  web.  Dois  conceitos  estão  subjacentes  à  conceção  da  framework  Django,  o  padrão  (design  pattern)  Model‐Template‐View  (MTV)  e  o  princípio  DRY  (Don’t  Repeat  Yourself)  referido  anteriormente.  O  padrão  MTV  tem  as  seguintes  características  principais  que  definem um padrão de desenvolvimento que separa o processo de desenvolvimento em  três camadas:  Model – Definição do modelo concetual de base de dados no modelo (lógico)  relacional. Um modelo em Django é uma classe Python que representa uma 

© FCA – Editora de Informática


218

PYTHON - ALGORITMIA E PROGRAMAÇÃO WEB tabela de uma base de dados relacional. O processo de codificação SQL para  a criação e manipulação da base de dados é automatizado;  View  –  Componente  (view)  Django  que  contém  o  código‐fonte  referente  à  lógica da aplicação (business logic);  Template – Define a interface do sistema através de um conjunto de páginas  HTML que, por sua vez, definem a interação web com o utilizador. O Django  tem  um  sistema  de  templates  (Django  templating  system)  com  capacidades  muito interessantes de interface (e interação) web. 

  O Django foi criado por Jacob Kaplan‐Moss, Adrian Holovaty e Simon Willison em 2003  no contexto do desenvolvimento de um gestor de conteúdos (content management system) para dar  suporte ao departamento de tecnologias web de um jornal da região do Kansas nos Estados Unidos  da  América.  O  Django  surgiu  na  Cidade  de  Lawrence,  no  Kansas.  A  sua  evolução  tornou  a  framework opensource, e foi publicada e lançada sob licença em 2005. O nome Django foi inspirado  no músico de jazz Django Reinhardt. 

7.3

INSTALAÇÃO DA FRAMEWORK DJANGO

O processo de instalação da framework Django deverá ser efetuado com base nas  instruções  do  sítio  web  (Figura  7.3).  Existem  diferentes  formas  de  instalar  a  framework,  assim  como  diferentes  versões  de  instalação.  Por  um  lado  temos  a  última  versão  em  desenvolvimento (Django development version) que inclui as mais recentes funcionalidades  da framework. Por outro lado, mais conservador, temos uma versão estável da plataforma  (latest  oficial  version,  Figura  7.4).  Assim,  inicialmente  é  necessário  definir  a  versão  do  Django  a  instalar,  posteriormente  efetuar  o  download  do  ficheiro  de  instalação,  e  finalmente  descompactar  e  efetivamente  instalar  o  ambiente  Django.  O  processo  de  instalação descrito tem por base o sistema operativo Windows 8.1 da Microsoft.  

  FIGURA 7.3 – Guia simples para a instalação do Django  © FCA – Editora de Informática


PROJETO DE SOFTWARE WEB

8.2

283

SOFTWARE DESIGN E MODELO DE DADOS

A construção do modelo de dados é uma tarefa fundamental na fase de design  do  software  logo  após  a  definição  dos  requisitos  de  software.  A  estrutura  de  dados  seguinte,  assim  como  os  relacionamentos  estruturais  entre  as  classes  (entidades  do  sistema) será refletida nos modelos (classes), atributos e funções definidas no programa  (ficheiro Python)  models.py. Cada modelo é interpretado como uma classe Python. No  caso  da  aplicação  Django  bauthors  desenvolvida,  existe  apenas  um  ficheiro  com  a  especificação dos modelos (classes Python) especificado no ficheiro models.py (Figuras  8.6 e 8.7).  O  modelo  de  dados  (models.py)  especificado  em  Django  tem  por  base  o  diagrama de classes abaixo especificado em UML (Figura 8.2). 

FIGURA 8.2 – Diagrama de classes especificado com a ferramenta StarUML 

Posteriormente,  o  ambiente  (software  framework)  Django  encarrega‐se  de  auto‐ matizar  o  processo  de  conversão  das  classes  (modelo  orientado  aos  objetos)  num  conjunto  de  tabelas  de  um  modelo  relacional.  Conforme  referido  anteriormente,  este  processo de conversão é efetuado através da ferramenta Django ORM.       

© FCA – Editora de Informática


Arte -Python.pdf

C

M

Y

CM

MY

CY

CMY

K

1

17/04/15

16:14


Python - Algoritmia e Programação Web