PHP objektorienteeritud programmeerimise (OOP) kontseptsiooni õpetus koos näitega
Mis on OOPs?
Objektorienteeritud on tarkvaraarenduse lähenemisviis, mis modelleerib rakendusi reaalmaailma objektide, nagu töötajad, autod, pangakontod jne, ümber. Klass määratleb reaalse maailma objekti omadused ja meetodid. Objekt on klassi esinemine.
Objektorientatsiooni kolm põhikomponenti on;
- Objektorienteeritud analüüs – süsteemi funktsionaalsus
- Objektorienteeritud projekteerimine – süsteemi arhitektuur
- Objektorienteeritud programmeerimine – rakenduse juurutamine
Objektorienteeritud programmeerimise põhimõtted
OOP kolm peamist põhimõtet on;
- Kapseldamine – see on seotud rakenduse üksikasjade peitmisega ja ainult meetodite paljastamisega. Kapseldamise põhieesmärk on;
- Vähendage tarkvaraarenduse keerukust – juurutamise üksikasju peites ja ainult toiminguid paljastades muutub klassi kasutamine lihtsaks.
- Kaitske objekti sisemist olekut – juurdepääs klassi muutujatele toimub selliste meetodite kaudu nagu hanki ja määra, mis muudab klassi paindlikuks ja hõlpsasti hooldatavaks.
- Klassi sisemist teostust saab muuta, muretsemata klassi kasutava koodi purunemise pärast.
- Pärisosa – see puudutab klassidevahelisi suhteid. Suhe võtab vanema ja lapse vormi. Laps kasutab vanemklassis määratletud meetodeid. Pärimise peamine eesmärk on;
- Korduvkasutatavus – mitu last, võib pärida ühelt vanemalt. See on väga kasulik, kui peame pakkuma tavalisi funktsioone, nagu andmete lisamine, värskendamine ja kustutamine andmebaasist.
- Polümorfism – see puudutab ühtse vormi, kuid paljude erinevate rakendusviiside olemasolu. Polümorfismi peamine eesmärk on;
- Lihtsustage rakenduste hooldamist ja muutke need laiendatavamaks.
OOP-d Concepts PHP-s
PHP on objektorienteeritud skriptikeel; see toetab kõiki ülaltoodud põhimõtteid. Ülaltoodud põhimõtted saavutatakse;
- Kapseldamine - "saada" ja "seadistatud" meetodite jne abil.
- Pärisosa – laiendab märksõna kasutamise kaudu
- Polümorfism – tööriistade märksõna kasutamise kaudu
Nüüd on meil põhiteadmised OOP-ist ja selle toetamisest PHP, vaatame näiteid, mis rakendavad ülaltoodud põhimõtteid
Mis on UML?
Unified Modeling Language UML on tehnika, mida kasutatakse objektorienteeritud süsteemide kujundamiseks ja dokumenteerimiseks.
UML toodab mitmeid dokumente, kuid me vaatame klassidiagrammi, mis on objektorienteeritud php programmeerimise jaoks väga oluline.
Klassiskeemi näide
Klassiskeemi võti
- . Ülemine kast sisaldab klassi nime
- . keskmine kast sisaldab klassi muutujaid
- . alumine kast sisaldab klassi meetodeid
- . miinus (-) märk tähendab privaatne ulatus
- . pluss (+) märk tähendab avalikku ulatust
- . räsi (#) märk tähendab kaitstud ulatust
Kuidas PHP-s klassi luua
Klassi märksõna kasutatakse PHP-s klassi määratlemiseks. Allpool on toodud PHP-s klassi loomise reeglid.
- Klassi nimi peaks algama tähega
- Klassi nimi ei saa olla PHP reserveeritud sõna
- Klassi nimi ei tohi sisaldada tühikuid
Oletame, et tahame luua klassi loomade esindamiseks.
Alustuseks teeme kindlaks tunnused, mis on kõigile loomadele ühised.
- Kõik loomad kuuluvad perekonda, näiteks rohusööja, karneval jne.
- Kõik loomad söövad toitu
Allolev diagramm näitab looma diagrammi
Kodeerime nüüd oma loomaklassi
<?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;
}
}
?>
SIIN,
- "Private $family, $food" tähendab, et muutujatele ei ole võimalik väljaspool klassi otse juurde pääseda (kapseldamine).
- “avalik funktsioon __construct($family…)” on php konstruktori meetod. Seda funktsiooni kutsutakse alati, kui klassi eksemplar on loodud. Sel juhul paneme paika pere ja toidu.
- „Avaliku funktsiooni hankimine…()” on meetod, mida kasutatakse perekonna- või toiduväärtusele juurdepääsu saamiseks (kapseldamine)
- „avalike funktsioonide komplekt…()” on meetod, mida kasutatakse perekonna või toidu väärtuse määramiseks (kapseldamine)
Kuidas rakendada PHP-s pärimist
Töötame lehma ja lõviga. Nii lehm kui ka lõvi pärivad loomade klassist.
Allolev klassiskeem näitab seoseid.
Pange tähele, et lehm pärib loomaklassist ning määrab ka oma muutuja ja meetodid.
Kodeerime nüüd lehma klassi
<?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;
}
}
?>
Kodeerime nüüd Lõvi klassi
<?php
class Lion extends Animal
{
public function __construct($family, $food)
{
parent::__construct($family, $food);
}
}
?>
SIIN,
- “klass … laiendab Animal” paneb lehma ja lõvi kasutama meetodeid loomade klassist (Pärimine).
Kuidas luua klassi objekti
Loomade, lehmade ja lõvi klassid peaksid lihtsuse huvides olema kõik samas kataloogis.
Loome nüüd rakenduse, mis kasutab meie klasse.
PHP klassi näide
<?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();
?>
Meie rakenduse testimine
Vaatame nüüd oma rakendust veebibrauseris
Fantastiline eks! Vaatame nüüd OOP kolmandat põhimõtet, polümorfismi.
Oletame, et tahame arendada rakendust, mis loob ühenduse erinevate andmebaasimootoritega nagu MySQL ja SQL Server, kuid kasutage sama ühtset liidest.
Saame luua liidese, mis määratleb standardmeetodid ja abstraktse klassi, mis rakendab levinud meetodeid.
- Interface – see sarnaneb klassiga. See määrab ainult meetodid ja parameetrid.
- Abstraktne tund – see on klass, mida ei saa kasutada objekti otse loomiseks. Selle eesmärk on pakkuda levinud meetodite osalist või täielikku rakendamist.
Allolev klassiskeem illustreerib seost meie abstraktsete klasside, liideste ja rakendusklasside vahel.
Loome nüüd oma abstraktse klassi
<?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;
}
}
?>
SIIN,
- "abstraktne klass" tähendab, et klassi ei saa kasutada otse php objekti loomiseks
- “$host,$db…” on klassimuutujad, mis on ühised kõikidele rakendustele
- Funktsioon __construct(…) on php klassi konstruktori meetod, mis määrab initsialiseerimisel ühised muutujate väärtused
Loome nüüd liidese, mis sisaldab standardmeetodeid, mida rakendatakse sõltuvalt andmebaasimootorist erinevalt.
<?php
interface DBInterface
{
public function db_connect();
public function insert($data);
public function read($where);
public function update($where);
public function delete($where);
}
?>
SIIN,
- "liides" on liideste loomise märksõna
- „avalik funktsioon…(…)” on standardmeetodid, mida tuleks rakendada
Loome nüüd konkreetsed klassid, mis laiendavad DBCommonMethodsi klassi ja laiendavad DBInterface'i liidest. 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 }
} ?>
SIIN,
- "klass … laiendab DBCommonMethodsi" kasutab DBCommonMethodsi meetodeid
- “… juurutab DBInterface’i” tagab, et klass pakub standardmeetodeid olenemata kasutatavast andmebaasi draiverist.
Ülaltoodud koodi kasutamine Ülaltoodud klassi kasutav kood näeks välja selline
<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>
Or
<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>
Ülejäänud kood oleks mõlema draiveri jaoks sama, näiteks;
<?php $db->db_connect(); $db->insert($data); ?>
kokkuvõte
- Objektorienteeritud programmeerimine OOP on võimas tehniline tööriist, mis modelleerib rakendusi reaalmaailma objektide järgi
- Klass on reaalmaailma objektide esitus koos omaduste ja meetoditega
- OOP kolm aluspõhimõtet on;
- Kapseldamine
- Pärisosa
- Polümorfism





