Tutorial do conceito de programação orientada a objetos (OOPs) PHP com exemplo

O que são OOPs?

Orientado a Objetos é uma abordagem de desenvolvimento de software que modela aplicativos em torno de objetos do mundo real, como funcionários, carros, contas bancárias, etc. Uma classe define as propriedades e métodos de um objeto do mundo real. Um objeto é uma ocorrência de uma classe.

Os três componentes básicos da orientação a objetos são;

  • Análise orientada a objetos – funcionalidade do sistema
  • Design orientado a objetos – arquitetura do sistema
  • Programação orientada a objetos – implementação da aplicação

Princípios de programação orientada a objetos

Os três princípios principais da OOP são;

  • Encapsulamento – trata-se de ocultar os detalhes da implementação e apenas expor os métodos. O principal objetivo do encapsulamento é;
  • Reduza a complexidade do desenvolvimento de software – ao ocultar os detalhes da implementação e expor apenas as operações, o uso de uma classe torna-se fácil.
  • Proteja o estado interno de um objeto – o acesso às variáveis ​​da classe é feito através de métodos como get e set, o que torna a classe flexível e fácil de manter.
  • A implementação interna da classe pode ser alterada sem a preocupação de quebrar o código que utiliza a classe.
  • Herança – trata-se da relação entre as classes. O relacionamento assume a forma de pai e filho. O filho usa os métodos definidos na classe pai. O principal objetivo da herança é;
  • Reutilização – vários filhos podem herdar do mesmo pai. Isso é muito útil quando precisamos fornecer funcionalidades comuns, como adicionar, atualizar e excluir dados do banco de dados.
  • Polimorfismo – trata-se de ter um formulário único, mas muitas formas de implementação diferentes. O principal objetivo do polimorfismo é;
  • Simplifique a manutenção de aplicativos e torne-os mais extensíveis.

OOPs Concepts em PHP

PHP é uma linguagem de script orientada a objetos; ele apóia todos os princípios acima. Os princípios acima são alcançados através de;

  • Encapsulamento – através do uso dos métodos “get” e “set”, etc.
  • Herança – através do uso da palavra-chave extends
  • Polimorfismo – através do uso da palavra-chave implements

Agora que temos o conhecimento básico de OOP e como ele é suportado em PHP, vejamos exemplos que implementam os princípios acima

O que é UML?

Linguagem de Modelagem Unificada UML é uma técnica usada para projetar e documentar sistemas orientados a objetos.

A UML produz vários documentos, mas veremos o diagrama de classes, que é muito importante para a programação PHP orientada a objetos.

Exemplo de diagrama de classes

OOPs Concepts em PHP

