67
Técnico em Informática Bruno Silva 2015 Orientação a Objetos

Caderno de INFO(Orientação a Objetos)RDDI (1)

Embed Size (px)

DESCRIPTION

Orientação a objetos

Citation preview

  • Tcnico em Informtica

    Bruno Silva

    2015

    Orientao a Objetos

  • Presidenta da Repblica Dilma Vana Rousseff Vice-presidente da Repblica Michel Temer Ministro da Educao Cid Ferreira Gomes Secretrio de Educao Profissional e Tecnolgica Alssio Trindade de Barros Diretor de Integrao das Redes Marcelo Machado Feres Coordenao Geral de Fortalecimento Carlos Artur de Carvalho Aras Coordenador Rede e-Tec Brasil Cleanto Csar Gonalves

    Governador do Estado de Pernambuco Paulo Henrique Saraiva Cmara

    Vice-governador

    Raul Jean Louis Henry Jnior

    Secretrio de Educao Frederico da Costa Amancio

    Secretrio Executivo de Educao Profissional

    Paulo Fernando de Vasconcelos Dutra

    Gerente Geral de Educao Profissional Josefa Rita de Cssia Lima Serafim

    Coordenador de Educao a Distncia

    George Bento Catunda

    Coordenao do Curso Joo Ferreira

    Coordenao de Design Instrucional

    Diogo Galvo

    Reviso de Lngua Portuguesa Letcia Garcia

    Diagramao

    Izabela Cavalcanti

  • INTRODUO ....................................................................................................................... 3

    1.COMPETNCIA 01 | PRINCPIOS E IMPORTNCIA DA ORIENTAO A OBJETOS ................. 4

    1.1 Histrico e Comparao com Linguagens Estruturadas ....................................... 4

    1.2 Exemplo: Programao Estruturada Versus POO ................................................ 7

    2.COMPETNCIA 02 | CONCEITOS DE CLASSE, HERANA, OBJETO, ATRIBUTO E MTODO . 14

    2.1 Conceitos Fundamentais .................................................................................. 14

    2.2 Atributos .......................................................................................................... 15

    2.3 Mtodos........................................................................................................... 16

    2.4 Trabalhando com Objetos ................................................................................ 17

    2.5 Inicializando Objetos ........................................................................................ 18

    2.6 Construtor ........................................................................................................ 18

    2.7 O Operador $this .............................................................................................. 20

    2.8 Atributos e Mtodos Estticos .......................................................................... 22

    3.COMPETNCIA 03 | CONCEITOS DE ASSOCIAO, ENCAPSULAMENTO, ABSTRAO,

    POLIMORFISMO E INTERFACE ............................................................................................ 24

    3.1 Herana ............................................................................................................ 24

    3.2 Modificadores de Acesso .................................................................................. 31

    3.3 Mtodos Get e Set............................................................................................ 34

    3.4 Classes Abstratas .............................................................................................. 36

    3.5 Interfaces ......................................................................................................... 39

    4.COMPETNCIA 04| UTILIZANDO TCNICAS DE ORIENTAO A OBJETOS EM UMA

    APLICAO......................................................................................................................... 41

    4.1 Conectando ao MySQL ..................................................................................... 42

    4.2 Classe Bsica Filme ........................................................................................... 45

    4.3 Repositrio de Dados ....................................................................................... 46

    4.4 Listando Dados ................................................................................................. 50

    4.5 Incluindo Novos Filmes ..................................................................................... 53

    4.6 Removendo Filmes ........................................................................................... 54

    4.7 Alterando Filmes .............................................................................................. 55

    Sumrio

  • CONCLUSO ....................................................................................................................... 59

    REFERNCIAS ..................................................................................................................... 60

    MINICURRCULO DO PROFESSOR ....................................................................................... 61

  • 3

    Orientao a Objetos

    INTRODUO

    Prezado (a) aluno (a),

    Com programao podemos construir diversos aplicativos para facilitar e

    enriquecer nossas experincias do dia a dia. Esta disciplina visa justamente

    mostrar a vocs como construir sistemas que tm como meio as pginas web,

    utilizando o paradigma orientado a objetos.

    Ela tambm pretende ampliar os conceitos aprendidos na matria de

    programao em PHP, pois utiliza a noo de orientao a objetos como

    forma de modelar os problemas a serem resolvidos. Desta forma, este

    caderno apresenta um material introdutrio sobre programao orientada a

    objetos (OO) utilizando a linguagem PHP. Portanto, essencial que voc

    entenda bem os conceitos bsicos da linguagem PHP e seja capaz de criar

    programas nesta linguagem, utilizando um ambiente de programao e teste.

    Ento, caso nas disciplinas anteriores tenha ficado alguma dvida, releia os

    cadernos de estudo e procure na internet outras explicaes para ajudar na

    compreenso. O sucesso depende de sua dedicao.

    O contedo do caderno dividido em quatro partes principais.

    Introduo, onde so apresentados de forma introdutria os conceitos

    fundamentais do paradigma orientado a objetos e um pouco de sua histria.

    Orientao a Objetos, na qual so mostrados os conceitos fundamentais do

    paradigma OO como, por exemplo, mtodos e atributos.

    Conceitos relacionados reutilizao de cdigo onde so mostradas tcnicas

    de reutilizao de cdigo largamente utilizadas nesse tipo de paradigma

    (Orientada a Objetos).

    Por fim, uma atividade de projeto proposta para que voc aplique os

    conhecimentos aprendidos nesta disciplina.

  • 4

    Tcnico em Informtica

    1.COMPETNCIA 01 | PRINCPIOS E IMPORTNCIA DA

    ORIENTAO A OBJETOS

    Este material apresenta uma introduo sobre programao orientada a

    objetos, utilizando a linguagem de programao PHP. Neste material,

    assumiremos que o leitor possua conhecimentos prvios relacionados

    programao web (HTML, CSS, PHP estruturado).

    Para pessoas que sabem programar em uma linguagem de programao

    estruturada, como C ou PHP bsico, pode surgir uma pergunta.

    Por que eu aprenderia uma forma diferente de programar (i.e., utilizando

    objetos), se at ento nunca surgiu essa necessidade?

    Se o projeto envolver muitas funcionalidades (muitas rotinas) e algumas delas

    possurem um comportamento similar, a orientao a objetos uma boa

    alternativa a ser utilizada nesse projeto. A utilizao de orientao a objetos

    permite ao sistema uma maior reusabilidade, manutenibilidade e qualidade

    do cdigo.

    1.1 Histrico e Comparao com Linguagens Estruturadas

    Em 2004, o modelo de programao orientado a objetos foi adicionado ao

    PHP 5 e permitiu que aplicaes WEB complexas fossem desenvolvidas de

    uma forma simples, modular e reutilizvel.

    Com o surgimento do release PHP 5, programadores finalmente tinham o

    mesmo poder de programao que linguagens proeminentes como o Java e

    C#. Desta forma, PHP finalmente possuiria uma infraestrutura de

    programao orientada a objetos (POO) completa.

    Em linguagens estruturadas costumamos programar tentando reproduzir a

    Competncia 01

  • 5

    Orientao a Objetos

    forma como um computador pensa. Ou seja, programamos uma sequncia

    de comandos para executar a programao. A partir da execuo dessa

    sequncia de comandos, temos o resultado da computao.

    Por outro lado, a linguagem de programao orientada a objetos um

    paradigma de computao que se assemelha forma de pensar dos seres

    humanos. Para realizar a computao, ao invs de uma srie de comandos,

    utilizamos objetos que possuem dados associados e se comunicam entre si.

    Durante os anos 70 e 80, a metodologia de engenharia de software

    predominante era a programao estruturada, que se baseava nos seguintes

    princpios: sequncia, deciso e interao.

    A sequncia quer dizer a ordem principal de execuo de um programa, ou

    seja, o conjunto de passos para execuo do programa. A deciso envolve

    questes que possam surgir no meio do caminho. Geralmente, existe um fluxo

    principal na execuo do programa, mas pode haver desvios. Os mecanismos

    de deciso auxiliam nessa tarefa. J a iterao permite que uma mesma

    funo seja chamada vrias vezes durante a execuo do programa.

    Abaixo, uma das formas de resolver certo problema utilizando o modelo de

    programao estruturada.

    Para resolver um problema complexo, quebre este problema em pequenas

    partes e trabalhe nessas partes separadamente.

    Para resolver cada parte, trate este problema como um novo problema e se

    possvel quebre este em novos subproblemas.

    Repita este processo at que cada subparte esteja resolvida e junte todo o

    resultado.

    Competncia 01

  • 6

    Tcnico em Informtica

    Essa abordagem de programao tambm conhecida como abordagem top-

    down (cima para baixo). Apesar de ser uma tcnica bastante til na escrita de

    cdigo estruturado, a abordagem top-down possui algumas limitaes como

    listadas a seguir.

    Esta focada quase que inteiramente em produzir instrues necessrias

    para se resolver um problema. A modelagem das estruturas de dados que

    compe o problema geralmente deixada em segundo plano na fase de

    projeto do sistema.

    bastante complicado reutilizar um cdigo escrito utilizando essa abordagem

    em outros projetos, dado que os problemas a serem resolvidos so bastante

    especficos para o domnio do sistema projetado.

    Dadas essas limitaes tcnicas, os engenheiros da poca combinaram

    tcnicas top-down com abordagens bottom-up (de baixo para cima). Nesse

    tipo de projeto (bottom-up), problemas similares so reutilizados em outras

    partes de cdigo, fazendo com que estes sejam resolvidos utilizando o mesmo

    trecho de cdigo. Assim, os componentes do sistema se tornavam o mais

    modular possvel, considerando que um mdulo um componente que

    interage com o resto do sistema de uma forma simples e bem definida.

    A ideia bsica a de que um mdulo seja facilmente plugado ao sistema.

    Portanto, para que um mdulo seja utilizado, deve-se conhecer a sua forma

    de interao com outros componentes (tambm conhecida como interface do

    sistema), ou seja, quais os parmetros necessrios para utilizar este mdulo e

    quais as funcionalidades que este mdulo disponibiliza.

    No incio dos anos 80, foi criada a programao orientada a objetos (POO), na

    qual mdulos guardavam estruturas de dados de forma protegida e com

    interface bem definida. O conceito chave da abordagem POO o objeto, que

    um tipo de mdulo que possui uma estrutura de dados e sub-rotinas

    Competncia 01

  • 7

    Orientao a Objetos

    associados. Assim, um objeto um tipo de entidade autossuficiente que

    possui um estado interno (seus dados constituintes) e que pode responder a

    mensagens (chamadas e sub-rotinas).

    Para resolver um determinado problema utilizando a abordagem POO deve-

    se:

    Identificar os objetos envolvidos no problema;

    Identificar as mensagens que so trocadas entre esses objetos.

    A soluo do problema vai resultar em um conjunto de objetos que possuem

    o seu prprio dado associado e um conjunto de responsabilidades. Os objetos

    interagem entre si por meio de troca de mensagens. As principais vantagens

    desse tipo de modelo de programao so:

    Facilidade na escrita do programa;

    Facilidade de entendimento do cdigo;

    Menor quantidade de erros (no caso geral);

    Alto ndice de reuso de cdigo.

    1.2 Exemplo: Programao Estruturada Versus POO

    Suponha que voc queira criar um sistema que calcule o valor dos descontos

    mensais de um funcionrio de uma locadora de filmes. Por simplicidade, ser

    assumido que o trabalhador ir pagar o Imposto de Renda calculado como

    27,5% do salrio bruto mais a contribuio da Previdncia Social, que varia de

    trabalhador pra trabalhador. Sero exibidas vrias formas de se calcular os

    descontos no salrio deste funcionrio.

    Para conhecer um pouco mais sobre o

    histrico das linguages

    orientadas a objetos acesse:

    http://pt.wikibooks.org/wiki/Programa%C3%A7%C3%A3o_Orientada_a_Objetos/Introdu%C3%A7

    %C3%A3o e http://social.stoa.usp.br/poo2013pos/aulas/aula-2-historia-

    da-programacao-orientada-a-objetos

    Competncia 01

  • 8

    Tcnico em Informtica

    Exemplo 1

    O resultado da execuo desse cdigo mostrado a seguir:

    O valor do desconto de Joo Filho 375.

    O valor do desconto de Maria Rute 750.

    O valor do desconto de Jos Salgado 1225.

    Observe que todas as vezes em que

    precisarmos calcular os

    descontos de um novo funcionrio, um novo clculo

    deve ser adicionado. Se a

    forma de calcular o salrio do

    trabalhador for mudada, essa

    alterao ter que ser feita em muitos lugares diferentes.

    Competncia 01

  • 9

    Orientao a Objetos

    Exemplo 2

    Neste exemplo, criamos uma funo para calcular os descontos do

    funcionrio ao invs de repetir o clculo vrias vezes. A sada do programa

    permanece a mesma que a mostrada no exemplo anterior, contudo a

    informao associada aos salrios e previdncia de cada funcionrio perdida

    quando a rotina calcular descontos chamada.

    Alm disso, caso o nmero de funcionrios dessa empresa fosse grande, seria

    bastante complicado manipular as variveis relativas a cada funcionrio.

    Assim, uma estrutura como array seria til para guardar o conjunto de

    funcionrios dessa empresa. O cdigo a seguir apresenta essa mesma

    implantao, utilizando arrays.

    Competncia 01

  • 10

    Tcnico em Informtica

    Exemplo 3

    Este exemplo mostra uma forma mais elaborada de calcular o mesmo salrio

    do funcionrio da locadora. Apesar do cdigo do Exemplo 3 possuir pouca

    repetio de cdigo, este ainda no pode ser considerado um mdulo

    reutilizvel do sistema. Isso se deve ao fato de os dados serem agrupados sem

    uma formatao bem definida e a rotina de calcular descontos no estar

    associada a um funcionrio especfico.

    O cdigo que ser apresentado a seguir mostra como esse problema

    resolvido utilizando orientao a objetos.

    Competncia 01

  • 11

    Orientao a Objetos

    Exemplo 4

    Observe que para esse exemplo especfico (Exemplo 4) a classe Funcionario

    foi criada. Essa classe descreve quais as caractersticas de cada objeto em

    termos de propriedades (atributos) e funcionalidades (mtodos). Nesse caso,

    os atributos da classe Funcionario so nome, salrio base e previdncia e o

    mtodo calcularDescontos.

    Dessa forma, para cada funcionrio existe um nmero de previdncia, nome e

    nmero associado. Maiores detalhes sobre a criao de classes, atributos e

    Competncia 01

  • 12

    Tcnico em Informtica

    mtodos sero discutidos na prxima seo. O mtodo __construct ser

    detalhado nas sees posteriores. Porm, por enquanto, basta saber que este

    mtodo inicializa os atributos da classe Funcionario. Por exemplo, para o

    funcionrio Joo Filho, o construtor chamado passando os parmetros

    Funcionario("Joo Filho", 1000, 100).

    Exemplo 5

    Assuma agora que o cargo do funcionrio seja dependente do salrio que este

    ganha. Portanto, para funcionrios com salrio entre 1000 e 1999 teremos

    um colaborador jnior. Para salrios maiores ou iguais a 2000 e menores que

    2999, o funcionrio pleno e se o salrio for maior ou igual a 3000 temos um

    funcionrio snior.

    Como o tipo do funcionrio ser definido na sua criao, podemos definir o

    tipo de funcionrio utilizando o mtodo construtor para fazer tal operao. O

    trecho de cdigo abaixo apresenta o cdigo que realiza essas operaes.

    Exerccio

    Utilize como base os exemplos anteriores e

    construa dois programas PHP (um

    de forma estruturada e outro

    orientado a objetos) que

    calculem o IMC de uma determinada pessoa. O clculo do IMC avaliado

    como peso dividido pela altura ao

    quadrado.

    Competncia 01

  • 13

    Orientao a Objetos

    Nos links a seguir o aluno poder

    visulalizar outras explicaes que

    mostram a diferena entre o

    paradigma estruturado e

    orientado a objetos. http://fabrica.ms.senac.br/2013/04/pro

    gramacao-estruturada-versus-

    programacao-orientada-a-

    objetos/ www.devmedia.com.br/programacao-

    orientada-a-objetos-x-

    programacao-estruturada/11747

    Videos demonstrativo sobre diferena

    entre programao estrutura e

    orientada a objetos. www.youtube.com/watch?v=vhvmZfxZ

    hPw www.youtube.com/watch?v=PmefpISZ7

    Ew

    Competncia 01

  • 14

    Tcnico em Informtica

    2.COMPETNCIA 02 | CONCEITOS DE CLASSE, HERANA, OBJETO,

    ATRIBUTO E MTODO

    Esta seo aborda os conceitos fundamentais do paradigma de programao

    orientado a objetos. Embora os conceitos aqui estejam sendo apresentados

    com uso da linguagem PHP, os assuntos abordados so genricos e podem ser

    extrapolados para outras linguagens orientadas a objetos.

    2.1 Conceitos Fundamentais

    Objetos so pores de software, descritos por variveis e mtodos. Objetos

    em software modelam os objetos do mundo real atravs do seu

    comportamento e seus componentes. Em linguagem estruturada, at ento,

    vimos os conceitos de atributos e mtodos. Por outro lado, quando falamos

    em componentes de um objeto temos mtodos (relativos s funes) e

    atributos (relativos s variveis).

    Na prtica, um objeto uma representao em memria do computador de

    uma entidade do mundo real.

    O que uma classe?

    Classe o modelo ou prottipo que define as variveis e mtodos comuns a

    um conjunto de objetos de certo tipo. Em geral, uma classe define como

    cada objeto, sua estrutura e seu comportamento, enquanto os objetos so as

    entidades vivas dentro do programa. Uma classe pode ter vrios

    representantes (objetos) dentro de um mesmo programa, cada objeto com

    seus atributos em particular.

    Competncia 02

  • 15

    Orientao a Objetos

    As classes normalmente tm a seguinte forma (Exemplo 6):

    Exemplo 6

    No corpo da classe h basicamente trs componentes bsicos: Atributos,

    Construtores e Mtodos.

    2.2 Atributos

    Tambm conhecidos como variveis de instncia descrevem as

    caractersticas dos objetos.

    O tempo de vida dos atributos igual ao tempo de vida do objeto.

    Cada objeto tem seus prprios valores de atributos em tempo de

    execuo.

    No Exemplo 6, os atributos da classe Conta so nmero e saldo e definem os

    dados associados a este objeto. Portanto, em uma aplicao de banco, para o

    nosso exemplo, toda conta possuir nmero e saldo associados. Os valores

    dos atributos so especficos para cada objeto e podem ou no coincidir com

    Competncia 02

  • 16

    Tcnico em Informtica

    algum outro objeto criado, dependendo de cada projeto.

    2.3 Mtodos

    Os mtodos so os componentes da classe que realizam as computaes

    (funes).

    Mtodos recebem parmetros, ou seja, valores para que podem ser

    utilizados durante a computao.

    Pode ou no retornar um resultado, assim como funes no associadas a

    mtodos.

    Exemplo 7

    Os mtodos possuem uma assinatura, que correspondem a uma descrio do

    que o mtodo deve faze e ainda os valores necessrios para a computao e o

    retorno da computao. A forma bsica da assinatura dos mtodos

    mostrada no Exemplo 7. No caso da funo creditar um determinado valor,

    recebido como parmetro e adicionado ao saldo atual da conta.

    Competncia 02

  • 17

    Orientao a Objetos

    Assim como funes que no so associadas a objetos, a lista de parmetros

    de um mtodo pode ser vazia. Para retornar um resultado de um mtodo,

    basta adicionar a sentena result no final do mtodo (observe o Exemplo 8).

    Aps a criao do objeto calculadora ($calc = new Calculadora();) a funo

    somar chamada e o resultado impresso na tela.

    Exemplo 8

    Sada:

    SOMA : 4

    2.4 Trabalhando com Objetos

    Em PHP, uma varivel inicializada como objeto guarda uma referncia para o

    mesmo e pode ser utilizada para invocar seus mtodos e alterar/visualizar

    seus atributos. A Figura 1 apresenta uma representao grfica de como uma

    varivel que aponta para um objeto (referncia) esquematizada na memria

    do computador.

    Para conhecer um pouco mais sobre classes e objetos em PHP acesse.

    http://php.net/manual/pt_BR/language

    .oop5.basic.php

    Veja tambm esse vdeos:

    www.youtube.com/watch?v=9bQNsfYq

    Vc4 www.youtube.com/watch?v=UM9YBFqI

    wQ4

    Competncia 02

  • 18

    Tcnico em Informtica

    Figura 1 - Acessando Objetos Fonte: Prprio autor

    No Exemplo 8, a varivel $calc permite que o usurio acesse os

    mtodos/atributos do objeto Calculadora.

    2.5 Inicializando Objetos

    Para que uma varivel que referencia um objeto seja utilizada, necessrio

    que este objeto exista, ou seja, preciso que ele seja criado e esteja

    armazenado na memria do computador. PHP dispe do comando new, que

    cria um novo objeto, inicializando os atributos da classe segundo o construtor

    da classe.

    2.6 Construtor

    Tipo especial de mtodo que inicializa as variveis do objeto, quando

    instanciado (inicializado). Como mencionado anteriormente, a nossa classe

    Conta possui dois atributos principais (nmero e saldo).

    Competncia 02

  • 19

    Orientao a Objetos

    Exemplo 9

    Sada:

    Nome do filme: Exterminador

    Saldo: 250

    Construtores no possuem um retorno, e utilizam a instruo

    __construct. Para que um construtor seja chamado necessrio o uso da

    palavra chave new seguida pelo nome da classe e a lista de parmetros.

    No Exemplo 9, o construtor da classe Filme chamado em $filme = new

    Filme(1, 100). Isso invoca o mtodo __construct($nome,

    $saldo), passando nome Exterminador e saldo 100. Os valores do

    nome e saldo da varivel $filme so inicializados no cdigo do construtor

    ($this->nome = $nome; e $this->saldo = $saldo;).

    Veja esse site que apresenta uma descrio mais

    detalhada sobre construtores em

    PHP http://php.net/manual/pt_BR/language

    .oop5.decon.php

    Competncia 02

  • 20

    Tcnico em Informtica

    2.7 O Operador $this

    O operador $this do PHP indica o que a varivel/mtodo que est sendo

    utilizada em determinada parte da classe pertencente ao objeto atual e

    somente a ele. Por exemplo, o mtodo __construct do Exemplo 9 possui dois

    parmetros (nmero e saldo - no confunda com os atributos da classe

    Conta). Para que seja possvel a diferenciao entre os parmetros do mtodo

    construtor e os atributos da classe Conta o operador $this se faz necessrio.

    Dessa forma, quando utilizamos o $this para acessar alguma entidade da

    classe (mtodo ou atributo), de fato estamos referenciando as entidades

    pertencentes a este (this em ingls) objeto que est sendo usado no

    momento.

    Assim no trecho de cdigo a seguir, as variveis marcadas em vermelho

    referem-se aos parmetros do construtor, enquanto que as variveis em azul

    pertencem classe.

    function __construct($nome, $saldo)

    {

    $this->nome = $nome;

    $this->saldo = $saldo;

    }

    O operador til, pois:

    Facilita a leitura do cdigo;

    Pode ser decisivo em casos de ambiguidade.

    Competncia 02

  • 21

    Orientao a Objetos

    Exemplo 10

    Competncia 02

  • 22

    Tcnico em Informtica

    Sada:

    Saldo da conta 1: 100 Saldo da conta 2: 100

    Transferncia efetuada de 50 da conta1 para conta2

    Saldo da conta 1: 50

    Saldo da conta 2: 150

    No Exemplo 10, criamos uma classe conta que possui nmero e saldo e esta

    efetua operaes de dbito, de crdito e tambm de transferncias entre

    contas. Observe neste caso a importncia do operador $this no mtodo

    transferir. No caso geral, quando efetuamos uma transferncia bancria,

    fazemos um dbito na nossa conta corrente e efetuamos um crdito na conta

    de destino. Nesse caso particular, fizemos um dbito de 50 na conta atual

    ($this->debitar($valor)) e efetuamos um crdito de 50 na outra

    conta ($outraConta->creditar($valor)). Alm disso, para a nossa

    aplicao, uma transferncia s pode ser efetuada se h saldo suficiente para

    operao.

    2.8 Atributos e Mtodos Estticos

    Quando um atributo/mtodo pertence no somente a um objeto, como no

    exemplo do nmero de uma Conta (ver Exemplo 10), mas a todos os objetos

    pertencentes classe, ento utilizamos um atributo/mtodo do tipo esttico.

    A declarao de um atributo ou mtodo esttico faz com que este seja

    acessvel sem que haja a necessidade de criao de um objeto. importante

    mencionar que um mtodo esttico pode ser acessado por um objeto, mas

    um atributo no. Dado que atributos/mtodos estticos podem ser acessados

    sem a necessidade de um objeto existir, a palavra-chave $this no pode ser

    utilizada dentro de um mtodo esttico. Alm disso, atributos estticos no

    podem ser utilizados atravs do operador (->).

    O Exemplo 11 apresenta uma forma de utilizao de atributo/mtodo

    esttico. Observe que nenhum objeto foi criado e, mesmo assim, foi possvel

    acessar os atributos da classe. Observe que nesse caso o valor $pi no est

    relacionado com nenhum objeto especfico e, por isso, foi associado classe,

    Competncia 02

  • 23

    Orientao a Objetos

    diferentemente de um saldo da conta que pertence a um objeto especfico.

    Exemplo 11

    Sada:

    Area circunferncia de raio 10 eh 314.1517

    Valor de pi 3.141517

    Links teis www.devmedia.com.br/introducao-a-

    orientacao-a-objetos-em-php/26762

    www.kadunew.com/blog/php/introducao-php-orientado-a-objetos-objetos-

    e-classes

    Competncia 02

  • 24

    Tcnico em Informtica

    3.COMPETNCIA 03 | CONCEITOS DE ASSOCIAO,

    ENCAPSULAMENTO, ABSTRAO, POLIMORFISMO E INTERFACE

    Nesta seo vamos apresentar as principais tcnicas de reuso de software do

    paradigma orientado a objetos.

    3.1 Herana

    A reduo de custos com software no est em contratar programadores

    baratos e mal qualificados. Isso pode prejudicar bastante o tempo de entrega

    do projeto e sua usabilidade, alm de dificultar a manuteno do cdigo.

    A reduo dos custos de um determinado software se d atravs do reuso e

    adaptabilidade do cdigo. De fato, um dos custos mais efetivos do processo

    de desenvolvimento de software est relacionado ao capital humano. Para

    isso, entre outros aspectos, necessrio dispor de uma linguagem que d

    suporte a fatores de qualidade como facilidade de reuso e manuteno,

    incluindo adaptabilidade.

    Uma das formas de reuso de software a herana. Relaes como ObjetoA

    um tipo de ObjetoB so claros indicativos de que a herana pode ser utilizada.

    Ex: Poupana (Objeto A) um tipo de Conta (Objeto B). Ou seja, o ObjetoA

    tem tudo que ObjetoB tem, incluindo algumas funcionalidades extras.

    Quando uma classe herda da outra temos uma relao de dependncia entre

    as duas, na qual existe uma superclasse (classe que herdada) e uma

    subclasse (classe que herda). Com esse recurso possvel aproveitar uma

    estrutura existente de uma classe e replicar em outra. Dessa forma,

    conseguimos reutilizar cdigos, sem a necessidade de reescrever ou duplicar

    trechos do programa. Os relacionamentos entre as subclasses e a superclasses

    em PHP so:

    1. A subclasse herda o comportamento (atributos e mtodos), diretamente

    Competncia 03

  • 25

    Orientao a Objetos

    de apenas uma superclasse;

    2. Funciona como uma hierarquia.

    Figura 2 - Hierarquia de classes Fonte: Prprio autor

    No exemplo acima (Figura 2) Cachorro herda diretamente de Mamfero,

    mas tambm herda indiretamente de animal, haja vista que a herana

    transitiva.

    Usa a palavra reservada extends exemplo: class Poupanca

    extends Conta{}

    O Exemplo 12 estende o Exemplo 10 e mostra como seria criada uma classe

    Poupana que herda da classe Conta. Como se sabe, uma poupana bancria

    um tipo especial de conta que possui uma taxa de juros que aplicada ao

    saldo em perodos determinados.

    Neste exemplo, veremos como simples herdar o comportamento da classe

    Conta na classe Poupanca. Observe que na classe poupana, apenas as

    funcionalidades adicionais so codificadas e todo o restante das

    funcionalidades da classe Conta so aplicadas implicitamente ao cdigo da

    classe Poupanca. Os mtodos creditar e debitar so adicionados

    implicitamente na classe poupana. Portanto, pode ser chamada diretamente

    sem maiores problemas.

    Competncia 03

  • 26

    Tcnico em Informtica

    Exemplo 12

  • 27

    Orientao a Objetos

    Sada do programa:

    Saldo da conta 1: 100

    Saldo da conta 2: 105

    Podemos observar que no caso da conta poupana, o valor do saldo foi

    atualizado com juros (que nesse caso fixo em 5%). A superclasse Conta tem

    como subclasse Poupanca.

    Se ao invs de adicionarmos um valor fixo para a taxa de juros, quisssemos

    inicializar o valor da taxa com um valor dado pelo usurio? Utilizaramos um

    construtor como no Exemplo 13. O construtor inicializa o nmero, saldo e

    juros com um valor definido pelo usurio.

    Exemplo 13

    //os mtodos debitar e creditar so utilizados sem problemas

    //mesmo que no sejam escritos explicitamente.

    $poupanca->creditar(50);

    $poupanca->debitar(100);

    $poupanca->atualizarJuros();

    echo "Saldo da conta $conta->numero: $conta->saldo ";

    echo "Saldo da conta $poupanca->numero: $poupanca->saldo ";

    ?>

  • 28

    Tcnico em Informtica

    function creditar($valor)

    {

    $this->saldo = $this->saldo + $valor;

    }

    function debitar($valor)

    {

    $this->saldo = $this->saldo - $valor;

    }

    function transferir($outraConta, $valor) {

    if($this->saldo > $valor)

    {

    $this->debitar($valor);

    $outraConta->creditar($valor);

    }

    }

    }

    class Poupanca extends Conta{

    public $juros;

    function __construct($numero, $saldo, $juros)

    {

    $this->numero = $numero;

    $this->saldo = $saldo;

    $this->juros = $juros;

    }

    function atualizarJuros()

    {

    $this->saldo = $this->saldo*(1 + $this->juros);

    }

    }

    $conta = new Conta(1, 150);

    $poupanca = new Poupanca(2, 150, 0.10);

    $conta->creditar(50);

    $conta->debitar(100);

    $poupanca->creditar(50);

    $poupanca->debitar(100);

    $poupanca->atualizarJuros();

    echo "Saldo da conta $conta->numero: $conta->saldo ";

    echo "Saldo da conta $poupanca->numero: $poupanca->saldo ";

    ?>

    Competncia 03

  • 29

    Orientao a Objetos

    Sada do programa:

    Saldo da conta 1: 100

    Saldo da conta 2: 110

    Apesar de estar sintaticamente correta, a forma de inicializar os atributos da

    classe Conta no construtor de Poupanca no est sendo feita da maneira mais

    adequada. Estamos reescrevendo o cdigo do construtor de Conta no

    construtor da classe Poupanca. Poderamos, ao invs disso, reutilizar o

    construtor de poupana fazendo uma chamada do construtor da classe pai

    utilizando o operador (parent::). Com o uso deste operador podemos

    acessar qualquer mtodo da classe pai (at mesmo o construtor). No Exemplo

    14, mostramos como o mesmo cdigo seria executado de uma forma mais

    elegante pela utilizao do operador (parent::).

    Exemplo 14

  • 30

    Tcnico em Informtica

    A sada do Exemplo 14 idntica do Exemplo 13. Porm, a segunda forma

    de se escrever o cdigo mais eficiente dado que, caso haja uma alterao no

    cdigo do construtor da classe Conta, a alterao seria feita apenas na classe

    Conta.

    possvel tambm alterar o comportamento de uma determinada classe

    reutilizando o cdigo da superclasse. Por exemplo, se no caso da poupana

    todo crdito fosse seguido de uma atualizao de juros. Nesse caso, teramos

    }

    }

    }

    class Poupanca extends Conta{

    public $juros;

    function __construct($numero, $saldo, $juros)

    {

    parent::__construct($numero, $saldo);

    $this->juros = $juros;

    }

    function atualizarJuros()

    {

    $this->saldo = $this->saldo*(1 + $this->juros);

    }

    }

    $conta = new Conta(1, 150);

    $poupanca = new Poupanca(2, 150, 0.10);

    $conta->creditar(50);

    $conta->debitar(100);

    $poupanca->creditar(50);

    $poupanca->debitar(100);

    $poupanca->atualizarJuros();

    echo "Saldo da conta $conta->numero: $conta->saldo ";

    echo "Saldo da conta $poupanca->numero: $poupanca->saldo ";

    ?>

    Competncia 03

  • 31

    Orientao a Objetos

    uma classe Poupanca como mostrada no Exemplo 15 (insira a classe Poupanca

    do Exemplo 14 e veja voc mesmo a diferena no resultado).

    Exemplo 15

    Sada do programa:

    Saldo da conta 1: 100

    Saldo da conta 2: 132

    Nesse caso, fizemos uma sobrecarga do mtodo creditar. Onde o mtodo da

    superclasse (Conta) foi alterado para um comportamento diferente na

    subclasse (Poupana). importante salientar que a chamada do mtodo da

    superclasse com o operador parent:: no obrigatrio e o mtodo

    sobrescrito pode ser totalmente diferente do da classe pai.

    3.2 Modificadores de Acesso

    A fim de garantir que algumas variveis, atributos e at mesmo classes s

    sejam visveis nos locais necessrios, PHP dispe de modificadores de acesso

    class Poupanca extends Conta{

    public $juros;

    function __construct($numero, $saldo, $juros)

    {

    parent::__construct($numero, $saldo);

    $this->juros = $juros;

    }

    function creditar($valor)

    {

    parent::creditar($valor);

    $this->atualizarJuros();

    }

    function atualizarJuros()

    {

    $this->saldo = $this->saldo*(1 + $this->juros);

    }

    }

    Competncia 03

  • 32

    Tcnico em Informtica

    que indicam a visibilidade de cada atributo, mtodo ou at mesmo da prpria

    classe. Essa funcionalidade importante para garantir que somente o

    necessrio seja visvel fora da classe. Isso garante que a classe PHP seja

    visualizada como um mdulo isolado e apenas o que interessa seja visvel a

    outras partes do cdigo.

    Os modificadores de acesso da linguagem PHP so:

    Private, visvel apenas dentro da classe.

    Protected, visvel dentro da classe e em todas as classes que herdam desta

    classe.

    Public, visvel em todos os lugares do sistema. Quando no se especifica

    nenhuma opo, ento o atributo/mtodo assumido como public.

    Os exemplos a seguir auxiliaro o entendimento das variveis public,

    protected e private.

    Exemplo 16

    Sada:

    Competncia 03

  • 33

    Orientao a Objetos

    Atributo Public : 1

    No Exemplo 16 observa-se que apenas a varivel $varPublic visvel,

    portanto apenas esta pode ser acessada de fora da classe. O mesmo vale para

    o Exemplo 17 onde apenas o mtodo pblico pode ser invocado de fora da

    classe.

    Exemplo 17

    No Exemplo 18, modificamos o Exemplo 15 e vemos um exemplo de um

    atributo protected ($juros) que utilizado pela subclasse de forma direta. Se

    este atributo fosse private, haveria um erro e a sada no seria gerada.

    Competncia 03

  • 34

    Tcnico em Informtica

    Exemplo 18

    3.3 Mtodos Get e Set

    Para um melhor controle das variveis dos objetos, recomendado que elas

    sejam declaradas como private. Com esse procedimento, garantido que

    nenhuma outra parte do programa faa uso indevido das variveis. O que

    voc acha se uma varivel como saldo bancrio, por exemplo, fosse declarada

    com public? Qualquer outro cdigo do programa poderia atribuir qualquer

    valor para a varivel saldo, isto seria um desastre no ?

    Para controlar o acesso das variveis como boa prtica de programao so

    declarados nas classes os mtodos get e set, que so mtodos que

    retornam o valor da varivel e atribuem um novo valor a ela,

    respectivamente.

    Dessa forma, o programador define quem pode acessar as variveis e quais

    so as condies para que uma varivel seja alterada ou lida. O Exemplo 19

    class Poupanca extends Conta{

    protected $juros;

    function __construct($numero, $saldo, $juros)

    {

    parent::__construct($numero, $saldo);

    $this->juros = $juros;

    }

    function creditar($valor)

    {

    parent::creditar($valor);

    $this->atualizarJuros();

    }

    function atualizarJuros()

    {

    $this->saldo = $this->saldo*(1 + $this->juros);

    }

    }

    Os links abaixo apresentam informaes adicionais a respeito dos conceitos de orientao a

    objetos em PHP e herana.

    http://php.net/manual/pt_BR/language

    .oop5.basic.php http://josemalcher.net/heranca-php/

    http://php.net/manual/pt_BR/language.oop5.inheritance.p

    hp

    Competncia 03

  • 35

    Orientao a Objetos

    mostra como o saldo de uma conta de banco poderia ser lido mesmo que a

    varivel saldo seja private (usaremos mtodos get e set). Observe que no

    Exemplo 14, por outro lado, o saldo da conta pode ser manipulado sem

    problemas em qualquer parte do programa.

    Exemplo 19

    Competncia 03

  • 36

    Tcnico em Informtica

    3.4 Classes Abstratas

    Um dos maiores benefcios do conceito de orientao a objetos o uso de

    tipos abstratos. Uma abstrao de uma classe um nome elegante para um

    agregado de dados e informaes bem encapsulados. Muitas vezes voc no

    est interessado em como as operaes so realizadas, mas sim no

    comportamento desse agrupamento de dados. Em PHP as abstraes de

    dados so implantadas com classes abstratas e interfaces.

    Vejamos um exemplo de abstrao de dados: suponha que queiramos

    representar uma classe comida. Sabe-se que a comida no pode ser

    imaginada sem que um dos seus representantes seja pensado. Ou seja, s

    existe uma comida se houver um tipo de comida especfica (ex. Arroz, Feijo).

    O que seria um objeto Comida? Comida representa um conceito abstrato

    daquilo que se pode comer.

    Em PHP, quando h algum comportamento (mtodo) em alguma classe que

    no podemos representar a menos que uma classe que a herde implante,

    temos uma grande candidata classe abstrata. Fica a cargo das suas

    subclasses o trabalho de redefinir o mtodo dito abstrato.

    Por exemplo, suponha que precisssemos de uma classe do tipo figura

    geomtrica para calcularmos sua rea e permetro. Nesse caso, para

    calcularmos a rea temos que especificar que tipo de figura geomtrica

    temos. Portanto, a classe FiguraGeometrica seria uma classe abstrata. Como

    subclasses desta temos, para esse exemplo, Quadrado e Circunferencia. A

    Figura 3 detalha a estrutura de classes.

    Competncia 03

  • 37

    Orientao a Objetos

    Figura 3 - Esquema de classes para Figura Geomtrica. Fonte: Prprio autor

    Observe que no caso do Quadrado e Circunferencia pode-se calcular sua rea

    e permetro. O Exemplo 20 apresenta o cdigo referente s trs classes

    mostradas a seguir.

    Exemplo 20

  • 38

    Tcnico em Informtica

    Sada:

    Tipo: Circunferencia, Area 314, Perimetro 62.8

    Tipo: Retangulo, Area 200, Perimetro 60

    }

    public function area()

    {

    return 3.14*$this->raio*$this->raio;

    }

    public function perimetro()

    {

    return 2*3.14*$this->raio;

    }

    }

    class Retangulo extends FiguraGeometrica{

    private $lado1, $lado2;

    public function __construct($tipo, $lado1, $lado2)

    {

    parent::__construct($tipo);

    $this->lado1 = $lado1;

    $this->lado2 = $lado2;

    }

    public function area()

    {

    return $this->lado1*$this->lado2;

    }

    public function perimetro()

    {

    return 2*$this->lado1 + 2*$this->lado2;

    }

    }

    $circ = new Circunferencia("Circunferencia", 10);

    $circ->printCaracteristicas();

    $retangulo = new Retangulo("Retangulo", 10, 20);

    $retangulo->printCaracteristicas();

    ?>

    Para definir a classe como abstrata

    utilizamos a palavra chave abstract

    antes da definio da classe. O mesmo

    vale para os mtodos abstratos. Observe tambm

    que o mtodo possui apenas

    assinatura e no possui corpo. Como

    ambas as classes Circunferencia e

    Retangulo herdam de

    FiguraGeometrica, o mtodo

    printCaracteristicas pode ser chamado

    sem problemas atravs de suas classes filhas.

    Competncia 03

  • 39

    Orientao a Objetos

    3.5 Interfaces

    E se ao invs de abstrair parte da implantao, como fazemos com classes

    abstratas, quisssemos abstrair toda a implantao de todos os mtodos da

    classe? Ou seja, se no estivssemos interessados nas implantaes das

    classes, mas sim nos servios que a classe pode oferecer, usaramos interfaces

    que so espcies de contratos entre duas classes. Uma oferece servios

    outra. Como, por exemplo, repositrios onde s estamos interessados em

    inserir, remover e atualizar. No estamos interessados se o repositrio feito

    com arrays, banco de dados, vetores, ou qualquer que seja a estrutura de

    dados na qual os objetos so armazenados. As interfaces podem ser pensadas

    relativamente como uma classe abstrata s com mtodos abstratos.

    Exemplo de Interface:

    interface IRepositorioContas{

    public function cadastrar($conta);

    public function remover($conta);

    public function atualizar($conta);

    }

    Todos os repositrios que implantam os servios definidos em

    IRepositrioContas devem conter os mtodos definidos na interface acima.

    Por exemplo, uma classe Agencia poderia implantar esta interface em

    particular. Precisamos informar que a classe implanta a interface em questo,

    usando a palavra chave implements como descrito abaixo.

    public Agencia implements IRepositorioContas {

    public function cadastrar($conta)

    {

    //Corpo da classe

    }

    public function remover($conta)

    {

    //Corpo da classe

    }

    www.youtube.com/watch?v=S4DC7uRNrQE

    Implemente em PHP a classe Funcionario,

    que tem como atributos o nmero de

    dias trabalhados, valor do ganho dirio

    e seu respectivo nome. Adicione

    classe Funcionario um mtodo que calcula o seu salrio com base no ganho dirio e nos

    dias trabalhados.

    Competncia 03

  • 40

    Tcnico em Informtica

    public function atualizar($conta)

    {

    //Corpo da classe

    }

    }

    Assim como objetos que herdam de alguma classe podem ser referenciados

    pela superclasse, um objeto que referencia uma interface pode ser

    referenciado por uma varivel com o tipo da Interface em questo. Por

    exemplo:

    $contas1 = new Agencia();

    $contas2 = new ObjetoQueImplementaIRepositorioContas();

    $contas2->inserir(new Conta());

    $contas1->inserir(new Conta());

    //posso chamar sem medo os mtodos de IRepositorioContas.

    Pense na implementao da

    classe gerente, que um tipo especial de

    funcionrio, pois tem os mesmos atributos de um funcionrio, mas seu salrio

    calculado de forma diferente, seu salrio fixado em 1000.00

    reais. Tente implementar esta classe reusando o cdigo da classe

    Funcionario.

    Digamos que devemos calcular a mdia entre dois nmeros e no

    estamos interessados em como esta mdia calculada. Defina

    trs classes Mediageometrica, MediaAritmetica e

    MediaHarmonica cada um com um mtodo

    CalcularMedia. Escreva uma tela de

    Teste com um mtodo para testar os trs mtodos usando a mesma referencia a um Tipo Media. Faa a

    questo usando interface e depois use

    Classe abstrata.

    Competncia 03

  • 41

    Orientao a Objetos

    4.COMPETNCIA 04| UTILIZANDO TCNICAS DE ORIENTAO A

    OBJETOS EM UMA APLICAO

    O projeto utilizado por esta disciplina uma continuao do projeto

    Popcorntv que vocs j conhecem. Vamos neste caderno reaproveitar o

    projeto da disciplina de Desenvolvimento para Web e modificar o cdigo para

    que siga o padro orientado a objetos. Consideramos que voc conhea os

    pr-requisitos necessrios para elaborao do projeto, ou seja, voc j sabe

    utilizar o XAMPP, Aptana Studio, MySQL. Vamos fazer um cadastro completo

    de filmes para a locadora virtual utilizando classes e objetos ao invs de

    puramente PHP estruturado. A Figura 4 apresenta a tela principal do

    programa.

    Figura 4 Popcorn TV Projeto da disciplina. Fonte: Prprio autor.

    Utilize o projeto base que est localizado no AVA e importe para o Aptana. Se

    voc estiver com dvidas de como fazer isso, veja a Seo 5 do caderno de

    Desenvolvimento para Web que l voc encontrar as informaes

    Competncia 04

  • 42

    Tcnico em Informtica

    necessrias para importar o projeto.

    4.1 Conectando ao MySQL

    Assumimos que voc j possua uma base de dados chamada popcorntv

    previamente configurada utilizando o XAMPP. Essa base de dados a mesma

    que foi utilizada no projeto da disciplina de Desenvolvimento para Web. Para

    o caso orientado a objetos, ao invs de utilizar comandos estruturados para

    conectar ao banco de dados, vamos criar uma classe que faa conexo com o

    banco de dados. Todos os comandos de envio de consultas SQL sero por esta

    classe. A classe apresentada na Figura 5. Crie um novo arquivo chamado

    conexao.php e digite o cdigo abaixo. Nos comentrios do cdigo esto as

    explicaes de cada funo e varivel. Observe que foram criados mtodos

    para conectar ao banco, executar consultas e todas as variveis relativas ao

    banco ficam encapsuladas no objeto conexo quando este for criado.

    Depois de criada a classe, basta que o programador crie um novo objeto

    conexo, conecte ao banco e execute as consultas desejadas. Por exemplo:

    //Cria o objeto conexo que ser responsvel pelas chamadas ao banco de

    dados $conexao = new Conexao("localhost", "root", "", "popcorntv");

    //Conecta ao banco de dados

    if($conexao->conectar() == false)

    {

    //Caso ocorra algum erro, uma mensagem mostrada ao

    usurio

    echo "Erro" . mysqli_error();

    }

    $sql = "DELETE FROM filme WHERE codigo = '2'";

    //Executa a consulta

    $conexao->executarQuery($sql);

    Voc deve ter o cuidado de saber o

    endereo de seu banco, a senha, o login e o nome do banco. Caso algum deles esteja errado,

    ir aparecer uma mensagem de erro

    informando. Verifique tambm se o XAMPP est

    ligado com o Apache e o MySQL

    (ver caderno de desenvolvimento

    para web).

    Competncia 04

  • 43

    Orientao a Objetos

    Competncia 04

  • 44

    Tcnico em Informtica

    Figura 5 - Classe Conexo. Fonte: Prprio autor.

    No link abaixo voc ver um artigo completo sobre

    conexo com banco de dados MySQL,

    utilizando PHP orientado a objetos.

    Leia o texto e se concentre nos

    aspectos tericos do artigo dado

    porque utilizamos uma forma

    diferente de escrever o cdigo.

    www.escolacriatividade.com/php-orientado-a-

    objetos-conexao-a-banco-de-dados/

    Competncia 04

  • 45

    Orientao a Objetos

    4.2 Classe Bsica Filme

    A classe bsica filme serve para encapsularmos os dados dos filmes de nossa

    loja. Os dados da classe filme so: ttulo, cdigo, sinopse, quantidade e trailer.

    Para cada atributo da classe sero criados mtodos get e set e o resultado

    voc pode conferir na Figura 6. Observe que no sero explicados novamente

    esses conceitos neste ponto do texto, pois j foram apresentados na seo de

    orientao a objetos.

    Competncia 04

  • 46

    Tcnico em Informtica

    Figura 6 - Classe Filme. Fonte: Prprio autor.

    4.3 Repositrio de Dados

    Para acesso dos dados do banco vamos utilizar uma classe para manipulao

    dos mesmos. Assim, sempre que quisermos ler ou alterar um elemento do

    banco de dados, vamos acessar essa classe que, em seguida, utilizar a classe

    Conexao. Essa classe chamada de repositrio e funciona como uma ponte

    entre a aplicao e o local onde os dados so guardados. A Figura 7 apresenta

    sua relao com o restante da aplicao.

    Competncia 04

  • 47

    Orientao a Objetos

    Figura 7 - Esquema de acesso aos dados do Sistema. Fonte: Prprio autor.

    A partir da utilizao do repositrio, a aplicao no necessita executar

    comandos SQL diretamente. Portanto, h uma separao entre o cdigo da

    aplicao e o controle da persistncia dos dados. O cdigo do repositrio

    mostrado na Figura 8 e j contm mtodos para inserir, alterar e deletar

    filmes da nossa locadora virtual. Alm disso, foi criada uma interface para que

    outros tipos de repositrios possam ser criados, alm do repositrio que

    utiliza MySQL. Caso outra forma de guardar os dados da aplicao fosse

    necessria (arquivos, por exemplo), no precisaramos alterar nada acima do

    repositrio (Figura 7). Apenas o repositrio seria alterado. Crie no seu projeto

    um arquivo repositorio_filmes.php e adicione o cdigo abaixo. Ele est todo

    comentado e no ser difcil entender os seus conceitos, dado que voc

    chegou at aqui.

    Competncia 04

  • 48

    Tcnico em Informtica

    Competncia 04

  • 49

    Orientao a Objetos

    Competncia 04

  • 50

    Tcnico em Informtica

    Figura 8 - Classe de repositrio dos dados. Fonte: Prprio autor.

    4.4 Listando Dados

    Vamos agora listar os dados da tabela filmes e apresent-la na tela. Caso voc

    no se lembre, olhe no caderno de Desenvolvimento Web como essa

    atividade realizada utilizando cdigo estruturado. Vamos fazer essa mesma

    listagem utilizando cdigo orientado a objetos. Para isso, vamos alterar a

    pgina index.php e fazer duas alteraes. A primeira diz respeito ao incio da

    pgina que ir criar o repositrio para obter a lista de todos os filmes

    cadastrados no banco. O trecho de cdigo mostrado a seguir:

    O repositrio de dados um padro

    de projeto muito utilizado em orientao a

    objetos. Veja mais conceitos

    relacionados a este tema em:

    http://sergiotaborda.wordpress.com/desenvolvimento-de-software/java/patte

    rns/repository/

    Competncia 04

  • 51

    Orientao a Objetos

    A outra mudana (cdigo logo abaixo) trata-se de uma alterao referente

    tabela de filmes mostrada na pgina html. Enquanto o projeto base possui

    uma lista de filmes fixos, ns vamos fazer com que essa tabela possua dados

    trazidos do banco. Observe que existe um loop (while) que varre todos os

    elementos do array de filmes do banco. Para cada elemento do array, um

    boto alterar, para o nome do filme, e um boto excluir so inseridos. O

    cdigo final mostrado na Figura 9.

    while($filmeTemporario = array_shift($filmes))

    {

    ?>

    Alterar

    Excluir

    Observe que o nome do filme

    obtido por meio do mtodo getTitulo(),

    pois o atributo titulo da classe

    Filme privado. Alm disso, por hora, os botes alterar e excluir

    esto sem funcionalidade implementada.

    Fique atento! Algumas partes do cdigo no foram

    copiadas (observe o nmero das linhas). Copie o cdigo para o seu projeto com cuidado. O local

    onde o cdigo foi alterado est

    marcado.

    Competncia 04

  • 52

    Tcnico em Informtica

    Figura 9- Cdigo de index.html para listar os dados do banco. Fonte: prprio autor.

    Competncia 04

  • 53

    Orientao a Objetos

    O resultado pode ser visto na Figura 10.

    Figura 10 - Listagem de Filmes. Fonte: Prprio autor.

    4.5 Incluindo Novos Filmes

    Agora que podemos ver os dados no banco vamos adicionar dados. O

    processo muito parecido, mas antes teremos que receber dados do usurio.

    Precisaremos de um formulrio que receber os valores fornecidos pelo

    usurio.

    O modelo j contm um formulrio em HTML que vamos modific-lo para

    nossas necessidades. Ele vai servir tanto para incluir como para alterar os

    dados. O formulrio em HTML ir enviar os dados pelo mtodo post para a

    pgina inserir_filme.php que faremos mais a frente, ser nele que

    conectaremos com o banco. Por agora voc deve terminar a tag

    incluindo os parmetros action e post. A Figura 11 apresenta o cdigo que

    envia os dados de insero.

    Faa os mesmos passos que fizemos

    para Filmes com uma Classe

    funcionrio. Utilize a mesma estrutura

    de funcionrios utilizada no caderno de

    Desenvolvimento Web.

    Competncia 04

  • 54

    Tcnico em Informtica

    Figura 11 - Alteraes no formulrio para incluir um novo filme. Fonte: Caderno de Desenvolvimento para Web EAD-PE.

    Alm do cdigo de insero do filme, necessrio que se crie uma pgina php

    que receba os dados do formulrio e envie para o repositrio. Essa classe

    mostrada na Figura 12.

    Figura 12 - Cdigo de incluir_filme.php. Fonte: Prprio autor.

    4.6 Removendo Filmes

    Para que possamos remover um filme, necessrio do cdigo do filme. Assim,

    para cada entrada da tabela de filmes em index.php vamos inserir um

    hiperlink com o cdigo do filme apresentado para a pgina excluir_filme.php.

    Caso voc no se lembre de como isso feito, observe o caderno de

    Implemente a

    funcionalidade de incluir funcionrio.

    Utilize a mesma ideia de incluir

    filmes.

    Competncia 04

  • 55

    Orientao a Objetos

    Desenvolvimento Web. A Figura 13 apresenta a alterao em questo.

    Figura 13 - Envio de cdigo do filme para excluso no banco de dados. Fonte: Prprio autor.

    O cdigo da pgina excluir_filme mostrado a seguir (Figura 14). Observe que

    apenas o cdigo do filme foi necessrio para que o repositrio delete a

    entrada.

    Figura 14 - Cdigo fonte de excluir_filme.php. Fonte: Prprio autor.

    4.7 Alterando Filmes

    Para a alterao de filmes iremos utilizar a mesma abordagem utilizada no

    caderno de Desenvolvimento Web para alterao de dados. Vamos utilizar

    uma varivel $destino que indicar se o formulrio vai enviar os dados

    para a pgina incluir_filme.php ou alterar_filme.php (veja a seguir). As

    respectivas fontes so mostradas nas Figuras 15 e 16. Na Figura 16 temos o

    Implemente a

    funcionalidade de remover funcionrio. Utilize a mesma ideia

    de remover filmes.

    Releia atentamente o caderno de

    Desenvolmento Web para ver como a

    estratgia de alterao de dados. O que vai mudar no

    cdigo so as formas como os campos do

    formulrio so preenchidos. No caso orientado a

    objeto, utilizamos um objeto para

    mostrar seus respectivos atributos.

    Competncia 04

  • 56

    Tcnico em Informtica

    arquivo contendo todas as funcionalidades anteriores (exemplo: remover,

    inserir).

    Figura 15 - Cdigo de alterar filme. Fonte prprio autor.

    Competncia 04

  • 57

    Orientao a Objetos

    Competncia 04

  • 58

    Tcnico em Informtica

    Figura 16 - Cdigo fonte index.php. Fonte: Prprio autor.

    Implemente a funcionalidade de

    alterar funcionrio. Utilize a mesma ideia de alterar

    filmes.

    Competncia 04

  • 59

    Orientao a Objetos

    CONCLUSO

    Este caderno apresenta um guia introdutrio sobre orientao objetos

    utilizando como base a linguagem PHP. Apesar deste caderno ser focado na

    linguagem PHP, os conceitos apresentados aqui so genricos o suficiente

    para serem utilizados em outras linguagens que utilizam o mesmo paradigma.

    Foram discutidos conceitos como: classes, atributos, mtodos, herana,

    interfaces entre outros. Alm disso, no final do caderno apresentada uma

    aplicao prtica multidisciplinar com os conceitos aprendidos em vrias

    disciplinas como por exemplo banco de dados.

  • 60

    Tcnico em Informtica

    REFERNCIAS

    Dalloglio, Pablo, PHP Programando com Orientao a Objetos, Ed. Novatec.

    2 Ed., 2009.

    Anthony Sintes, Anthony, Aprenda programao orientada a objetos em 21

    dias, Ed. Pearson, 2002.

    Mendes, Douglas Rocha, Programao Java - Com nfase Em Orientao a

    Objetos, Ed. Novatec, 2009.

    Xavier, Fabrcio S. V., Php - do Bsico Orientao de Objetos, Ed. Cincia

    Moderna, 2008.

    Arajo, Everton Coimbra, Orientao a Objetos Com Java, Ed. Visual Books,

    2008.

    Curso online PHP orientado a objetos, Por Hugo vasconcelos link:

    www.youtube.com/watch?v=rAkJOH5Gz7U

  • 61

    Orientao a Objetos

    MINICURRCULO DO PROFESSOR

    Bruno Silva formado em Engenharia da Computao pela UFPE, com

    mestrado em Cincia da Computao pela UFPE e doutorando pela UFPE e a

    universidade Technische universitat ilmenau. Atualmente professor da

    Universidade Federal Rural de Pernambuco. Participa de projetos de

    cooperao cientfica entre Brasil e Empresas internacionais como EMC, HP e

    Foxconn.