PHP: Programando com Orientação a Objetos



Documentos relacionados
PHP INTRODUÇÃO CLASSES E OBJETOS

Parte I. Orientação a objetos no PHP. Contato: <lara.popov@ifsc.edu.br> Site:

Orientação a Objetos com Java

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

sobre rogério gonçalves gerente de projetos > digitale agência digital rogerio@digitale.com.br h7p:// h7p://leveme.

Linguagem de Programação III Herança

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

ProgramaTchê programatche.net Programação OO com PHP

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

UM ESTUDO PARA A EVOLUÇÃO DO PHP COM A LINGUAGEM ORIENTADA A OBJETOS

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof. Marcelo da Silveira Siedler siedler@gmail.com

Profº. Enrique Pimentel Leite de Oliveira

UML Aspectos de projetos em Diagramas de classes

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Técnicas de Programação II

Análise e Projeto Orientados por Objetos

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

Bibliografia. Desenvolvimento Orientado a Objetos. Introdução. Bibliografia. O que você vê?

Herança. Alberto Costa Neto DComp - UFS

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Desenvolvimento de Aplicações para Internet Aula 8

Tópicos em Engenharia de Computação

Roteiro do Programa e Entrada/Saída

Análise e Projeto de Sistemas

Orientação a Objetos

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

Reuso com Herança a e Composiçã

Técnicas de Programação Avançada TCC Profs.: Anselmo Montenegro Conteúdo: Introdução à Orientação a Objetos

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos em Java. Herança

Engenharia de Software III

Prototype, um Design Patterns de Criação

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Orientação a Objetos

Capítulo 22. Associações entre Classes. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Polimorfismo. Prof. Leonardo Barreto Campos 1

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

3. PARADIGMA ORIENTADO A OBJETOS

Programação por Objectos. Java

Programação Orientada a Objetos em Java

Introdução a Java. Hélder Nunes

Orientação a Objetos com Java

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Computação II Orientação a Objetos

Padrão Básico de Projeto: Interfaces e Polimorfismo

Questões de Concursos Públicos sobre Orientação a Objetos e UML

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Programação com Acesso a BD. Programação com OO Acesso em Java

Orientação à Objetos. Aécio Costa

ANÁLISE E PROJETO ORIENTADO A OBJETOS. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

Sumário. Uma visão mais clara da UML

PROGRAMANDO EM C# ORIENTADO A OBJETOS

ProgramaTchê Programação OO com PHP

Programação Orientada a Objetos Herança Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Especificação de Requisitos

Introdução ao PHP. Prof. Késsia Marchi

Modelos de Sistema by Pearson Education. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 8 Slide 1.

Java TM e o Modelo de Objetos

Desenvolvimento de Aplicações para Internet Aula 7

Pesquisa e organização de informação

Unisant Anna Gestão Empresarial com ERP 2014 Modelagem de Sistemas - UML e MER

Programação Orientada a Objetos

Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados

Programação de Computadores - I. Profª Beatriz Profº Israel

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Padrão Básico de Projeto: Herança versus Composição

Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto

PHP 5. Orientado a Objetos

Programação com Objectos. Processamento de Dados I. 3. UML (Unified Modeling Language)

Histórico da Orientação a Objetos Ciclo de vida de Desenvolvimento de SW

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

UML Unified Modeling Language

INF 2125 PROJETO DE SISTEMAS DE SOFTWARE Prof. Carlos J. P. de Lucena

Programação com Objectos. Processamento de Dados I. 4. Classes Abstractas

Programação por Objectos. Java

2 Diagrama de Caso de Uso

3.1 Definições Uma classe é a descrição de um tipo de objeto.

Documento de Requisitos Projeto SisVendas Sistema de Controle de Vendas para Loja de Informática.

Java 2 Standard Edition Como criar classes e objetos

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

Prof. Jhonatan Fernando

Teste de Software. Ricardo Argenton Ramos Engenharia de Software I

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

Padrões de projeto 1

UNIVERSIDADE FEDERAL DO PARANÁ

LINGUAGEM DE PROGRAMAÇÃO WEB

Material de Apoio 5. int getres() { return res; O que estas classes possuem em comum? 1) 2) 3)

