View
231
Download
0
Category
Preview:
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.
Recommended