desenvolvendo aplicações com software livre jackson laskoski [email protected]...

30
Desenvolvendo Desenvolvendo Aplicações com Aplicações com Software Livre Software Livre Jackson Laskoski Jackson Laskoski http://www.JACK.eti.br http://www.JACK.eti.br [email protected] [email protected] Pós-Graduação (lato-sensu) Pós-Graduação (lato-sensu) Gestão em Tecnologia e Gestão em Tecnologia e Desenvolvimento da Informação Desenvolvimento da Informação

Upload: internet

Post on 18-Apr-2015

105 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Desenvolvendo Aplicações Desenvolvendo Aplicações com Software Livrecom Software Livre

Jackson LaskoskiJackson Laskoskihttp://www.JACK.eti.brhttp://www.JACK.eti.br

[email protected][email protected]

Pós-Graduação (lato-sensu)Pós-Graduação (lato-sensu)Gestão em Tecnologia eGestão em Tecnologia e

Desenvolvimento da InformaçãoDesenvolvimento da Informação

Page 2: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Agenda/Plano de EnsinoAgenda/Plano de Ensino10 e 11/10/200810 e 11/10/2008

1.1. Software Livre - (10/10/2008)Software Livre - (10/10/2008) Diferentes tipos de licenciamentoDiferentes tipos de licenciamento O que devo e o que eu não preciso liberar a nível de código-fonte?O que devo e o que eu não preciso liberar a nível de código-fonte?

2.2. Ferramentas de código livre e metodologias de desenvolvimento - Ferramentas de código livre e metodologias de desenvolvimento - (10/10/2008)(10/10/2008)

““As Ruffles” do momento (As Ruffles” do momento (PHPPHP, Ruby, Java, Python), Ruby, Java, Python) Bancos de Dados (MySQL, Firebird, PostgreSQL)Bancos de Dados (MySQL, Firebird, PostgreSQL) Orientação a ObjetosOrientação a Objetos Web BasedWeb Based MVCMVC

3.3. Paradigma RAD (Rapid Application Development): Uma necessidade! Paradigma RAD (Rapid Application Development): Uma necessidade! (10/10/2008)(10/10/2008)

PHP 5: Porque vamos ver ele? O que mudou em relação às versões PHP 5: Porque vamos ver ele? O que mudou em relação às versões anteriores?anteriores?

MySQL 5: Porque vamos ver ele? O que mudou em relação às versões MySQL 5: Porque vamos ver ele? O que mudou em relação às versões anteriores?anteriores?

O que é um Framework?O que é um Framework? Mas afinal, porque é vantagem usar um framework?Mas afinal, porque é vantagem usar um framework?

Page 3: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Agenda/Plano de EnsinoAgenda/Plano de Ensino10 e 11/09/200810 e 11/09/2008

4.4. CakePHP - (10 e 11/10/2008) CakePHP - (10 e 11/10/2008) Principais características e Recursos:Principais características e Recursos:

Baseado na arquitetura MVCBaseado na arquitetura MVC Licença flexível (MIT)Licença flexível (MIT) Compatibilidade com PHP4 e PHP5Compatibilidade com PHP4 e PHP5 Validação de camposValidação de campos ScaffoldingScaffolding Listas de controle de acesso (ACL)Listas de controle de acesso (ACL) ComponentesComponentes HelpersHelpers Geração de código-fonteGeração de código-fonte

Ambiente e cenário envolvidoAmbiente e cenário envolvido Servidor web (Apache)Servidor web (Apache) PHP5PHP5 MySQL5MySQL5

Instalando e entendendo a ferramenta (estrutura de arquivos)Instalando e entendendo a ferramenta (estrutura de arquivos)

5.5. Gerando aplicação de demonstração - (11/10/2008)Gerando aplicação de demonstração - (11/10/2008) Sistema para cadastramento e controle de uma coleção de livros:Sistema para cadastramento e controle de uma coleção de livros:

Visitantes podem realizar comentários e sugestões para cada item;Visitantes podem realizar comentários e sugestões para cada item; Visitantes podem acompanhar a coleção usando um feed RSS;Visitantes podem acompanhar a coleção usando um feed RSS; Deve haver uma área administrativa onde o usuário pode alterar suas coleções;Deve haver uma área administrativa onde o usuário pode alterar suas coleções; A interface deve ser simples e fácil de se utilizar;A interface deve ser simples e fácil de se utilizar;

Page 4: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Agenda/Plano de EnsinoAgenda/Plano de Ensino10 e 11/09/200810 e 11/09/2008

6.6. Trabalho técnico/prático em grupo (3 pessoas) – 11/10/2008Trabalho técnico/prático em grupo (3 pessoas) – 11/10/2008 Definição de uma aplicação prática e funcional, com enfoque a ser definido Definição de uma aplicação prática e funcional, com enfoque a ser definido

por cada grupo:por cada grupo: Deve conter a modelagem do sistema;Deve conter a modelagem do sistema; Todos os recursos que forem julgados necessários e/ou importantes;Todos os recursos que forem julgados necessários e/ou importantes;

Page 5: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Software LivreSoftware Livre

