PHP - Programando orientado a objeto


Às vezes me aventuro em querer programar, e uma das linguagem que mais gosto é o PHP. Até pouco tempo eu não sabia que com PHP era possível programar orientado a objetos. Poiszé...

Fiz um exemplo simples para mostrar como utilizar o PHP desta forma.

Criamos 4 classes como mostra o diagrama abaixo:

Código da classe Pessoa:
<?php
include_once "Curso.php";

class Pessoa {
private $nome;
private $idade;
private $cpf;
private $curso;

public function Pessoa() {

}

public function getNome() {
return $this->nome;
}
public function setNome($nome) {
$this->nome = $nome;
}

public function getIdade() {
return $this->idade;
}
public function setIdade($idade) {
$this->idade = $idade;
}

public function getCPF() {
return $this->cpf;
}
public function setCPF($cpf) {
$this->cpf = $cpf;
}

public function getCurso() {
return $this->curso;
}
public function setCurso($curso) {
$this->curso = $curso;
}
}
?>

Código da classe Aluno:
<?php
include_once "Pessoa.php";

class Aluno extends Pessoa {
private $notas;

public function Aluno($notas=null, $curso=null) {
$this->setNotas($notas);
$this->setCurso($curso);
}

public function getNotas() {
return $this->notas;
}
public function setNotas($notas) {
$this->notas = $notas;
}
}
?>

Código da classe Professor:
<?php
include_once "Pessoa.php";

class Professor extends Pessoa {
private $salario;

public function Professor($salario=null, $curso=null) {
$this->setSalario($salario);
$this->setCurso($curso);
}

public function getSalario() {
return $this->salario;
}
public function setSalario($salario) {
$this->salario = $salario;
}
}
?>

Código da classe Curso:
<?php
class Curso {
private $nome;
private $disciplina;

public function Curso($nome=null, $disciplina=null) {
$this->setNome($nome);
$this->setDisciplina($disciplina);
}

public function getNome() {
return $this->nome;
}
public function setNome($nome) {
$this->nome = $nome;
}

public function getDisciplina() {
return $this->disciplina;
}
public function setDisciplina($disciplina) {
$this->disciplina = $disciplina;
}

}
?>

Código da página index.php:
<?php
include_once "Aluno.php";
include_once "Professor.php";

$curso = new Curso("Redes de Computadores", "Projeto de Redes");

$aluno = new Aluno();
$aluno->setCurso($curso);
$aluno->setNome("Wekler Sarmento");
$aluno->setIdade(24);
$aluno->setCPF("333333333-33");
$notas = array(0, 20, 80, -10);
$aluno->setNotas($notas);

$professor = new Professor("1,00", "Projeto de Redes");
$professor->setNome("Gilberto Sudré");
$professor->setIdade(35);
$professor->setCPF("222222222-22");
$professor->setCurso($curso);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv=
"Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body style=
"font-family:arial;">
<h4>:: Aluno</h4>
<p>

Nome do aluno: <?php echo $aluno->getNome();?><br>
Idade: <?php echo $aluno->getIdade();?><br>
CPF: <?php echo $aluno->getCPF();?><br>
Curso: <?php echo $aluno->getCurso()->getNome();?><br>
Notas na disciplina <?php echo $aluno->getCurso()->getDisciplina();?>:
</p>
<p style=
"margin-left: 40px;">
<?php
foreach($aluno->getNotas() as $nota) {
echo $nota."<br>";
}
?>
</p>
<h4>:: Professor</h4>
<p>

Nome professor: <?php echo $professor->getNome();?><br>
Salário: R$ <?php echo $professor->getSalario();?><br>
Curso: <?php echo $professor->getCurso()->getNome();?><br>
Disciplina: <?php echo $professor->getCurso()->getDisciplina();?><br>
</p>
</body>
</html>

Observe que para chamar um método de um objeto usamos o símbolo "->" (sem aspas). No diagrama mostrado acima as classes Aluno e Professor herdam da classe Pessoa. Para criarmos esta relação no código, usamos a palavra extends, da mesma forma como na linguagem Java. Mas antes é preciso incluir o arquivo que contém a classe Pessoa. Usamos então o método include_once. A diferença do include para o include_once é que este último somente irá carregar o arquivo uma vez.

Temos também o encapsulamento, comum em várias outras linguagens: private, public e protected. O encapsulamento modifica a visibilidade, ou acesso, de um método ou variável.
Com o private, o método ou váriável é visível apenas dentro da própria classe. O public torna visível para qualquer classe ou página. O encapsulamento protected torna visível apenas para as classes que estão relacionadas.

Bom, uma braço pessoal e quem souber de uma ferramenta online que formate o código fonte para ser postado por favor me diga =]

Um abraço

Um pouco sobre criptografia

As decepções da vida não é?!!!

Caso 1: Aquele seu amigão do peito, parceiro de quase todas as horas, mandou um e-mail pra sua namorada contando da pulada de cerca no último feriado, qdo supostamente devido a um forte resfriado, vc não foi vê-la e estava de cama.
Acalme-se! Antes de dar uma lição no seu amigo da onça, certifique-se de que foi realmente ele quem enviou o email dedo-duro!
Ahh, o endereço era dele? Infelizmente isso não significa muita coisa.

Caso 2: Vc passou dias sem dormir, queimando os últimos neurônios disponíveis para impressionar o seu chefe com aquela idéia para a reorganização do seu setor, sonhando até com uma promoção. Trabalha até a madrugada e envia para o email do boss o projeto milionário todo prontinho. Na manhã seguinte, todos recebem a notícia que o Fulano acaba de ser promovido por apresentar a solução mais criativa para a reestruturação do setor. Nada de errado, afinal a idéia foi sua e vc batalhou por ela, porééémmmm, o Fulano não é vc! o.O

Estes cenários ridículos ilustram a falta de segurança no envio/recebimento de mensagens por email. Geralmente não há como autenticar o remetente de uma mensagem e o monitoramento de tráfego pode levar seus emails para mãos erradas.

E agora, que poderá nos defender? A criptografia!

Acho que o assunto vai ser longo então façamos como Jack: por partes!

O que é Criptografia?
Não vou dizer aqui que a palavra criptografia vem do grego ‘kryptós’ [esconder] e “gráphein’ [escrever]. Sendo assim vc terá que deduzir sozinho que seria algo como ‘esconder a escrita’.
A idéia de criptografar ou esconder as mensagens só faz sentido se alguém puder lê-las depois. Mas não qualquer alguém e sim O alguém a quem as mensagens sejam dirigidas, mantendo assim sua confiabilidade e integridade.

Tipos de Criptografia
A criptografia computacional utiliza o conceito de chaves criptográficas para embaralhar/desembaralhar as mensagens.
As chaves são um conjunto de bits baseados em um determinado algoritmo capaz de embaralhar [codificar] e desembaralhar [decodificar] as informações. Assim, apenas o receptor que possuir a chave correta poderá decifrar a mensagem enviada.
O uso de chaves possibilita ao emissor a utilização de um mesmo algoritmo para destinatários diferentes, sem que estes sejam capazes de decifrar as mensagens enviadas aos outros.

Próximo post:
Chaves simétricas e assimétricas
Padrão de criptografia PGP

Abraços =)


 
Design by Scooby Doo jogos