Chave do Diagrama de Classes

  • A Caixa superior contém o nome da classe
  • A caixa do meio contém as variáveis ​​de classe
  • A caixa inferior contém os métodos da classe
  • A menos (-) signo significa escopo privado
  • A mais (+) sinal significa escopo público
  • A cerquilha (#) sinal significa escopo protegido

Como criar uma classe em PHP

A palavra-chave class é usada para definir uma classe em PHP. Abaixo estão as regras para criação de uma classe em PHP.

  • O nome da classe deve começar com uma letra
  • O nome da classe não pode ser uma palavra reservada do PHP
  • O nome da classe não pode conter espaços

Digamos que queremos criar uma classe para representar animais.

Começaremos identificando as características comuns a todos os animais.

  • Todos os animais pertencem a uma família como herbívoro, carnaval, etc.
  • Todos os animais comem comida

O diagrama abaixo mostra o diagrama do animal

Crie uma classe em PHP

Vamos agora codificar nossa classe animal

<?php
class Animal
{
    private $family;
    private $food;
    public function __construct($family, $food)
    {
        $this->family = $family;
        $this->food   = $food;
    }
    public function get_family()
    {
        return $this->family;
    }
    public function set_family($family)
    {
        $this->family = $family;
    }
    public function get_food()
    {
        return $this->food;
    }
    public function set_food($food)
    {
        $this->food = $food;
    }
}
?>

AQUI,

  • “private $family, $food” significa que as variáveis ​​não podem ser acessadas diretamente fora da classe (Encapsulamento).
  • “função pública __construct($family…)” é o método construtor php. Esta função é chamada sempre que uma instância da classe é criada. Neste caso, estamos definindo a família e a alimentação.
  • “função pública get…()” é o método utilizado para acessar o valor familiar ou alimentar (Encapsulamento)
  • “public function set…()” é o método usado para definir o valor familiar ou alimentar (Encapsulamento)

Como implementar herança em PHP

Trabalharemos com uma vaca e um leão. Tanto a vaca quanto o leão herdam da classe Animal.

O diagrama de classes abaixo mostra os relacionamentos.

implementar herança em PHP

Observe que a vaca herda da classe animal e também define suas próprias variáveis ​​e métodos.

Vamos agora codificar a classe Cow

<?php
class Cow extends Animal
{
    private $owner;
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
    public function set_owner($owner)
    {
        $this->owner = $owner;
    }
    public function get_owner()
    {
        return $this->owner;
    }
}
?>

Vamos agora codificar a classe Lion

<?php
class Lion extends Animal
{
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
}
?>

AQUI,

  • “class… extends Animal” faz com que a vaca e o leão usem métodos da classe Animal (Herança).

Como criar objeto da classe

As classes Animal, Cow e Lion devem estar todas no mesmo diretório para simplificar.

Vamos agora criar a aplicação que utiliza nossas classes.

Exemplo de classe PHP

<?php
require 'Animal.php';
require 'Cow.php';
require 'Lion.php';
$cow  = new Cow('Herbivore', 'Grass');
$lion = new Lion('Canirval', 'Meat');
echo '<b>Cow Object</b> <br>';
echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>';
echo '<b>Lion Object</b> <br>';
echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food();
?>

Testando nosso aplicativo

Vamos agora visualizar nosso aplicativo em um navegador da web

Herança em PHP

Fantástico, certo! Vejamos agora o terceiro princípio da POO, o polimorfismo.

Digamos que queremos desenvolver uma aplicação que se conecte a diferentes mecanismos de banco de dados, como MySQL e SQL Servidor, mas use a mesma interface uniforme.

Podemos criar uma interface que defina os métodos padrão e uma classe abstrata que implemente os métodos comuns.

  • Interface – é semelhante a uma aula. Ele apenas define os métodos e parâmetros.
  • Aula abstrata – é uma classe que não pode ser usada para criar um objeto diretamente. Seu objetivo é fornecer implementações parciais ou completas de métodos comuns.

O diagrama de classes abaixo ilustra o relacionamento entre nossa classe abstrata, interface e classes de implementação.

Herança em PHP

Vamos agora criar nossa classe abstrata

<?php
abstract class DBCommonMethods
{
    private $host;
    private $db;
    private $uid;
    private $password;
    public function __construct($host, $db, $uid, $password)
    {
        $this->host     = $host;
        $this->db       = $db;
        $this->uid      = $uid;
        $this->password = $password;
    }
}
?>

AQUI,

  • “classe abstrata” significa que a classe não pode ser usada diretamente para criar objeto php
  • “$host,$db…” são variáveis ​​de classe comuns a todas as implementações
  • “function __construct(…)” é o método construtor da classe php que define os valores das variáveis ​​​​comuns na inicialização

Vamos agora criar a interface que contém os métodos padrão que serão implementados de forma diferente dependendo do mecanismo de banco de dados.

<?php
interface DBInterface
{
    public function db_connect();
    public function insert($data);
    public function read($where);
    public function update($where);
    public function delete($where);
}
?>

AQUI,

  • “interface” é a palavra-chave para criar interfaces
  • “função pública…(…)” são os métodos padrão que devem ser implementados

Vamos agora criar as classes concretas que estenderão a classe DBCommonMethods e estenderão a interface DBInterface. MySQLMotorista.php

<?php class MySQLDriver extends 
DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) 
{ 
parent::__construct($host, $db, $uid, $password); } 
public function db_connect() { //connect code goes here } 
public function delete($where) { //delete code goes here } 
public function insert($data) { //insert code goes here } 
public function read($where) { //read code goes here } 
public function update($where) { //update code goes here } 
} ?>

MSSQLServerDriver.php

<?php 
class MSSQLServerDriver extends 
DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password)
 { 
 parent::__construct($host, $db, $uid, $password); } 
 public function db_connect() { //connect code goes here } 
 public function delete($where) { //delete code goes here }
 public function insert($data) { //insert code goes here }
 public function read($where) { //read code goes here }
 public function update($where) { //update code goes here }
 } ?>

AQUI,

  • “class… estende DBCommonMethods” use os métodos no DBCommonMethods
  • “…implementa DBInterface” garante que a classe forneça métodos padrão, independentemente do driver de banco de dados usado.

Uso do código acima O código usando a classe acima ficaria assim

<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>

Or

<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>

O resto do código seria o mesmo para ambos os drivers, como;

<?php
$db->db_connect();
$db->insert($data);
?>

Resumo

  • Programação Orientada a Objetos OOP é uma técnica poderosa que modela aplicativos a partir de objetos do mundo real
  • Uma classe é uma representação de objetos do mundo real com propriedades e métodos
  • Os três princípios básicos da OOP são;
  • Encapsulamento
  • Herança
  • Polimorfismo