Construirea unui program cu Clase si Obiecte foloseste o tehnica cunoscuta ca Programare orientata pe Obiect, OOP (Object Oriented Programming).
O clasa este de fapt o structura de date compacta, care contine variabile si functii (numite metode) prin care se pot crea diferite instructiuni legate intre ele in acea structura.
Obiectele sunt elementele din script definite printr-o clasa, acestea efectueaza instructiunile scrise in acea Clasa.
- De exemplu, pentru a intelege mai bine, prin analogie, o Clasa poate fi asemanata cu planul /schita unei case, iar obiectul este insasi casa, si contine proprietatile (culoare, ferestre, etc.) definite in schita.
Diferenta intre clasa si obiect este importanta. Daca o clasa poate fi asimilata unui tip de date, un obiect poate fi echivalat cu o variabila sau cu o valoare avand un anumit tip de date. Practic, o clasa este o "fabrica" de obiecte, care produce obiecte cu aceeasi structura, avand proprietati si metode identice.
• Clasele pot fi utilizate pentru a crea mai multe obiecte care vor contine proprietatile si functiile scrise in ele; fiecare astfel de obiect creat poarta denumirea de Instanta a clasei.ActionScript 3 contine mai multe clase predefinite, cum ar fi "clasa Date" pentru lucru cu data si timp, "clasa String" pentru siruri, si altele; dar pot fi create si clase proprii/ personalizate.
Definirea unei clase incepe cu un cuvantul cheie "class", urmat de numele clasei si corpul ei (cuprins intre acolade). In corpul clasei se definesc proprietatile si metodele ei.
- Proprietatile sunt variabile definite in interiorul clasei.
- Metodele sunt functii create in interiorul clasei.
Structura general de alcatuire a unei clase este urmatoarea:
// Se creaza package simplu (fara nume) package { // Se defineste o clasa, cu atribut public, o proprietate "prop" si o metoda "metod" public class TestClas { public var prop:Number = 7; // Proprietatea publica protected const ASCUNS:int = 2; // Constanta "protected" // Creare metoda, preia un argument de tip Number public function metod(val:Number):void { // Da alta valoare propretatii "prop", un nr. dat de parametru "val" si constanta ASCUNS this.prop = val + ASCUNS; } } }- Formula "this.prop" indica proprietatea "prop" din acea clasa (termenul this se adauga pentru a indica precis ca se face referire la proprietatea acelei clase, evitand greseli ce pot apare daca in functie sunt folosite si alte variabile sau parametri cu acelasi nume).
Dupa ce o clasa e creata si salvata in fisierul "nume_clasa.as", pentru a putea fi utilizata in prezentarea Flash, trebuie creata o instanta de obiect a clasei. Aceasta instanta se declara in scriptul din documentul FLA ca orice obiect folosit in ActionScript 3 (precum Array, Date, etc., care sunt tot clase), cu formula:
var nume_ins:NumeClasa = new NumeClasa();
sau
var nume_ins:nume_package.NumeClasa = new nume_package.NumeClasa(); (daca e intr-un package cu nume)
- "nume_ins" este numele instantei prin care pot fi utilizate proprietatile si metodele acelei clase.
// Creaza instanta de obiect la clasa TestClas var tst:TestClas = new TestClas(); // Verifica valoarea proprietatii "prop" trace(tst.prop); // 7 // Apeleaza metoda "metod()", care, comform definirii ei in clasa TestClas // primeste un argument si modifica valoarea lui "prop" tst.metod(18); // Verificare "prop" trace(tst.prop); // 11.747155797667801- Deoarece documentul FLA si fisierul cu clasa TestClas sunt in acelasi director, Flash importa automat aceasta clasa cand este creata instanta de obiect la ea, in care Flash retine proprietatile si metodele clasei. Prin apelarea acestora se executa instructiunile asociate lor din clasa, dupa cum demonstreaza rezultatul returnat de "trace()".
Metoda constructor e un tip special de functie din interiorul Clasei. Trebuie sa aibe acelasi nume cu cel al clasei. Aceasta metoda este mereu "public" chiar daca nu are mentionat special atributul "public", este apelata automat cand e creata o instanta la clasa respectiva.
O alta difrenta fata de celelalte functii este aceea ca in codul metodei Constructor nu se foloseste instructiunea "return".
// Se creaza package simplu (fara nume) package { // Se defineste o clasa, cu atribut public, o proprietate "prop" si o metoda "metod" public class TestClas { public var prop:Number = 7; // Proprietatea publica protected const ASCUNS:int = 2; // Constanta "protected" // Creare metoda constructor public function TestClas(nr1:Number, nr2:Number) { // Retine intr-o variabila media aritmetica a parametrilor 'nr1' si 'nr2' var medie_a = (nr1+nr2)/2; trace(medie_a); // Returneaza in output valoarea lui "medie_a" } // Creare metoda, preia un argument de tip Number public function metod(val:Number):void { // Da alta valoare propretatii "prop", un nr. dat de parametru "val" si constanta ASCUNS this.prop = val + ASCUNS; } } }- Observati ca metoda constructor are acelasi nume ca al clasei. Deoarece preia 2 parametri ('nr1' si 'nr2'), cand se creaza o instanta la aceasta clasa trebuie sa fie adaugate si doua numere ca argumente.
var tst:TestClas = new TestClas(7, 8);- Va afisa in Output numarul 7.5, fapt ce demonsreaza ca Metoda Constructor este apelata automat si se executa codul din ea cand e creata instanta de obiect.
Variabilele (sau proprietatile) create intr-o clasa pot avea de la inceput o valoare sau pot fi doar simplu declarate, urmand ca valoarea lor sa fie atribuita prin intermediul unei functii. Aceasta functie e denumita generic Metoda Accessor, e la fel ca oricare alta metoda, doar ca scopul ei este de a atribui valori proprietatilor; in rest, se construieste si se apeleaza la fel ca celelalte.
Ca sa vedeti practic cum functioneaza "metoda accessor", incercati urmatorul exemplu, in care este creata o clasa "testClas2" cu doua proprietati definite simplu, fara valoare, si o functie accessor care da valoare acestor proprietati prin argumentele ei.
- Deschideti un document nou "ActionScript 3.0 Class", dati ca nume de clasa "testClas2". Stergeti codul initial si copiati urmatorul cod, apoi salvati fisierul cu aceasta clasa, cu numele "testClas2.as", in acelasi director unde este si documentul FLA.
package { // Construire clasa public class testClas2 { // Definire proprietati fara valoare public var prop1:Number; public var prop2:String; // Creare metoda accessor public function setProp(prop1:Number, prop2:String) { // Se atribuie valori proprietatilor (cele cu "this") this.prop1 = prop1; this.prop2 = prop2; } } }- Parametri functiei (aici "setClas") pot avea orice nume, dar pt. a usura intelegerea codului, carui proprietati este destinat fiecare, se foloseste de obicei aceeasi denumire ca a proprietatii.
// Creare instanta obiect la clasa testClas2 var obj4:testClas2 = new testClas2(); // Verificare in Output 'prop1' si 'prop2' trace(obj4.prop1+"-"+obj4.prop2); // NaN-null // Apelare metoda accessor obj4.setProp(8, 'Tutoriale'); // Verificare din nou 'prop1' si 'prop2' trace(obj4.prop1+"-"+obj4.prop2); // 8-Tutoriale- "NaN" e returnat de o variabila de tip Number fara valoare, "null" de o variabila de tip String fara valoare.
Aceasta metoda este utila cand se doreste ca valoarea proprietatilor sa fie atribuita dinamic, in script, in functie de obiectul creat si instructiunile pt. el.
<div>Web Programming and Development</div>
h2 { text-decoration: underline; }
function someFunction() { alert("CoursesWeb.net"); } setTimeout("someFunction()", 2000);
$food =["fruits" =>["banana", "mar"), "veggie" =>["ceapa", "rosie")); $nr_food = count($food, 1); echo $nr_food; // 6
The child will haven't played by Sunday. - Copilul nu s-ar fi jucat pana duminica.
Él no habrá contado el cuento. - El nu ar fi spus povestea.