Alura > Cursos de Programação > Cursos de PHP > Conteúdos de PHP > Primeiras aulas do curso Orientação a Objetos com PHP: Classes, métodos e atributos

Orientação a Objetos com PHP: Classes, métodos e atributos

Problemas da programação procedural - Apresentação

Olá pessoal, sejam muito bem vindos ao treinamento de Introdução a Orientação a Objetos, um paradigma de programação que revolucionou a forma como organizamos o nosso código. Nos primeiros passos conversaremos um pouco sobre os problemas da programação procedural, que vinhamos utilizando nos dois primeiros cursos dessa formação.

Depois de identificarmos os problemas, começaremos a trabalhar com as nossas classes, entendendo a diferença entre o que é uma classe e o que é um objeto, e adicionando atributos e métodos para que tais classes tenham comportamentos e para que um objeto possa executar ações.

Falaremos também sobre a visibilidade dos atributos e dos métodos, sobre métodos estáticos e métodos mágicos do PHP, sobre composição de objetos e a sua utilidade e sobre valor e referência.

Ao final desse treinamento, no qual teremos vários conteúdos interessantes, conseguiremos até mesmo implementar uma certa validação no nosso domínio. Antes de prosseguirmos, é necessário atentar ao fato de que a Orientação a Objetos é um dos estudos mais importantes, se não o mais importante, na vida de uma pessoa que quer desenvolver hoje.

Se você pretende desenvolver sistemas profissionais, é muito importante conhecer dominar a Orientação a Objetos. Nesse treinamento teremos uma pequena introdução ao universo desse paradigma, mas ainda existirão diversos conteúdos a serem estudados. Se você tiver alguma dúvida, não hesite em abrir um tópico no nosso fórum, e em breve eles serão respondidos pelos nossos instrutores ou mesmo pela comunidade - afinal, certamente alguém já teve a mesma dúvida e poderá te ajudar.

Esperamos que você tire bastante proveito desse treinamento. No próximo vídeo, faremos as configurações do nosso ambiente para começarmos a trabalhar. Bons estudos!

Problemas da programação procedural - Preparando o ambiente

Vamos conversar sobre o que é necessário ter instalado no sistema para dar continuidade ao treinamento. Se você acabou de finalizar os dois primeiros cursos de PHP, no qual conhecemos a linguagem, você provavelmente já tem tudo configurado e pode pular para o vídeo seguinte. Caso esteja começando por aqui ou fez esses treinamentos já há bastante tempo, pode ser necessário fazer alguns procedimentos.

O primeiro passo, obviamente, é ter o PHP instalado na máquina. Algumas versões do Mac já vêm com o PHP instalado automaticamente, e no Linux você pode usar o gerenciador de pacotes para instalar a última versão disponível. Outra alternativa é acessar as instruções de instalação da documentação do PHP para aprender a compilar o PHP manualmente.

No Windows, você deverá acessar a seção "Windows downloads" e selecionar a última versão disponível, que no momento da gravação do treinamento era a 7.3.11, mas você pode optar pela mais recente sem problemas. Por enquanto, baixaremos o ZIP da versão Non Thread Safe (cuja diferença por enquanto não explicaremos em detalhes).

Após o download, extrairemos o conteúdo do ZIP e buscaremos, no menu Iniciar, por "variáveis de ambiente". Acessaremos a opção "Editar as variáveis de ambiente do sistema", daremos um duplo-clique na variável "Path", clicaremos em "Editar" e adicionaremos à lista o caminho da pasta que acabamos de extrair, finalizando o processo com "OK".

Agora, no Prompt de Comando, a execução de php -v nos mostrará a versão instalada do PHP. Para a gravação do curso foi utilizada uma IDE chamada PhpStorm, que recomendamos bastante, mas você também pode utilizar outra de sua preferência, como Eclipse ou Netbeans.

O PhpStorm é uma IDE com licenças gratuitas para estudantes, bastando você comprovar que faz algum tipo de curso na área!

Caso queira, você também pode optar por um editor de texto, como Visual Studio Code, Sublime ou Atom. Porém, quando começos a trabalhar com orientação de objetos e trabalhar com vários arquivos, utilizar uma IDE faz bastante diferença.

Com o PhpStorm aberto, clicaremos em "Create new project" e selecionaremos a pasta onde nosso novo projeto será armazenado. Agora já temos o PHP configurado e pronto para trabalharmos.

Note que o PhpStorm exibe, na inicialização, algumas dicas bem interessantes e que vale a pena manter habilitadas.

No próximo vídeo começaremos a entender o conteúdo que será abordado nesse treinamento.

Problemas da programação procedural - Reutilização de código

Começaremos a conversar sobre o motivo de estudarmos a orientação a objetos e quais os problemas que já encontramos até aqui. De início, abriremos dois arquivos do curso anterior, no qual criamos um sistema de banco contendo contas-correntes de usuários, os quais possuíam um CPF, um nome do titular e um saldo.

<?php

require_once 'funcoes.php';