1. Herança. Sobrescrevem métodos - redefinem métodos herdados. Subclasse herda de uma superclasse

Capítulo 11. Conceitos de Orientação a Objetos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Análise e Projeto de Sistemas de Informação. Andrêza Leite andreza.lba@gmail.com

Programação Orientada a Objetos C++

Autor: Ricardo Francisco Minzé Júnior - ricardominze@yahoo.com.br Desenvolvendo aplicações em camadas com PHP 5.

Transcrição:

PHP: Programando com Orientação a Objetos Pablo Dall'Oglio Adianti Solutions www.adianti.com.br

Roteiro Conceitos de Orientação a Objetos; Classes, objetos, propriedades, métodos; Métodos construtores e destrutores; Associação, agregação, composição e herança; Encapsulamento e polimorfismo; Exemplos práticos.

Introdução Programação Estruturada Vamos entender como surgiu a Orientação a Objetos; Como era a programação antes da O.O.? O paradigma que reinava era a programação estruturada; A programação estruturada introduziu conceitos importantes na engenharia de software em sua época; É baseada fortemente na modularização; A idéia da modularização é dividir o programa em unidades menores conhecidas por procedimentos ou funções, que são construídas para desempenhar uma tarefa específica; E Processo S

Introdução Programação Estruturada Na programação estruturada, as unidades do código (funções) se interligam por meio de três mecanismos básicos: seqüência, decisão e iteração, como ilustrado na figura a seguir:

Introdução Programação Estruturada As funções ou procedimentos e podem ser executados várias vezes; As funções podem receber parâmetros fazendo com que o resultado do seu processamento interno varie de acordo com os argumentos (parâmetros) de entrada; É possível executar uma função sob diversas circunstâncias diferentes; Estes itens configuram um importante conceito da engenharia de software: o REUSO; Além disto, uma boa modularização deve ter alta coesão e baixo acoplamento;

Análise Estruturada Análise Estruturada: Em primeiro lugar se pensa nos dados e nas estruturas que irão armazená-los (E.R.).

Análise orientada a objetos Análise O.O.: Em primeiro lugar se pensa nos conceitos, seus atributos, seu comportamento e nos seus relacionamentos.

Análise orientada a objetos

Objetos O sistema é organizado através de um conjunto de objetos; Uma entidade que possui atributos, comportamento e se relaciona com outros objetos por meio de mensagens; Um objeto pode ser algo concreto (pessoa, bicicleta, um pedido) ou abstrato (uma botão, uma janela, um arquivo); O objeto possui responsabilidade sobre si (encapsulamento); Os objetos propiciam maior compreensão do mundo real; A orientação a objetos leva à um baixo grau de acoplamento; Algumas linguagens Orientadas a Objetos: Smaltalk; C++; Java; PHP;

Objetos

Classes A classe é uma estrutura estática utilizada para descrever (moldar) objetos; A classe é um modelo (template) para criação de objetos; Podem ser classes: entidades do negócio da aplicação (pessoa, conta, cliente), entidades de interface (janela, botão, painel, frame, barra), dentre outras (conexão com BD, um arquivo XML, um Web Service); Um grupos de objetos é descrito por uma classe; Um objeto é uma instância de uma classe. Exemplo: Classe: Fatura / Objeto: Fatura no. 5470 Classe: Pessoa / Objeto: João, Maria, etc...

Propriedades Propriedades são Atributos, características de um objeto; Os atributos definem a identidade de um objeto; Exemplo: Nós, seres humanos, somos definidos pelo conjunto de nossos atributos: físicos (algura, cor da pele, algura, cor do cabelo), psicológicos (personalidade, humor, empatia), de trabalho (capacidade, especialização, criatividade), de estudo (nível de escolaridade), dentre outros.

Métodos Os métodos são operações que definem o comportamento de um objeto; Os métodos definem como o objeto irá se relacionar com o mundo externo; É por meio de um método, que solicitamos que um objeto faça algo.

Definindo uma classe <?php class Pessoa // define os atributos public $Codigo; public $Nome; public $Altura; public $Idade; Atributos // define os métodos function setnome($nome) $this->nome = $nome; function Crescer($centimetros) $this->altura += $centimetros; Métodos Métodos?> function Envelhecer($anos) $this->idade += $anos; Métodos

