PHP Αντικειμενοστραφής Προγραμματισμός (OOPs) Πρόγραμμα Εκμάθησης με Παράδειγμα

Τι είναι το OOPs;

Το Object Oriented είναι μια προσέγγιση στην ανάπτυξη λογισμικού που μοντελοποιεί εφαρμογές γύρω από αντικείμενα του πραγματικού κόσμου, όπως υπαλλήλους, αυτοκίνητα, τραπεζικούς λογαριασμούς, κ.λπ. Μια κλάση ορίζει τις ιδιότητες και τις μεθόδους ενός αντικειμένου πραγματικού κόσμου. Ένα αντικείμενο είναι μια εμφάνιση μιας κλάσης.

Τα τρία βασικά στοιχεία του αντικειμενικού προσανατολισμού είναι:

  • Αντικειμενοστραφής ανάλυση – λειτουργικότητα του συστήματος
  • Αντικειμενοστραφής σχεδιασμός – archiδομή του συστήματος
  • Αντικειμενοστραφής προγραμματισμός – υλοποίηση της εφαρμογής

Αρχές Αντικειμενοστρεφούς Προγραμματισμού

Οι τρεις κύριες αρχές του OOP είναι:

  • Ενθυλάκωση – αυτό αφορά την απόκρυψη της εφαρμογής details και αποκαλύπτοντας μόνο τις μεθόδους. Ο κύριος σκοπός της ενθυλάκωσης είναι να
  • Μειώστε την ανάπτυξη λογισμικού complexity – με απόκρυψη της υλοποίησης details και μόνο εκθέτοντας το operaΗ χρήση μιας τάξης γίνεται εύκολη.
  • Προστατέψτε την εσωτερική κατάσταση ενός αντικειμένου – η πρόσβαση στις μεταβλητές κλάσης γίνεται μέσω μεθόδων όπως το get και το set, κάτι που κάνει την κλάση ευέλικτη και εύκολη στη συντήρηση.
  • Η εσωτερική υλοποίηση της κλάσης μπορεί να αλλάξει χωρίς να ανησυχείτε για την παραβίαση του κώδικα που χρησιμοποιεί την κλάση.
  • Κληρονομία – αυτό αφορά τη σχέση μεταξύ των τάξεων. Η σχέση έχει τη μορφή γονέα και παιδιού. Το παιδί χρησιμοποιεί τις μεθόδους που ορίζονται στη γονική τάξη. Ο κύριος σκοπός της κληρονομιάς είναι?
  • Επαναχρησιμοποίηση – ορισμένα παιδιά, μπορούν να κληρονομήσουν από τον ίδιο γονέα. Αυτό είναι πολύ χρήσιμο όταν πρέπει να παρέχουμε κοινές λειτουργίες όπως η προσθήκη, η ενημέρωση και η διαγραφή δεδομένων από τη βάση δεδομένων.
  • Πολυμορφισμός – αυτό αφορά την ύπαρξη μιας ενιαίας μορφής αλλά πολλών διαφορετικών τρόπων υλοποίησης. Ο κύριος σκοπός του πολυμορφισμού είναι:
  • Απλοποιήστε τη συντήρηση των εφαρμογών και κάντε τις πιο επεκτάσιμες.

OOPs Concepts σε PHP

Η PHP είναι μια αντικειμενοστραφής γλώσσα δέσμης ενεργειών. υποστηρίζει όλες τις παραπάνω αρχές. Οι παραπάνω αρχές επιτυγχάνονται μέσω:

  • Ενθυλάκωση – μέσω της χρήσης των μεθόδων «get» και «set» κ.λπ.
  • Κληρονομία – μέσω της χρήσης της λέξης-κλειδιού επέκτασης
  • Πολυμορφισμός – μέσω της χρήσης της λέξης-κλειδιού της εφαρμογής

Τώρα που έχουμε τις βασικές γνώσεις του OOP και πώς υποστηρίζεται PHP, ας δούμε παραδείγματα που εφαρμόζουν τις παραπάνω αρχές

Τι είναι το UML;

Unified Modeling Language Το UML είναι μια τεχνική που χρησιμοποιείται για το σχεδιασμό και την τεκμηρίωση αντικειμενοστρεφών συστημάτων.

