PHP Object Oriented Programming (OOPs) -konseptin opetusohjelma esimerkillä
Mikä on OOPs?
Object Oriented on lähestymistapa ohjelmistokehitykseen, joka mallintaa sovelluksia reaalimaailman kohteista, kuten työntekijöistä, autoista, pankkitilistä jne. Luokka määrittelee reaalimaailman objektin ominaisuudet ja menetelmät. Objekti on luokan esiintymä.
Kohdesuuntauksen kolme peruskomponenttia ovat;
- Olio-analyysi – järjestelmän toimivuus
- Oliosuuntautunut suunnittelu – järjestelmän arkkitehtuuri
- Olioohjelmointi – sovelluksen toteutus
Olio-ohjelmoinnin periaatteet
OOP:n kolme pääperiaatetta ovat;
- kapselointi – tämä koskee toteutustietojen piilottamista ja vain menetelmien paljastamista. Kapseloinnin päätarkoitus on;
- Vähennä ohjelmistokehityksen monimutkaisuutta – piilottamalla toteutustiedot ja paljastamalla vain toiminnot, luokan käyttäminen on helppoa.
- Suojaa objektin sisäinen tila – pääsy luokkamuuttujiin tapahtuu menetelmillä, kuten get ja set, mikä tekee luokasta joustavan ja helposti ylläpidettävän.
- Luokan sisäistä toteutusta voidaan muuttaa murehtimatta luokkaa käyttävän koodin rikkomisesta.
- Perintö – Tämä koskee luokkien välistä suhdetta. Suhde on vanhemman ja lapsen muoto. Lapsi käyttää pääluokassa määriteltyjä menetelmiä. Perinnön päätarkoitus on;
- Uudelleenkäytettävyys – useita lapsia, jotka voivat periä samalta vanhemmalta. Tämä on erittäin hyödyllistä, kun meidän on tarjottava yhteisiä toimintoja, kuten tietojen lisääminen, päivittäminen ja poistaminen tietokannasta.
- polymorfismi – Tämä koskee yhtä muotoa, mutta monia erilaisia toteutustapoja. Polymorfismin päätarkoitus on;
- Yksinkertaista sovellusten ylläpitoa ja tee niistä laajennettavia.
Oho Concepts PHP:ssä
PHP on oliopohjainen komentosarjakieli; se tukee kaikkia yllä olevia periaatteita. Edellä mainitut periaatteet saavutetaan kautta;
- kapselointi – käyttämällä "get"- ja "set"-menetelmiä jne.
- Perintö – Extens-avainsanan avulla
- polymorfismi – työkalujen avainsanan avulla
Nyt meillä on perustiedot OOP:sta ja sen tuesta PHP, katsotaanpa esimerkkejä, jotka toteuttavat yllä olevat periaatteet
Mikä on UML?
Unified Modeling Language UML on tekniikka, jota käytetään oliopohjaisten järjestelmien suunnitteluun ja dokumentointiin.
UML tuottaa useita asiakirjoja, mutta tarkastelemme luokkakaaviota, joka on erittäin tärkeä olio-php-ohjelmoinnissa.
Esimerkki luokkakaaviosta
Luokkakaavion avain
- - Ylälaatikko sisältää luokan nimen
- - keskimmäinen laatikko sisältää luokan muuttujat
- - alempi laatikko sisältää luokan metodit
- - miinus (-) merkki tarkoittaa yksityinen soveltamisala
- - lisää (+) merkki tarkoittaa julkista ulottuvuutta
- - hash (#) merkki tarkoittaa suojattua ulottuvuutta
Kuinka luoda luokka PHP: llä
Luokka-avainsanaa käytetään luokan määrittämiseen PHP:ssä. Alla on säännöt luokan luomiseksi PHP:ssä.
- Luokan nimen tulee alkaa kirjaimella
- Luokan nimi ei voi olla PHP:n varattu sana
- Luokan nimi ei saa sisältää välilyöntejä
Oletetaan, että haluamme luoda luokan eläinten edustamiseksi.
Aloitamme tunnistamalla piirteet, jotka ovat yhteisiä kaikille eläimille.
- Kaikki eläimet kuuluvat perheeseen, kuten kasvinsyöjä, karnevaali jne.
- Kaikki eläimet syövät ruokaa
Alla oleva kaavio näyttää eläimen kaavion
Koodataan nyt eläinluokkamme
<?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; } } ?>
TÄSSÄ,
- "yksityinen $perhe, $ruoka" tarkoittaa, että muuttujia ei voida käyttää suoraan luokan ulkopuolella (kapselointi).
- "julkinen funktio __construct($family…)" on php-konstruktiomenetelmä. Tätä funktiota kutsutaan aina, kun luokan esiintymä on luotu. Tässä tapauksessa asetamme perheen ja ruoan.
- "julkinen toiminta saa…()" on menetelmä, jota käytetään perheen tai ruoan arvon saamiseksi (kapselointi)
- "julkinen toimintosarja…()" on menetelmä, jolla määritetään perheen tai ruoan arvo (kapselointi)
Kuinka toteuttaa perintö PHP:ssä
Työskentelemme lehmän ja leijonan kanssa. Sekä lehmä että leijona perivät Animal-luokasta.
Alla oleva luokkakaavio näyttää suhteet.
Huomaa, että lehmä perii eläinluokista ja määrittelee myös oman muuttujansa ja menetelmänsä.
Koodataan nyt Cow-luokka
<?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; } } ?>
Koodataan nyt leijonaluokka
<?php class Lion extends Animal { public function __construct($family, $food) { parent::__construct($family, $food); } } ?>
TÄSSÄ,
- "luokka … laajentaa Animal" saa lehmän ja leijonan käyttämään menetelmiä Animal-luokasta (Perinnöstä).
Luokan objektin luominen
Animal-, Cow- ja Lion-luokkien tulisi olla kaikki samassa hakemistossa yksinkertaisuuden vuoksi.
Luodaan nyt sovellus, joka käyttää luokkiamme.
PHP-luokan esimerkki
<?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(); ?>
Testaamme sovellustamme
Katsotaan nyt sovellustamme verkkoselaimessa
Aivan mahtavaa! Katsotaanpa nyt OOP:n kolmatta periaatetta, polymorfismia.
Oletetaan, että haluamme kehittää sovelluksen, joka muodostaa yhteyden erilaisiin tietokantakoneisiin, kuten MySQL ja SQL Palvelin vaan käytä samaa yhtenäistä käyttöliittymää.
Voimme luoda rajapinnan, joka määrittelee standardimenetelmät ja abstraktin luokan, joka toteuttaa yleiset menetelmät.
- liitäntä – Se on samanlainen kuin luokka. Se määrittelee vain menetelmät ja parametrit.
- Tiivistelmä luokka – Se on luokka, jota ei voida käyttää objektin luomiseen suoraan. Sen tarkoituksena on tarjota osittaisia tai kokonaisia toteutuksia yleisistä menetelmistä.
Alla oleva luokkakaavio havainnollistaa abstraktien luokka-, käyttöliittymä- ja toteutusluokkien välistä suhdetta.
Luodaan nyt abstrakti luokkamme
<?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; } } ?>
TÄSSÄ,
- "abstrakti luokka" tarkoittaa, että luokkaa ei voida käyttää suoraan php:n objektin luomiseen
- "$host,$db…" ovat luokkamuuttujia, jotka ovat yhteisiä kaikille toteutuksille
- "funktio __construct(…)" on php-luokan konstruktorimenetelmä, joka asettaa yleisten muuttujien arvot alustuksen yhteydessä
Luodaan nyt käyttöliittymä, joka sisältää vakiomenetelmät, jotka toteutetaan eri tavalla tietokantakoneesta riippuen.
<?php interface DBInterface { public function db_connect(); public function insert($data); public function read($where); public function update($where); public function delete($where); } ?>
TÄSSÄ,
- "rajapinta" on avainsana rajapintojen luomiseen
- ”julkinen tehtävä…(…)” ovat vakiomenetelmiä, jotka tulisi ottaa käyttöön
Luodaan nyt konkreettiset luokat, jotka laajentavat DBCommonMethods-luokkaa ja laajentavat DBInterface-liitäntää. 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 } } ?>
TÄSSÄ,
- "class … laajentaa DBCommonMethods" käyttää DBCommonMethods-menetelmiä
- "… toteuttaa DBInterfacen" varmistaa, että luokka tarjoaa vakiomenetelmiä käytetystä tietokantaohjaimesta riippumatta.
Yllä olevan koodin käyttö Yllä olevaa luokkaa käyttävä koodi näyttäisi tältä
<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>
Or
<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>
Loput koodista olisi sama molemmille ohjaimille, kuten;
<?php $db->db_connect(); $db->insert($data); ?>
Yhteenveto
- Olio-ohjelmointi OOP on tehokas tekniikka, joka mallintaa sovelluksia reaalimaailman objektien jälkeen
- Luokka on esitys reaalimaailman objekteista ominaisuuksineen ja menetelmineen
- OOP:n kolme perusperiaatetta ovat;
- kapselointi
- Perintö
- polymorfismi