Instanciando Objetos <?php // inclui a classe include 'pessoa.class.php'; // instancia o objeto $maria = new Pessoa; Instanciando o objeto // define aributos $maria->altura = 1.7; $maria->idade = 28; // executa métodos $maria->setnome('maria da Silva'); $maria->crescer(0.1); $maria->envelhecer(1); // imprime o objeto var_dump($maria);?> output object(pessoa)#1 (4) ["Codigo"]=> NULL ["Nome"]=> string(14) "Maria da Silva" ["Altura"]=> float(1,8) ["Idade"]=> int(29)

Instanciando Objetos <?php // instancia um objeto (janela) $janela = new GtkWindow; // define o tamanho da janela $janela->set_size_request(300,200); // instancia um rótulo de texto $label = new GtkLabel('Olá Mundo'); // adiciona o rótulo à janela $janela->add($label); // exibe a janela $janela->show_all(); // controle Gtk Gtk::Main();?>

Construtores e destrutores Um construtor é um método especial utilizado para definir o comportamento inicial de um objeto, ou seja, o comportamento no momento de sua criação; O método construtor é executado automaticamente no momento em que instanciamos um objeto por meio do operador new; Um método destrutor ou finalizador é um método especial executado automaticamente quando o objeto é desalocado da memória, quando atribuímos o valor NULL ao objeto, quando utilizamos a função unset() sobre o mesmo ou, em última instância, quando o programa é finalizado; O método destrutor pode ser utilizado para finalizar conexões, apagar arquivos temporários criados durante o ciclo de vida do objeto, dentre outros.

Construtores e destrutores <?php class Pessoa public $Codigo; public $Nome; // método construtor function construct($codigo, $nome) $this->codigo = $codigo; $this->nome = $nome; // método destrutor function destruct() echo "desalocando $this->nome\n"; output object(pessoa)#1 (2) ["Codigo"]=> int(27) ["Nome"]=> string(14) "Maria da Silva" object(pessoa)#2 (2) ["Codigo"]=> int(28) ["Nome"]=> string(14) "Joana Maranhão" desalocando Maria da Silva desalocando Joana Maranhão $maria = new Pessoa(27, 'Maria da Silva'); $joana = new Pessoa(28, 'Joana Maranhão'); var_dump($maria, $joana); unset($maria); unset($joana);?> Método destrutor Método construtor

Encapsulamento As classes são orientadas ao assunto, ou seja, cada classe é responsável por um assunto diferente e é responsável sobre o mesmo, ou seja, deve proteger o seu acesso; A proteção ao acesso ao seu conteúdo se dá por meio de mecanismos como o de encapsulamento; O encapsulamento visa separar os aspectos externos de um objeto dos detalhes internos daquele objeto. É uma forma de proteger certos atributos, evitando que os mesmos contenham valores inconsistentes ou sejam manipuladas indevidamente; Exemplo: Datas, Valores Numéricos;

Estrutura de um Objeto dados mensagem funções (métodos) que manipulam os dados

Encapsulamento <?php class Pessoa private $Codigo; public $Nome; private $Altura; output Fatal error: Cannot access private property Pessoa::$Altura in exemplo.php on line 25 function construct($codigo) $this->codigo = $codigo; function setaltura($altura) $this->altura = $altura; Tipos de visibilidade PRIVATE :: SOMENTE PRÓPRIA CLASSE PROTECTED :: CLASSE E DESCENDENTES PUBLIC :: DE QUALQUER PONTO $maria = new Pessoa(27); $maria->nome = 'Maria da Silva'; $maria->setaltura(1.7); $joana = new Pessoa(28); $joana->nome = 'Joana Maranhão'; $joana->altura = 1.8;?> Acesso não permitido

Associações Associação é a relação mais comum entre dois objetos; Na associação, um objeto possui uma referência à outro objeto, podendo visualizar seus atributos ou mesmo acionar uma de suas funcionalidades (métodos); A forma mais comum de implementar uma associação é ter um objeto como atributo de outro; No exemplo a seguir, criamos um objeto do tipo Produto e outro do tipo Fornecedor; Um dos atributos do produto é o fornecedor; Leia-se um objeto está relacionado com outro objeto;