Η UML παράγει έναν αριθμό εγγράφων, αλλά θα δούμε το διάγραμμα κλάσεων που είναι πολύ σημαντικό για τον αντικειμενοστραφή προγραμματισμό php.

Παράδειγμα διαγράμματος τάξης

OOPs Concepts σε PHP

Κλειδί διαγράμματος τάξης

  • Η Ανώτερος box περιέχει το όνομα της τάξης
  • Η μέσο box περιέχει τις μεταβλητές κλάσης
  • Η χαμηλότερα box περιέχει τις μεθόδους κλάσης
  • Η μείον (-) σημαίνει σημάδι ιδιωτικής εμβέλειας
  • Η συν (+) σημάδι σημαίνει δημόσια εμβέλεια
  • Η κατακερματισμός (#) σημάδι σημαίνει προστατευόμενο πεδίο

Πώς να δημιουργήσετε μια τάξη στην PHP

Η λέξη-κλειδί class χρησιμοποιείται για τον ορισμό μιας κλάσης στην PHP. Παρακάτω είναι οι κανόνες για τη δημιουργία κλάσης στην PHP.

  • Το όνομα της τάξης πρέπει να ξεκινά με ένα γράμμα
  • Το όνομα της κλάσης δεν μπορεί να είναι δεσμευμένη λέξη στην PHP
  • Το όνομα της κλάσης δεν μπορεί να περιέχει κενά

Ας πούμε ότι θέλουμε να δημιουργήσουμε μια τάξη για την αναπαράσταση ζώων.

Θα ξεκινήσουμε με τον εντοπισμό των χαρακτηριστικών που είναι κοινά σε όλα τα ζώα.

  • Όλα τα ζώα ανήκουν σε μια οικογένεια όπως φυτοφάγο, καρναβάλι κ.λπ.
  • Όλα τα ζώα τρώνε τροφή

Το παρακάτω διάγραμμα δείχνει το διάγραμμα για το ζώο

Δημιουργήστε μια τάξη σε PHP

Ας κωδικοποιήσουμε τώρα την τάξη των ζώων μας

<?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;
    }
}
?>

ΕΔΩ,

  • Το "private $family, $food" σημαίνει ότι δεν είναι δυνατή η πρόσβαση στις μεταβλητές απευθείας έξω από την τάξη (Encapsulation).
  • Η "δημόσια συνάρτηση __construct($family…)" είναι η μέθοδος κατασκευής php. Αυτή η συνάρτηση καλείται κάθε φορά που έχει δημιουργηθεί ένα στιγμιότυπο της κλάσης. Σε αυτή την περίπτωση, ρυθμίζουμε την οικογένεια και το φαγητό.
  • Η "δημόσια λειτουργία παίρνω…()" είναι η μέθοδος που χρησιμοποιείται για την πρόσβαση στην οικογενειακή ή τροφική αξία (Ενθυλάκωση)
  • Το "σύνολο δημόσιας λειτουργίας…()" είναι η μέθοδος που χρησιμοποιείται για τον καθορισμό της τιμής της οικογένειας ή του φαγητού (Ενθυλάκωση)

Πώς να εφαρμόσετε το Inheritance στην PHP

Θα δουλέψουμε με μια αγελάδα και ένα λιοντάρι. Τόσο η αγελάδα όσο και το λιοντάρι κληρονομούν από την τάξη των Ζώων.

Το παρακάτω διάγραμμα τάξης δείχνει τις σχέσεις.

εφαρμογή κληρονομιάς στην PHP

Σημειώστε ότι η αγελάδα κληρονομεί από την κατηγορία των ζώων και ορίζει επίσης τη δική της μεταβλητή και μεθόδους.

Ας κωδικοποιήσουμε τώρα την κλάση 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;
    }
}
?>

Ας κωδικοποιήσουμε τώρα την κλάση Lion

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

ΕΔΩ,

  • Το «class … extends Animal» κάνει την αγελάδα και το λιοντάρι να χρησιμοποιούν μεθόδους από την κλάση Animal (Κληρονομικότητα).

Πώς να δημιουργήσετε αντικείμενο της κλάσης

Οι κατηγορίες Animal, Cow και Lion θα πρέπει να βρίσκονται στον ίδιο κατάλογο για λόγους απλότητας.

