Escolar Documentos
Profissional Documentos
Cultura Documentos
Orientao a Objetos
Bruno Silva
2015
Presidenta da Repblica Governador do Estado de Pernambuco
Dilma Vana Rousseff Paulo Henrique Saraiva Cmara
Coordenao do Curso
Joo Ferreira
Diagramao
Izabela Cavalcanti
Sumrio
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
CONCLUSO .......................................................................................................................59
REFERNCIAS .....................................................................................................................60
MINICURRCULO DO PROFESSOR .......................................................................................61
INTRODUO
Por fim, uma atividade de projeto proposta para que voc aplique os
conhecimentos aprendidos nesta disciplina.
3
Orientao a Objetos
Competncia 01
4
Tcnico em Informtica
Competncia 01
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.
5
Orientao a Objetos
Competncia 01
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
6
Tcnico em Informtica
Competncia 01
7
Orientao a Objetos
Competncia 01
Exemplo 1
<?php
$joaoSalario = 1000;
$joaoPrevidencia = 100;
$joaoNome = "Joo Filho";
$joaoDescontos =
round($joaoSalario*0.275 + $joaoPrevidencia,2);
$mariaSalario = 2000;
$mariaPrevidencia = 200;
$mariaNome = "Maria Rute";
$mariaDescontos =
round($mariaSalario*0.275 + $mariaPrevidencia,2);
$joseSalario = 3000;
$josePrevidencia = 400;
$joseNome = "Jos Salgado";
$joseDescontos =
round($joseSalario*0.275 + $josePrevidencia,2);
8
Tcnico em Informtica
Competncia 01
Exemplo 2
<?php
function calcularDescontos($salario, $previdencia)
{
return round($salario*0.275 + $previdencia,2);
}
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.
9
Orientao a Objetos
Competncia 01
Exemplo 3
<?php
$funcionarios = array();
$funcionarios[0] = array("Joo Filho", 1000, 100);
$funcionarios[1] = array("Maria Rute", 2000, 200);
$funcionarios[2] = array("Jos Salgado", 3000, 300);
?>
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.
10
Tcnico em Informtica
Competncia 01
Exemplo 4
<?php
class Funcionario{
$nome;
$salario;
$previdencia;
$descontos;
function calcularDescontos()
{
return round($this->salario*0.275 + $this->previdencia,2);
}
}
$funcionarios = array();
$funcionarios[0] = new Funcionario("Joo Filho", 1000, 100);
$funcionarios[1] = new Funcionario("Maria Rute", 2000, 200);
$funcionarios[2] = new Funcionario("Jos Salgado", 3000, 300);
11
Orientao a Objetos
Competncia 01
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.
Exerccio
12
Tcnico em Informtica
Competncia 01
<?php
class Funcionario{
public $nome;
public $salario;
public $previdencia;
public $descontos; Nos links a seguir o
public $tipoFuncionario; aluno poder
visulalizar outras
function __construct($nome, $salario, $previdencia) { explicaes que
$this->nome = $nome; mostram a
$this->salario = $salario; diferena entre o
$this->previdencia = $previdencia; paradigma
$this->descontos = $this->calcularDescontos(); estruturado e
orientado a objetos.
http://fabrica.ms.se
if($this->salario >= 1000 && $this->salario < 2000) {
nac.br/2013/04/pro
$this->tipoFuncionario = "Jnior";
gramacao-
}
estruturada-versus-
else if($this->salario >= 2000 && $this->salario < 3000) { programacao-
$this->tipoFuncionario = "Pleno"; orientada-a-
} objetos/
else if($this->salario >= 3000) { www.devmedia.co
$this->tipoFuncionario = "Snior"; m.br/programacao-
} orientada-a-
} objetos-x-
function calcularDescontos(){ programacao-
return round($this->salario*0.275 + $this->previdencia,2); estruturada/11747
}
}
$funcionarios = array();
$funcionarios[0] = new Funcionario("Joo Filho", 1000, 100);
$funcionarios[1] = new Funcionario("Maria Rute", 2000, 200);
$funcionarios[2] = new Funcionario("Jos Salgado", 3000, 300);
Videos
for($i = 0; $i < count($funcionarios); $i++) demonstrativo
{ sobre diferena
$func = $funcionarios[$i]; entre programao
echo "O valor do desconto de $func->nome $func->descontos estrutura e
e seu tipo $func->tipoFuncionario<br>"; orientada a objetos.
} www.youtube.com/
?> watch?v=vhvmZfxZ
hPw
www.youtube.com/
watch?v=PmefpISZ7
Ew
13
Orientao a Objetos
Competncia 02
14
Tcnico em Informtica
Competncia 02
Exemplo 6
<?php
#class [NomeDaClasse] {
# [lista de atributos]
# [lista de mtodos]
#}
//Exemplo:
class Conta{
public $numero;
public $saldo;
2.2 Atributos
15
Orientao a Objetos
Competncia 02
2.3 Mtodos
Exemplo 7
<?php
#[modificadores] function [nome do metodo]([lista de parametros])
//Exemplo:
class ContaCliente{
public $numero;
public $saldo;
function creditar($valor)
{
$this->saldo = $this->saldo + $valor;
}
}
?>
16
Tcnico em Informtica
Competncia 02
Exemplo 8
<?php
class Calculadora{
Em PHP, uma varivel inicializada como objeto guarda uma referncia para o
mesmo e pode ser utilizada para invocar seus mtodos e alterar/visualizar Veja tambm esse
vdeos:
seus atributos. A Figura 1 apresenta uma representao grfica de como uma www.youtube.com/
varivel que aponta para um objeto (referncia) esquematizada na memria watch?v=9bQNsfYq
Vc4
do computador. www.youtube.com/
watch?v=UM9YBFqI
wQ4
17
Orientao a Objetos
Competncia 02
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
18
Tcnico em Informtica
Competncia 02
Exemplo 9
<?php
class Filme{
public $nome;
public $saldo;
function incrementarSaldo($valor)
{
$this->saldo = $this->saldo + $valor;
}
}
Sada:
Nome do filme: Exterminador
Saldo: 250
No Exemplo 9, o construtor da classe Filme chamado em $filme = new Veja esse site que
apresenta uma
Filme(1, 100). Isso invoca o mtodo __construct($nome, descrio mais
$saldo), passando nome Exterminador e saldo 100. Os valores do detalhada sobre
construtores em
nome e saldo da varivel $filme so inicializados no cdigo do construtor PHP
http://php.net/man
($this->nome = $nome; e $this->saldo = $saldo;). ual/pt_BR/language
.oop5.decon.php
19
Orientao a Objetos
Competncia 02
20
Tcnico em Informtica
Competncia 02
Exemplo 10
<?php
class Conta{
public $numero;
public $saldo;
function creditar($valor)
{
$this->saldo = $this->saldo + $valor;
}
function debitar($valor)
{
$this->saldo = $this->saldo - $valor;
}
$conta1->transferir($conta2, 50);
echo "Transferncia efetuada de 50 da conta1 para conta2 <br>";
?>
21
Orientao a Objetos
Competncia 02
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.
22
Tcnico em Informtica
Competncia 02
Exemplo 11
<?php
class AreaCalc{
public static $pi = 3.141517;
$raioAtual = 10;
$area = AreaCalc::areaCircunferencia($raioAtual);
$valorPi = AreaCalc::$pi;
echo "Area circunferencia de raio $raioAtual eh $area<br>";
echo "Valor de pi $valorPi<br>";
?>
Sada:
Area circunferncia de raio 10 eh 314.1517
Valor de pi 3.141517
Links teis
www.devmedia.co
m.br/introducao-a-
orientacao-a-
objetos-em-
php/26762
www.kadunew.com
/blog/php/introduc
ao-php-orientado-
a-objetos-objetos-
e-classes
23
Orientao a Objetos
Competncia 03
3.1 Herana
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:
24
Tcnico em Informtica
Competncia 03
25
Orientao a Objetos
Competncia 03
Exemplo 12
<?php
class Conta{
public $numero;
public $saldo;
function creditar($valor)
{
$this->saldo = $this->saldo + $valor;
}
function debitar($valor)
{
$this->saldo = $this->saldo - $valor;
}
function atualizarJuros()
{
$this->saldo = $this->saldo*(1 + $this->juros);
}
}
$conta->creditar(50);
$conta->debitar(100);
26
Tcnico em Informtica
Competncia 03
?>
Sada do programa:
Saldo da conta 1: 100
Saldo da conta 2: 105
Exemplo 13
<?php
class Conta{
public $numero;
public $saldo;
27
Orientao a Objetos
Competncia 03
function creditar($valor)
{
$this->saldo = $this->saldo + $valor;
}
function debitar($valor)
{
$this->saldo = $this->saldo - $valor;
}
function atualizarJuros()
{
$this->saldo = $this->saldo*(1 + $this->juros);
}
}
$conta->creditar(50);
$conta->debitar(100);
$poupanca->creditar(50);
$poupanca->debitar(100);
$poupanca->atualizarJuros();
?>
28
Tcnico em Informtica
Competncia 03
Sada do programa:
Saldo da conta 1: 100
Saldo da conta 2: 110
Exemplo 14
<?php
class Conta{
public $numero;
public $saldo;
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);
29
Orientao a Objetos
Competncia 03
}
}
}
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->creditar(50);
$conta->debitar(100);
$poupanca->creditar(50);
$poupanca->debitar(100);
$poupanca->atualizarJuros();
?>
30
Tcnico em Informtica
Competncia 03
Exemplo 15
function creditar($valor)
{
parent::creditar($valor);
$this->atualizarJuros();
}
function atualizarJuros()
{
$this->saldo = $this->saldo*(1 + $this->juros);
}
}
Sada do programa:
Saldo da conta 1: 100
Saldo da conta 2: 132
31
Orientao a Objetos
Competncia 03
Exemplo 16
<?php
class Visibilidade{
public $varPublic;
protected $varProtected;
private $varPrivate;
32
Tcnico em Informtica
Competncia 03
Atributo Public : 1
Exemplo 17
<?php
class Visibilidade{
33
Orientao a Objetos
Competncia 03
Exemplo 18
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 ?
34
Tcnico em Informtica
Competncia 03
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
<?php
class Conta{
private $numero;
private $saldo;
?>
35
Orientao a Objetos
Competncia 03
36
Tcnico em Informtica
Competncia 03
Exemplo 20
<?php
abstract class FiguraGeometrica{
private $tipo;
37
Orientao a Objetos
Competncia 03
}
public function area()
{
return 3.14*$this->raio*$this->raio;
}
public function perimetro()
{
return 2*3.14*$this->raio;
}
}
38
Tcnico em Informtica
Competncia 03
3.5 Interfaces
Exemplo de Interface:
interface IRepositorioContas{
public function cadastrar($conta);
public function remover($conta);
public function atualizar($conta);
}
39
Orientao a Objetos
Competncia 03
public function atualizar($conta)
{
//Corpo da classe
}
}
Pense na
Assim como objetos que herdam de alguma classe podem ser referenciados implementao da
classe gerente, que
pela superclasse, um objeto que referencia uma interface pode ser um tipo especial de
funcionrio, pois tem
referenciado por uma varivel com o tipo da Interface em questo. Por os mesmos atributos
de um funcionrio,
exemplo: mas seu salrio
calculado de forma
diferente, seu salrio
$contas1 = new Agencia(); fixado em 1000.00
$contas2 = new ObjetoQueImplementaIRepositorioContas(); reais. Tente
$contas2->inserir(new Conta()); implementar esta
$contas1->inserir(new Conta()); classe reusando o
cdigo da classe
//posso chamar sem medo os mtodos de IRepositorioContas.
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.
40
Tcnico em Informtica
Competncia 04
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
41
Orientao a Objetos
Competncia 04
42
Tcnico em Informtica
Competncia 04
43
Orientao a Objetos
Competncia 04
44
Tcnico em Informtica
Competncia 04
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.
45
Orientao a Objetos
Competncia 04
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.
46
Tcnico em Informtica
Competncia 04
47
Orientao a Objetos
Competncia 04
48
Tcnico em Informtica
Competncia 04
49
Orientao a Objetos
Competncia 04
O repositrio de
dados um padro
de projeto muito
utilizado em
orientao a
objetos. Veja mais
conceitos
relacionados a este
tema em:
http://sergiotabord
a.wordpress.com/d
esenvolvimento-de-
software/java/patte
rns/repository/
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:
50
Tcnico em Informtica
Competncia 04
<?php
//Cria um objeto repositrio e inclui as classes bsicas
require 'repositorio_filmes.php';
<td class="col-md-1">
Fique atento!
<a class="btn btn-danger" href="#"
Algumas partes do
role="button">Excluir</a>
cdigo no foram
</td> copiadas (observe o
</tr> nmero das linhas).
<?php Copie o cdigo para
} o seu projeto com
?> cuidado. O local
onde o cdigo foi
alterado est
marcado.
51
Orientao a Objetos
Competncia 04
52
Tcnico em Informtica
Competncia 04
Faa os mesmos
passos que fizemos
para Filmes com
uma Classe
funcionrio. Utilize
a mesma estrutura
de funcionrios
utilizada no
caderno de
Desenvolvimento
Web.
53
Orientao a Objetos
Competncia 04
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.
Implemente a
funcionalidade de
incluir funcionrio.
Utilize a mesma
Figura 12 - Cdigo de incluir_filme.php.
ideia de incluir
Fonte: Prprio autor.
filmes.
54
Tcnico em Informtica
Competncia 04
Implemente a
funcionalidade de
remover funcionrio.
Utilize a mesma ideia
de remover filmes.
55
Orientao a Objetos
Competncia 04
56
Tcnico em Informtica
Competncia 04
57
Orientao a Objetos
Competncia 04
Implemente a
funcionalidade de
alterar funcionrio.
Utilize a mesma
ideia de alterar
filmes.
58
Tcnico em Informtica
CONCLUSO
59
Orientao a Objetos
REFERNCIAS
Arajo, Everton Coimbra, Orientao a Objetos Com Java, Ed. Visual Books,
2008.
60
Tcnico em Informtica
MINICURRCULO DO PROFESSOR
61
Orientao a Objetos