$contasCorrentes = [
    '123.456.789-10' => [
        'titular' => 'Maria',
        'saldo' => 10000
    ],
    '123.456.789-11' => [
        'titular' => 'Alberto',
        'saldo' => 300
    ],
    '123.456.789-12' => [
        'titular' => 'Vinicius',
        'saldo' => 100
    ],
];

Com esses dados, operamos funções de saque, depósito ou de pegar o nome do titular com letras maiúsculas.

$contasCorrentes['123.456.789-10'] = sacar(
    $contasCorrentes['123.456.789-10'],
    500
);

$contasCorrentes['123.456.789-11'] = sacar(
    $contasCorrentes['123.456.789-11'],
    200
);

$contasCorrentes['123.456.789-12'] = depositar(
    $contasCorrentes['123.456.789-12'],
    200
);

unset($contasCorrentes['123.456.789-11']]);

titularComLetrasMaiusculas($contasCorrentes['123.456.789-12']);
?>

Além disso, trabalhamos um pouco com a web.

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, init-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie-edge">
     <title>Document</title>
</head>
<body>
    <h1>Contas correntes</h1>
    <dl>
        <?php foreach($contasCorrentes as $cpf => $conta) { ?>
        <dt>
            <h3><?= $conta['titular']; ?> - <?= $cpf; ?> </h3>}
         </dt>
         <dd>
            Saldo: <?= $conta['saldo']; ?>
         </dd>
         <?php } ?>
    </dl>
</body>
</html>

Em outro arquivo, separamos as funções sacar(), exibeMensagem(), depositar(), titularComLetrasMaiusculas() e exibeConta(). Se você reparar bem, temos apenas um arquivo que faz a definição de todas as contas e onde também realizamos todas as operações. Além disso, temos ainda um arquivo web, tudo num mesmo lugar.

Antigamente, quando desenvolvíamos sistemas pequenos, era comum que um único desenvolver (ou uma equipe pequena) fosse capaz de criar e manter durante muito tempo um mesmo sistema, tendo familiaridade com toda a base de código. Como essas pessoas tinham controle do projeto, não existia necessariamente um problema em manter um arquivo com diversas funções não relacionadas, como exibeMensagem() e sacar(), ou que define/opera coisas diferentes.

Hoje em dia, é mais comum termos equipes maiores ou diversas equipes que trabalham sobre o mesmo sistema, ou com sistemas diferentes que precisam conversar entre si, trazendo a necessidade de uma organização melhor do código. Em relação a esse projeto, por exemplo, o que acontece se precisarmos criar uma conta-corrente em outro arquivo? Como saberemos qual o formato correto e quais atributos são necessários?

Ou seja, a organização do código acaba se tornando um grande problema na forma que estamos programando, forma essa que é chamada de Programação Procedural, na qual temos vários procedimentos disponíveis para serem executados, não necessariamente em ordem. Entretanto, no arquivo temos uma ordem de execução: primeiro sacamos dinheiro da conta, depois depositamos em outra, removemos outra, exibimos a página da web, e assim por diante.

Na Programação Procedural, temos diversos procedimentos - que podem estar separados em outras funções, por exemplo -, mas não temos essa divisão muito bem organizada. Não é um problema trabalhar dessa forma, mas existem outros paradigmas de desenvolvimento que surgiram para resolver os problemas aqui comentados.

Para tornarmos isso mais claro, imagine que tenhamos um sistema desktop comum incluindo um formulário no qual temos que digitar um CPF. Depois, desenvolvemos um novo formulário que também precisa receber um CPF. Nessa situação, copiamos o código do primeiro sistema e o utilizamos no segundo formulário.

Entretanto, imagine então que o gerente nos informa que, devido a muitos problemas no cadastro, precisamos validar um CPF, por exemplo garantindo que ele é válido a partir de uma API da Receita Federal ou fazendo uma operação de modo a verificar se o dígito bate com o número. Nesse cenário, precisaríamos implementar tal verificação em dois pontos do sistema, copiando e colando, algo que sabemos que não é a melhor das soluções.

Mas e se precisarmos de mais um formulário que também precisa de um CPF? E se outra pessoa, recém-chegada ao time, ficar responsável por esse formulário? Como ela saberá o modo que estamos pegando o CPF e como estamos validando-o? É difícil resolver esse tipo de situação utilizando a programação procedural.

Este é um dos problemas que aprenderemos resolver utilizando a orientação a objetos, mas ele não é o único!

Sobre o curso Orientação a Objetos com PHP: Classes, métodos e atributos

O curso Orientação a Objetos com PHP: Classes, métodos e atributos possui 145 minutos de vídeos, em um total de 72 atividades. Gostou? Conheça nossos outros cursos de PHP em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda PHP acessando integralmente esse e outros cursos, comece hoje!

Plus

De
R$ 1.800
12X
R$109
à vista R$1.308
  • Acesso a TODOS os cursos da Alura

    Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

Matricule-se

Pro

De
R$ 2.400
12X
R$149
à vista R$1.788
  • Acesso a TODOS os cursos da Alura

    Mais de 1500 cursos completamente atualizados, com novos lançamentos todas as semanas, emProgramação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Luri, a inteligência artificial da Alura

    Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com Luri até 100 mensagens por semana.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas