PHP Αντικειμενοστραφής Προγραμματισμός (OOPs) Πρόγραμμα Εκμάθησης με Παράδειγμα
Τι είναι το OOPs;
Το Object Oriented είναι μια προσέγγιση στην ανάπτυξη λογισμικού που μοντελοποιεί εφαρμογές γύρω από αντικείμενα του πραγματικού κόσμου, όπως υπαλλήλους, αυτοκίνητα, τραπεζικούς λογαριασμούς, κ.λπ. Μια κλάση ορίζει τις ιδιότητες και τις μεθόδους ενός αντικειμένου πραγματικού κόσμου. Ένα αντικείμενο είναι μια εμφάνιση μιας κλάσης.
Τα τρία βασικά στοιχεία του αντικειμενικού προσανατολισμού είναι:
- Αντικειμενοστραφής ανάλυση – λειτουργικότητα του συστήματος
- Αντικειμενοστραφής σχεδιασμός – αρχιτεκτονική του συστήματος
- Αντικειμενοστραφής προγραμματισμός – υλοποίηση της εφαρμογής
Αρχές Αντικειμενοστρεφούς Προγραμματισμού
Οι τρεις κύριες αρχές του OOP είναι:
- Ενθυλάκωση – αυτό αφορά την απόκρυψη των λεπτομερειών υλοποίησης και την αποκάλυψη μόνο των μεθόδων. Ο κύριος σκοπός της ενθυλάκωσης είναι να:
- Μειώστε την πολυπλοκότητα ανάπτυξης λογισμικού – με την απόκρυψη των λεπτομερειών υλοποίησης και την έκθεση μόνο των λειτουργιών, η χρήση μιας κλάσης γίνεται εύκολη.
- Προστατέψτε την εσωτερική κατάσταση ενός αντικειμένου – η πρόσβαση στις μεταβλητές κλάσης γίνεται μέσω μεθόδων όπως το get και το set, κάτι που κάνει την κλάση ευέλικτη και εύκολη στη συντήρηση.
- Η εσωτερική υλοποίηση της κλάσης μπορεί να αλλάξει χωρίς να ανησυχείτε για την παραβίαση του κώδικα που χρησιμοποιεί την κλάση.
- Κληρονομία – αυτό αφορά τη σχέση μεταξύ των τάξεων. Η σχέση έχει τη μορφή γονέα και παιδιού. Το παιδί χρησιμοποιεί τις μεθόδους που ορίζονται στη γονική τάξη. Ο κύριος σκοπός της κληρονομιάς είναι?
- Επαναχρησιμοποίηση – ορισμένα παιδιά, μπορούν να κληρονομήσουν από τον ίδιο γονέα. Αυτό είναι πολύ χρήσιμο όταν πρέπει να παρέχουμε κοινές λειτουργίες όπως η προσθήκη, η ενημέρωση και η διαγραφή δεδομένων από τη βάση δεδομένων.
- Πολυμορφισμός – αυτό αφορά την ύπαρξη μιας ενιαίας μορφής αλλά πολλών διαφορετικών τρόπων υλοποίησης. Ο κύριος σκοπός του πολυμορφισμού είναι:
- Απλοποιήστε τη συντήρηση των εφαρμογών και κάντε τις πιο επεκτάσιμες.
OOPs Concepts σε PHP
Η PHP είναι μια αντικειμενοστραφής γλώσσα δέσμης ενεργειών. υποστηρίζει όλες τις παραπάνω αρχές. Οι παραπάνω αρχές επιτυγχάνονται μέσω:
- Ενθυλάκωση – μέσω της χρήσης των μεθόδων «get» και «set» κ.λπ.
- Κληρονομία – μέσω της χρήσης της λέξης-κλειδιού επέκτασης
- Πολυμορφισμός – μέσω της χρήσης της λέξης-κλειδιού της εφαρμογής
Τώρα που έχουμε τις βασικές γνώσεις του OOP και πώς υποστηρίζεται PHP, ας δούμε παραδείγματα που εφαρμόζουν τις παραπάνω αρχές
Τι είναι το UML;
Unified Modeling Language Το UML είναι μια τεχνική που χρησιμοποιείται για το σχεδιασμό και την τεκμηρίωση αντικειμενοστρεφών συστημάτων.
Η UML παράγει έναν αριθμό εγγράφων, αλλά θα δούμε το διάγραμμα κλάσεων που είναι πολύ σημαντικό για τον αντικειμενοστραφή προγραμματισμό php.
Παράδειγμα διαγράμματος τάξης
Κλειδί διαγράμματος τάξης
- Τα Διαχωριστικά Επάνω κουτί περιέχει το όνομα της τάξης
- Τα Διαχωριστικά μεσαίο κουτί περιέχει τις μεταβλητές κλάσης
- Τα Διαχωριστικά κάτω κουτί περιέχει τις μεθόδους κλάσης
- Τα Διαχωριστικά μείον (-) σημαίνει σημάδι ιδιωτικής εμβέλειας
- Τα Διαχωριστικά συν (+) σημάδι σημαίνει δημόσια εμβέλεια
- Τα Διαχωριστικά κατακερματισμός (#) σημάδι σημαίνει προστατευόμενο πεδίο
Πώς να δημιουργήσετε μια τάξη στην PHP
Η λέξη-κλειδί class χρησιμοποιείται για τον ορισμό μιας κλάσης στην 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
Θα δουλέψουμε με μια αγελάδα και ένα λιοντάρι. Τόσο η αγελάδα όσο και το λιοντάρι κληρονομούν από την τάξη των Ζώων.
Το παρακάτω διάγραμμα τάξης δείχνει τις σχέσεις.
Σημειώστε ότι η αγελάδα κληρονομεί από την κατηγορία των ζώων και ορίζει επίσης τη δική της μεταβλητή και μεθόδους.
Ας κωδικοποιήσουμε τώρα την κλάση 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(); ?>
Δοκιμή της εφαρμογής μας
Ας δούμε τώρα την εφαρμογή μας σε ένα πρόγραμμα περιήγησης ιστού
Φανταστικά σωστά! Ας δούμε τώρα την τρίτη αρχή του OOP, τον πολυμορφισμό.
Ας υποθέσουμε ότι θέλουμε να αναπτύξουμε μια εφαρμογή που να συνδέεται με διαφορετικές μηχανές βάσης δεδομένων όπως π.χ MySQL και SQL Διακομιστής αλλά χρησιμοποιεί την ίδια ομοιόμορφη διεπαφή.
Μπορούμε να δημιουργήσουμε μια διεπαφή που ορίζει τις τυπικές μεθόδους και μια αφηρημένη κλάση που υλοποιεί τις κοινές μεθόδους.
- περιβάλλον λειτουργίας – είναι παρόμοιο με μια τάξη. Καθορίζει μόνο τις μεθόδους και τις παραμέτρους.
- Περίληψη τάξη – είναι μια κλάση που δεν μπορεί να χρησιμοποιηθεί για τη δημιουργία ενός αντικειμένου απευθείας. Σκοπός του είναι να παρέχει μερικές ή ολόκληρες υλοποιήσεις κοινών μεθόδων.
Το διάγραμμα κλάσης παρακάτω απεικονίζει τη σχέση μεταξύ της αφηρημένης κλάσης, της διεπαφής και των κλάσεων υλοποίησης.
Ας δημιουργήσουμε τώρα την αφηρημένη τάξη μας
<?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 είναι:
- Ενθυλάκωση
- Κληρονομία
- Πολυμορφισμός