““Software livre" se refere à liberdade dos usuários executarem, copiarem, distribuírem, estudarem, Software livre" 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 modificarem e aperfeiçoarem o software. Mais precisamente, ele se refere a quatro liberdades, para os usuários do software:os usuários do software:

A liberdade de executar o programa, para qualquer propósito (liberdade no. 0);A liberdade de executar o programa, para qualquer propósito (liberdade no. 0); A liberdade de estudar como o programa funciona, e adaptá-lo para as suas necessidades (liberdade 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;no. 1). Aceso ao código-fonte é um pré-requisito para esta liberdade; A liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo (liberdade no. 2);A liberdade de redistribuir cópias de modo que você possa ajudar ao seu próximo (liberdade no. 2); A liberdade de aperfeiçoar o programa, e liberar os seus aperfeiçoamentos, de modo que toda a 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 comunidade se beneficie (liberdade no. 3). Acesso ao código-fonte é um pré-requisito para esta liberdade. liberdade.

Page 6: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Software LivreSoftware LivreDiferenças entre as principais licenças de Diferenças entre as principais licenças de

softwaresoftware GPLGPL

GNU GPL ou simplesmente GPL, é a designação da licença para software livre 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 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 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.derivados sejam licenciados sob a mesma licença, ou seja, sob a GPL.

BSDBSD A licença BSD permite que o software distribuído sob a licença, seja incorporado 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 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 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 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 o uso de muitos componentes do FreeBSD no sistema Mac OS X da Apple Computer.Computer.

MITMIT A licença MIT é similar a licença BSD versão "3-clause". Essencialmente, a A licença MIT é similar a licença BSD versão "3-clause". Essencialmente, a

diferença reside no fato de a licença BSD conter um aviso proibindo o uso 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 "4-clause" da licença promocional do nome do autor sob copyright. A versão "4-clause" da licença BSD também inclui uma cláusula determinando que toda a propaganda do 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 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 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, final, incluíndo o direito ao uso, cópia, modificação, fusão, distribuição, "sublicenciamento", e/ou venda de software."sublicenciamento", e/ou venda de software.

Page 7: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Linguagens de Programação Linguagens de Programação (software livre)(software livre)