Ας δημιουργήσουμε τώρα την εφαρμογή που χρησιμοποιεί τις τάξεις μας.

Παράδειγμα κλάσης 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();
?>

Δοκιμή της εφαρμογής μας

Ας δούμε τώρα την εφαρμογή μας σε ένα πρόγραμμα περιήγησης ιστού

Κληρονομικότητα στην PHP

Φανταστικά σωστά! Ας δούμε τώρα την τρίτη αρχή του OOP, τον πολυμορφισμό.

Ας υποθέσουμε ότι θέλουμε να αναπτύξουμε μια εφαρμογή που να συνδέεται με διαφορετικές μηχανές βάσης δεδομένων όπως π.χ MySQL και SQL Διακομιστής αλλά χρησιμοποιεί την ίδια ομοιόμορφη διεπαφή.

Μπορούμε να δημιουργήσουμε μια διεπαφή που ορίζει τις τυπικές μεθόδους και μια αφηρημένη κλάση που υλοποιεί τις κοινές μεθόδους.

  • περιβάλλον λειτουργίας – είναι παρόμοιο με μια τάξη. Καθορίζει μόνο τις μεθόδους και τις παραμέτρους.
  • Περίληψη τάξη – είναι μια κλάση που δεν μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός αντικειμένου απευθείας. Σκοπός του είναι να παρέχει μερικές ή ολόκληρες υλοποιήσεις κοινών μεθόδων.

Το διάγραμμα κλάσης παρακάτω απεικονίζει τη σχέση μεταξύ της αφηρημένης κλάσης, της διεπαφής και των κλάσεων υλοποίησης.

Κληρονομικότητα στην PHP

Ας δημιουργήσουμε τώρα την αφηρημένη τάξη μας

<?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;
    }
}
?>

ΕΔΩ,

  • "abstract class" σημαίνει ότι η κλάση δεν μπορεί να χρησιμοποιηθεί απευθείας για τη δημιουργία αντικειμένου php
  • Τα "$host,$db..." είναι μεταβλητές κλάσης κοινές σε όλες τις υλοποιήσεις
  • Το "function __construct(…)" είναι η μέθοδος κατασκευής κλάσης php που ορίζει τις τιμές των κοινών μεταβλητών κατά την προετοιμασία

Ας δημιουργήσουμε τώρα τη διεπαφή που περιέχει τις τυπικές μεθόδους που θα εφαρμοστούν διαφορετικά ανάλογα με τη μηχανή βάσης δεδομένων.

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

ΕΔΩ,

  • "Διασύνδεση" είναι η λέξη-κλειδί για τη δημιουργία διεπαφών
  • Η «δημόσια λειτουργία…(…)» είναι οι τυπικές μέθοδοι που πρέπει να εφαρμοστούν

Ας δημιουργήσουμε τώρα τις συγκεκριμένες κλάσεις που θα επεκτείνουν την κλάση DBCommonMethods και θα επεκτείνουν τη διεπαφή DBInterface. MySQLDriver.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 }
 } ?>

ΕΔΩ,

  • Η "κλάση … επεκτείνει το DBCommonMethods" χρησιμοποιεί τις μεθόδους στο DBCommonMethods
  • Το "… υλοποιεί το DBInterface" διασφαλίζει ότι η κλάση παρέχει τυπικές μεθόδους ανεξάρτητα από το πρόγραμμα οδήγησης της βάσης δεδομένων που χρησιμοποιείται.

Χρήση του παραπάνω κώδικα Ο κώδικας που χρησιμοποιεί την παραπάνω κλάση θα μοιάζει με αυτό

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

Or

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

Ο υπόλοιπος κώδικας θα είναι ο ίδιος και για τα δύο προγράμματα οδήγησης, όπως π.χ.

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

Χαρακτηριστικά

  • Αντικειμενοστραφής προγραμματισμός Το OOP είναι μια ισχυρή τεχνική που μοντελοποιεί εφαρμογές μετά από αντικείμενα του πραγματικού κόσμου
  • Μια κλάση είναι μια αναπαράσταση αντικειμένων του πραγματικού κόσμου με ιδιότητες και μεθόδους
  • Οι τρεις βασικές αρχές του OOP είναι:
  • Ενθυλάκωση
  • Κληρονομία
  • Πολυμορφισμός