Associações Exemplo em diagrama UML

Associações <?php class Produto public $Codigo; public $Descricao; public $Preco; public $Fornecedor; // exibe os dados do produto function ExibeDados() echo 'Codigo: '. $this->codigo. "<br>\n"; echo 'Descricao: '. $this->descricao. "<br>\n"; echo 'Preço: '. $this->preco. "<br>\n"; echo 'Fornecedor:'. $this->fornecedor->nome. "<br>\n"; <?php class Fornecedor public $Nome; public $Telefone; public $Endereco;?>?> // atribui um fornecedor ao produto function setfornecedor(fornecedor $fornecedor) $this->fornecedor = $fornecedor; Associação interna

Associações <?php include_once 'classes/produto.class.php'; include_once 'classes/fornecedor.class.php'; $macarrao = new Produto; $macarrao->codigo = 7; $macarrao->descricao = 'Macarrão instantâneo'; $macarrao->preco = 1.29; $macarrao->quantidade = 10; $isabela = new Fornecedor; $isabela->nome = 'Massas Isabela'; $isabela->telefone = '(51) 1234-5678'; $isabela->endereco = 'Rua das Massas'; output Codigo: 7 Descricao: Macarrão instantâneo Preço: 1,29 Fornecedor:Massas Isabela // associacao $macarrao->setfornecedor($isabela); Método de associação // exibe as informacoes $macarrao->exibedados();?>

Agregação A agregação é o tipo de relação entre objetos conhecida como todo/parte; Na agregação, um objeto agrega outro objeto, ou seja, referencia objeto(s) externo dentro de si; O objeto-pai poderá agregar uma ou muitas instâncias de um outro objeto e poderá utilizar funcionalidades do objeto agregado; A forma mais simples de implementar agregações é utilizando arrays; Criamos um array como atributo do objeto, sendo que o papel deste array é armazenar inúmeras instâncias de um outro objeto; Leia-se um objeto contém instâncias de outros objetos.

Agregação Exemplo em diagrama UML

Agregação <?php class CestaDeCompras private $Produtos; // colecao de objetos (array) function AdicionarItem(Produto $produto) $this->produtos[] = $produto; function ExibeLista() foreach ($this->produtos as $produto) echo $produto->descricao. "<br>\n"; function CalculaTotal() $total = 0; foreach ($this->produtos as $produto) $total += $produto->preco; return $total;?> Método de agregação

Agregação <?php class Produto public $Codigo; public $Descricao; public $Preco; output Chocolate Sensação Picanha Bovina Total : 19,2 $chocolate = new Produto; $chocolate->codigo=4; $chocolate->descricao = 'Chocolate Sensação'; $chocolate->preco = 1.2; $picanha = new Produto; $picanha->codigo=7; $picanha->descricao = 'Picanha Bovina'; $picanha->preco = 18; $cesta = new CestaDeCompras; $cesta->adicionaritem($chocolate); $cesta->adicionaritem($picanha); Chamada à agregação $cesta->exibelista(); echo 'Total : '; echo $cesta->calculatotal();?>

Composição Composição também é uma relação todo/parte; A diferença em relação à agregação é que, na composição, o objeto-pai ou todo é responsável pela criação e destruição de suas partes; O objeto-pai realmente possui a(s) instância(s) de suas partes. Diferentemente da agregação, na qual o todo e as partes são independentes; Na agregação, ao destruirmos o objeto todo as partes permanecem na memória, por terem sido criadas fora do escopo da classe todo. Já na composição, quando o objeto todo é destruído, suas partes também são; Leia-se um objeto é composto de outros objetos;

Composição Exemplo em diagrama UML

Composição <?php class Fornecedor public $Codigo; public $RazaoSocial; public $Contatos; function addcontato($nome, $telefone, $email) $contato = new Contato; $contato->nome = $nome; $contato->telefone = $telefone; $contato->email = $email; $this->contatos[] = $contato; <?php class Contato public $Nome; public $Telefone; public $Email;?> Método de composição?> function ImprimeContatos() foreach ($this->contatos as $contato) var_dump($contato);

