Desenvolvendo Aplicações com Software Livre Jackson Laskoski http://www.JACK.eti.br [email_address] Pós-Graduação (lato-se...
Agenda/Plano de Ensino 10 e 11/10/2008 <ul><li>Software Livre - (10/10/2008) </li></ul><ul><ul><li>Diferentes tipos de lic...
Agenda/Plano de Ensino 10 e 11/09/2008 <ul><li>CakePHP - (10 e 11/10/2008)  </li></ul><ul><ul><li>Principais característic...
Agenda/Plano de Ensino 10 e 11/09/2008 <ul><li>Trabalho técnico/prático em grupo (3 pessoas) – 11/10/2008 </li></ul><ul><u...
Software Livre <ul><li>“ Software livre&quot; se refere à liberdade dos usuários executarem, copiarem, distribuírem, estud...
Software Livre Diferenças entre as principais licenças de software <ul><ul><li>GPL </li></ul></ul><ul><ul><ul><li>GNU GPL ...
Linguagens de Programação  (software livre) As “Ruffles” do momento <ul><ul><li>JAVA (http://java.sun.com/) </li></ul></ul...
Linguagens de Programação  (software livre) As “Ruffles” do momento <ul><ul><li>PHP (http://www.php.net/) </li></ul></ul><...
Banco de Dados - SGBD  (software livre) <ul><ul><li>MySQL </li></ul></ul><ul><ul><ul><li>Banco de Dados Livre, ótima integ...
Orientação a Objetos Pequena Revisão <ul><ul><li>Objetos </li></ul></ul><ul><ul><ul><li>Um objeto é uma representação de u...
Orientação a Objetos Pequena Revisão <ul><ul><ul><li>//método destrutor. É executado sempre que um objeto é destruído </li...
Arquitetura MVC <ul><ul><li>MVC é um acrônimo para Model, View e Controller (Modelo, Visão e Controlador). A idéia básica ...
Frameworks <ul><ul><li>Um framework de desenvolvimento é uma “base” de onde se pode desenvolver algo maior ou mais específ...
<ul><ul><li>O CakePHP teve seu desenvolvimento iniciado por Michal Tartarynowicz em 2005. Baseado nas idéias do framework ...
Porque usar o CakePHP? <ul><ul><li>Baseado em arquitetura MVC </li></ul></ul><ul><ul><ul><li>Facilita o desenvolvimento e ...
Porque usar o CakePHP? <ul><ul><li>Listas de controle de acesso (ACL) </li></ul></ul><ul><ul><ul><li>Permite gerenciar alg...
Instalando o CakePHP <ul><ul><li>Cenário Envolvido </li></ul></ul><ul><ul><ul><li>O CakePHP pode ser utilizado em qualquer...
Entendendo a “Morfologia” da Ferramenta <ul><ul><li>/app  –  Diretório onde ficará a aplicação desenvolvida </li></ul></ul...
Considerações sobre a base de dados de novos projetos <ul><ul><li>Todas as tabelas devem estar no plural </li></ul></ul><u...
Gerando Aplicação - Demonstração
Roteiro de Implementação <ul><ul><li>No Linux </li></ul></ul><ul><ul><ul><li>php5-cli </li></ul></ul></ul><ul><ul><ul><li>...
Roteiro de Implementação <ul><ul><li>Gerando a aplicação </li></ul></ul><ul><ul><ul><li>php cakescriptsake.php –app meusl...
Roteiro de Implementação <ul><ul><li>No caso em específico </li></ul></ul><ul><ul><ul><li>Um usuário possui muitas coleçõe...
Roteiro de Implementação <ul><ul><li>Nos controles... </li></ul></ul><ul><ul><ul><li>php cakescriptsake.php –app meuslivr...
Roteiro de Implementação <ul><ul><li>Nas visões... </li></ul></ul><ul><ul><ul><li>php cakescriptsake.php –app meuslivros ...
Roteiro de Implementação <ul><ul><li>Customizando a aplicação </li></ul></ul><ul><ul><ul><li>Dar a idéia de uma aplicação ...
Roteiro de Implementação <ul><ul><li>Customizando a aplicação </li></ul></ul><ul><ul><ul><li>Autenticando Usuários: </li><...
Roteiro de Implementação <ul><ul><li>Melhorando a interface </li></ul></ul><ul><ul><ul><li>Aspectos “cosméticos” e prático...
Roteiro de Implementação <ul><ul><li>Recurso de RSS </li></ul></ul><ul><ul><ul><li>Cumprindo com as metas do projeto </li>...
Referências Bibliográficas Básicas <ul><ul><li>Livros </li></ul></ul><ul><ul><ul><li>Ahsanul Bari, Anupom Syam,  CakePHP A...
Upcoming SlideShare
Loading in …5
×

Desenvolvendo Aplicações com Software Livre

2,374
-1

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,374
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
95
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Desenvolvendo Aplicações com Software Livre

  1. 1. Desenvolvendo Aplicações com Software Livre Jackson Laskoski http://www.JACK.eti.br [email_address] Pós-Graduação (lato-sensu) Gestão em Tecnologia e Desenvolvimento da Informação
  2. 2. Agenda/Plano de Ensino 10 e 11/10/2008 <ul><li>Software Livre - (10/10/2008) </li></ul><ul><ul><li>Diferentes tipos de licenciamento </li></ul></ul><ul><ul><li>O que devo e o que eu não preciso liberar a nível de código-fonte? </li></ul></ul><ul><li>Ferramentas de código livre e metodologias de desenvolvimento - (10/10/2008) </li></ul><ul><ul><li>“ As Ruffles” do momento ( PHP , Ruby, Java, Python) </li></ul></ul><ul><ul><li>Bancos de Dados (MySQL, Firebird, PostgreSQL) </li></ul></ul><ul><ul><li>Orientação a Objetos </li></ul></ul><ul><ul><li>Web Based </li></ul></ul><ul><ul><li>MVC </li></ul></ul><ul><li>Paradigma RAD (Rapid Application Development): Uma necessidade! (10/10/2008) </li></ul><ul><ul><li>PHP 5: Porque vamos ver ele? O que mudou em relação às versões anteriores? </li></ul></ul><ul><ul><li>MySQL 5: Porque vamos ver ele? O que mudou em relação às versões anteriores? </li></ul></ul><ul><ul><li>O que é um Framework? </li></ul></ul><ul><ul><li>Mas afinal, porque é vantagem usar um framework? </li></ul></ul>
  3. 3. Agenda/Plano de Ensino 10 e 11/09/2008 <ul><li>CakePHP - (10 e 11/10/2008) </li></ul><ul><ul><li>Principais características e Recursos: </li></ul></ul><ul><ul><ul><li>Baseado na arquitetura MVC </li></ul></ul></ul><ul><ul><ul><li>Licença flexível (MIT) </li></ul></ul></ul><ul><ul><ul><li>Compatibilidade com PHP4 e PHP5 </li></ul></ul></ul><ul><ul><ul><li>Validação de campos </li></ul></ul></ul><ul><ul><ul><li>Scaffolding </li></ul></ul></ul><ul><ul><ul><li>Listas de controle de acesso (ACL) </li></ul></ul></ul><ul><ul><ul><li>Componentes </li></ul></ul></ul><ul><ul><ul><li>Helpers </li></ul></ul></ul><ul><ul><ul><li>Geração de código-fonte </li></ul></ul></ul><ul><ul><li>Ambiente e cenário envolvido </li></ul></ul><ul><ul><ul><li>Servidor web (Apache) </li></ul></ul></ul><ul><ul><ul><li>PHP5 </li></ul></ul></ul><ul><ul><ul><li>MySQL5 </li></ul></ul></ul><ul><ul><li>Instalando e entendendo a ferramenta (estrutura de arquivos) </li></ul></ul><ul><li>Gerando aplicação de demonstração - (11/10/2008) </li></ul><ul><ul><li>Sistema para cadastramento e controle de uma coleção de livros: </li></ul></ul><ul><ul><ul><li>Visitantes podem realizar comentários e sugestões para cada item; </li></ul></ul></ul><ul><ul><ul><li>Visitantes podem acompanhar a coleção usando um feed RSS; </li></ul></ul></ul><ul><ul><ul><li>Deve haver uma área administrativa onde o usuário pode alterar suas coleções; </li></ul></ul></ul><ul><ul><ul><li>A interface deve ser simples e fácil de se utilizar; </li></ul></ul></ul>
  4. 4. Agenda/Plano de Ensino 10 e 11/09/2008 <ul><li>Trabalho técnico/prático em grupo (3 pessoas) – 11/10/2008 </li></ul><ul><ul><li>Definição de uma aplicação prática e funcional, com enfoque a ser definido por cada grupo: </li></ul></ul><ul><ul><ul><li>Deve conter a modelagem do sistema; </li></ul></ul></ul><ul><ul><ul><li>Todos os recursos que forem julgados necessários e/ou importantes; </li></ul></ul></ul>
  5. 5. Software Livre <ul><li>“ Software livre&quot; se refere à liberdade dos usuários executarem, copiarem, distribuírem, estudarem, modificarem e aperfeiçoarem o software. Mais precisamente, ele se refere a quatro liberdades, para os usuários do software: </li></ul><ul><li>A liberdade de executar o programa, para qualquer propósito (liberdade no. 0); </li></ul><ul><li>A liberdade de estudar como o programa funciona, e adaptá-lo para as suas necessidades (liberdade no. 1). Aceso ao código-fonte é um pré-requisito para esta liberdade; </li></ul><ul><li>A liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo (liberdade no. 2); </li></ul><ul><li>A liberdade de aperfeiçoar o programa, e liberar os seus aperfeiçoamentos, de modo que toda a comunidade se beneficie (liberdade no. 3). Acesso ao código-fonte é um pré-requisito para esta liberdade. </li></ul>
  6. 6. Software Livre Diferenças entre as principais licenças de software <ul><ul><li>GPL </li></ul></ul><ul><ul><ul><li>GNU GPL ou simplesmente GPL, é a designação da licença para software livre idealizada por Richard Stallman no final da década de 1980, no âmbito do projecto GNU da Free Software Foundation (FSF). A GPL requer que trabalhos derivados sejam licenciados sob a mesma licença, ou seja, sob a GPL. </li></ul></ul></ul><ul><ul><li>BSD </li></ul></ul><ul><ul><ul><li>A licença BSD permite que o software distribuído sob a licença, seja incorporado a produtos proprietários. Trabalhos baseados no material podem até ser liberados com licença proprietária. Alguns exemplos notáveis são: o uso de código do BSD (funções de rede de computadores) em produtos da Microsoft, e o uso de muitos componentes do FreeBSD no sistema Mac OS X da Apple Computer. </li></ul></ul></ul><ul><ul><li>MIT </li></ul></ul><ul><ul><ul><li>A licença MIT é similar a licença BSD versão &quot;3-clause&quot;. Essencialmente, a diferença reside no fato de a licença BSD conter um aviso proibindo o uso promocional do nome do autor sob copyright. A versão &quot;4-clause&quot; da licença BSD também inclui uma cláusula determinando que toda a propaganda do software inclua uma nota, enquanto a licença MIT, nunca teve tal cláusula. A licença MIT, por outro lado, coloca de forma mais explícita os direitos do usuário final, incluíndo o direito ao uso, cópia, modificação, fusão, distribuição, &quot;sublicenciamento&quot;, e/ou venda de software. </li></ul></ul></ul>
  7. 7. Linguagens de Programação (software livre) As “Ruffles” do momento <ul><ul><li>JAVA (http://java.sun.com/) </li></ul></ul><ul><ul><ul><li>Atualmente licenciado sob GPL pela SUN; </li></ul></ul></ul><ul><ul><ul><li>Mais que orientada, é baseada em objetos; </li></ul></ul></ul><ul><ul><ul><li>É extremamente portável e robusta; </li></ul></ul></ul><ul><ul><ul><li>Pode ser utilizada no desenvolvimento de aplicações texto, desktop ou web-based; </li></ul></ul></ul><ul><ul><ul><li>Tem uma curvatura de aprendizado considerada elevada; </li></ul></ul></ul><ul><ul><ul><li>Ainda está se desenvolvendo regionalmente (até mesmo, a nível de Brasil) </li></ul></ul></ul><ul><ul><li>Ruby on Rails (http://www.rubyonbr.org/) </li></ul></ul><ul><ul><ul><li>Segundo Colin Steele em An Introduction to Ruby, “Ruby é duas partes Perl, uma parte Python e uma parte Smalltalk.” </li></ul></ul></ul><ul><ul><ul><li>Devido ao advento do Rails (um framework desenvolvido no próprio Ruby e com enfoque na arquitetura MVC), vem ganhando muitos adeptos; </li></ul></ul></ul><ul><ul><ul><li>É baseado em objetos e livre (licenciado sob uma licença particular); </li></ul></ul></ul><ul><ul><ul><li>Ainda pouco popular regionalmente; </li></ul></ul></ul><ul><ul><ul><li>Utilizado basicamente em aplicações for web; </li></ul></ul></ul><ul><ul><ul><li>Bastante peculiar quanto a forma de desenvolvimento; </li></ul></ul></ul><ul><ul><li>Pyton (http://www.pythonbrasil.com.br) </li></ul></ul><ul><ul><ul><li>Linguagem de código aberto (GPL); </li></ul></ul></ul><ul><ul><ul><li>Extremamente flexível, script e interpretada; </li></ul></ul></ul><ul><ul><ul><li>Bastante portável quanto à sistemas operacionais e equipamentos; </li></ul></ul></ul><ul><ul><ul><li>Utilizada mais a nível acadêmico; </li></ul></ul></ul><ul><ul><ul><li>Programação tanto desktop quanto web-based; </li></ul></ul></ul><ul><ul><ul><li>Curvatura de aprendizado bastante atrativa; </li></ul></ul></ul>
  8. 8. Linguagens de Programação (software livre) As “Ruffles” do momento <ul><ul><li>PHP (http://www.php.net/) </li></ul></ul><ul><ul><ul><li>Linguagem script para desenvolvimento de aplicações web-based; </li></ul></ul></ul><ul><ul><ul><li>100% livre, GPL; </li></ul></ul></ul><ul><ul><ul><li>Baixa curvatura de aprendizado; </li></ul></ul></ul><ul><ul><ul><li>A partir da versão 5.0, com um forte apelo e recursos embutidos de desenvolvimento OO; </li></ul></ul></ul><ul><ul><ul><li>Junto com ASP (ferramenta proprietária), PHP domina indiscutivelmente o cenário de aplicações web-based; </li></ul></ul></ul><ul><ul><ul><li>Permite o desenvolvimento de aplicações alinhado a arquitetura MVC e a Frameworks (produtividade); </li></ul></ul></ul><ul><ul><ul><li>A exemplo de JAVA, com um forte incentivo de gigantes (IBM, Oracle e afins) na certificação de profissionais (Certificação Zend); </li></ul></ul></ul>
  9. 9. Banco de Dados - SGBD (software livre) <ul><ul><li>MySQL </li></ul></ul><ul><ul><ul><li>Banco de Dados Livre, ótima integração com linguagens de programação de mercado (PHP, JAVA, DELPHI, VB, etc…), rápido, leve, costuma ter excelente performance e usar hardware modesto (não precisa vender o fígado para adquirir um servidor - na maioria dos casos, é claro :-) . Amadureceu muito na sua última versão estável (5.0) e promete incorporar várias tecnologias usadas pelo maior cluster MySQL do mundo (a Google) na sua versão 6.0. Possui uma versão comunitária (livre) e uma versão Enterprise. É sem dúvida alguma o banco de dados mais utilizado junto à programas desenvolvidos em PHP. Site oficial: http://www.mysql.com/ </li></ul></ul></ul><ul><ul><li>FireBird </li></ul></ul><ul><ul><ul><li>Advindo do Interbase da Borland, também trata-se de um SGBD Livre. É rápido, tem excelente integração com Delphi, JAVA, PHP, VB, etc… - Tem versões tanto para MS Windows quanto GNU/Linux. Em virtude de sua origem histórica e de suas APIs é muito mais utilizado em aplicações standalone/desktop que em aplicação desenvolvidas para ambiente web, contudo, é extremamente robusto e com uma comunidade bastante atuante. Site oficial: http://www.firebirdsql.org/ </li></ul></ul></ul><ul><ul><li>PostGreSQL </li></ul></ul><ul><ul><ul><li>Sem dúvida alguma uma ferramenta robusta e muito escalável em termos de BD livres Tem versões para MS Windows e GNU/Linux. Dos três é a ferramenta que mais pede hardware e infra-estrutura (dependentemente do volume de dados e recursos), mas tem suportes diferenciados como BD escaláveis e ambientes integrados para várias coisas (desenvolvidos por terceiros - Data Warehouse, etc…). Site Oficial: http://www.postgresql.org/ </li></ul></ul></ul>
  10. 10. Orientação a Objetos Pequena Revisão <ul><ul><li>Objetos </li></ul></ul><ul><ul><ul><li>Um objeto é uma representação de um conceito real, possui estados, operações (métodos) e dados (atributos). Um objeto em PHP é definido da seguinte forma: </li></ul></ul></ul><ul><ul><ul><li><?php </li></ul></ul></ul><ul><ul><ul><li>//cria um novo objeeto </li></ul></ul></ul><ul><ul><ul><li>$php = new LinguagemProgramacao; </li></ul></ul></ul><ul><ul><ul><li>//um objeto possui atributos </li></ul></ul></ul><ul><ul><ul><li>$php->versao = 5; </li></ul></ul></ul><ul><ul><ul><li>//e um objeto possui um método </li></ul></ul></ul><ul><ul><ul><li>$php->ShowVersao(); </li></ul></ul></ul><ul><ul><ul><li>?> </li></ul></ul></ul><ul><ul><li>Classes </li></ul></ul><ul><ul><ul><li>Uma classe pode ser considerada um “molde” para criar objetos. Ela define todos os dados e comportamentos possível daquele tipo de objeto. Dessa forma, um objeto é considerado uma instância de uma classe: </li></ul></ul></ul><ul><ul><ul><li><?php </li></ul></ul></ul><ul><ul><ul><li>class LinguagemProgramacao { </li></ul></ul></ul><ul><ul><ul><li>$versao; //atributo </li></ul></ul></ul><ul><ul><ul><li>//método construtor da classe. É executado sempre que um novo objeto é //criado </li></ul></ul></ul><ul><ul><ul><li>function __construct() { </li></ul></ul></ul><ul><ul><ul><li>$this->versao = 0; //acessando o atributo internamente </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul>
  11. 11. Orientação a Objetos Pequena Revisão <ul><ul><ul><li>//método destrutor. É executado sempre que um objeto é destruído </li></ul></ul></ul><ul><ul><ul><li>function __destruct() { </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>//método que escreve o conteúdo do atributo </li></ul></ul></ul><ul><ul><ul><li>function showVersao() { </li></ul></ul></ul><ul><ul><ul><li>echo $this->versao; </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>?> </li></ul></ul></ul><ul><ul><li>Herança </li></ul></ul><ul><ul><ul><li>Podemos definir uma classe como sendo uma classe-filha de outra. Isto significa que a nova classe herda todas as características da classe-pai. Este é um conceito muito importante na POO e utilizado extensivamente em frameworks como o CakePHP: </li></ul></ul></ul><ul><ul><ul><li><?php </li></ul></ul></ul><ul><ul><ul><li>class LinguagemProgramacaoEstruturada extends LinguagemProgramacao { </li></ul></ul></ul><ul><ul><ul><li>function goto($linha) { </li></ul></ul></ul><ul><ul><ul><li>echo “Movendo para linha $linha”; </li></ul></ul></ul><ul><ul><ul><li>//aqui o resto da implementação </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>$cobol = new LinguagemProgramacaoEstruturada; </li></ul></ul></ul><ul><ul><ul><li>$cobol->showVersao(); //usando um método herdado da classe-pai </li></ul></ul></ul><ul><ul><ul><li>$cobol->goto(100); //usando um método herdado da classe-filha </li></ul></ul></ul><ul><ul><ul><li>?> </li></ul></ul></ul>
  12. 12. Arquitetura MVC <ul><ul><li>MVC é um acrônimo para Model, View e Controller (Modelo, Visão e Controlador). A idéia básica é separar todo o desenvolvimento de uma aplicação em 3 partes ou camadas: </li></ul></ul><ul><ul><li>Model – Gerencia o comportamento dos dados da aplicação. </li></ul></ul><ul><ul><li>View – Gerencia a saída gráfica e textual da parte da aplicação visível ao usuário final. </li></ul></ul><ul><ul><li>Controller – Interpreta as entradas de mouse e teclado do usuário, comandando a Visão e o Modelo para se alterarem de forma apropriada. </li></ul></ul><ul><ul><li>Todas as requisições feitas pelo usuário são enviadas ao Controller. Este manipula os dados usando o Model e invoca a View correta, de acordo com a ação executada ou com os resultados vindos do Model. </li></ul></ul><ul><ul><li>A grande vantagem de se utilizar a arquitetura MVC é a separação entre lógica (regras do negócio), apresentação e dados, favorecendo muito o trabalho em equipe. Dessa forma, qualquer mudança, por exemplo, na apresentação, teria pouco ou nenhum impacto nas demais camadas da aplicação... ao mesmo tempo que tudo continua absolutamente integrado. </li></ul></ul>
  13. 13. Frameworks <ul><ul><li>Um framework de desenvolvimento é uma “base” de onde se pode desenvolver algo maior ou mais específico. É uma coleção de códigos-fonte, classes, funções, técnicas e metodologias integradas à um ambiente centralizador que facilitam o desenvolvimento e manutenção de aplicações. </li></ul></ul><ul><ul><li>Mas afinal, porque é vantagem usar um framework? </li></ul></ul><ul><ul><ul><li>Passado o período inicial de familiarização com a ferramenta, as vantagens começam a aparecer; </li></ul></ul></ul><ul><ul><ul><li>Como todos os desenvolvedores de uma mesma equipe usam um determinado framework, programam usando as mesmas convenções, classes e bibliotecas, a manutenção de um programa fica muito mais ágil (produtividade); </li></ul></ul></ul><ul><ul><ul><li>Abstrai-se as tarefas mais repetitivas, permitindo a concentração de esforços na regras do negócio; </li></ul></ul></ul><ul><ul><ul><li>DRY – Don’t Repeat Yourself (não se repita). Deixe de repetir códigos comuns em módulos de um mesmo sistema (inclusão, alteração, recuperação e exclusão de dados); </li></ul></ul></ul><ul><ul><ul><li>Facilidade na geração de testes automatizados; </li></ul></ul></ul><ul><ul><ul><li>Geração de documentação; </li></ul></ul></ul><ul><ul><ul><li>Uso de tecnologias embutidas: </li></ul></ul></ul><ul><ul><ul><ul><li>MVC </li></ul></ul></ul></ul><ul><ul><ul><ul><li>ActiveRecord: Abstrai o programador de conhecer a fundo uma linguagem de manipulação de dados, como a SQL, além de manter toda a aplicação desenvolvida no paradigma orientado a objetos; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>AJAX (Asynchronous Javascript and XML): Toda página AJAX está em um objeto chamado XMLHTTPRequest, o qual permite que sejam feitas requisições assíncronas ao servidor web, não precisando de atualizações na página ou espera por parte do usuário; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Internacionalização: É o processo de possibilitar que seja facilmente alterada a linguagem da interface e de mensagens de uma determinada aplicação. </li></ul></ul></ul></ul>
  14. 14. <ul><ul><li>O CakePHP teve seu desenvolvimento iniciado por Michal Tartarynowicz em 2005. Baseado nas idéias do framework Ruby on Rails, sua principal meta é ser um framework estruturado que permita programadores PHP de todos os níveis desenvolverem aplicações web robustas e sem perda de flexibilidade. </li></ul></ul><ul><ul><li>O CakePHP, apesar de estar às vésperas de sua versão 1.2 (estável) é bastante maduro, com uma proposta clara de trabalho e uma comunidade de desenvolvedores extremamente ativa. </li></ul></ul><ul><ul><li>Alguns Links importantes: </li></ul></ul><ul><ul><li>http://www.cakephp.org </li></ul></ul><ul><ul><li>http://www.cakephp.com.br/ </li></ul></ul>
  15. 15. Porque usar o CakePHP? <ul><ul><li>Baseado em arquitetura MVC </li></ul></ul><ul><ul><ul><li>Facilita o desenvolvimento e manutenção de aplicações; </li></ul></ul></ul><ul><ul><ul><li>Melhor organização do código-fonte; </li></ul></ul></ul><ul><ul><ul><li>Facilita o trabalho em equipe; </li></ul></ul></ul><ul><ul><ul><li>Abstrai o programador de tarefas repetitivas e complexas. </li></ul></ul></ul><ul><ul><li>Licença Flexível </li></ul></ul><ul><ul><ul><li>O CakePHP é licenciado sob a licença MIT, muito mais flexível que a GPL e a própria BSD. </li></ul></ul></ul><ul><ul><li>Compatibilidade com PHP4 e PHP5 </li></ul></ul><ul><ul><ul><li>Como a imensa maioria dos servidores web rodam a versão 4.0 do PHP esta é uma vantagem significativa do CakePHP em relação a outros frameworks PHP, como é o caso do Symfony ou do Zend Framework. </li></ul></ul></ul><ul><ul><li>Validação de campos </li></ul></ul><ul><ul><ul><li>O CakePHP possui formas de validar dados digitados pelos usuários em formulários ou URLs. Isso ajuda o programador a evitar dados incorretos ou problemas de segurança. </li></ul></ul></ul><ul><ul><li>Scaffolding </li></ul></ul><ul><ul><ul><li>É um recurso que analisa uma tabela na base de dados e cria autamaticamente botões e formulários para as operações básicas de inclusão, alteração, e exclusão de dados. </li></ul></ul></ul>
  16. 16. Porque usar o CakePHP? <ul><ul><li>Listas de controle de acesso (ACL) </li></ul></ul><ul><ul><ul><li>Permite gerenciar algo (geralmente usuários) que deseja utilizar alguma coisa </li></ul></ul></ul><ul><ul><ul><li>Permite gerenciar algo que é desejado (aplicações, por exemplo) </li></ul></ul></ul><ul><ul><ul><li>Não é autenticação de usuários </li></ul></ul></ul><ul><ul><li>Componentes para: </li></ul></ul><ul><ul><ul><li>Segurança; </li></ul></ul></ul><ul><ul><ul><li>Sessões; </li></ul></ul></ul><ul><ul><ul><li>Tratamento de requisições </li></ul></ul></ul><ul><ul><ul><li>Permite o desenvolvimento de componentes específicos adicionais ao ambiente </li></ul></ul></ul><ul><ul><li>Helpers </li></ul></ul><ul><ul><ul><li>Existem helpers para auxiliar na geração de HTML, formulários, JavaScript e AJAX. Novos helpers podem ser criados ou reutilizados em outros projetos. </li></ul></ul></ul><ul><ul><li>Geração de código-fonte </li></ul></ul><ul><ul><ul><li>O CakePHP apresenta uma ferramenta chamada bake, que permite a criação de diretórios da aplicação, além da geração de código CRUD. CRUD é um acrônimo para Create, Retrieve, Update e Delete. </li></ul></ul></ul>
  17. 17. Instalando o CakePHP <ul><ul><li>Cenário Envolvido </li></ul></ul><ul><ul><ul><li>O CakePHP pode ser utilizado em qualquer plataforma operacional com suporte ao interpretador PHP; </li></ul></ul></ul><ul><ul><ul><li>Servidor Web Apache; </li></ul></ul></ul><ul><ul><ul><li>PHP 4.3.2 ou superior; </li></ul></ul></ul><ul><ul><ul><li>Editor PHP de sua preferência; </li></ul></ul></ul><ul><ul><ul><li>DBDesigner ou outra ferramenta de modelagem de dados; </li></ul></ul></ul><ul><ul><ul><li>Uma base de dados: </li></ul></ul></ul><ul><ul><ul><ul><li>A versão estável do framework suporta MySQL, PostgreSQL e camada de abstração de banco de dados chamada ADOdb. A versão 1.2 suportará também, nativamente, Oracle. </li></ul></ul></ul></ul><ul><ul><li>Passos para a instalação </li></ul></ul><ul><ul><ul><li>Baixar a versão estável da ferramenta em http://www.cakephp.org/downloads </li></ul></ul></ul><ul><ul><ul><li>Descompactar/extrair no diretório raíz do seu servidor web </li></ul></ul></ul><ul><ul><ul><li>Renomear o diretório para um nome mais usual/curto (cake) </li></ul></ul></ul><ul><ul><ul><li>Pronto, já está funcionando: http://localhost/cake </li></ul></ul></ul>
  18. 18. Entendendo a “Morfologia” da Ferramenta <ul><ul><li>/app – Diretório onde ficará a aplicação desenvolvida </li></ul></ul><ul><ul><ul><li>/config – Arquivos de configuração, DB, etc.. </li></ul></ul></ul><ul><ul><ul><li>/controllers – Controladores da aplicação </li></ul></ul></ul><ul><ul><ul><li>/index.php – Página inicial da aplicação </li></ul></ul></ul><ul><ul><ul><li>/models – Modelos da aplicação </li></ul></ul></ul><ul><ul><ul><li>/plugins – Plugins que podem ser adicionados </li></ul></ul></ul><ul><ul><ul><li>/tmp – Usado para cache e logs </li></ul></ul></ul><ul><ul><ul><li>/vendors – Bibliotecas de terceiros </li></ul></ul></ul><ul><ul><ul><li>/views – Visões da aplicação </li></ul></ul></ul><ul><ul><ul><ul><li>/elements – Elementos, pedaços da visão </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/errors – Páginas de erros customizadas </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/helpers – Ajudantes para gerar código </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/layouts – Arquivos de layout </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/pages – Visões estáticas </li></ul></ul></ul></ul><ul><ul><ul><li>/webroot – DocumentRoot para aplicação </li></ul></ul></ul><ul><ul><ul><ul><li>/css – Arquivos css </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/files – Arquivos comuns </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/img – Imagens </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/js – Javascripts (AJAX) </li></ul></ul></ul></ul><ul><ul><li>/cake – Código-fonte do cake </li></ul></ul><ul><ul><li>/docs – Documentação do framework </li></ul></ul><ul><ul><li>/vendors – Bibliotecas de terceiros </li></ul></ul><ul><ul><li>index.php – Página inicial do framework </li></ul></ul>
  19. 19. Considerações sobre a base de dados de novos projetos <ul><ul><li>Todas as tabelas devem estar no plural </li></ul></ul><ul><ul><ul><li>Ex: Usuarios, Comentarios </li></ul></ul></ul><ul><ul><li>A chave primária para todas as tabelas deve ser o campo “id” </li></ul></ul><ul><ul><ul><li>Preferencialmente estes campos devem ter algum mecanismo de geração de códigos-fonte, como a opção auto_increment do MySQL. Em SGBDs como o PostgreSQL e o Oracle, isso pode ser feito utilizando-se o recurso de triggers. </li></ul></ul></ul><ul><ul><li>Chave estrangeira no singular </li></ul></ul><ul><ul><ul><li>Para utilizar chave estrangeira, esta deve possuir nome da tabela no singular acrescido do campo “id”. Exemplo: usuario_id. </li></ul></ul></ul><ul><ul><li>Relacionamento de n-n deve ser organizado em ordem alfabética </li></ul></ul><ul><ul><ul><li>Primeiro nome no singular acrescido de um “_” e o nome da segunda tabela no plural. Exemplo: livro_usuarios. </li></ul></ul></ul><ul><ul><li>É importante seguirmos estas convenções, pois assim o CakePHP pode gerar diversas linhas importantes de código-fonte. Além disso, essas convenções facilitam a vida dos novos desenvolvedores, no que se refere ao entendimento das aplicações. </li></ul></ul>
  20. 20. Gerando Aplicação - Demonstração
  21. 21. Roteiro de Implementação <ul><ul><li>No Linux </li></ul></ul><ul><ul><ul><li>php5-cli </li></ul></ul></ul><ul><ul><ul><li>Apt-get install php5-cli (debian/ubuntu e afins) </li></ul></ul></ul><ul><ul><li>No Windows </li></ul></ul><ul><ul><ul><li>php.exe na variável path do sistema (em geral, ela já está lá) </li></ul></ul></ul><ul><ul><li>Gerando o projeto </li></ul></ul><ul><ul><ul><li>cd c:apache2triadhtdocscake </li></ul></ul></ul><ul><ul><ul><li>php cakescriptsake.php –project c:apache2triadhtdocscakemeuslivros </li></ul></ul></ul><ul><ul><li>--------------------------------------------------------------------------------------------------- </li></ul></ul><ul><ul><li>Skel Directory: c:apache2triadhtdocscakecakescripts emplatesskel </li></ul></ul><ul><ul><li>Will be copied to: </li></ul></ul><ul><ul><li>New App Directory: c:apache2triadcakemeuslivros </li></ul></ul><ul><ul><li>--------------------------------------------------------------------------------------------------- </li></ul></ul>
  22. 22. Roteiro de Implementação <ul><ul><li>Gerando a aplicação </li></ul></ul><ul><ul><ul><li>php cakescriptsake.php –app meuslivros </li></ul></ul></ul><ul><ul><li>Configurando o acesso ao banco de dados </li></ul></ul><ul><ul><ul><li>Informações referente ao acesso à base de dados </li></ul></ul></ul><ul><ul><li>Solicita a camada da aplicação que se deseja criar </li></ul></ul><ul><ul><ul><li>Aconselhável (devido as relações) criar sempre na ordem: </li></ul></ul></ul><ul><ul><ul><ul><li>Todos os Modelos; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Todos os Controles; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Todas as Visões; </li></ul></ul></ul></ul><ul><ul><li>Nos modelos... </li></ul></ul><ul><ul><ul><li>Usar a validação de campos; </li></ul></ul></ul><ul><ul><ul><li>Definir as associações: </li></ul></ul></ul><ul><ul><ul><ul><li>hasOne – Possui um; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>hasMany – Possui muitos; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>belongsTo – Pertence a; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>hasAndBelongsToMany – Tem e pertence a muitos; </li></ul></ul></ul></ul>
  23. 23. Roteiro de Implementação <ul><ul><li>No caso em específico </li></ul></ul><ul><ul><ul><li>Um usuário possui muitas coleções, então usuario hasMany colecao; </li></ul></ul></ul><ul><ul><ul><li>Uma coleção pertence a um usuário, então colecao belongsTo usuario; </li></ul></ul></ul><ul><ul><ul><li>Uma coleção possui muitos livros, então colecao hasMany livro; </li></ul></ul></ul><ul><ul><ul><li>Um livro pertence a uma coleção, então livro belongsTo colecao; </li></ul></ul></ul><ul><ul><ul><li>Um livro possui muitos comentários, então livro hasMany comentario; </li></ul></ul></ul><ul><ul><ul><li>E um comentário pertence a um livro, logo comentario belongsTo livro; </li></ul></ul></ul><ul><ul><li>O bake é muito esperto, percebe as associações analisando as chaves estrangeiras (relacionamentos) na base de dados. Por isso é extremamente importante seguir as convenções do CakePHP na hora de gerar a base de dados! </li></ul></ul><ul><ul><li>Após gerado o modelo </li></ul></ul><ul><ul><ul><li>O arquivo meuslivros/models/usuario.php pode ser observado </li></ul></ul></ul><ul><ul><ul><li>O processo deve se repetir para os demais modelos </li></ul></ul></ul><ul><ul><ul><li>Na ordem (devido as associações): </li></ul></ul></ul><ul><ul><ul><ul><li>Colecaos, Livros e Comentários </li></ul></ul></ul></ul>
  24. 24. Roteiro de Implementação <ul><ul><li>Nos controles... </li></ul></ul><ul><ul><ul><li>php cakescriptsake.php –app meuslivros </li></ul></ul></ul><ul><ul><ul><li>Escolher [C]ontroller </li></ul></ul></ul><ul><ul><ul><li>Seguir a ordem: Usuarios, Colecaos, Livros, Comentários </li></ul></ul></ul><ul><ul><ul><li>Vamos trabalhar com seções; </li></ul></ul></ul><ul><ul><ul><li>Queremos o geramento de métodos para o CRUD; </li></ul></ul></ul><ul><ul><ul><li>Os controles podem ser visualizados em: </li></ul></ul></ul><ul><ul><ul><ul><li>meuslivroscontrollers; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Observe os métodos gerados automaticamente em cada arquivo de controle. </li></ul></ul></ul></ul>
  25. 25. Roteiro de Implementação <ul><ul><li>Nas visões... </li></ul></ul><ul><ul><ul><li>php cakescriptsake.php –app meuslivros </li></ul></ul></ul><ul><ul><ul><li>Escolher [V]iew </li></ul></ul></ul><ul><ul><ul><li>Seguir a ordem: Usuarios, Colecaos, Livros, Comentários </li></ul></ul></ul><ul><ul><ul><li>Queremos o geramento de visões para o CRUD; </li></ul></ul></ul><ul><ul><ul><li>As views podem ser vislumbradas em: </li></ul></ul></ul><ul><ul><ul><ul><li>meuslivrosviews<CONTROLE>; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Traduções podem ser feitas (ou tradizir o bake.php) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Para cada método do controlador é gerado uma view; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>É possível se observar o uso dos helpers para gerar HTML e formulários; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>É possível a customização das telas: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>meuslivrosviewslayoutsdefault.thtml </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>meuslivroswebrootcss </li></ul></ul></ul></ul></ul><ul><ul><ul><li>http://localhost/cake/meuslivros/usuarios </li></ul></ul></ul>
  26. 26. Roteiro de Implementação <ul><ul><li>Customizando a aplicação </li></ul></ul><ul><ul><ul><li>Dar a idéia de uma aplicação única/integrada </li></ul></ul></ul><ul><ul><ul><ul><li>meuslivrosviewspageshome.thtml </li></ul></ul></ul></ul><ul><ul><ul><li>Criar o controlador e as visões para o aplicativo chamado “principal” </li></ul></ul></ul><ul><ul><ul><ul><li>meuslivroscontrollersprincipal_controller.php </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Devido as associações quando da concepção dos modelos, o CakePHP busca os dados do usuário e todos os livros pertencentes a ele sem nenhuma instrução SQL escrita pelo desenvolvedor </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>Criar o diretório: meuslivrosviewsprincipal </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Criar o arquivo: meuslivrosviewsprincipalindex.thtml </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Aproveitamento dos aplicativos gerados pelo bake: Quando o usuário clicar em Ver Comentários , ele será direcionado para a página de visualização do livro (de acordo com as associações dos modelos, um livro tem vários comentários)! </li></ul></ul></ul></ul></ul>
  27. 27. Roteiro de Implementação <ul><ul><li>Customizando a aplicação </li></ul></ul><ul><ul><ul><li>Autenticando Usuários: </li></ul></ul></ul><ul><ul><ul><ul><li>Criar o método login() no arquivo: meuslivroscontrollersprincipal_controller.php </li></ul></ul></ul></ul><ul><ul><ul><ul><li>É possível encontrar um registro por qualquer campo da tabela, através dos métodos do CakePHP (findByNome ou findBySenha, etc...); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Criar a view para o método menu: meuslivrosviewsprincipalmenu.thtml </li></ul></ul></ul></ul><ul><ul><ul><li>Criando o método global (classe-pai) que checa a validade de uma seção: </li></ul></ul></ul><ul><ul><ul><ul><li>Alterando o arquivo: meuslivrosapp_controller.php </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Function checkSession(); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>Agora podemos usar o método criado acima, em qualquer classe-filha ou em qualquer método da classe-filha: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Meuslivroscontrollerslivros_controller.php; </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Método beforeFilter(); </li></ul></ul></ul></ul></ul>
  28. 28. Roteiro de Implementação <ul><ul><li>Melhorando a interface </li></ul></ul><ul><ul><ul><li>Aspectos “cosméticos” e práticos </li></ul></ul></ul><ul><ul><ul><ul><li>meuslivroscontrollerslivros_controller.php </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Modificando o método add(); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>A tática pode ser usada em basicamente qualquer método ou sub-método; </li></ul></ul></ul></ul><ul><ul><li>Validando a entrada de dados </li></ul></ul><ul><ul><ul><li>Evitando problemas com SQL Injection e outros </li></ul></ul></ul><ul><ul><ul><ul><li>meuslivroscontrollerscomentarios_controller.php </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Modificando o método add(); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>O recursos/classe Sanatize faz parte do CakePHP; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>A tática pode ser igualmente utilizada em outros método ou sub-métodos onde haja entrada/passagem de dados; </li></ul></ul></ul></ul>
  29. 29. Roteiro de Implementação <ul><ul><li>Recurso de RSS </li></ul></ul><ul><ul><ul><li>Cumprindo com as metas do projeto </li></ul></ul></ul><ul><ul><ul><ul><li>meuslivroscontrollersprincipal_controller.php </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Adicionando o método rss(); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>Criando a visão para o método rss(): meuslivrosviewprincipal ss.thtml </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Adicionando o link para o recurso de RSS no meuslivrosviewsprincipalindex.thtml </li></ul></ul></ul></ul><ul><ul><li>Usando AJAX </li></ul></ul><ul><ul><ul><li>Utilizando dois Helpers adicionais para criar a funcionalidade de pesquisa </li></ul></ul></ul><ul><ul><ul><ul><li>http://www.prototypejs.org/download </li></ul></ul></ul></ul><ul><ul><ul><ul><li>http://script.aculo.us/downloads </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Salvar ambos em meuslivroswebrootjs </li></ul></ul></ul></ul><ul><ul><ul><li>Criar o controle: meuslivroscontrollersuscas_controller.php </li></ul></ul></ul><ul><ul><ul><li>Criar a view: meuslivrosviewsuscasindex.thtml e meuslivrosviewsuscasupdate.thtml </li></ul></ul></ul>
  30. 30. Referências Bibliográficas Básicas <ul><ul><li>Livros </li></ul></ul><ul><ul><ul><li>Ahsanul Bari, Anupom Syam, CakePHP Application Development . Editora Packt, 2008 </li></ul></ul></ul><ul><ul><ul><li>Minetto, Luiz Elton, Frameworks para desenvolvimento em PHP . Editora Novatec, 2007 </li></ul></ul></ul><ul><ul><li>Links importantes </li></ul></ul><ul><ul><ul><li>http://book.cakephp.org/pt </li></ul></ul></ul><ul><ul><ul><li>http://cakephp.org </li></ul></ul></ul><ul><ul><ul><li>http://cakephp.com.br </li></ul></ul></ul><ul><ul><ul><li>http://www.tuliofaria.net/categoria/cakephp/ </li></ul></ul></ul><ul><ul><ul><li>http://www.revistaphp.com.br/artigo.php?id=93 </li></ul></ul></ul><ul><ul><ul><li>http://www.jack.eti.br </li></ul></ul></ul><ul><ul><ul><li>http://www.br-linux.org (software livre) </li></ul></ul></ul>

×