p &3 6+*F36(13*0+ /3')" -.3 .1) 6")223 7+&3 &36")')' _*` 7'+7'(3&)&32 3 1:0+&+2< O)&) (*20q*6() &320) 6")223, +. 23H), 6)&) +>H30+ 7+22.( .1) 6M7() &320)2 7'+7'(3&)&32 3 1:0+&+2< ]22+ 2(/*(A(6) -.3 7+&31 '363>3' @)"+'32 &(20(*0+2 3 23.2 1:0+&+2 23'31 6F)1)&+2 &3 A+'1) (*&373*&3*03< I+':1 31 !! 031+2 .1 6+*63(0+ 6F)1)&+ &3 7'+7'(3&)&32 320#; 0(6)2 3 1:0+&+2 320#0(6+2< XD+ 3"313*0+2 -.3 73'03*631 N 6")223 3 *D+ )+ +>H30+, 6+1 (20+ 3"32 7+&31 23' )6322)&+2 3 (*@+6)&+2 ) 7)'0(' &) 6")223 231 ) *3632; 2(&)&3 &3 23 (*20)*6()' + +>H30+<
Listagem 3. Codigo PHP sem polimorfismo
<?php
class Cachorro{
function Latir(){
echo “Cachorro Latindo !”; }
}
class Homem{
function Falar{
echo “Homem Falando !”; }
}
function ProduzirSom($Obj){
if ($Obj instaceof Cachorro){ $Obj->Latir();
}elseif($Obj instanceof Homem){ $Obj->Falar();
}else{
echo “O objeto passado não produz som”; }
} ?>
Listagem 4. Polimorfismo aplicado no PHP
<?php
class SerVivo{
function ProduzirSom(){
echo “Nem todo ser vivo produz som !”; }
}
class Cachorro extends SerVivo{
function ProduzirSom(){
echo “Cachorro Latindo !”; }
}
class Homem extends SerVivo{
function ProduzirSom{
echo “Homem Falando !”; }
}
function GetSom($Obj){
if ($Obj instaceof SerVivo){ $Obj->ProduzirSom();
}else{
echo “O objeto passado não é um ser vivo !”; }
} ?>
I+&31+2 03' @#'(+2 +>H30+2, 1)2 0+&+2 3"32 +'(.*&+2 &3 .1) W*(6) 6")223< O+1+ )2 7'+7'(3&)&32 3 1:0+&+2 73'03*631 N 6")223 7+&31+2 &3&.B(' -.3 322)2 7'+; 7'(3&)&32 3 1:0+&+2 2D+ 6+17)'0("F)&+2 7+' 0+&+2 +2 +>H30+2<
f# )"/.1)2 6+*2(&3')CJ32 2+>'3 + .2+ &3 1:0+&+2 3 7'+7'(3&)&32 320#0(6)2 *+ IfI< I+' 34317"+, 7)') 23 )6322)' 7'+; 7'(3&)&32 320#0(6)2 &3 &3*0'+ &) 7'M7'() 6")223 031+2 -.3 .0("(B)' + +73')&+'
/$,&ee -.3 )-.( 031 .1) A.*CD+ +7+20)
) &+ K3"7F( +*&3 + /$,& : .2)&+ 7)')
A)B3' '3A3'^*6() )+ +>H30+ &+ 6+*0340+ 3*-.)*0+ *+ IfI .2)1+2 7)') )6322)' ) 6")223< !.0'+ &30)"F3 : -.3 7)') )6322)' .1) 7'+7'(3&)&3 +. 1:0+&+ &3203 0(7+ 031+2 -.3 A)B^;"+ )0')@:2 &) 6")223 &3 &.)2 1)*3(')2E
Classe::Propriedade Classe::Método()
Listagem 5. Classes abstratas no PHP
<?php
abstract class SerVivo{
function Nascer(){ echo “Nascendo !!!”; } function Crescer(){ echo “Crescendo !!!”; }
abstract function ProduzirSom(); }
class Cachorro extends SerVivo{
function ProduzirSom(){
echo “Cachorro Latindo !”; }
}
class Homem extends SerVivo{
function ProduzirSom{
echo “Homem Falando !”; }
}
function GetSom($Obj){
if ($Obj instaceof SerVivo){ $Obj->ProduzirSom();
}else{
echo “O objeto passado não é um ser vivo !”; }
} ?>
Listagem 6. Propriedade Estática no PHP
<?php class Cliente{ static $Contador = 0; public $id; function __construct(){ self::$Contador++;
$this->id = self::$Contador; }
}
function CriarClientes(){
for($i=0;$i<=9;$i++){ $cliente = new Cliente();
echo $cliente->id.”<br>”; }
} ?>
Q)2 @+6^ &3@3 320)' 23 73'/.*0)*&+ 23 '3)"13*03 A)'# .2+ &3203 0(7+ &3 '36.'2+ 3 23 3"3 : '3)"13*03 *36322#'(+< I+(2 3*; 0D+ +>23'@3 + 6M&(/+ &) ./-)(0+1 ><
! -.3 031+2 )-.( : .1) 6")223 6"(3*03 6+1.1 3 2(17"32, 7+':1 6+1 .1 6+*0)&+' -.3 '3/(20') ) -.)*0(&)&3 &3 +>H30+2 &320) 6")223 -.3 A+')1 (*20)*6()&+2< I+' (22+ ) 7'+7'(3&)&3 320#0(6)S+5"#'?5% , 7'+7'(3&); &3 320) -.3 73'03*63 N 6")223 3 *D+ )+ +>H30+, : 6+17)'0("F)&) 7+' 0+&)2 )2 (*20q*6()2< !>23'@3 -.3 *+ 6+*20'.0+' )6322)1+2 320) 7'+7'(3&)&3 )0')@:2 &+ +73')&+'/$,& 3 + (*;
6'313*0)1+2 31 .1< b3(0+ (22+ )0'(>.?1+2 + @)"+' &+ 6+*0)&+' N 7'+7'(3&)&3S*? , 322) 2(1 73'03*63*03 )+ +>H30+< ! 1:0+&+ +%*'%+,*$"#$4 3436.0) .1 ")C+ &5% 3 (*20)*6() &3B +>H30+2+,*$"#$4 3 "+/+ )7M2 1+20') *+ *)@3/)&+' + @)"+' &) 7'+7'(3&)&3S*?< I+&3'?)1+2 (*6".(' *320) 6")223+,*$"#$ .1 1:0+&+ 7)') +>03' + @)"+' )0.)" &+ 6+*0)&+' &) 6")223< L203 1:0+&+ &3@3'# 23' 320#0(6+ 7)') 3@(0)' -.3 23 03*F) -.3 (*20)*6()' ) 6")223 7)') (*@+6)' + 1:0+&+< G3H) 6+1+ A(6)'() 6+1 322) 1+&(A(6)CD+ *)./-)(0+1 ?< !>23'@3 -.3 )&(6(+*)1+2 ) *+22) 6")223 +,*$"#$ .1 1:0+&+ 320#0(6+ -.3 '30+'*) ) 7+2(CD+ )0.)" &+ 6+*0)&+'< I)') (*@+6#;"+ .0("(B)1+2 ) 7'M7'() 6")223 231 ) *36322(&)&3 &3 23 (*20)*6()' .1 +>H30+E+,*$"#$ee<$#+5>"#FG3
Criando um exemplo
p *+0M'(+ -.3 +2 34317"+2 6(0)&+2 )6(; 1) 23'@31 )73*)2 7)') 34317"(A(6)' +2 6+*63(0+2 )>+'&)&+2 )-.(< I)') -.3 @+6^ 7+22) 03' .1) *+CD+ &3 6+1+ + 7+"(1+'; A(21+ ).4("() 31 0)'3A)2 &(#'()2 @)1+2 6+*20'.(' .1 73-.3*+ 34317"+ )>+'&)*; &+ + 6+*63(0+ )6(1)< %>') + K3"7F( A+'IfI 3 6'(3 .1) *+@) )7"(6)CD+< I)') (22+ )63223 + 13*.A*,$qN$Mr788,*('#*5"< X)"@3 ) )7"(6)CD+ 7'322(+*)*&+ +#%,./0*&#./ +. 326+"F) A*,$r/'=$ V%52 ]$(# 74 6+1 + *+13 _I'HI+"(1+'A(21+< 7F7'H` 3 31 23/.(&) 2)"@3 ) )"*# 6+1+ _(*&34<7F7`< %"03'3 ) 7'+7'(3&)&3N':$
&+ A+'1."#'(+ 7)') _b'1]*&34`< L203 A+'1."#'(+ 23'# .0("(B)&+ 7)') 6'()' )
*"#$%&'($ @(2.)" &+ *+22+ 34317"+<
%&(6(+*3 *3203 A+'1."#'(+ 0'^2 C?*#4
&) 7)"30) /#'"?'%?< %"03'3 23.2 *+132
7)') _L&09+13`, _L&0L1)("`, _L&0a3; /(20'+`, '327360(@)13*03< %&(6(+*3 0'^2
K'L$,4c 0)1>:1 &) 7)"30) /#'"?'%? , .1 7)') 6)&) C?*# 3 0'+-.3 23.2 +'8#*5"4
Listagem 7. Método Estático no PHP
<?php class Cliente{ static $Contador = 0; public $id; function __construct(){ self::$Contador++;
$this->id = self::$Contador; }
static function GetCount(){
return self::$Contador; }
}
function CriarClientes(){
for($i=0;$i<=9;$i++){ $cliente = new Cliente();
echo $cliente->id.”<br>”; }
echo Cliente::GetCount(); }
?>
Listagem 8. Estrutura das classes
abstract class Pessoa{
protected abstract function Save(); }
class PessoaFisica extends Pessoa{ }
class PessoaJuridica extends Pessoa{ }
Figura 1. Exemplo de layout
&3 )6+'&+ 6+1 6)&) 6)17+< %&(6+*3 0)1>:1 &+(2 8.00+*2R_80*X)"@)'` 3 _80*j(20)'`U 3 .1B'?*5<%5>8< %&(6(+*3
)+ B'?*5<%5>8 &+(2 (03*2 ) 2.) 7'+7'(3; &)&3 !#$:4< K(/(03 _I322+) b?2(6)` 3 _I322+) z.'?&(6)`< %"03'3 ) 7'+7'(3&)&3
1%*$"#'#*5" 7)')5%\5%*E5"#',< 9)</0,$( 2 031+2 .1) 2./320D+ &3,'65>#< O+*6".?&+ + ")u+.0 7)22)'31+2 )/+') 7)') ) 6'()CD+ &3 *+22)2 6")2232< 9D+ ('3( 13 )7'+*A.*&)' *) 2(*0)43 !! *+ IfI 7+(2 3203 A+( 326+7+ &+ 7'(13('+ )'0(/+< %63223 + 13*. A*,$qN$Mr)"*# 3 6'(3 .1) *+@))"*# 2)"@)*&+;) 6+1 + *+13 _Q+&3"<7F7`< 9320) )"*# ('31+2 6'()' .1 1+&3"+ +*&3 03'31+2 .1) 6")223 V$445' 6+1 )2 7'+7'(3&)&32 N5:$ 3
;$,$&5"$ 6+1.1 ) 0+&+ + 0(7+ &3 7322+)< b)'31+2 .1 32736()"(B)CD+ &3V$445' 31 V$445'A*4*(' 3V$445'W>%*(' 6)&) .1) 6+1 .1) 7'+7'(3&)&3 346".2(@)+VA 3+NVW '327360(@)13*03< 9) )"*# 6'()&) &(/(03 + 6M&(/+ &)./-)(0+1 @< 9+ 6M&(/+ &)./-)(0+1 @ )73*)2 6'(); 1+2 ) 320'.0.') &)2 6")2232 -.3 23'D+ .2); &)2 31 *+22+ 34317"+< I+2(6(+*3 + 6.'2+' *) #'3) &) 6")223V$445' 3 7'322(+*3+#%, . /0*&# . 7,# . ) 7)') 7.>"(6)' )2 7'+7'(3; &)&32< 9+ &(#"+/+ -.3 23 )>'3 7'33*6F) +2 6)17+2 6+*A+'13 )</0,$( 43
a37)'3 -.3 + K3"7F( A+' IfI H# )&(6(+*)
N 6")223 .1 6)17+ 7'+03/(&+Su"5:$ 6+1 +2 1:0+&+2 <$# 3 /$# 7)') )6322+ ) 3203 A*$,?< ]22+ A)'# -.3 *+ +5?$ +5:8,$#*5" @+6^ 7+22) )6322)' ) 7'+7'(3&)&3 N5:$ )0')@:2 &3V$445'2rN5:$ 31>+') +<$#N52 :$ 3 +/$#N5:$ *D+ 23H)1 (*@+6)&+2< a30+'*)*&+ )+ 34317"+, '37(0) + 7)22+ )*03'(+' 3 A)C) + 1321+ 7)') 7.>"(6)' 31 V$445' ) 7'+7'(3&)&3 ;$,$&5"$< L1
V$445'A*4*(' 7.>"(-.3 ) 7'+7'(3&)&3+VA
3 31V$445'W>%*?*(' ) 7'+7'(3&)&3+NVW < !>23'@3 *) ./-)(0+1 2B )2 6")2232 6+1
)2 7'+7'(3&)&32 7.>"(6)&)2<
% 7'(*6?7(+ @+6^ &3@3'# *+0)' -.3 *D+ A+/3 1.(0+ ) '3/') &3 6'()CD+ &3 6")223 31 6+17)')CD+ 6+1 + K3"7F( 5(*Tg< \31+2 31V$445' )2 7'+7'(3&)&32 73'0(; *3*032 ) 0+&+ 0(7+ &3 7322+)<V$445'A*4*('
F3'&) &3 V$445'c 3 7+' 3223 1+0(@+ 0')B
6+*2(/+, &3@(&+ ) F3')*C), )2 7'+7'(3&); &32N5:$ 3 ;$,$&5"$QI'36(2)1+2 )73*)2 )&(6(+*)' ) 7'+7'(3&)&3+VA )22(1 6+1+
)6+*0363 31 V$445'W>%*?*('c 23*&+ -.3 *320) 031+2 ++NVW 6+1+ &(A3'3*6()"< X3 *+0+. >31, 7.>"(6)1+2 + 1:0+&+ /'=$FG 31V$445' 6+1+'L4#%'(# (*&(6)*&+ )22(1 ) (*03*CD+ -.3 031+2 31 2+>'32; 6'3@^;"+ *)2 6")2232 &3263*&3*032 3 : (22+ -.3 A)'31+2 )/+')< 9) 6")223V$445'A*4*(' 2+>'326'3@) ) A.*CD+ /'=$FG 6+*A+'13 ) ./-)(0+1 22< b)C) + 1321+ 7)')V$445'2 A*4*(' 6+*A+'13./-)(0+1 24<
Figura 2. Publicando a Propriedade Nome
Para que os métodos Get e Set possam ser invocados automaticamente como no Delphi Win32 suas classes precisam possuir os métodos __set() e __get ou simplesmente herdar suas classes da classe Object do Delphi for PHP o que não acontece automaticamente como no caso so Delphi Win32. A classe object já intercepta o acesso a propriedade e delega a chamada aos respectivos get’s e set’s. Oberve na Listagem 9 a estrutura em Object. Declaramos os métodos __get() e __set() e preparamos ambos para que localizem a herança e retornem o resultado. Caso não seja encontrada, uma exceção é levantada informando que o método não existe.
Nota do DevMan
Listagem 9. Métodos __get e __set em Object. <?php function __get($nm){ $method=’get’.$nm; if (method_exists($this,$method)){ return ($this->$method()); }else{ $method=’read’.$nm; if (method_exists($this,$method)){ return ($this->$method()); }else{ if ($this->inheritsFrom(‘Component’)){ if( isset($this->_childnames[$nm]) ) return $this->_childnames[$nm]; }
throw new EPropertyNotFound( $this->ClassName().”.”.$nm);
} } }
function __set($nm, $val){ $method=’set’.$nm; if (method_exists($this,$method)){ $this->$method($val); }else{ $method=’write’.$nm; if (method_exists($this,$method)){ $this->$method($val); }else{ throw new EPropertyNotFound($this-> ClassName().”.”.$nm); } } } ?>
Listagem 10. Classes com propriedades publicadas
<?php
/* Classe principal Pessoa */ abstract class Pessoa{
protected $_nome=””; function getNome(){ return $this->_nome; } function setNome($value){ $this->_nome=$value; } function defaultNome(){ return; } protected $_email=””; function getEmail(){ return $this->_email; } function setEmail($value){ $this->_email=$value; } function defaultEmail(){ return; }
protected abstract function Save(); }
/* Classe PessoaFisica */
class PessoaFisica extends Pessoa{ protected $_cpf=””; function getCPF(){ return $this->_cpf; } function setCPF($value){ $this->_cpf=$value; } function defaultCPF(){ return; } } /* Classe PessoaJuridica */
class PessoaJuridica extends Pessoa{
protected $_cnpj=””; function getCNPJ(){ return $this->_cnpj; } function setCNPJ($value){ $this->_cnpj=$value; } function defaultCNPJ(){ return; } } ?>
L2232 2D+ +2 1:0+&+2 -.3 23'D+ A'.0+ &+
85,*:5%&*4:5< \3'31+2 .1) +.0') 6")223 -.3 23'@('# 6+1+ "(20) &3 7322+)2, +*&3 /.)'&)'31+2 0+&+2 +2 +>H30+2 6'()&+2 *) )7"(6)CD+< ! >+0D+ "(20)' 23'@('# 7)') 73'; 6+''3' 0+&) ) "(20) 3 (*@+6)' + 1:0+&+/'=$FG &+2 +>H30+2 6+*0(&+2 *3")< 9D+ 2)>31+2 )+ 63'0+ 23 2D+ 7322+)2 A?2(6)2 +. H.'?&(6)2< %73*)2 2)>31+2 -.3 2D+ 7322+)2 3 23 2D+ 7322+)2 7+22.31 + 1:0+&+/'=$FG<9) 132; 1))"*# &+ 1+&3"+,:5?$,Q808 , 6'(3 ) 6")223 K*4#'V$445' 6+*A+'13./-)(0+1 25< 9320) 6")223 031+2 .1 7%%'6 V%*='#$
+*&3 /.)'&)'31+2 0+&+2 +2 +>H30+2 6'()&+2 *) )7"(6)CD+< ! 1:0+&+ 7W>"(6+
7??V$445' 23'@3 7)') -.3 7+22)1+2 03' .1) 1)*3(') &3 )&(6(+*)'1+2 (03*2 )+
7%%'6 -.3 : 7'(@)&+< a37)'3 *+ 7)'q13; 0'+ &) A.*CD+ -.3 6+"+6)1+2 + 0(7+ &+ 7)'q130'+ )*032 &+ 1321+< ! IfI *D+ : 0(7)&+, 7+':1 031+2 3203 '36.'2+ -.3 : 6F)1)&+ &3\*"# ?$ +,'44$< O+1 (22+ .1 3''+ 23'# /3')&+ 23 03*; 0)'1+2 )&(6(+*)' *+ 7%%'6 .1 +>H30+ -.3 *D+ 23H) &+ 0(7+ 7322+)< % A.*CD+ 7.>"(6)' 31 K*4#'V$445' )73*)2 A)B .1 ,558 *+ 7%%'6 +*&3 6)&) (*03')CD+, +. 23H), 6)&) @3B -.3 7)22) 7+' .1 +>H30+ + 1:0+&+/'=$FG: (*@+6)&+, 7.>"(6)*&+ *+
L%5M4$% )2 (*A+'1)CJ32 &+ +>H30+<
I)') 0320)' *+22+ 1+&3"+ @)1+2 )+ 3@3*0+ 1"+,*(O &+ >+0D+ /',='%< 93203
3@3*0+ &(/(03 + 6M&(/+ &)./-)(0+1 2;<
! 7'+63&(13*0+ : 2(17"32< I'(13('+ @3'(A(6)1+2 ) +7CD+ 23"36(+*)&) *+ B'2 ?*5<%5>8 )0')@:2 &) 7'+7'(3&)&3!#$:!"2 ?$@< b3(0+ (22+ 6'()1+2 + +>H30+ &3 )6+'&+ 6+1 ) +7CD+ &+ .2.#'(+ 3 H# 6)''3/)1+2 + @)"+' &+$?#B$J*4#%5 7)') ) 7'+7'(3&)&3 +VA +.+NVW &373*&3*&+ &+ 6)2+<
L1 23/.(&) 6)''3/)1+2 7)') )2 7'+; 7'(3&)&32N5:$3C:'*, +2 @)"+'32 &3 23.2
'327360(@+2C?*#p4< I+' A(1 @3'(A(6)1+2 23 F# *) 23CD+ .1) @)'(#@3"1L]< X3 3") *D+
34(20(' 6'()1+2 .1 +>H30+ 3 + 6+"+6)1+2 *) 23CD+ 7)') 7+&3' 7)22#;"+ 7)') +.0') 7#/(*)< X3 ) @)'(#@3" &3 23CD+ H# 34(20(' 3*0D+ )73*)2 (*@+6)1+2 &3 &3*0'+ &) 23CD+ ) A.*CD+7??V$445' 7)22)*&+ + +>; H30+ 6'()&+< %+ A(*)" 03'31+2 *) 23CD+ .1 +>H30+ K*4#'V$445' 6+1 0+&)2 )2 7322+)2
6'()&)2 ) 6)&) 6"(-.3 &3 >+0D+<
I)') 6+*6".(' *+22+ 34317"+ *+1"+,*(O
&+ >+0D+ K*4#'% ;5?54 6F)1)'31+2 .1)
7#/(*) R_"(20)<7F7`U 3 *3") 34(>('31+2 + 6+*03W&+ &3 *+22) "(20) &3 7322+)2< I)') (22+ 6+&(A(-.3 + >+0D+ 31 -.320D+ A)B3*; &+ .1) 6F)1)&) )+ 1:0+&+ %$?*%$(# &+ IfI, 6+*A+'13 ) 23/.('E
redirect(‘lista.php’);
L20) 7#/(*) )(*&) *D+ A+( 6'()&) 3*0D+ 7'+63&) 6+1 ) 6'()CD+ 31A*,$qN$MrA5%:<
X)"@3;) 6+1+ _"(20)<7F7` 3 1+&(A(-.3
Listagem 11. Metodo Save() na classe PessoaFisica
public function Save(){
echo ‘<font size=6 color=darkblue’.
‘face=Tahoma>’.$this->Nome.’</font><br>’. ‘Email...: ‘.$this->Email.’< br>’.
‘CPF....: ‘.$this->CPF.’< br>’. ‘Tipo...: Pessoa Fisica <hr>’; }
Listagem 12. Metodo Save() na classe PessoaJuridica
public function Save(){
echo ‘<font size=6 color=darkblue’.
‘face=Tahoma>’.$this->Nome.’</font><br>’. ‘Email...: ‘.$this->Email.’< br>’.
‘CNPJ...: ‘.$this->CNPJ.’ <br>’. ‘Tipo...: Pessoa Juridica <hr>’; }
Listagem 13. Classe Pessoa Lista
class ListaPessoa{
static private $instance;
private $_list = array();
function AddPessoa(Pessoa $Obj){ $this->_list[] = $Obj;
}
function Publicar(){
for ($i = 0; $i < count($this->_list); $i++){ $this->_list[$i]->Save();
} }
Listagem 14. Criando os objetos do modelo
function BtnSalvarClick($sender, $params){
switch ($this->RadioGroup1->ItemIndex) {
case 0:
$Pessoa = new PessoaFisica;
$Pessoa->CPF = $this->Edit3->Te xt;
break;
case 1:
$Pessoa = new PessoaJuridica; $Pessoa->CNPJ = $this->Edit3->T ext; }
$Pessoa->Nome = $this->Edit1->Text; $Pessoa->Email = $this->Edit2->T ext;
if (!isset($_SESSION[‘Obj’])){
$_SESSION[‘Obj’] = new ListaPessoa; }
$_SESSION[‘Obj’]->AddPessoa($Pessoa); }
23. N':$ 7)') _b'1j(20)`< 9+1"/05M
&322) 7#/(*) &(/(03 + 6M&(/+ ) 23/.('E
$L = $_SESSION[‘Obj’]; $L->Publicar(); L203 6M&(/+ )73*)2 (*@+6) + 1:0+&+ V>L,*('% &+ +>H30+K*4#'V$445' -.3 320# *) 23CD+< L203 1:0+&+ 7+' 2.) @3B A)B .1 ,558 *+7%%'6 (*@+6)*&+ + 1:0+&+/'=$FG
&3 6)&) (031 &) "(20)< O+1 (22+ -.)*&+ 320) 7#/(*) A+' 6)''3/)&) 34(>('# *+ L%5M4$% 0+&)2 )2 7322+)2 6)&)20')&)2 *) "(20) &3@(&)13*03 A+'1)0)&)2< L436.03 ) )7"(6)CD+</$,$(*5"$ + 0(7+ &3 7322+), (*A+'13 +2 &)&+2 3 6"(-.3 *+ >+; 0D+/',='%< G3H) ) )7"(6)CD+ 31 3436.CD+ *)2</0,$(- 5 3;<
Conclusão
O+1 +2 6+*63(0+2 )7'3*&(&+2 )0: + 1+; 13*0+ H# : 7+22?@3" )&(6(+*)' )+2 *+22+2 7'+H30+2 .1 )27360+ 1)(2 7'+A(22(+*)", 3 6")'+, A)6("(0)' >)20)*03 + *+22+ 0')>)"F+< O+*A322+ -.3 7)') -.31 *D+ 031 .1 63'0+ 6+*F36(13*0+ 31 !! 7+&3 7)'363' ) 7'(13(') @(20) .1 0)*0+ 6+17"(6)&+ )7"(6)' 0+&+2 32232 6+*63(0+2, 1)2 6+1 + 0317+ @+6^ ('# 73'63>3' -.3 )2 6+(2)2 *D+ 2D+ 0D+ 6+17"(6)&)2 6+1+ 7)'3631< ! 1.*&+ &3 7'+/')1)CD+ !! : A)2; 6(*)*03 3 '3-.3' 1.(0) &3&(6)CD+ 7+' 7)'03 &)-.3"32 -.3 23 ")*C)1 *3"3< I+' (22+ &3&(-.3;23< j31>'3;23 -.3 !! : !! (*&373*&3*03 &) "(*/.)/31< f)>(0.3;23 ) 73*2)' !!, 7+(2 0+&)2 )2 /')*&32 "(*; /.)/3*2 3 7+' 6+*23-ƒ^*6() A3'')13*0)2 320D+ )7+()&)2 *320) A("+2+A()< s1 /')*&3 )>')C+ ) 0+&+2 3 )0: + 7'M4(1+ )'0(/+, +*&3 0')0)'31+2 &3 .1 )22.*0+ .1 0)*0+ (*03'322)*03E K32(/* I)003'*2 31 IfI< L. 2+. a+&'(/+ O)''3('+ 3 73") 2.) )03*CD+ 1.(0+ +>'(/)&+<Figura 4. Publicando conteúdo da lista
Dê seu feedback sobre esta edição! A Java Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que você, leitor, acha da revista!
Dê seu voto sobre este artigo, através do link: www.devmedia.com.br/javamagazine/feedback D ê s e u F eedb a c k s o b r e e s t a e d i ç ã o