Composição <?php include_once 'classes/fornecedor.class.php'; include_once 'classes/contato.class.php'; // instancia novo fornecedor $fornecedor = new Fornecedor; $fornecedor->codigo = 10; $fornecedor->razaosocial = 'Produtos Bom Gosto S.A.'; // atribui informações de contato $fornecedor->addcontato('mauro', '51 1234-5677', 'mauro@bomgosto.com.br'); $fornecedor->addcontato('maria', '51 1234-5678', 'maria@bomgosto.com.br'); $fornecedor->addcontato('joana', '51 1234-5679', 'joana@bomgosto.com.br'); // debug output var_dump($fornecedor);?> Fornecedor Object ( [Codigo] => 10 [RazaoSocial] => Produtos Bom Gosto S.A. [Contatos] => Array [0] => Contato Object [Nome] => Mauro [Telefone] => 51 1234-5677 [Email] => mauro@bomgosto.com.br [1] => Contato Object...

Herança Um dos maiores benefícios na utilização da orientação a objetos é o reuso; A possibilidade de reutilizar partes de código nos dá maior agilidade no dia-a-dia, além de eliminar a necessidade de eventuais duplicações ou reescritas de código; Uma herança é um tipo de relacionamento que permite especializar uma classe, criar versões refinadas dela; Na herança, as classes são organizadas em hierarquias; A herança é uma forma de reutilizar componentes de software aperfeiçoando-os ou adicionando características específicas;

Hierarquia de Classes Super classe Sub classes

Hierarquia de Classes

Herança A herança permite o compartilhamento de atributos e métodos entre as classes de uma hierarquia; Cada subclasse herda todas as propriedades (atributos e métodos) de suas ancestrais; Uma subclasse pode estender ou redefinir a estrutura e/ou o comportamento de sua super classe; Leia-se um objeto é tipo de outro objeto; É um poderoso instrumento de reusabilidade, pois: permite que atributos e operações comuns à hierarquia sejam especificados apenas uma vez; Permite que novas classes sejam criadas contendo apenas a diferença entre ela e a classe-pai.

Herança <?php abstract class Conta private $Agencia; private $Numero; protected $Saldo; Uma classe abstrata não pode ser instanciada diretamente. function construct($agencia, $numero, $saldo) $this->agencia = $agencia; $this->numero = $numero; $this->saldo = $saldo; function Depositar($valor) $this->saldo += $valor;?> function getsaldo() return $this->saldo;

Herança <?php final class ContaCorrente extends Conta public $Limite; function Retirar($valor) if ($this->saldo + $this->limite > $valor) $this->saldo -= $valor; final class ContaPoupanca extends Conta function Retirar($valor) if ($this->saldo > $valor) $this->saldo -= $valor;?> Uma classe final não pode ser extendida. Classe filha Classe filha

Herança <?php include_once 'classes/conta.class.php'; include_once 'classes/contapoupanca.class.php'; include_once 'classes/contacorrente.class.php'; $conta1 = new ContaPoupanca('1', '123', 100); $conta2 = new ContaCorrente('2', '456', 200); $conta2->limite = 500; echo 'saldo conta1: '. $conta1->getsaldo(); // exibir 100 echo 'saldo conta2: '. $conta2->getsaldo(); // exibir 200 output saldo conta1: 100 saldo conta2: 200 saldo conta1: 400 saldo conta2: 700 saldo conta1: 400 saldo conta2: -499 $conta1->depositar(300); $conta2->depositar(500); echo 'saldo conta1: '. $conta1->getsaldo(); // exibir 400 echo 'saldo conta2: '. $conta2->getsaldo(); // exibir 700 $conta1->retirar(500); // saldo maximo e 400, nao deve permitir $conta2->retirar(1199); // 200+500+500(limite) saldo = 1200 (permitir) echo 'saldo conta1: '. $conta1->getsaldo(); // exibir 400 echo 'saldo conta2: '. $conta2->getsaldo(); // exibir -499?>

O que é um sistema O.O.? Um sistema OO é modelado, implementado e efetivamente funciona como um conjunto de objetos que interagem entre si.

Leitura Recomendada :-) 42

Obrigado! E-Mail URL pablo@php.net pablo@dalloglio.net http://www.adianti.com.br http://www.pablo.blog.br 43