Jūs esate sename manualai.lt puslapyje.
Naujasis puslapis yra v2.manualai.lt

forumas.manualai.lt

kodai.manualai.lt

dizainas.manualai.lt

idomu.manualai.lt

top

Sekite mus Facebook'e

Sekite mus Facebook'e

Vartotojo meniu

Forumo naujausi


OOP PDF Spausdinti
Autorius: Primatas   

Objektinis programavimas, trumpiau OOP (ang. Object-Oriented Programming). Tai yra ta kodo dalis, kurioje naudojame klases ir kreipiames per kintamuosius į tose klasėse esančias funkcijas. Objektiškai programuoti galima bet kuria kalba, tik jei nėra specialiai tam skirtų priemonių, gali būti žymiai sunkiau rašyti kodą ir jį suprasti. PHP kalba jau yra pakankamai ištobulinta ir joje yra viskas ko reikia OOP programavimui.

Pagridniniai terminai

  • Objektas – duomenų ir susijusio funkcionalumo talpinimas į vientisus vienetus. Objektai padeda pasiekti moduliškumą ir nusako objektinės programos struktūrą.
  • Abstrakcija – galimybė programuoti nežinant konkrečių detalių apie informaciją.
  • Inkapsuliacija (informacijos slėpimas) – užtikrina, kad objekto naudotojas negali pakeisti objekto būsenos nenumatytu būdu. Tik objekto vidiniai metodai turi galimybę keisti objekto būseną. Objektas pateikia interfeisą (sąsają), nusakančia galimybes manipuliuoti objektu.
  • Polimorfizmas – objektiškai orientuotos kalbos nekviečia paprogramių, bet siunčia pranešimus, todėl konkretus į pranešimą reaguojantis metodas priklauso nuo objekto, ne nuo siuntėjo. Tai leidžia dirbti su bendresnio tipo objektais (pvz., paukštis), nežinant konkretaus tipo (pvz., strutis ar pingvinas), dėl to nereikia kiekvienam konkrečiam tipui rašyti atskiro kodo.
  • Paveldėjimas - Objektų organizavimas specializuojant egzistuojančius bendresnius tipus, papildant ar iš dalies pakeičiant funkcionalumą.

Taip aiškina wikipedia, o dabar pabandysiu aprašyti taip, kad būtų kuo aiškiau :)

Klasės

Klasės tai yra funkcijų rinkiniai. Tarkime, kad norime puslapyje pridėti dėžutę, kurioje bus prisijungimo panelė, taip pat norime pridėti analogišką dėžutę skirtą balsavimui, dar kitą meniu punktams ir t.t. Pavyzdžiui kad ir manualai.lt puslapyje matome šone keletą tokio pat karkaso dėžučių. Kyla logiškas tinginio klausimas: Kodėl turėčiau rašyti kodą kiekvienai dėžutei atskirai? Geriau reikia susikurti vieną klasę "dezutes" ir joje apsirašyti tas funkcijas, kurių man reikės keletą kartų!

Pavyzdys

failas index.php:
<?php

include ('dezutes.php'); // įterpiame į index.php dezutes.php, kuriame yra klasė 'dezutes'
$dezutes = new dezutes(); // nustatome kintamajį $dezutes kaip objektą

// vėliau naudojami parametrai skirti funkcijoms esančioms klasėje 'dezutes' faile dezutes.php

$title_1 = 'Prisistatymas';
$html_1 = 'Sveiki, mano vardas Lukas, man 20 metų ir šiuo metu mokausi.';

/*
kreipiames per objekto kintamajį $dezutes į klasės 'dezutes'
funkcijas top(), centras() ir apacia()
*/
print $dezutes->top($title_1);
print $dezutes->centras($html_1);
print $dezutes->apacia();

/*
Naudojame print komandą, nes tos funkcijos neatspausdina rezultatų tiesiai į HTML,
bet grąžina juos į kodą su komanda return. Čia galėjome nebūtinai iškarto atspausdinti,
galime priskirti grąžintas reikšmes kintamiesiems ir tada juos atspausdinti ar daryti
ką tik užsigeidžiam.
*/

?>

failas dezutes.php

<?php
class dezutes { // klasės pavadinimas. Patartina toks pat kaip ir failo pavadinimas.

// klasės funkcija top() su parametru $title, gaunamu, kai kreipiamasi į ją.

function top($title){

return '
<table cellpadding="0" cellspacing="0">
<tr>
<td>' . $title . '</td>
</tr>
';

}

// klasės funkcija centras() su parametru $html, gaunamu, kai kreipiamasi į ją.

function centras($html){

return '
<tr>
<td>' . $html . '</td>
</tr>
';

}

// klasės funkcija apacia(), be parametrų.

function apacia(){
return '
</table>
';
}
}

?>

Panagrinėjus šį kodą turėtų pasidaryti aiški OOP programavimo idėja. Funkcija top() sukuria dėžutės viršų ir iš karto įterpia lentelės (dėžutės) antraštę. Centras() - sukuria naują lentelės eilutę ir į jos vidų įterpia betkokį funkcijai pateiktą HTML kodą, o funckija apacia() - grąžina lentelės užbaigimo HTML kodą.

Tokio index.php failo pažiūrėję HTML source'ą, pamatytume tokį HTML kodą: pabandyk pats redaktorius

 <table cellpadding="0" cellspacing="0">
<tr>
<td>Prisistatymas</td>
</tr>
<tr>
<td>Sveiki, mano vardas Lukas, man 20 metų ir šiuo metu mokausi.</td>
</tr>
</table>

Apibendrinimas

  • Objektas - kintamasis, per kurį pasiekiame klasės funkcijas.
  • Klasė - funkcijų rinkinys.

OOP programavimo privalumai yra keli. Pirmiausia, nereikia rašyti tų pačių funkcijų keletą kartų ir padarius vieną projektą remiantis klasėmis ir objektais, kitame projekte tiesiog galime įtraukti seniau sukurtą klasę ir viskas turėtų veikti. Antra, pavyzdžiui norime duoti dalį kodo daryti kitam programuotojui ir nenorime, kad jis matytų visą kodą, jam pasakome klasės pavadinimą, funkcijas ir ką jos atlieką. Jis nesigilindamas į funkcijų kodą gali jas sėkmingai naudoti. Pavyzdžiui prisijungimui prie MySql duomenų bazės turime atskirą klasę, joje patalpiname prisijungimo duomenis ir kitas programuotojas tiesiog nurodo kreipinius į minėtos klasės funkcijas, kurios prisijungia prie duomenų bazės ir nemato su kokiu vartotojo vardu, ar slaptažodžiu buvo prisijungta.

Būna kalbų, kurios paremtos OOP programavimu, tai yra Java, ActionScript taip pat JavaScript ir kt.

Komentarai
Paieška
Tik registruoti vartotojai gali rašyti komentarus!

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 

bottom
top

Reklamos

joomla, css, html, web dizaino, photoshop, pascal forumai
  • Topai.eu - Svetainių katalogas
  • Top.Biciuliai.Net
  • Top.Ob.Lt
  • Hey.lt - Nemokamas lankytojų skaitliukas

Naujausi

Skaitomiausi


bottom

Dizainą sukūrė: Neshas ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- Privertė veikti: Primatas
parašyti administracijai
Manualai.lt 2008-2009

t http://manualai.lt/index.php?option=com_content&view;=section&layout;=blog&id;=14&Itemid;=298