As “Ruffles” do momentoAs “Ruffles” do momento JAVA (http://java.sun.com/)JAVA (http://java.sun.com/)

Atualmente licenciado sob GPL pela SUN;Atualmente licenciado sob GPL pela SUN; Mais que orientada, é baseada em objetos;Mais que orientada, é baseada em objetos; É extremamente portável e robusta;É extremamente portável e robusta; Pode ser utilizada no desenvolvimento de aplicações texto, desktop ou web-based;Pode ser utilizada no desenvolvimento de aplicações texto, desktop ou web-based; Tem uma curvatura de aprendizado considerada elevada;Tem uma curvatura de aprendizado considerada elevada; Ainda está se desenvolvendo regionalmente (até mesmo, a nível de Brasil)Ainda está se desenvolvendo regionalmente (até mesmo, a nível de Brasil)

Ruby on Rails (http://www.rubyonbr.org/)Ruby on Rails (http://www.rubyonbr.org/) Segundo Colin Steele em An Introduction to Ruby, “Ruby é duas partes Perl, uma Segundo Colin Steele em An Introduction to Ruby, “Ruby é duas partes Perl, uma

parte Python e uma parte Smalltalk.”parte Python e uma parte Smalltalk.” Devido ao advento do Rails (um framework desenvolvido no próprio Ruby e com Devido ao advento do Rails (um framework desenvolvido no próprio Ruby e com

enfoque na arquitetura MVC), vem ganhando muitos adeptos;enfoque na arquitetura MVC), vem ganhando muitos adeptos; É baseado em objetos e livre (licenciado sob uma licença particular);É baseado em objetos e livre (licenciado sob uma licença particular); Ainda pouco popular regionalmente;Ainda pouco popular regionalmente; Utilizado basicamente em aplicações for web;Utilizado basicamente em aplicações for web; Bastante peculiar quanto a forma de desenvolvimento;Bastante peculiar quanto a forma de desenvolvimento;

Pyton (http://www.pythonbrasil.com.br)Pyton (http://www.pythonbrasil.com.br) Linguagem de código aberto (GPL);Linguagem de código aberto (GPL); Extremamente flexível, script e interpretada;Extremamente flexível, script e interpretada; Bastante portável quanto à sistemas operacionais e equipamentos;Bastante portável quanto à sistemas operacionais e equipamentos; Utilizada mais a nível acadêmico;Utilizada mais a nível acadêmico; Programação tanto desktop quanto web-based;Programação tanto desktop quanto web-based; Curvatura de aprendizado bastante atrativa;Curvatura de aprendizado bastante atrativa;

Page 8: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Linguagens de Programação Linguagens de Programação (software livre)(software livre)

As “Ruffles” do momentoAs “Ruffles” do momento

PHP (http://www.php.net/)PHP (http://www.php.net/) Linguagem script para desenvolvimento de aplicações web-based;Linguagem script para desenvolvimento de aplicações web-based; 100% livre, GPL;100% livre, GPL; Baixa curvatura de aprendizado;Baixa curvatura de aprendizado; A partir da versão 5.0, com um forte apelo e recursos embutidos de desenvolvimento A partir da versão 5.0, com um forte apelo e recursos embutidos de desenvolvimento

OO;OO; Junto com ASP (ferramenta proprietária), PHP domina indiscutivelmente o cenário de Junto com ASP (ferramenta proprietária), PHP domina indiscutivelmente o cenário de

aplicações web-based;aplicações web-based; Permite o desenvolvimento de aplicações alinhado a arquitetura MVC e a Frameworks Permite o desenvolvimento de aplicações alinhado a arquitetura MVC e a Frameworks

(produtividade);(produtividade); A exemplo de JAVA, com um forte incentivo de gigantes (IBM, Oracle e afins) na A exemplo de JAVA, com um forte incentivo de gigantes (IBM, Oracle e afins) na

certificação de profissionais (Certificação Zend);certificação de profissionais (Certificação Zend);

Page 9: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Banco de Dados - SGBD Banco de Dados - SGBD (software livre)(software livre)

MySQLMySQL Banco de Dados Livre, ótima integração com linguagens de programação de mercado 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 (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 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 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 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 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 dúvida alguma o banco de dados mais utilizado junto à programas desenvolvidos em PHP. Site oficial: http://www.mysql.com/PHP. Site oficial: http://www.mysql.com/

FireBirdFireBird Advindo do Interbase da Borland, também trata-se de um SGBD Livre. É rápido, tem 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 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 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 mais utilizado em aplicações standalone/desktop que em aplicação desenvolvidas para ambiente web, contudo, é extremamente robusto e com uma comunidade bastante ambiente web, contudo, é extremamente robusto e com uma comunidade bastante atuante. Site oficial: http://www.firebirdsql.org/atuante. Site oficial: http://www.firebirdsql.org/

PostGreSQLPostGreSQL Sem dúvida alguma uma ferramenta robusta e muito escalável em termos de BD livres 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 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 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 suportes diferenciados como BD escaláveis e ambientes integrados para várias coisas (desenvolvidos por terceiros - Data Warehouse, etc…). Site Oficial: (desenvolvidos por terceiros - Data Warehouse, etc…). Site Oficial: http://www.postgresql.org/http://www.postgresql.org/

Page 10: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Orientação a ObjetosOrientação a ObjetosPequena RevisãoPequena Revisão

ObjetosObjetos Um objeto é uma representação de um conceito real, possui estados, operações 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:(métodos) e dados (atributos). Um objeto em PHP é definido da seguinte forma:<?php<?php

//cria um novo objeeto//cria um novo objeeto

$php = new LinguagemProgramacao;$php = new LinguagemProgramacao;

//um objeto possui atributos//um objeto possui atributos

$php->versao = 5;$php->versao = 5;

//e um objeto possui um método//e um objeto possui um método

$php->ShowVersao();$php->ShowVersao();

?>?>

ClassesClasses Uma classe pode ser considerada um “molde” para criar objetos. Ela define todos 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 os dados e comportamentos possível daquele tipo de objeto. Dessa forma, um objeto é considerado uma instância de uma classe:objeto é considerado uma instância de uma classe:

<?php<?php

class LinguagemProgramacao {class LinguagemProgramacao {

$versao; $versao; //atributo//atributo

//método construtor da classe. É executado sempre que um novo objeto é //método construtor da classe. É executado sempre que um novo objeto é //criado//criado

function __construct() {function __construct() {

$this->versao = 0; $this->versao = 0; //acessando o atributo internamente//acessando o atributo internamente

}}

Page 11: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Orientação a ObjetosOrientação a ObjetosPequena RevisãoPequena Revisão

//método destrutor. É executado sempre que um objeto é destruído//método destrutor. É executado sempre que um objeto é destruído

function __destruct() {function __destruct() {

}}

//método que escreve o conteúdo do atributo//método que escreve o conteúdo do atributo

function showVersao() {function showVersao() {

echo $this->versao;echo $this->versao;

}}

?>?>

HerançaHerança Podemos definir uma classe como sendo uma classe-filha de outra. Isto significa 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 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 muito importante na POO e utilizado extensivamente em frameworks como o CakePHP:CakePHP:

<?php<?php

class LinguagemProgramacaoEstruturada extends LinguagemProgramacao {class LinguagemProgramacaoEstruturada extends LinguagemProgramacao {

function goto($linha) {function goto($linha) {

echo “Movendo para linha $linha”;echo “Movendo para linha $linha”;

//aqui o resto da implementação//aqui o resto da implementação

}}

}}

$cobol = new LinguagemProgramacaoEstruturada;$cobol = new LinguagemProgramacaoEstruturada;

$cobol->showVersao(); $cobol->showVersao(); //usando um método herdado da classe-pai//usando um método herdado da classe-pai

$cobol->goto(100); $cobol->goto(100); //usando um método herdado da classe-filha//usando um método herdado da classe-filha

?>?>

Page 12: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Arquitetura MVCArquitetura MVCMVC é um acrônimo para Model, View e Controller (Modelo, Visão e 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 Controlador). A idéia básica é separar todo o desenvolvimento de uma aplicação em 3 partes ou camadas:aplicação em 3 partes ou camadas:

ModelModel – Gerencia o comportamento dos dados da aplicação. – Gerencia o comportamento dos dados da aplicação. ViewView – Gerencia a saída gráfica e textual da parte da aplicação visível – Gerencia a saída gráfica e textual da parte da aplicação visível

ao usuário final.ao usuário final. ControllerController – Interpreta as entradas de mouse e teclado do usuário, – Interpreta as entradas de mouse e teclado do usuário,

comandando a comandando a VisãoVisão e o e o ModeloModelo para se alterarem de forma para se alterarem de forma apropriada.apropriada.

Todas as requisições feitas pelo usuário são enviadas ao Controller. Este 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 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.com a ação executada ou com os resultados vindos do Model.

A grande vantagem de se utilizar a arquitetura MVC é a separação entre 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 lógica (regras do negócio), apresentação e dados, favorecendo muito o trabalho em equipe. Dessa forma, qualquer mudança, por exemplo, na trabalho em equipe. Dessa forma, qualquer mudança, por exemplo, na apresentação, teria pouco ou nenhum impacto nas demais camadas da apresentação, teria pouco ou nenhum impacto nas demais camadas da aplicação... ao mesmo tempo que tudo continua absolutamente aplicação... ao mesmo tempo que tudo continua absolutamente integrado.integrado.

Page 13: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

FrameworksFrameworksUm framework de desenvolvimento é uma “base” de onde se pode Um framework de desenvolvimento é uma “base” de onde se pode

desenvolver algo maior ou mais específico. É uma coleção de códigos-desenvolver algo maior ou mais específico. É uma coleção de códigos-fonte, classes, funções, técnicas e metodologias integradas à um fonte, classes, funções, técnicas e metodologias integradas à um ambiente centralizador que facilitam o desenvolvimento e manutenção de ambiente centralizador que facilitam o desenvolvimento e manutenção de aplicações.aplicações.

Mas afinal, porque é vantagem usar um framework?Mas afinal, porque é vantagem usar um framework? Passado o período inicial de familiarização com a ferramenta, as vantagens começam a aparecer;Passado o período inicial de familiarização com a ferramenta, as vantagens começam a aparecer; Como todos os desenvolvedores de uma mesma equipe usam um determinado framework, programam usando as 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);mesmas convenções, classes e bibliotecas, a manutenção de um programa fica muito mais ágil (produtividade); Abstrai-se as tarefas mais repetitivas, permitindo a concentração de esforços na regras do negócio;Abstrai-se as tarefas mais repetitivas, permitindo a concentração de esforços na regras do negócio; DRY – Don’t Repeat Yourself (não se repita). Deixe de repetir códigos comuns em módulos de um mesmo sistema 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);(inclusão, alteração, recuperação e exclusão de dados); Facilidade na geração de testes automatizados;Facilidade na geração de testes automatizados; Geração de documentação;Geração de documentação; Uso de tecnologias embutidas:Uso de tecnologias embutidas:

MVCMVC ActiveRecord: Abstrai o programador de conhecer a fundo uma linguagem de manipulação de dados, como a SQL, além de manter toda a 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;aplicação desenvolvida no paradigma orientado a objetos; AJAX (Asynchronous Javascript and XML): Toda página AJAX está em um objeto chamado XMLHTTPRequest, o qual permite que sejam 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;feitas requisições assíncronas ao servidor web, não precisando de atualizações na página ou espera por parte do usuário; Internacionalização: É o processo de possibilitar que seja facilmente alterada a linguagem da interface e de mensagens de uma Internacionalização: É o processo de possibilitar que seja facilmente alterada a linguagem da interface e de mensagens de uma

determinada aplicação.determinada aplicação.

Page 14: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

O CakePHP teve seu desenvolvimento iniciado por Michal O CakePHP teve seu desenvolvimento iniciado por Michal Tartarynowicz em 2005. Baseado nas idéias do framework Ruby Tartarynowicz em 2005. Baseado nas idéias do framework Ruby on Rails, sua principal meta é ser um framework estruturado que on Rails, sua principal meta é ser um framework estruturado que permita programadores PHP de todos os níveis desenvolverem permita programadores PHP de todos os níveis desenvolverem aplicações web robustas e sem perda de flexibilidade.aplicações web robustas e sem perda de flexibilidade.

O CakePHP, apesar de estar às vésperas de sua versão 1.2 (estável) é 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 bastante maduro, com uma proposta clara de trabalho e uma comunidade de desenvolvedores extremamente ativa.comunidade de desenvolvedores extremamente ativa.

Alguns Links importantes:Alguns Links importantes: http://www.cakephp.orghttp://www.cakephp.org http://www.cakephp.com.br/http://www.cakephp.com.br/

Page 15: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Porque usar o CakePHP?Porque usar o CakePHP? Baseado em arquitetura MVCBaseado em arquitetura MVC

Facilita o desenvolvimento e manutenção de aplicações;Facilita o desenvolvimento e manutenção de aplicações; Melhor organização do código-fonte;Melhor organização do código-fonte; Facilita o trabalho em equipe;Facilita o trabalho em equipe; Abstrai o programador de tarefas repetitivas e complexas.Abstrai o programador de tarefas repetitivas e complexas.

Licença FlexívelLicença Flexível O CakePHP é licenciado sob a licença MIT, muito mais flexível que a GPL e a própria O CakePHP é licenciado sob a licença MIT, muito mais flexível que a GPL e a própria

BSD.BSD.

Compatibilidade com PHP4 e PHP5Compatibilidade com PHP4 e PHP5 Como a imensa maioria dos servidores web rodam a versão 4.0 do PHP esta é uma 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 vantagem significativa do CakePHP em relação a outros frameworks PHP, como é o caso do Symfony ou do Zend Framework.caso do Symfony ou do Zend Framework.

Validação de camposValidação de campos O CakePHP possui formas de validar dados digitados pelos usuários em formulários ou 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.URLs. Isso ajuda o programador a evitar dados incorretos ou problemas de segurança.

ScaffoldingScaffolding É um recurso que analisa uma tabela na base de dados e cria autamaticamente É 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 botões e formulários para as operações básicas de inclusão, alteração, e exclusão de dados.dados.

Page 16: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Porque usar o CakePHP?Porque usar o CakePHP?

Listas de controle de acesso (ACL)Listas de controle de acesso (ACL) Permite gerenciar algo (geralmente usuários) que deseja utilizar alguma coisaPermite gerenciar algo (geralmente usuários) que deseja utilizar alguma coisa Permite gerenciar algo que é desejado (aplicações, por exemplo)Permite gerenciar algo que é desejado (aplicações, por exemplo) Não é autenticação de usuáriosNão é autenticação de usuários

Componentes para:Componentes para: Segurança;Segurança; Sessões;Sessões; Tratamento de requisiçõesTratamento de requisições Permite o desenvolvimento de componentes específicos adicionais ao ambientePermite o desenvolvimento de componentes específicos adicionais ao ambiente

HelpersHelpers Existem helpers para auxiliar na geração de HTML, formulários, JavaScript e AJAX. Existem helpers para auxiliar na geração de HTML, formulários, JavaScript e AJAX.

Novos helpers podem ser criados ou reutilizados em outros projetos.Novos helpers podem ser criados ou reutilizados em outros projetos.

Geração de código-fonteGeração de código-fonte O CakePHP apresenta uma ferramenta chamada bake, que permite a criação de 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 diretórios da aplicação, além da geração de código CRUD. CRUD é um acrônimo para Create, Retrieve, Update e Delete.para Create, Retrieve, Update e Delete.

Page 17: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Instalando o CakePHPInstalando o CakePHP Cenário EnvolvidoCenário Envolvido

O CakePHP pode ser utilizado em qualquer plataforma operacional O CakePHP pode ser utilizado em qualquer plataforma operacional com suporte ao interpretador PHP;com suporte ao interpretador PHP;

Servidor Web Apache;Servidor Web Apache; PHP 4.3.2 ou superior;PHP 4.3.2 ou superior; Editor PHP de sua preferência;Editor PHP de sua preferência; DBDesigner ou outra ferramenta de modelagem de dados;DBDesigner ou outra ferramenta de modelagem de dados; Uma base de dados:Uma base de dados:

A versão estável do framework suporta MySQL, PostgreSQL e camada de 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á abstração de banco de dados chamada ADOdb. A versão 1.2 suportará também, nativamente, Oracle.também, nativamente, Oracle.

Passos para a instalaçãoPassos para a instalação Baixar a versão estável da ferramenta em Baixar a versão estável da ferramenta em

http://www.cakephp.org/downloadshttp://www.cakephp.org/downloads Descompactar/extrair no diretório raíz do seu servidor webDescompactar/extrair no diretório raíz do seu servidor web Renomear o diretório para um nome mais usual/curto (cake)Renomear o diretório para um nome mais usual/curto (cake)

Pronto, já está funcionando: http://localhost/cakePronto, já está funcionando: http://localhost/cake

Page 18: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Entendendo a “Morfologia” da Entendendo a “Morfologia” da FerramentaFerramenta

/app/app – – Diretório onde ficará a aplicação desenvolvidaDiretório onde ficará a aplicação desenvolvida /config/config – Arquivos de configuração, DB, etc.. – Arquivos de configuração, DB, etc.. /controllers/controllers – Controladores da aplicação – Controladores da aplicação /index.php/index.php – Página inicial da aplicação – Página inicial da aplicação /models/models – Modelos da aplicação – Modelos da aplicação /plugins/plugins – Plugins que podem ser adicionados – Plugins que podem ser adicionados /tmp/tmp – Usado para cache e logs – Usado para cache e logs /vendors/vendors – Bibliotecas de terceiros – Bibliotecas de terceiros /views/views – Visões da aplicação – Visões da aplicação

/elements/elements – Elementos, pedaços da visão – Elementos, pedaços da visão /errors/errors – Páginas de erros customizadas – Páginas de erros customizadas /helpers/helpers – Ajudantes para gerar código – Ajudantes para gerar código /layouts/layouts – Arquivos de layout – Arquivos de layout /pages/pages – Visões estáticas – Visões estáticas

/webroot/webroot – DocumentRoot para aplicação – DocumentRoot para aplicação /css/css – Arquivos css – Arquivos css /files/files – Arquivos comuns – Arquivos comuns /img/img – Imagens – Imagens /js/js – Javascripts (AJAX) – Javascripts (AJAX)

/cake/cake – Código-fonte do cake – Código-fonte do cake /docs/docs – Documentação do framework – Documentação do framework /vendors/vendors – Bibliotecas de terceiros – Bibliotecas de terceiros index.phpindex.php – Página inicial do framework – Página inicial do framework

Page 19: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Considerações sobre a base de dados Considerações sobre a base de dados de novos projetosde novos projetos

Todas as tabelas devem estar no pluralTodas as tabelas devem estar no plural Ex: Usuarios, ComentariosEx: Usuarios, Comentarios

A chave primária para todas as tabelas deve ser o campo “id”A chave primária para todas as tabelas deve ser o campo “id” Preferencialmente estes campos devem ter algum mecanismo de geração de 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 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.PostgreSQL e o Oracle, isso pode ser feito utilizando-se o recurso de triggers.

Chave estrangeira no singularChave estrangeira no singular Para utilizar chave estrangeira, esta deve possuir nome da tabela no singular Para utilizar chave estrangeira, esta deve possuir nome da tabela no singular

acrescido do campo “id”. Exemplo: usuario_id.acrescido do campo “id”. Exemplo: usuario_id.

Relacionamento de n-n deve ser organizado em ordem alfabéticaRelacionamento de n-n deve ser organizado em ordem alfabética Primeiro nome no singular acrescido de um “_” e o nome da segunda tabela no Primeiro nome no singular acrescido de um “_” e o nome da segunda tabela no

plural. Exemplo: livro_usuarios.plural. Exemplo: livro_usuarios.

É importante seguirmos estas convenções, pois assim o CakePHP pode É importante seguirmos estas convenções, pois assim o CakePHP pode gerar diversas linhas importantes de código-fonte. Além disso, gerar diversas linhas importantes de código-fonte. Além disso, essas convenções facilitam a vida dos novos desenvolvedores, no essas convenções facilitam a vida dos novos desenvolvedores, no que se refere ao entendimento das aplicações.que se refere ao entendimento das aplicações.

Page 20: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Gerando Aplicação - Gerando Aplicação - DemonstraçãoDemonstração

Page 21: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Roteiro de ImplementaçãoRoteiro de Implementação No LinuxNo Linux

php5-cliphp5-cli Apt-get install php5-cli (debian/ubuntu e afins)Apt-get install php5-cli (debian/ubuntu e afins)

No WindowsNo Windows php.exe na variável path do sistema (em geral, ela já está lá)php.exe na variável path do sistema (em geral, ela já está lá)

Gerando o projetoGerando o projeto cd c:\apache2triad\htdocs\cakecd c:\apache2triad\htdocs\cake

php cake\scripts\bake.php –project c:\apache2triad\php cake\scripts\bake.php –project c:\apache2triad\htdocs\cake\meuslivroshtdocs\cake\meuslivros

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Skel Directory: c:\apache2triad\htdocs\cake\cake\scripts\templates\skelSkel Directory: c:\apache2triad\htdocs\cake\cake\scripts\templates\skel

Will be copied to:Will be copied to:

New App Directory: c:\apache2triad\cake\meuslivrosNew App Directory: c:\apache2triad\cake\meuslivros------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Page 22: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Roteiro de ImplementaçãoRoteiro de Implementação Gerando a aplicaçãoGerando a aplicação

php cake\scripts\bake.php –app meuslivrosphp cake\scripts\bake.php –app meuslivros

Configurando o acesso ao banco de dadosConfigurando o acesso ao banco de dados Informações referente ao acesso à base de dadosInformações referente ao acesso à base de dados

Solicita a camada da aplicação que se deseja criarSolicita a camada da aplicação que se deseja criar Aconselhável (devido as relações) criar sempre na ordem:Aconselhável (devido as relações) criar sempre na ordem:

Todos os Modelos;Todos os Modelos; Todos os Controles;Todos os Controles; Todas as Visões;Todas as Visões;

Nos modelos...Nos modelos... Usar a validação de campos;Usar a validação de campos; Definir as associações:Definir as associações:

hasOne – Possui um;hasOne – Possui um; hasMany – Possui muitos;hasMany – Possui muitos; belongsTo – Pertence a;belongsTo – Pertence a; hasAndBelongsToMany – Tem e pertence a muitos;hasAndBelongsToMany – Tem e pertence a muitos;

Page 23: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Roteiro de ImplementaçãoRoteiro de Implementação No caso em específicoNo caso em específico

Um usuário possui muitas coleções, então Um usuário possui muitas coleções, então usuario hasMany colecao;usuario hasMany colecao; Uma coleção pertence a um usuário, então Uma coleção pertence a um usuário, então colecao belongsTo usuario;colecao belongsTo usuario; Uma coleção possui muitos livros, então Uma coleção possui muitos livros, então colecao hasMany livro;colecao hasMany livro; Um livro pertence a uma coleção, então Um livro pertence a uma coleção, então livro belongsTo colecao;livro belongsTo colecao; Um livro possui muitos comentários, então Um livro possui muitos comentários, então livro hasMany comentario;livro hasMany comentario; E um comentário pertence a um livro, logo E um comentário pertence a um livro, logo comentario belongsTo livro;comentario belongsTo livro;

O bake é muito esperto, percebe as associações analisando as O bake é muito esperto, percebe as associações analisando as chaves estrangeiras (relacionamentos) na base de dados. Por chaves estrangeiras (relacionamentos) na base de dados. Por isso é extremamente importante seguir as convenções do isso é extremamente importante seguir as convenções do CakePHP na hora de gerar a base de dados!CakePHP na hora de gerar a base de dados!

Após gerado o modeloApós gerado o modelo O arquivo meuslivros/models/usuario.php pode ser observadoO arquivo meuslivros/models/usuario.php pode ser observado O processo deve se repetir para os demais modelosO processo deve se repetir para os demais modelos Na ordem (devido as associações):Na ordem (devido as associações):

Colecaos, Livros e ComentáriosColecaos, Livros e Comentários

Page 24: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Roteiro de ImplementaçãoRoteiro de Implementação

Nos controles...Nos controles... php cake\scripts\bake.php –app meuslivrosphp cake\scripts\bake.php –app meuslivros Escolher [C]ontrollerEscolher [C]ontroller Seguir a ordem: Usuarios, Colecaos, Livros, Seguir a ordem: Usuarios, Colecaos, Livros,

ComentáriosComentários Vamos trabalhar com seções;Vamos trabalhar com seções; Queremos o geramento de métodos para o CRUD;Queremos o geramento de métodos para o CRUD; Os controles podem ser visualizados em:Os controles podem ser visualizados em:

meuslivros\controllers;meuslivros\controllers; Observe os métodos gerados automaticamente em cada Observe os métodos gerados automaticamente em cada

arquivo de controle.arquivo de controle.

Page 25: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Roteiro de ImplementaçãoRoteiro de Implementação Nas visões...Nas visões...

php cake\scripts\bake.php –app meuslivrosphp cake\scripts\bake.php –app meuslivros Escolher [V]iewEscolher [V]iew Seguir a ordem: Usuarios, Colecaos, Livros, ComentáriosSeguir a ordem: Usuarios, Colecaos, Livros, Comentários Queremos o geramento de visões para o CRUD;Queremos o geramento de visões para o CRUD; As views podem ser vislumbradas em:As views podem ser vislumbradas em:

meuslivros\views\<CONTROLE>;meuslivros\views\<CONTROLE>; Traduções podem ser feitas (ou tradizir o bake.php)Traduções podem ser feitas (ou tradizir o bake.php) Para cada método do controlador é gerado uma view;Para cada método do controlador é gerado uma view; É possível se observar o uso dos helpers para gerar HTML e formulários;É possível se observar o uso dos helpers para gerar HTML e formulários; É possível a customização das telas:É possível a customização das telas:

meuslivros\views\layouts\default.thtmlmeuslivros\views\layouts\default.thtml meuslivros\webroot\cssmeuslivros\webroot\css

http://localhost/cake/meuslivros/usuarioshttp://localhost/cake/meuslivros/usuarios

Page 26: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Roteiro de ImplementaçãoRoteiro de Implementação

Customizando a aplicaçãoCustomizando a aplicação Dar a idéia de uma aplicação única/integradaDar a idéia de uma aplicação única/integrada

meuslivros\views\pages\home.thtmlmeuslivros\views\pages\home.thtml Criar o controlador e as visões para o aplicativo Criar o controlador e as visões para o aplicativo

chamado “principal”chamado “principal” meuslivros\controllers\principal_controller.phpmeuslivros\controllers\principal_controller.php

Devido as associações quando da concepção dos Devido as associações quando da concepção dos modelos, o CakePHP busca os dados do usuário e todos modelos, o CakePHP busca os dados do usuário e todos os livros pertencentes a ele sem nenhuma instrução os livros pertencentes a ele sem nenhuma instrução SQL escrita pelo desenvolvedorSQL escrita pelo desenvolvedor

Criar o diretório: meuslivros\views\principalCriar o diretório: meuslivros\views\principal Criar o arquivo: meuslivros\views\principal\index.thtmlCriar o arquivo: meuslivros\views\principal\index.thtml

Aproveitamento dos aplicativos gerados pelo bake: Aproveitamento dos aplicativos gerados pelo bake: Quando o usuário clicar em Quando o usuário clicar em Ver ComentáriosVer Comentários, ele será , ele será direcionado para a página de visualização do livro (de direcionado para a página de visualização do livro (de acordo com as associações dos modelos, um livro tem acordo com as associações dos modelos, um livro tem vários comentários)!vários comentários)!

Page 27: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Roteiro de ImplementaçãoRoteiro de Implementação

Customizando a aplicaçãoCustomizando a aplicação Autenticando Usuários:Autenticando Usuários:

Criar o método login() no arquivo: meuslivros\controllers\Criar o método login() no arquivo: meuslivros\controllers\principal_controller.phpprincipal_controller.php

É possível encontrar um registro por qualquer campo da É possível encontrar um registro por qualquer campo da tabela, através dos métodos do CakePHP (findByNome ou tabela, através dos métodos do CakePHP (findByNome ou findBySenha, etc...);findBySenha, etc...);

Criar a view para o método menu: meuslivros\views\principal\Criar a view para o método menu: meuslivros\views\principal\menu.thtmlmenu.thtml

Criando o método global (classe-pai) que checa a validade Criando o método global (classe-pai) que checa a validade de uma seção:de uma seção: Alterando o arquivo: meuslivros\app_controller.phpAlterando o arquivo: meuslivros\app_controller.php

Function checkSession();Function checkSession(); Agora podemos usar o método criado acima, em qualquer Agora podemos usar o método criado acima, em qualquer

classe-filha ou em qualquer método da classe-filha:classe-filha ou em qualquer método da classe-filha: Meuslivros\controllers\livros_controller.php;Meuslivros\controllers\livros_controller.php; Método beforeFilter();Método beforeFilter();

Page 28: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Roteiro de ImplementaçãoRoteiro de Implementação

Melhorando a interfaceMelhorando a interface Aspectos “cosméticos” e práticosAspectos “cosméticos” e práticos

meuslivros\controllers\livros_controller.phpmeuslivros\controllers\livros_controller.php Modificando o método add();Modificando o método add();

A tática pode ser usada em basicamente qualquer método A tática pode ser usada em basicamente qualquer método ou sub-método;ou sub-método;

Validando a entrada de dadosValidando a entrada de dados Evitando problemas com SQL Injection e outrosEvitando problemas com SQL Injection e outros

meuslivros\controllers\comentarios_controller.phpmeuslivros\controllers\comentarios_controller.php Modificando o método add();Modificando o método add();

O recursos/classe Sanatize faz parte do CakePHP;O recursos/classe Sanatize faz parte do CakePHP; A tática pode ser igualmente utilizada em outros método ou sub-A tática pode ser igualmente utilizada em outros método ou sub-

métodos onde haja entrada/passagem de dados;métodos onde haja entrada/passagem de dados;

Page 29: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Roteiro de ImplementaçãoRoteiro de Implementação Recurso de RSSRecurso de RSS

Cumprindo com as metas do projetoCumprindo com as metas do projeto meuslivros\controllers\principal_controller.phpmeuslivros\controllers\principal_controller.php

Adicionando o método rss();Adicionando o método rss(); Criando a visão para o método rss(): meuslivros\view\principal\rss.thtmlCriando a visão para o método rss(): meuslivros\view\principal\rss.thtml Adicionando o link para o recurso de RSS no meuslivros\views\principal\Adicionando o link para o recurso de RSS no meuslivros\views\principal\

index.thtmlindex.thtml

Usando AJAXUsando AJAX Utilizando dois Helpers adicionais para criar a funcionalidade de pesquisaUtilizando dois Helpers adicionais para criar a funcionalidade de pesquisa

http://www.prototypejs.org/downloadhttp://www.prototypejs.org/download http://script.aculo.us/downloadshttp://script.aculo.us/downloads Salvar ambos em meuslivros\webroot\jsSalvar ambos em meuslivros\webroot\js

Criar o controle: meuslivros\controllers\buscas_controller.phpCriar o controle: meuslivros\controllers\buscas_controller.php Criar a view: meuslivros\views\buscas\index.thtml e meuslivros\views\buscas\Criar a view: meuslivros\views\buscas\index.thtml e meuslivros\views\buscas\

update.thtmlupdate.thtml

Page 30: Desenvolvendo Aplicações com Software Livre Jackson Laskoski  jackson_laskoski@yahoo.com.br Pós-Graduação (lato-sensu) Gestão em

Referências Bibliográficas Referências Bibliográficas BásicasBásicas

LivrosLivros Ahsanul Bari, Anupom Syam, Ahsanul Bari, Anupom Syam, CakePHP CakePHP

Application DevelopmentApplication Development. Editora Packt, 2008. Editora Packt, 2008 Minetto, Luiz Elton, Minetto, Luiz Elton, Frameworks para Frameworks para

desenvolvimento em PHPdesenvolvimento em PHP. Editora Novatec, . Editora Novatec, 20072007

Links importantesLinks importantes http://book.cakephp.org/pt http://book.cakephp.org/pt http://cakephp.orghttp://cakephp.org http://cakephp.com.brhttp://cakephp.com.br http://www.tuliofaria.net/categoria/cakephp/http://www.tuliofaria.net/categoria/cakephp/ http://www.revistaphp.com.br/artigo.php?id=93http://www.revistaphp.com.br/artigo.php?id=93 http://www.jack.eti.br http://www.jack.eti.br http://www.br-linux.org (software livre)http://www.br-linux.org (software livre)