Prévia do material em texto
PROGRAMAÇÃO CODING WEB (PHP) Unidade 4 Orientação a objetos em PHP CEO DAVID LIRA STEPHEN BARROS Diretora Editorial ALESSANDRA FERREIRA Gerente Editorial LAURA KRISTINA FRANCO DOS SANTOS Projeto Gráfico TIAGO DA ROCHA Autoria LUIZ FERNANDO CORCINI 4 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 A U TO RI A Luiz Fernando Corcini Sou formado em Engenharia Eletrônica, com especialização em Administração de TI, Mestre em Educação e Novas Tecnologias e Doutorando em Sistemas Tutores Inteligentes. Tenho experiência técnico-profissional na área de desenvolvimento e gestão da produção de softwares nas áreas de Gerenciamento de Processos Empresariais. Uso os recursos disponibilizados pela Web, há mais de 20 anos. Sou professor universitário, há mais de 15 anos, e já publiquei vários livros técnicos sobre assuntos voltados à área de informática. Sou apaixonado pelo que faço e adoro transmitir minha experiência de vida àqueles que estão iniciando em suas profissões. Por isso, fui convidado pela Editora Telesapiens a integrar seu elenco de autores independentes. Estou muito feliz em poder ajudar você nesta fase de muito estudo e trabalho. Conte comigo! 5PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 ÍC O N ES 6 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Classes, objetos, métodos e atributos .................................... 9 Introdução ............................................................................................................. 9 Conceitos de orientada a objetos ...................................................................10 O que é uma classe? .........................................................................................12 Abstração na prática ...........................................................................15 Como trabalhar com atributos? ......................................................................17 Como funcionam os métodos? .......................................................................18 O que é um objeto? ...........................................................................................19 Encapsulamento e visibilidade .............................................. 24 Método construtor ............................................................................................28 Usando o comando include .................................................................... 30 Montando a classe conectar no Blog .............................................. 35 Herança e polimorfismo- funções .......................................... 38 Herança entre classes .......................................................................................38 Polimorfismo .......................................................................................................41 Sobrecarga e classe abstrata ................................................. 49 Sobrecarga de métodos ....................................................................49 Simulando sobrecarga de métodos em PHP ................................. 50 Classe abstrata ...................................................................................................54 Métodos abstratos ..............................................................................56 SU M Á RI O 7PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 A PR ES EN TA ÇÃ O Seja bem-vindo à Unidade 4 – Orientação a objetos em PHP - da disciplina de Introdução ao Coding Web. O conteúdo desta Unidade está dividido em quatro módulos. No primeiro módulo, vamos conhecer os conceitos fundamentais da orientação a objetos, tais como classes, objetos, métodos e atributos. No segundo módulo, vamos aplicar os conceitos de encapsulamento e visibilidade de códigos em PHP. No terceiro módulo, aprenderemos os conceitos de herança e polimorfismo em códigos PHP. E por fim, no quarto módulo, entenderemos os conceitos de sobrecarga e classe abstrata no desenvolvimento de programas em PHP. Vamos começar? Excelente estudo para você! 8 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 O BJ ET IV O S Olá. Seja muito bem-vindo à Unidade 4. Nosso objetivo é auxiliar você no desenvolvimento das seguintes competências profissionais até o término desta etapa de estudos: 1. Reconhecer os conceitos fundamentais da orientação a objetos, como classes, objetos, métodos e atributos. 2. Aplicar os conceitos de encapsulamento e visibilidade de códigos em PHP. 3. Aplicar os conceitos de herança e polimorfismo em códigos PHP. 4. Aplicar os conceitos de sobrecarga e classe abstrata no desenvolvimento de programas e sistemas em PHP. Então? Preparado para uma viagem sem volta rumo ao conhecimento? Ao trabalho! 9PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Classes, objetos, métodos e atributos OBJETIVO Ao término deste capítulo, você será capaz de entender reconhecer os conceitos fundamentais da orientação a objetos, como classes, objetos, métodos e atributos. E então? Motivado para desenvolver essa competência? Então vamos lá. Avante! Introdução Ao se construir ou desenvolver um sistema, podemos escolher um entre vários paradigmas de programação, sendo os mais conhecidos o paradigma procedural e o paradigma orientado a objetos. No primeiro caso, o paradigma procedural, segundo Dall’Oglio (2016), constrói-se um programa, formado por um conjunto de procedimentos e variáveis nem sempre agrupadas, de acordo com o contexto. Essa maneira de programar é (ou era) utilizada em linguagens classificadas como estruturadas, por exemplo: Cobol, Clipper, Pascal, entre outras. Conforme o mesmo autor, o paradigma orientado a objeto trabalha com uma ótica mais aproximada do mundo real. Essa característica é dada devido à utilização de conceitos como classes, objetos, atributos e métodos. Segundo Souza (2017), a Programação Orientada a Objetos (POO) é um paradigma de análise, projeto e programação de sistemas de software com base na composição e na interação entre diversas unidades de código, chamadas de objetos. O PHP é uma linguagem que nos permite escrever códigos nos paradigmas procedural ou orientada a objetos. Ao 10 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 utilizar o paradigma de programação procedural, o programador constrói o código do programa com base em functions que, ao serem chamadas, executam determinados comandos. Em POO, tudo o que for fazer, faça com objeto (SOUZA , 2017). Conceitos de orientada a objetos Se você nunca trabalhou com POO, você vai precisar aprender alguns conceitos básicos, antes de escrever algum código. Esse tópico irá apresentar os conceitos mais importantes, sem os quais você não conseguirá trabalhar com POO. Nosso foco será mostrar como cada um desses itens aparecem no mundo real e, simultaneamente, prover uma introdução à POO em PHP. Antes de tratar os conceitos, faz-se pertinente apresentar alguns benefícios da utilização da POO. Quadro 1 – Benefícios da POO Benefício Explicação Reusabildiade Não repita o código, mas ao contrário, reutilize-o. Refatoração Na hora de refazer fica mais fácil, visto que temos pedaços menores e mais simples. Extensibilidade Pode-se criar objetos a partir dos existentes, que herdam todas as suas características e adicionar novas. Manutenibilidade O programa torna-se mais fácil de manter devido à organização do código. Eficiência Muitos frameworks têm sido desenvolvidos para tornar a POO cada vez mais eficiente. Fonte: Elaborado pelo autor (2023). É importante destacar também os quatro pilares fundamentais da POO, conforme destacado por Pauli (2010): 11PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Quadro 2 - Conceitos fundamentais da POO Conceito Descrição Abstração Capacidade de representar conceitos do domínio do problema, ressaltando apenas o que for relevante para a aplicação da questão. EncapsulamentoCapacidade de esconder os detalhes internos da implementação de uma classe, apresentando apenas as informações necessárias para a sua utilização. Herança Mecanismo que permite a definição de uma hierarquia de classes, com o objetivo de reutilizar características já definidas. Polimorfismo Capacidade da implementação de operações de maneira diferente da definida, originalmente, na classe-base. Fonte: Elaborado pelo autor (2023). Não se preocupe se esses termos lhe parecem estranhos. Vamos apresenta-los e discuti-los nesse material. Além desses pilares fundamentais, do quadro anterior, para compreender como funciona a POO, é necessário entender quais são, o que significam e como são utilizados os principais elementos. Segue uma breve lista dos principais elementos que serão aqui explorados (SOUZA,2017): • Classe -uma abstração. Matriz base para a criação dos objetos, utilizados em um programa. Na programação estruturada, a classe corresponde a um arquivo. • Objeto - instância da classe. • Método - refere-se aos comportamentos do modelo a ser criado. Muito parecido com uma função, mas está subordinada à classe. 12 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 • Atributos- referem-se às características do modelo a ser criado. São como variáveis, mas estão subordinados à classe. Vamos, agora, detalhar e clarificar cada um desses elementos para que você consiga utilizá-los em seus códigos PHP. O que é uma classe? As classes são abstrações do domínio do mundo real para o qual o programa será desenvolvido e servem de modelos (moldes) com base nos quais um ou mais objetos serão instanciados. EXPLICANDO MELHOR No mundo real, você frequentemente vai encontrar vários objetos de um mesmo tipo, isto é, existem ao nosso redor várias “coisas” que podem ser agrupadas como tendo o mesmo comportamento e as mesmas características. Para o caso do exemplo da bicicleta, com certeza existem várias do mesmo fabricante e do mesmo tipo rodando por aí. Cada uma delas foi construída com base no mesmo conjunto de projetos ou modelos e, portanto, têm os mesmos componentes. Em termos de orientação a objetos, podemos dizer que sua bicicleta é uma instância da classe de objetos conhecida como bicicleta. A classe é o projeto ou modelo a partir do qual cada objeto individual é criado. O mesmo funciona para o seu cachorro, a sua TV e todos os demais objetos que você consegue perceber ao seu redor. Todos as canetas que você tem ou já teve são objetos que estão na base de um modelo de caneta. Esse modelo é a classe caneta. Relativamente a sua representação, uma classe deve ter um nome, uma lista de atributos (características) e uma lista de métodos (comportamentos) e, segundo o padrão UML - Unified 13PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Modeling Language , é representada, graficamente, da seguinte maneira: Figura 1 – Representação esquemática de uma classe, conforme UML Lista de Atributos Lista de Métodos Fonte : Elaborado pelo autor (2022 ). ACESSE Se você quiser aprofundar os conhecimentos em UML, acesse o QR code . NOTA Como você pode ter notado, podemos pensar todas as coisas do mundo, usando o paradigma da Orientação a Objetos, isto é, pensar em tudo como classes e objetos. No que diz respeito à programação em linguagem PHP, a implementação básica de uma classe sempre deve iniciar com a palavra-chave class seguida pelo nome da classe, conforme mostra a figura a seguir: https://www.devmedia.com.br/modelagem-de-sistemas-atraves-de-uml-uma-visao-geral/27913 14 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 2 – Exemplo básico de implementação de uma classe em PHP Fonte: Elaborado pelo autor (2022). Como podemos ver, na figura citada, da mesma forma que acontece com os comandos condicionais ou laços de repetição, a abertura e fechamento de parênteses (linha 3 e linha 11) definem o bloco de código correspondente à classe. Nesse corpo da classe (entre os parênteses anteriores) devem estar definidos os seus atributos ou características, assim como os seus métodos. A lista de atributos pode ser composta por constantes, variáveis, matrizes. A lista de métodos é composta por funções. Uma classe bicicleta, ficaria mais ou menos assim: Figura 3 – Classe bicicleta Fonte: Elaborado pelo autor (2022). 15PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Abstração na prática Como você leu no quadro anterior, a abstração é um dos conceitos fundamentais da POO. Nesse caso, vamos aprender como utilizá-la na prática. Imagine que você queira criar uma classe para um usuário do seu blog. Como você deve saber, esse usuário é uma pessoa. E, assim, deve ter muitas características físicas e não físicas. Como exemplo de características físicas podemos citar: a altura, o peso, a cor do cabelo, a cor dos olhos, se tem limitação visual, se usa piercing ou tatuagem, a cor da pele, a raça, o número do sapato, gênero etc. Como características não físicas podem ser citadas: o número do CPF, do RG, a data de nascimento, o estado civil, endereço residencial, número do telefone celular etc. Você deve ter percebido que podem ser elencadas inúmeras características do usuário que supostamente acessaria o blog – ou qualquer outro site que você queira desenvolver, porém, usando a abstração, isto é, a capacidade de perceber quais características são e quais não são relevantes para o site, percebemos que a relevância de cada característica depende do assunto tratado. Se o site tratar sobre saúde física, ginástica, produtos fitness ou assuntos similares, características como altura e peso são relevantes. Mas caso trate sobre o aprendizado de idiomas, como inglês e espanhol, repare que as características que eram relevantes (peso e altura) , já não o são mais. Mais ainda se o site é sobre agência de modelos ou de relacionamentos, características como cor da pele, raça, tatuagem ou piercing são altamente relevantes. Mas se o site tratar sobre “astronomia 16 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 indígena” ou “cidades inteligentes”, nenhuma das características citadas é relevante. Muito bem! O que acabamos de fazer, isto é, todo esse raciocínio na verificação das características relevantes em cada assunto possível do suposto site ou blog é chamado de abstração. A importância da abstração está em não desperdiçar tempo de programação e nem espaço de armazenamento de dados com características que nunca serão úteis. Caso você tenha curiosidade de tentar rodar esse arquivo php no navegador, vai perceber que nada aparece na tela. Isso acontece porque a classe está definida no arquivo, porém não foi instanciada. Para se utilizar as propriedades e métodos de uma classe em um programa, é necessário instanciar essa classe, isto é, criar um objeto com base nela. A classe em si apenas define o modelo para os objetos que realmente “fazem” o programa executar as funções para o qual ele foi desenvolvido. EXEMPLO: quando queremos projetar um quarto para dormir, desenhamos onde ficará a cama, o armário, a escrivaninha, marcamos as medidas de largura, comprimento e altura do quarto e de cada “coisa” que pretendemos colocar nela. Porém, você não vai poder dormir na cama que desenhou no papel (no projeto do quarto) ou mesmo não poderá guardar suas roupas no armário que desenhou. Todos esses desenhos no papel são modelos (moldes) para se criar os objetos reais que serão colocados no quarto que você está projetando. Numa analogia, pode-se afirmar que o papel e todas as medidas, retas e curvas que você lá desenhou representam a classe do quarto e a classe dos móveis que serão fabricados (instanciados) para que você efetivamente possa utilizá-los. 17PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Como trabalhar com atributos? Como já mencionado nesse material, os atributos são as características relevantes que devem ser especificadas para um objeto. São declarados da mesma forma que as variáveisem php. Em relação à visibilidade, podem ser públicos (public), privados (private) ou protegidos (protected). De acordo com o site php.net, disponível aqui, essa especificação define a visibilidade do atributo da classe. Atributos declarados como públicos podem ser acessados em qualquer lugar que tenha instanciado a classe com esse atributo. Os atributos declarados como protegidos podem ser acessados, apenas na própria classe e em suas classes filhas (veremos esse conceito mais adiante). Por fim, os atributos declarados como privados só podem ser acessados na classe que os declarou. EXEMPLO: abra o NotePad++ e crie um arquivo chamado Exe01_u4.php. Nesse arquivo insira o código apresentado na figura a seguir: Figura 4 - Visibilidade de atributos na classe funcionário Fonte: Elaborado pelo autor (2022). Note que, na figura anterior, apenas temos a lista de atributos, pois nenhum método foi declarado. 18 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Como funcionam os métodos? Um método de uma classe define o comportamento que ela deve ter, quando esse método for chamado numa mensagem. Quando uma classe recebe uma mensagem, essa normalmente informa qual método ela deve executar. A classe, então, redireciona a execução do programa para o código que está contido no método chamado. Quando o bloco de código daquele método acaba, o programa retorna à execução para a linha de código seguinte a que chamou o método. Normalmente, um método tem a função de alterar o conteúdo de um ou mais atributos do objeto. Conforme destacado por Malaquias (2015), os métodos podem mudar o valor das características dos objetos e servem como mecanismo primário de comunicação entre objetos. NOTA O termo “chamar um método” é utilizado para dizer que o código que está contido naquele método deve ser executado. Para declarar um método público em PHP, utilizamos a seguinte sintaxe: public function () { Bloco de código que deve ser executado quando este método foi chamado. return } 19PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Assim: • O termo “public” define que o método pode ser acessado por outras classes que instanciarem a classe que o contém. Caso se queira tornar este método inacessível para outras classes, é necessário substituir o termo “public” por “private”. Esse assunto será melhor aprofundado no próximo tópico. • Para o utiliza-se qualquer identificador válido que ainda não tenha sido utilizado para declarar outros elementos nessa mesma classe. O nome do método deve sempre ser sucedido por abre e fecha parênteses “()”, caso não tenha parâmetros. Caso contrário, os parâmetros devem ser declarados entre os parênteses. • A não é obrigatória e indica os parâmetros que o método precisa para executar seu bloco de código. • Alguns métodos precisam retornar um conteúdo, outros não. Caso seja necessário retornar um conteúdo, deve- se utilizar o comando “return,” seguido da variável que contém o conteúdo a ser retornado ou mesmo seguido do próprio valor a ser retornado. O que é um objeto? Os objetos são a chave para entender a tecnologia orientada a objetos. Em um programa de computador são conceitualmente similares a um objeto no mundo real. Ambos têm base num modelo (classe) e têm características e comportamentos. 20 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Os objetos armazenam suas características em campos (variáveis) e mostram seus comportamentos por meio de métodos (funções). Para instanciar um objeto em PHP, usa-se a palavra “reserdada’ “new” com a seguinte sintaxe: $Nome_do_Objeto = new Nome_da_Classe(); O objeto é definido da mesma maneira que uma variável. EXEMPLO: imagine que seja necessário criar uma classe carro para um determinado jogo de corrida. Os atributos (características) relevantes indicados pelos projetistas do jogo foram: marca, modelo, cor, quantidade de combustível no tanque, tamanho do tanque. Nossa classe carro ficaria mais ou menos assim: Figura 5 – Exemplo da classe carro Fonte: Elaborado pelo autor (2022). Para instanciar essa classe, isto é, criar o objeto carro, precisamos escrever a seguinte linha de código: $Meu_Carro = new CARRO(); 21PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Note que a variável $Meu_Carro representa um objeto da classe CARRO. Assim, ele pode acessar todas as características públicas definidas nessa classe. Você pode perguntar: podemos ter dois objetos com base na mesma classe? Claro que sim. É só instanciar dois objetos da mesma classe, da seguinte maneira: Figura 6 – Duas instâncias da mesma classe CARRO Fonte: Elaborado pelo autor (2022). Note que na linha 11, temos uma instância da classe CARRO que define o objeto $carro1. Já na linha 12, temos novamente uma instância da mesma classe, definindo um objeto chamado $carro2. São carros diferentes (objetos) com base no mesmo modelo (classe) de CARRO. Para preencher os atributos de cada objeto, fazemos da seguinte maneira: 22 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 7 – Classe CARRO Fonte: Elaborado pelo autor (2022). Para o caso do exemplo com funcionário (figura anterior) temos o seguinte: Figura 8- Criando dois objetos com base na classe funcionário Fonte: Elaborado pelo autor (2022). 23PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Como ficaria o código, se tentássemos informar o salário do funcionário número 1? Você deve estar pensando: “Bem, é só inserir uma linha como a 14, trocando o “nome” por “salário” e “Pedro” por “2000”, por exemplo. Pois, então tente fazer e veja o resultado. Se você acrescentou a linha de código: $Funcionario1- >salario = 2000; e mandou atualizar, o navegador deve ter recebido uma mensagem de erro com a seguinte mensagem: Fatal error: Cannot access protected property Funcionario::$salario in C:\xampp\htdocs\ teste\Exe01_u4.php on line … Isto ocorreu porque o atributo $salário foi definido como protegido e não pode ser acessado de fora da classe a não ser por uma que herde as características da classe Funcionário. Isso é muito importante e serve para dificultar o acesso de pessoas estranhas aos valores dos salários ou mesmo, como nesse caso, de evitar tentativas de alteração do valor ou de qualquer outra informação importante do funcionário. Aprofundaremos esse assunto no próximo tópico: Encapsulamento e Visibilidade. RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir algo do que vimos. Você deve ter compreendido como reconhecer os conceitos fundamentais da orientação a objetos, como classes, objetos, métodos e atributos. 24 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Encapsulamento e visibilidade aplicar os conceitos de encapsulamento e visibilidade de códigos em PHP OBJETIVO Ao término deste capítulo, você será capaz de aplicar os conceitos de encapsulamento e visibilidade de códigos em PHP. E então? Motivado para desenvolver essa competência? Então vamos lá. Avante! Esconder as características dos objetos e exigir uma interação por meio dos métodos para alterá-las é chamado de encapsulamento de dados – um princípio fundamental da programação orientada a objetos. O encapsulamento serve para proteger os membros internos e um objeto. Quando usamos esse princípio, a única maneira de acessar um atributo de um objeto é por meio de um método, disponibilizado pela classe na qual o objeto em questão se baseia. Caso esse método não esteja disponível ou não exista, o atributo existe, mas não fica acessível. Com base na explicação de Souza (2016), fazemos a seguinte analogia: quando você quer ligar para alguém e, ao pegar, seu telefone celular, digita os números do contato e pressiona o botão “ligar”, o telefone automaticamente faz a ligação. Você não precisa sabercomo o telefone celular funciona, como ele processa os dados que você digitou. Isto quer dizer que o processo de ligação de um telefone celular para outro está encapsulado, ou seja, em uma “cápsula”. Da mesma forma, você pode encapsular os métodos ou atributos das classes que desenvolve, mostrando apenas quais são os dados de entrada necessários para executá-los. 25PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 O encapsulamento baseia-se na propriedade que define a visibilidade dos atributos. Em PHP, existem três tipos distintos, a saber: • Private -atributos ou métodos declarados como private só podem ser acessados no escopo da própria classe em que foram declarados. • Protected- atributos ou métodos declarados com protected somente podem ser acessadas na própria classe ou a partir de classes descendentes (herdadas). • Public -atributos ou métodos como public podem ser acessados de forma livre, a partir da própria classe, de classes descendentes e de programas que fazem uso dessa classe. Voltando ao exemplo da classe funcionário (figura anterior), como podemos definir ou alterar o seu salário, já que ele está definido como protected? Para fazer isso precisamos construir um método que execute essa tarefa. Esse método pode ser assim: 26 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 9 - Inserindo métodos na classe Funcionário Fonte: Elaborado pelo autor (2022). Já aproveitamos e colocamos dois métodos: AlteraSalario e MostraSalario. Salve esse arquivo php e atualize o navegador. O resultado deve ser parecido com o apresentado da figura a seguir: Figura 10 – Resultado da execução do código da Figura 9 Fonte: Elaborado pelo autor (2022). Note, na figura anterior, podemos definir diretamente o departamento em que o funcionário trabalha, isto é, sem a utilização 27PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 de método. Isto acontece porque o atributo “$depto” foi definido como public. Isto até não causaria nenhum problema, mas perceba que o atributo “$desligado” que tem a função de informar, se o funcionário foi demitido ou não também, é público. Isso pode causar vários problemas. Qualquer um poderia demitir o funcionário, simplesmente, executando uma linha simples de atribuição de valor para o atributo. Assim, aconselhamos a modificar a visibilidade do atributo “$desligado” para privado ou para protegido e criar um método para demitir o funcionário. O método ficaria mais ou menos assim: Figura 11 -Método demitir funcionário Fonte: Elaborado pelo autor (2022). Repare que esse método não recebe parâmetro. Ele simplesmente verifica se o funcionário já não está demitido. Em caso positivo, ele informa que não pode demitir um funcionário já demitido. Mas caso o valor do atributo “$desligado” seja igual a false, ele demite o funcionário (passando o valor do atributo para true e informa que acabou de demiti-lo, conforme solicitado). Para testar esse método, você precisa inserir duas linhas em seu código: Figura 12 -Testando o método demitir funcionário Fonte: Elaborado pelo autor (2022). 28 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 É para colocar duas vezes a mesma coisa? Sim! Sabe por quê? Porque da primeira vez, ele deve demitir o funcionário e da segunda vez, avisar que o funcionário em questão já foi demitido. O uso dessas duas linhas iguais testa o método de forma completa para verificar, se tudo está funcionando, adequadamente. É claro que você está apenas testando as funcionalidades desse método. Num programa normal, não seria necessário deixar as duas linhas. O resultado no navegador deve ser mais ou menos assim: Figura 13 -Resultado do código com os métodos apresentados até o momento Fonte: Elaborado pelo autor (2022). Método construtor É um tipo especial de método que é executado, apenas uma vez, quando o objeto da classe é instanciado. Normalmente, utilizado para inicializar valores de atributos de um objeto, para estabelecer conexão com o banco de dados ou abertura de um arquivo “txt” que será utilizado como “log”. Em algumas linguagens de programação, o método construtor tem o mesmo nome da classe. Isto também acontecia com o PHP até a versão 5. A partir dessa versão, pode-se definir o método construtor com o mesmo nome da classe (método antigo) ou usar o método “__construct()”. Ele não é obrigatório, isto é, o programador não precisa, necessariamente, definir esse método, quando vai implementar 29PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 um programa. Caso não o defina, todos os atributos serão considerados com valor NULL. Para testar isso é fácil: salve o exercício anterior com o nome de Exe02_u4.php e logo após a criação dos objetos “$funcionario1” e “$funcionario2”, faça a seguinte verificação: Figura 14 – Verificação de nulidade do conteúdo do atributo Fonte: Elaborado pelo autor (2022). Para evitar valores nulos dos atributos das classes, podemos usar o método construtor, da seguinte forma: Figura 15 – Método construtor em PHP Fonte: Elaborado pelo autor (2022). 30 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 No caso anterior, o método não tem parâmetros, mas poderíamos ter um construtor que recebesse parâmetros. EXEMPLO: imagine que você precise, ao criar o objeto Funcionário, já as informações referentes ao seu nome, CPF e departamento. O código seria mais ou menos assim: Figura 16 – Criando objetos de classes com método construtor Fonte: Elaborado pelo autor (2022). Usando o comando include Outro viés do termo visibilidade pode ser utilizado com o comando include. Muitas vezes, não é produtivo manter as definições das classes (com seus atributos e métodos) no mesmo arquivo que o código que as manipula. Uma vez que a classe está funcionando, adequadamente, mantê-la no mesmo arquivo em que códigos estão sendo inseridos pode, por engano ou falta de informação do programador, vir a danificar o código original da classe (ou das classes). Dessa forma, o que se faz, normalmente, é montar o arquivo referente à classe deixá-la à parte do código que irá instanciar objetos com base nela. 31PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 EXEMPLO: abre o NotePad++ e crie um arquivo chamado usuario.php. Nesse arquivo, crie uma classe chamada USUARIO, conforme a figura a seguir: Figura 17- Classe Usuário Fonte: Elaborado pelo autor (2022). Agora crie outro arquivo, chamado Exe03_u4.php com o seguinte código: Figura 18 – Usando o comando “include” Fonte: Elaborado pelo autor (2022). Explicando o código: na linha 2 da figura anterior, o comando include está informando que o arquivo usuario.php será utilizado. Por isso, na linha 4, a classe usuário é instanciada e o objeto “$usr” é criado. Caso você retire a linha 2 do código da figura anterior, o navegador informará que a classe “USUARIO” não existe. A figura mostra o que deve aparecer na tela do navegador: 32 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 19- Demonstração de erro Fonte: Elaborado pelo autor (2022). Outra possibilidade para o uso do comando “include” é a divisão do código de uma página web, com o intuito de deixar esse código de cada página mais fácil de ser lido entendido. EXEMPLO: abra o NotePad++ e crie um arquivo php com o nome Exe04_u4.php. Insira o seguinte código: Figura 20 – Uso do comando “Include” Fonte: Elaborado pelo autor (2022). O código dessa página pode ser refeito, separando os conteúdos do “header” para facilitar a leitura e a organização, da seguinte maneira: Crie um arquivo php com o nome de header.php. Insira o seguinte código: 33PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 21 – Arquivo header.php Fonte: Elaborado pelo autor (2022). E altere o código da figura anterior para o que está a seguir: Figura 22 – Usando o comando “include” Fonte: Elaborado pelo autor (2022). Se você salvar e executar o arquivo da figura anterior no navegador, terá o mesmo resultado que o obtido com o código da outra figura. Usandoo mesmo conceito para o Blog Pessoal, teremos o seguinte resultado no arquivo principal: 34 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 23 – Fazendo uso do comando “include” no Blog Pessoal Fonte: Elaborado pelo autor (2022). O arquivo inicial, antes de utilizar o recurso do comando “include”, tinha mais de 150 linhas. Agora, como podem notar na figura, ficamos com 37 linhas para o código principal do blog que foi distribuído em outros arquivos, cada qual responsável por fazer a sua parte e, no final, temos o blog completo. Se renomearmos o arquivo da figura anterior para “principal_blog_u4.php” e iniciarmos a chamada com o código 35PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 php que faz a conexão e verifica se ela foi realizada com sucesso, teremos o seguinte: Figura 24 – Novo código para iniciar o blog Fonte: Elaborado pelo autor (2022). Repare que a página do blog só será carregada, se a conexão com o banco de dados for realizada com sucesso. Montando a classe conectar no Blog Transformando o código da figura em uma classe, ficaria mais ou menos assim: 36 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 25 – Classe Principal com o método conectar Fonte: Elaborado pelo autor (2022). Mas repare que podemos usar o comando “include” para deixar o código menor e mais legível. É só criar um arquivo chamado principal.php e copiar o conteúdo das linhas 7 a 33. O código ficaria assim: 37PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 26 – Código final do exercício Fonte: Elaborado pelo autor (2022). Até agora tudo bem? Caso tenha alguma dúvida não esqueça de postá-la no fórum! Vamos em frente! RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir algo do que vimos. Você deve ter compreendido como aplicar os conceitos de encapsulamento e visibilidade de códigos em PHP. 38 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Herança e polimorfismo- funções OBJETIVO Ao término deste capítulo, você será capaz de entender aplicar os conceitos de herança e polimorfismo em códigos PHP. E então? Motivado para desenvolver essa competência? Então vamos lá. Avante! Herança entre classes Conforme vimos no começo deste material, a herança é um mecanismo que permite a definição de uma hierarquia de classes, com o objetivo de reutilizar características já definidas. Nesse sentido, a utilização da herança para reaproveitar estruturas já desenvolvidas, além do ganho de tempo, permite- nos ter uma base abstrata para a criação de classes, aproveitando recursos básicos comuns. Também conhecida como generalização ou especialização, em outra definição, a herança é uma propriedade que ocorre, quando uma classe consegue “herdar” as características e comportamentos de outra. A classe que herda é chamada de classe filha e a classe da qual a classe filha herdou é chamada de superclasse ou classe mãe. Em UML, representa-se a herança da seguinte maneira: 39PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 27 – Representação de herança em UML Fonte: Elaborado pelo autor (2022 ). Note que se pensarmos no sentido que vai da superclasse para as classes filhas (uma superclasse pode ter uma ou mais classes filhas), vemos uma especialização de características e comportamentos. Se pensarmos no sentido contrário, o que vemos é uma generalização. EXEMPLO: seguindo essa colocação bem-humorada, abra o NotePad++ e crie um arquivo chamado Jedi.php. Insira o seguinte código: Figura 28 – SuperClasse Jedi Fonte: Elaborado pelo autor (2022). 40 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Então já temos nossa Superclasse Jedi! Agora precisamos da classe filha. Assim, crie um arquivo php chamado Personagem. php, com o seguinte código: Figura 29 – Classe filha Fonte: Elaborado pelo autor (2022). Repare que na linha 5 do código anterior existe a palavra “extends”. É essa palavra-chave que determina que a classe Personagem herda as características e comportamentos da classe Jedi. Isto permite que a subclasse Personagem acesse os atributos “sabre_de_Luz”, “força_mental” e “habilidade_física”, bem como o método “Tornar_se_Jedi”, como se fossem próprios. Para testar se as classes estão funcionando com o mecanismo da herança, crie um arquivo php chamado exe05_ u4.php e insira o seguinte código: 41PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 30 – Teste das classes Jedi e Personagem Fonte: Elaborado pelo autor (2022). Polimorfismo De acordo com o que foi visto no quadro anterior , no início desse material, polimorfismo é a capacidade da implementação de operações de maneira diferente da definida, originalmente, na classe base. Para melhor apresentar o funcionamento do Polimorfismo, vejamos o seguinte diagrama: 42 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 31 – Representação gráfica da herança entre duas classes Fonte: Elaborado pelo autor (2022 ). 43PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 32 – Classe Conta Fonte : Elaborado pelo autor (2022). Agora vamos montar um código para testar a classe conta da figura anterior. Abra o NotePad++ e crie um arquivo chamado Exe06_u4.php, com o seguinte código: 44 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 33 – Código fonte para testar a classe conta da figura anterior Fonte: Elaborado pelo autor (2022). Depois de salvo o arquivo anterior e atualizado o navegador, devemos ter o seguinte resultado: Figura 34 – Resultado da execução do código da figura anterior Fonte: Elaborado pelo autor (2022). Note que o saldo da conta fica negativo em meio às transações (de saque e depósito) realizadas. 45PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Agora que temos a classe contas a funcionar, vamos criar uma especialização da classe conta.php chamada de conta Poupança! Então, crie um arquivo no NotePad++ chamado contaPoupanca.php, o qual deve conter uma classe de mesmo nome que herda as características e comportamentos da classe criada no arquivo conta.php. Esta classe contaPoupanca deve conter o seguinte código: Figura 35 – Classe contaPoupanca.php Fonte: Elaborado pelo autor (2022). Note que essa classe herda (“extends”) da classe conta, criada anteriormente. Repare também que a classe filha “contaPoupanca” tem um método com o mesmo nome (método sacar()) que a classe mãe “conta”, mas o conteúdo do método sacar na classe mãe é diferente do conteúdo do método sacar na classe filha. Para testar o funcionamento da classe “conta” e da classe “contaPoupanca”, crie um arquivo chamado Exe07_u4.php, com o seguinte código: 46 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 36 – Código para testar a classe contaPoupanca.php Fonte: Elaborado pelo autor (2022). Salve o arquivo e execute-o no navegador. O resultado deve ser algo parecido com isso: 47PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 37 – Resultado da execução do código da figura anterior Fonte: Elaborado pelo autor (2022 ). Repare que, quando tratamos com a classe conta.php, o saldo pode ficar negativo. Porém, quando fazemos as mesmas transações, utilizando a classe contaPoupanca.php, a retirada que deixaria a conta negativa não acontece e o saldo permanece com 100. Isto é polimorfismo. O método sacar() tem o mesmo nome nas classes mãe e filha, mas tem comportamento diferente. No caso da classe contaPoupanca, o valor do saldo é verificado, antes de executar a operação, o que não acontece na classe mãe conta. 48 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir algo do que vimos. Você deve ter compreendido como aplicar os conceitos de herança e polimorfismo em códigos PHP. 49PROGRAMAÇÃO CODING WEB (PHP) U ni dade 4 Sobrecarga e classe abstrata OBJETIVO Olá! Seja bem-vindo ao último tópico desta unidade. Aqui vamos verificar mais dois conceitos importantes, quando se trata de POO: sobrecarga de métodos e classes abstratas. Sobrecarga de métodos A linguagem de programação PHP não tem sobrecarga de métodos, assim como a linguagem Java, por exemplo, porém, é possível simular esse mecanismo. IMPORTANTE Não se deve confundir sobrecarga de métodos com polimorfismo, visto no item anterior. A sobrecarga é a possibilidade de se ter, em uma mesma classe, dois métodos com o mesmo nome, mas com parâmetros diferentes. O polimorfismo é a possibilidade de a classe filha ter um método com o mesmo nome que o método da classe mãe (superclasse), mas que tem comportamento diferente. Mas, apesar dessa diferenciação clara, alguns autores consideram a sobrecarga como um tipo especial de polimorfismo. EXEMPLO: imagine que criamos uma classe TV com um método chamado Ligar(). Esse método simplesmente liga a TV no canal padrão (definido pelas configurações da TV). Mas poderíamos ter um novo método com o mesmo nome, mas que informasse o canal no qual a TV devesse ser sintonizada, logo que ligasse. Esse método também se chamaria Ligar(), mas teria um parâmetro chamado “canal” que o método original não tem. Seria mais ou menos assim: 50 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 38- Exemplo “incorreto” de sobrecarga de métodos em PH. Fonte: Elaborado pelo autor (2022). Salve esse arquivo como tv.php e execute-o no navegador. Um aviso de erro irá aparecer a informar que o método “Ligar” não pode ser redeclarado na classe TV, da seguinte forma: Figura 39 – Erro apresentado pela execução do código da figura anterior Fonte: Elaborado pelo autor (2022). A figura anterior demonstra que a linguagem PHP não suporta sobrecarga de métodos. Mas, ela pode ser simulada para que possamos tirar a mesma vantagem desse mecanismo que as demais linguagens de programação orientada a objetos têm. Simulando sobrecarga de métodos em PHP Conforme aponta Fabri (2012), a linguagem PHP nos apresenta três métodos que auxiliam na criação da simulação da sobrecarga. São eles: 51PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 • func_get_arg() Essa função permite que você recupere o valor de um argumento passado como parâmetro na chamada do método. • func_get_args() Essa função retorna um vetor com todos os argumentos passados como parâmetro na chamada do método. • func_num_args() Essa função retorna um inteiro que representa a quantidade de argumentos passados como parâmetro ao seu método. Podemos então, a partir dos métodos apresentados, corrigir o código da figura 38 para que funcione adequadamente. Ele ficaria assim: Figura 40 - – Exemplo “correto” de sobrecarga de métodos em PHP Fonte: Elaborado pelo autor (2022). 52 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Para testar o código da figura anterior (classe TV.php), crie um arquivo chamado Exe)7_u4.php com o seguinte código: Figura 41 – Código para testar o funcionamento da sobrecarga de métodos da classe tv.php, na figura anterior. Fonte: Elaborado pelo autor (2022). O resultado no navegador será mais ou menos assim: Figura 42 – Resultado da execução do código da figura anterior Fonte: Elaborado pelo autor (2022). Pronto! O mecanismo da sobrecarga foi simulado em PHP! Mas não acabamos por aqui. Vale a pena tratar mais alguns detalhes sobre essa especificação: Existem, de maneira geral, duas maneiras de se fazer sobrecarga de métodos: • Sobrecarga por quantidade de parâmetros - o número de parâmetros varia de um método para o outro. Um exemplo claro para a sobrecarga por quantidade de parâmetros é aquele dos dados na figura anterior, na qual se verifica o número de enviado (func_num_args) e então a opção de execução dos comandos do método é tratada, conforme a quantidade. 53PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 • Sobrecarga por Tipo de parâmetros - o que varia não é o número de parâmetros, enviados ao método, mas sim o tipo. Como o deste tipo de implementação, poderíamos utilizar a mesma classe TV, mas que agora pudesse receber o número ou o nome do canal desejado. A classe TV ficaria mais ou menos assim: Figura 43 – Código da classe tv.php para tratar sobrecarga por quantidade e tipo de parâmetros Fonte 43: Elaborado pelo autor (2022). E o código para testar essa classe seria mais ou menos assim: 54 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 44 – Código para testar a classe da figura anterior Fonte: Elaborado pelo autor (2022). E.... por fim... o resultado, no navegador, seria assim: Figura 45 – Resultado apresentado no navegador na execução do código da figura anterior Fonte: Elaborado pelo autor (2022). Perceba como esta característica é valiosa para a POO, mas deve ser utilizada com cautela, pois pode deixar seu código- fonte muito complicado de ser lido e entendido. Fabri (2012) alerta que: “A recomendação em geral é para que cada método tenha sua própria assinatura. Esse tipo de sobrecarga deve ser usado somente em casos extremamente necessários (isso varia com o bom senso do programador)”. Classe abstrata Um dos primeiros conceitos da POO tratados nesse material foi o conceito de “abstração” (ver item 1.3.1) e 55PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 terminaremos esse material aprofundando esse conceito para além do que já foi definido. Dall’ Oglio (2016) adverte que “para construir um sistema orientado a objetos, não devemos projetar o sistema como se fosse uma grande peça monolítica”. Nesse sentido, devemos separar o “problema” a ser solucionado em partes, percebendo as peças mais importantes, ignorando as partes não relevantes. Segundo o mesmo autor, essa postura permite construir peças bem definidas que podem ser reaproveitadas ou reutilizadas, formando uma estrutura hierárquica. Nesse contexto, na modelagem de um sistema ou de uma página Web orientada a objetos, identificaremos certamente classes que servem de estrutura (classes estruturais) que definem conceitos gerais do que se pretende realizar e servirão como base para a criação de outras, mais especializadas. Essas classes mais genéricas, que apresentam em si conceitos abstratos do que se pretende realizar num sistema ou numa página Web, são denominadas de classes abstratas. As classes abstratas nunca serão instanciadas na forma de objetos, mas servirão de modelo ou base estrutural para a criação de classes filhas e essas sim, serão instanciadas. Como exemplo, podemos citar a classe conta (figura anterior) que apresenta as características e comportamentos genéricos e abstratos de uma conta poupança ou de uma conta corrente. IMPORTANTE Uma classe abstrata não pode ser instanciada, diretamente, apenas servir de base para criação das classes (DALL’OGLIO, 2016). Para definir uma classe como abstrata em PHP, utiliza-se a palavra-chave abstract, antes da definição da classe em si. 56 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 A classe conta, se transformada em classe abstrata, ficaria assim: Figura 46 – Classe conta transformada em classe abstrata Fonte: Elaborado pelo autor (2022). Mas, se executarmos o mesmo código da figura anterior (Arquivo Exe06_u4.php), teremos o seguinte resultado: Figura 47 – Erro gerado por tentar instanciar a classe abstrata conta Fonte: Elaborado pelo autor (2022). Métodos abstratos Para assegurar que as classes filhas das classes abstratas implementem todos os métodos necessários para seu correto uso e funcionamento, as classes abstratas podem lançar mão da definição dos métodos abstratos, cuja função é servir de molde para os da classe filha dessa classe abstrata. EXEMPLO: imagine que ao projetar a classe conta (figura anterior), agora definida como classe abstrata, o programador identificasse que os métodos sacar() e 57PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 depositar() tivessem comportamentostão especializados que caberia às classes filhas determinar tal comportamento. Mas que seria imprescindível que, ao implementar qualquer classe filha, esses métodos não fossem esquecidos. Nesse contexto, a classe conta (abstrata) ficaria assim: Figura 48 – Classe conta (abstrata) com métodos sacar() e depositar() (abstratos) Fonte: Elaborado pelo autor (2022). Perceba que os métodos (agora definidos como abstratos) não são implementados na classe conta (abstrata), mas apenas a sua assinatura. 58 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 IMPORTANTE Quando você, ao estudar sobre POO, se deparar com o termo “assinatura de um método”, isso se refere à maneira como ele deve ser declarado, isto é, seu nome e seus argumentos (caso existam). Pois bem, já verificamos que a classe conta não pode ser instanciada (figuras anteriores). Isto quer dizer que precisamos instanciar, utilizando uma especialização da classe conta (tal como conta Corrente ou conta Poupança) para poder ter acesso à estrutura básica do que se projetou para uma conta. Nesse caso, devemos utilizar o arquivo contaPoupanca.php (figura anterior) que é classe filha da classe conta e, por isso, herda suas características e comportamentos. Para relembrar a classe contaPoupanca, veja figura a seguir: Figura 49 – Classe contaPoupanca: idêntica à figura anterior Fonte: Elaborado pelo autor (2022). Com base nisso, abra o NotePad++ e refaça o arquivo Exe07_u4.php e o renomeie como Exe08_u4.php para conter apenas a segunda parte do seu código, da seguinte maneira: 59PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 50 – Código para teste da classe contaPoupanca Fonte: Elaborado pelo autor (2022). Nesse momento, você já deve ter capacidade de prever alguns resultados. No caso em específico, peço a sua atenção para que verifique o que pode dar de errado no código da figura citada. Note que na linha 12, temos a chamada do método depositar(). Ele é abstrato (na classe conta) e deveria ter sido implementado na classe contaPoupança (figura anterior), mas não foi. Por isso, ao tentar executar no navegador, o código apresentado na figura anterior (Exe08_u4.php) ou executar no navegador o código da figura citada (contaPoupanca.php), o mesmo erro aparecerá: –Figura 51 - Erro gerado pela falta da implementação (obrigatória) do método depositar() na classe contaPoupanca Fonte: Elaborado pelo autor (2022). 60 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Dessa forma, precisamos alterar a classe contaPoupanca para que também implemente a classe abstrata depositar(). Ela deve ficar mais ou menos assim: Figura 52- Novo código para a classe contaPoupanca que contempla os dois métodos abstratos da classe conta Fonte: Elaborado pelo autor (2022). Note que aproveitamos para inserir mais algumas linhas (10 e 11 – 22 e 23) par avisar que um valor x foi sacado ou depositado na conta Poupança. Ao executar o arquivo Exe08_u4.php, da figura anterior, tem-se o seguinte resultado na tela do navegador: 61PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 Figura 53 – Resultado da execução do arquivo Exe08_u4.php Fonte: Elaborado pelo autor (2022). Pois bem, esses são as classes abstratas e seus métodos abstratos. RESUMINDO E então? Gostou do que lhe mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir algo do que vimos. Você deve ter compreendido como aplicar os conceitos de sobrecarga e classe abstrata no desenvolvimento de programas e sistemas em PHP. Como você deve ter percebido, é possível fazer muito mais com o PHP. Mas, nessa unidade, terminamos. Não deixe de verificar as referências para aprender mais. Isto é só o começo e a aprendizagem não pode parar! Muito obrigado por ter acompanhado todo o processo até aqui. Estamos à disposição. 62 PROGRAMAÇÃO CODING WEB (PHP) U ni da de 4 DALL’OGLIO, P. PHP - Programando com Orientação a Objetos. 3.ed. São Paulo: Novatec Editora, 2018 [2016]. FABRI, G. PHPGlauberFabri. [s.d.]. Disponível em: http:// phpatual.blogspot.com/2012/03/sobrecarga-de-metodo-em-php- sobrecarga.html Acesso em: 8 mar.2012. MALAQUIAS, J. Programação Orientada a Objetos. [s.d.]. Slides, UFOP, Departamento de Computação, Ouro Preto. Disponível em: www.decom.ufop.br/romildo/2015-1/bcc221/01_Aula_01.pptx Acesso em: 28 ago. 2018. PAULI, G. (2010). Introdução à POO. [s.d.]. Disponível em: DevMedia: https://www.devmedia.com.br/introducao-a-poo- partes-1-e-2/17282. Acesso em: 28 ago.2018. ScriptCase. O que é instanciar um objeto? [s.d.] Disponível em: https://www.scriptcaseblog.com.br/instanciar-objeto/.Acesso em: 30 ago. 2018. SOUZA, E. G. Programação Orientada a Objetos em PHP , 2016. Disponível em: Medium: https://medium.com/emanuelg- blog/programa%C3%A7%C3%A3o-orientada-a-objetos-em-php- encapsulamento-1e8a3735f48d Acesso em: 31 ago. 2018. SOUZA, R. Introdução ao PHP Orientado a Objetos com MVC, 2017. Disponível em: http://ribafs.16mb.com/down/cake/phpoo_ introducao.pdf. Acesso em: 29 ago. 2018. RE FE RÊ N CI A S Classes, objetos, métodos e atributos Introdução Conceitos de orientada a objetos O que é uma classe? Abstração na prática Como trabalhar com atributos? Como funcionam os métodos? O que é um objeto? Encapsulamento e visibilidade Método construtor Usando o comando include Montando a classe conectar no Blog Herança e polimorfismo- funções Herança entre classes Polimorfismo Sobrecarga e classe abstrata Sobrecarga de métodos Simulando sobrecarga de métodos em PHP Classe abstrata Métodos abstratos