pós graduação unipê - desenvolvimento web com php - aula 3
TRANSCRIPT
Desenvolvimento Web com PHP
Pós-Graduação em Desenvolvimento Web
Paradigmas de Programação
Paradigmas de Programação
Uma linguagem de programação (LP) = Notação formal para descrição de algoritmos em um computador;
É necessário entender as organizações das LP, com ênfase na compreensão dos seus conceitos abstratos e dos seus elementos de representação;
3
Paradigmas de Programação
Cada LP pode se relacionar com um método de projeto específico;
Cada linguagem de programação pode forçar um certo estilo de programação;
Tais estilos são chamados de paradigmas de programação;
4
Paradigmas de Programação
Principais paradigmas:
Programação Procedural Programação Orientada a Objetos
5
Paradigmas de Programação
Programação Procedural (Estruturado): Estilo de programação convencional (descrita no
aprendizado em algoritmos); Programas são decompostos em “passos” de
processamento; Rotinas são usadas na modularização de passos
específicos;
Ex.: Pascal e C;
6
Paradigmas de Programação
Programação Procedural:
7
program Teste; var
a, b:integer; begin
writeln('Digite um número para 7'); readln(a); writeln('Digite o número para 6'); readln(b); if (a > b) then { Se 7 é maior que 6 então }
writeln('7 é maior que 6') else { Senão… }
if (a < b) then writeln('6 é maior que 7')
else writeln('6 é igual à 7');
end.
Paradigma de Programação Orientado a Objetos
Paradigma de Programação OO
O paradigma OO propõe que a solução de qualquer problema pode ser obtida seguindo estas etapas:
Procurar e implementar classes existentes no problema; Determinar as características e responsabilidades de cada
classe; Instanciar objetos de cada classe; Estabelecer como ocorrerá a interação entre os objetos;
9
Paradigma de Programação OO
Classe Estrutura de dados que possui atributos (variáveis de
classe) e métodos (funções PHP); Descreve as propriedades e comportamentos de objetos;
Modelo ou template para objetos;
Objeto Originada com base em uma classe; A partir de um objeto, temos “uma cópia” dos atributos e
métodos de uma classe; Interagem no sistema e armazenam dados;
10
Paradigma de Programação OO Exemplo 1 – Implementação de uma classe em PHP:
11
// Arquivo Produto.class.php
<?php
class Produto{
// Classe com 4 atributospublic $codigo;public $descricao;public $preco;public $quantidade;
}
?>
Paradigma de Programação OO Exemplo 1 – Instanciando um objeto da classe
Produto:
12
// Arquivo testeObjeto.php
<?php// Incluindo a classe criada anteriormenteinclude_once ‘classes/Produto.class.php’;
// Criando um objeto$produto = new Produto;
// Atribuindo valores aos atributos$produto->codigo = 4001;$produto->descricao = ‘CD – AC/DC’;
?>
Paradigma de Programação OO Exemplo 2 – A classe Produto com atributos e um
método:
13
// Arquivo Produto.class.php<?php
class Produto{
// Classe com 4 atributospublic $codigo;public $descricao;public $preco;public $quantidade;
Paradigma de Programação OO Exemplo 2 – A classe Produto com atributos e um
método:
14
// Arquivo Produto.class.php
function imprimeEtiqueta(){
echo ‘Código: ’ . $this->codigo . ‘<br>’;
echo ‘Descrição: ’ . $this->descricao . ‘<br>’;
}}
?>
Paradigma de Programação OO Exemplo 2 – Instanciando um objeto da classe
Produto e executando um método do mesmo:
15
// Arquivo testeObjeto.php
<?php// Incluindo a classe criada anteriormenteinclude_once ‘classes/Produto.class.php’;// Criando um objeto$produto = new Produto;// Atribuindo valores aos atributos$produto->codigo = 4001;$produto->descricao = ‘CD – AC/DC’;
$produto->imprimeEtiqueta();?>
PHP OO – Construtores e Destrutores
Construtor
Método especial utilizado para definir o comportamento inicial de um objeto;
Muito utilizado para inicializar atributos (variáveis de classe);
Executado automaticamente no momento da instância de um objeto (uso da palavra reservada new);
17
Construtor
Sintaxe:
18
function __construct($p_1, $p_2, ..., $p_n)
Destrutor
Método especial a ser executado automaticamente quando o objeto é desalocado da memória ou quando o programa é finalizado;
Muito utilizado para finalizar conexões, apagar arquivos temporários, etc.;
19
Destrutor
Sintaxe:
20
function __destruct()
PHP OO – Herança
Herança
Permite reutilizar atributos e métodos já definidos em uma outra classe;
Elimina eventuais duplicações ou reescritas de código;
Classes-filha (subclasses) herdam implementações da classe-pai (superclasse) de acordo com uma hierarquia;
22
Herança
Usamos a palavra reservada extends na assinatura de uma classe para estabelecer uma hierarquia;
Sintaxe:
23
<?php
class Filha extends Pai{
// ...
PHP OO – Polimorfismo
Polimorfismo
Permite que subclasses possuam métodos iguais (com a mesma assinatura) de uma superclasse, mas com comportamentos diferentes;
As implementações de tais métodos são redefinidas nas classes-filhas;
Classes-filha (subclasses) herdam implementações da classe-pai (superclasse) de acordo com uma hierarquia;
25
PHP OO – Classes Abstratas
Classes Abstratas
Classes estruturais que servem de base para outras classes;
Não podem ser instanciadas (terem objetos) Apenas as subclasses poderão ser instanciadas;
Usamos a palavra reservada abstract na assinatura de uma classe para torná-la abstrata;
27
Classes Abstratas
Sintaxe:
28
<?php
abstract class Conta{
// ...
PHP OO – Classes Finais
Classes Finais
Classes que não podem ter herdeiros (não podem ser superclasses);
Sintaxe - Exemplo:
30
<?php
final class ContaPoupanca extends Conta {
// ...
PHP OO – Métodos Abstratos
Métodos Abstratos
Métodos que possui apenas assinaturas, implementados em classes abstratas; Não possuem implementação!
Faz com que as classes-filha sejam obrigadas a definir as implementações dos métodos abstratos; Impõem o polimorfismo às subclasses!
Usamos a palavra reservada abstract na assinatura de um método para torná-la abstrata;
32
Métodos Abstratos Sintaxe - Exemplo:
33
<?php
// ...
abstract function transferir($conta);
// ...
PHP OO – Métodos Finais
Métodos Finais
Métodos que não podem ser sobrescritos; Proíbem que subclasses usem polimorfismo!
Usamos a palavra reservada final na assinatura de um método para impedir que seja sobrescrita;
35
Métodos Finais Sintaxe - Exemplo:
36
<?php
// ...
final function transferir($conta){
// ...
PHP OO – Encapsulamento
Encapsulamento
Mecanismo que provê proteção de acesso aos atributos e métodos de um objeto;
A depender de um projeto de uma classe, certos atributos e métodos devem ser tratados exclusivamente: Pela classe que os possui; Pela superclasse e subclasses em uma hierarquia; Por qualquer classe ou script;
38
Encapsulamento
Para definir a visibilidade dos membros de um objeto, usamos as palavras reservadas public, private ou protected na assinatura de atributos e métodos; public – Podem ser acessados livremente; private – Podem ser acessados dentro da própria
classe em que foram declarados; protected – Podem ser acessados dentro da
própria classe em que foram declarados e a partir das classes descendentes;
39
Encapsulamento
Representação UML para as visibilidades de atributos e métodos em diagramas de classe:
(+) public; (-) private; (#) protected;
40
PHP OO – Armazenamento de Dados em Classes
Armazenamento em Classes
Os seguintes membros podem ser utilizados para armazenamento de dados em classes: Constantes; Atributos Estáticos;
Podem ser acessados diretamente a partir do nome da classe, sem a necessidade de um objeto para tal;
42
Armazenamento em Classes
Sintaxe – Constantes – Exemplo:
Para acessar uma constante de classe... ... a partir da própria classe: self::Nome; ... a partir de uma subclasse: parent::Nome; ... Externamente, fora da hierarquia: Biblioteca::Nome;
43
<?phpclass Biblioteca{
const Nome = “GTK ”;}
?>
Armazenamento em Classes
Sintaxe – Constantes – Exemplo:
44
<?phpclass Biblioteca{
const Nome = “GTK ”;}
echo Biblioteca::Nome . ‘<br>’;?>
Armazenamento em Classes Sintaxe – Atributos Estáticos – Exemplo:
Para acessar um atributo de classe estático... ... a partir da própria classe: self::$Quantidade; ... a partir de uma subclasse: parent::$Quantidade; ... Externamente, fora da hierarquia: Aplicacao::
$Quantidade;45
<?phpclass Aplicacao{
static $Quantidade;}
?>
Armazenamento em Classes Sintaxe – Atributos Estáticos – Exemplo:
46
<?phpclass Aplicacao{
static $Quantidade;
function __construct(){
self::$Quantidade++;}
}
new Aplicacao();
echo Aplicacao::$Quantidade . ‘<br>’;?>
PHP OO – Métodos Estáticos
Métodos Estáticos
Podem ser invocados diretamente pelo nome da classe, sem a necessidade de instanciar um objeto; Só podem manipular atributos estáticos; Só podem chamar outros métodos estáticos;
Usamos a palavra reservada static na assinatura de um método de classe;
Usamos a sintaxe NomeDaClasse::NomeDoMetodo() para executar um método estático;
48
Métodos Estáticos Sintaxe – Métodos Estáticos – Exemplo:
49
<?phpclass Aplicacao{
static function Sobre() {echo “Teste estático”;
}}
Aplicacao::Sobre();?>
PHP OO – Interfaces
Interface
Classe que define um conjunto de métodos que determinadas classes de um sistema deverão implementar incondicionalmente;
Seus métodos possuem apenas assinaturas; Não possuem implementação!
Tal classe não possui atributos;
51
Interface
Usamos a palavra reservada interface na assinatura da classe que funcionará como uma interface;
Usamos a palavra reservada implements na assinatura da classe que implementará uma interface;
Uma classe pode implementar mais de uma interface;
52
Interface
Sintaxe – Exemplo:
53
<?php
interface IMensagem{
function mensagem();}
class Aplicacao implements IMensagem{
function mensagem() {echo ‘Exemplo interface’;
}}
?>
PDO – PHP Data Objects
PDO – PHP Data Objects
Unifica o acesso às diferentes extensões de bancos de dados presentes em PHP;
Provê uma API limpa e consistente, unificando a
maioria das características presentes nas extensões de acesso a banco de dados
Unifica a chamada de métodos, graças à orientação a objetos presentes no PHP5;
55
PDO – PHP Data Objects
• Sequência de passos:
1. A aplicação estabelece uma conexão com o SGBD; 2. A aplicação seleciona uma base de dados a ser utilizada durante a conexão; 3. A aplicação executa uma consulta específica (seleção, inserção, remoção...); 4. A aplicação fecha a conexão corrente com o SGBD;
PDO – PHP Data Objects
PDO – Conexão com bancos de dados:
57
Banco String de ConexãoSQLite new PDO(‘sqlite: teste.db’);FireBird new PDO(“firebird:dbname=C:\\base.GDB”, “SYSDBA”, “masterkey”);MySQL new PDO('mysql:host=localhost;dbname=base', 'login', 'senha');Postgres new PDO('pgsql:dbname=example; user=user;
password=senha;host=localhost');
PDO – Exemplos
PDO – Exemplos
No phpmyadmin, configure o banco de dados da atividade:
Database: livros Tabela: famosos
Campos: codigo (int, auto increment, chave primária) e nome (varchar[100]);
59
PDO – Exemplos
Exemplo 1: Inserindo dados via PDO
60
<?php
$conn = new PDO('mysql:host=localhost;dbname=livros', 'Root', 'Unipe');
$conn->exec("INSERT INTO famosos (nome) VALUES ('Thyago Maia')");
$conn = null;
?>
PDO – Exemplos Exemplo 2: Listagem via PDO
61
<?php$conn = new
PDO('mysql:host=localhost;dbname=livros', 'Root', 'Unipe');
$result = $conn->query("SELECT codigo, nome from famosos");
if($result)foreach($result as $row)
echo $row[‘codigo'] . '-' . $row['nome'] . '<br>';
$conn = null;?>
PDO – Exemplos
Exemplo 3: Excluindo dados via PDO
62
<?php
$conn = new PDO('mysql:host=localhost;dbname=livros', 'Root', 'Unipe');
$conn->exec("DELETE FROM famosos WHERE codigo = 1");
$conn = null;
?>
Exercício
Exercício
• Etapa 1 – Preparação do Banco de Dados no phpmyadmin
Database: sistema Tabela: cadastro
Campos: codigo (int, auto increment, chave primária), nome (varchar[100]), telefone (varchar[100]) e email (varchar[100]);
64
Exercício
• Etapa 2 – Preparação do Domínio
Crie uma pasta em htdocs chamada sistema;
65
Exercício
• Etapa 3 – Criação de um formulário HTML
Crie um formulário HTML que permita ao usuário digitar seu nome, telefone e e-mail; Método de envio: POST; Os dados deverão ser submetidos para o script
“cadastro.php”; Salve o documento HTML na pasta sistema com o
nome index.html;
66
Exercício
• Etapa 4 – Criação do script cadastro.php na pasta sistema
O script deverá inicialmente receber os dados submetidos na etapa anterior;
Em seguida, via PDO, o script deverá inserir os dados no banco de dados;
O script deverá redirecionar o usuário para o script lista_usuarios.php;
67
Exercício
• Etapa 5 – Criação do script lista_usuarios.php na pasta sistema
– O script deverá exibir todos os cadastros efetuados até o momento, além de disponibilizar um link que permita ao usuário efetuar um novo cadastro;
68
Exercício
• Etapa 6 – Testar a aplicação
Abra o navegador de sua preferência e acesse: http://localhost/sistema ou http://127.0.0.1/sistema
OBS.: Verifique se o servidor Apache do Xampp está ativo;
69
Exercício
Exercício
• Etapa 1 – Preparação do Banco de Dados no phpmyadmin
Utilizaremos a mesma base criada no exercício anterior;
71
Exercício
• Etapa 2 – Preparação do Domínio
Utilizaremos a pasta sistema criada anteriormente;
72
Exercício
• Etapa 3 – Criação de um formulário HTML
Utilizaremos o mesmo formulário do exercício anterior;
73
Exercício• Etapa 4 – Criação da classe Cadastro.class.php
na pasta sistema
74
Cadastro-nome: string-telefone: string-email: string+setNome(nome: string) : void+setTelefone(telefone: string) : void+setEmail(email: string) : void+getNome() : string+getTelefone() : string+getEmail() : string+inserir() : void+exibir() :void
Exercício• Etapa 5 – Atualização do script cadastro.php
da pasta sistema O script deverá:
Receber os dados submetidos na etapa anterior; Instanciar um objeto da classe Cadastro; Atribuir os dados recebidos para o objeto instanciado
(via construtor de classe); Executar o método inserir a partir do objeto
instanciado; Executar o método exibir a partir do objeto
instanciado; Disponibilizar um link que permita ao usuário efetuar
um novo cadastro; 75
Exercício
• Etapa 6 – Testar a aplicação
Abra o navegador de sua preferência e acesse: http://localhost/sistema ou http://127.0.0.1/sistema
OBS.: Verifique se o servidor Apache do Xampp está ativo!
76
Design Patterns
Design Patterns
Termo largamente utilizado no mundo da orientação a objetos;
Descrevem formas de comunicação e
relacionamentos entre objetos e classes, de maneira a solucionar problemas específicos de projetos OO;
Adotar um Design Pattern não torna mais simples nem mais rápida a implementação de um projeto, mas a torna mais flexível, facilitando o reuso;
78
Exemplos de Design Patterns
Singleton
Permite que um objeto fique disponível para toda a aplicação, porém sem perder o encapsulamento (evitar variáveis globais);
Permite a criação de APENAS UM objeto de determinada classe;
Tal objeto é passível de ser compartilhado por qualquer classe, como um recurso global;
80
Singleton
Exemplo:
81
<?phpclass Singleton {
private static $instance;
public static function getInstance() {if(empty(self::$instance)) {
self::$instance = new self;}return self::$instance;
}}
?>
MVC
Define a separação de classes em 3 grandes grupos de responsabilidades:
Model (Modelo): Classe que define a lógica da aplicação; View (Visualização): Classe responsável pela saída da
aplicação; Controller (Controle): Classe que recebe requisições do
usuário e controla a instância de Views e Models;
A ideia principal é não misturar em uma mesma
classe funcionalidades diferentes;82
MVC
Exemplo:
83
<?phpclass Model {
private $dado;
public function getDado() {return $this->dado;
}public function setDado($dado) {
$this->dado = $dado;}
}?>
MVC
Exemplo:
84
<?phpclass View {
public function exibeDado($dado) {echo “<b>”.$dado.”</b>”;
} }?>
MVC
Exemplo:
85
<?phpclass Controller {
public function principal() {$model = new Model;$view = new View;
$model->setDado(“Teste”);$view->exibeDado($model-
>getDado());}
}?>