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.
• In OOP (Programarea Orientata pe Obiect) apar termenii "Encapsulation" (Encapsulare) si "Polymorphism" (polimorfism.).
          - Encapsularea reprezinta faptul de a utiliza proprietatile si metodele clasei fara a fi necesara cunoasterea sructurii ei, a codului si instructiunilor din ea.
          - Polimorfismul e posibilitatea de a utiliza o clasa sau alta pentru a realiza lucrul dorit, avand functii similare. Mai multe obiecte pot efectua operatii similare, in moduri diferite. (De exemplu, se poate bea apa cu paharul, cu o cana sau cu sticla. Acesta e polimorfism).

1. Definire clasa

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:


Pentru a construi o clasa functionala, care sa poata fi folosita in documentul Flash, sunt necesare si alte lucruri care trebuie adaugate.
- In primul rand, fiecare clasa trebuie creata in interiorul unui Package (pachet). Package e o structura prin care se pot grupa mai multe clase impreuna. Ajuta la crearea de clase diferite care pot avea acelasi nume.
- La definirea unei clasei si a elementelor din ea (proprietati, metode) se pot aplica unele atribute speciale prin care se defineste domeniul lor de lucru (de existenta). Acest atribut se adauga inaintea cuvantului de definire (class, var, const si function), si poate fi unul din cuvintele: - Daca nu e adaugat nici un atribut, se considera "private".
Astfel, formula completa pentru crearea unei clase este: - "nume_package" e optional, pentru incepatori e mai bine sa nu fie adaugat deoarece necesita lucruri suplimentare (explicate mai jos)

• Codul pt. definirea clasei NU se scrie in documentul FLA, ci se creaza intr-un fisier extern, cu extensia "as". Din meniul New se alege "ActionScript 3.0 Class" sau "ActionScript File". Se va deschide o mica fereastra in care trebuie scris numele clasei, dupa care se deschide un document pentru scrierea codului clasei. Initial are in structura de inceput declarate corpul "package" si clasa constructor (explicata mai jos), acestea pot fi sterse sau completate cu propriul cod.
Iata un exemplu de clasa simpla, ce contine o proprietate (denumita "prop"), o metoda (cu numele "metod"), ambele cu atribut "public" ca sa poata fi apelate in afara corpului clasei (adica in orice script) si o constanta numita ASCUNS, cu atribut "protected", ceea ce o face sa poata fi utilizata doar in interiorul clasei si sub-clase ale ei.

Exemplu TestClas

// 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).
- Documentul cu acesta clasa trebuie salvat (din meniul File -> Save) cu acelasi nume ca al clasei (adica "TestClas.as"), in directorul in care e salvat si documentul FLA ce foloseste acea clasa (daca "package" e fara vreun nume).

Atentie, nu se creaza mai multe clase in acelasi corp "package". Acesta reprezinta de fapt un director in care sunt adaugate fisierele "*.as" cu clasele ce apartin aceluiasi grup. In fiecare corp "package" (intre acoladele lui) se poate crea o singura clasa.
          - Intrebarea ar fi, cum poate astfel un "package" sa contina mai multe clase? Package reprezinta de fapt calea si directorul unde sunt salvate fisiere "*.as" cu clasele incluse in acel pachet, fiecare fisier contine o singura clasa, iar toate formeaza grupul din pachet. Directorul trebuie sa aiba acelasi nume ca cel dat in cod pentru package; astfel, precum acele fisiere sunt grupate (stocate) in acelasi director, asa clasele definite in ele sunt impachetate in acelasi "package".
- De exemplu, daca se doreste gruparea a 2 clase (Clasa1 si Clasa2) intr-un pachet denumit "grup", se creaza un director "grup" (in acelasi loc unde e salvat documentul FLA) si in el se salveaza fisierele "*.as" cu cele 2 clase ("Clasa1.as" in care e definit codul pt Clasa1, si "Clasa2.as" in care e codul pt. Clasa2). Aceste clase sunt grupate in pachetul "grup" si pot fi apelate /folosite in script cu expresia "grup.Clasa1", respectiv "grup.Clasa2".
• Pentru a folosi o clasa sau un grup de clase dintr-un package cu nume (care sunt salvate intr-un director cu acelasi nume), acestea trebuie importate in document, cu formula:
                import nume_package.nume_clasa;
          sau
                import nume_package.*
- Prima formula importa doar clasa "nume_clasa" din "nume_package", a doua formula (cu *) importa toate clasele din acel pachet (director).
• Clasele definite in corpul unui package simplu (fara nume), si care sunt salvate in acelasi director cu documentul Flash, nu e necesar sa fie importate.

2. Utilizare clasa

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.


Iata de exemplu cum poate fi utilizata clasa "TestClas" prezentata mai sus.
Copiati codul de la "Exemplu TestClas" intr-un document "ActionScript 3.0 Class" si salvati-l cu numele "TestClas.as" in acelasi director in care e si documentul FLA. In documentul Flash adaugati urmatorul cod AS3:
// 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()".
- Constanta "ASCUNS" avand atributul "protected", poate fi utilizata doar in codul din corpul clasei (sau sub-clase ale ei), daca se incearca apelarea ei in afara clasei (de ex. in script, trace(tst.ASCUNS)), va rezulta eroare.

3. Metoda constructor

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".


Iata o noua versiune a clasei "TestClas", care include si metoda constructor.
// 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.
Daca salvati aceasta clasa si scrieti in Panoul pt. ActionScript din documentul Flash doar urmatoarea linie de cod:
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.

4. Metoda Accessor

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.
- Prin istructiunea "this" se specifica exact care este proprietatea, face diferenta intre proprietate si parametru cu acelasi nume.

In Panoul pt. ActionScript din documentul Flash (salvat in acelasi director cu "testClas2") adaugati urmatorul cod:
// 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.
- Dupa apelarea metodei "obj4.setProp(8, 'Tutoriale');", "prop1" si "prop2" primesc valoarea argumentelor, 8 si 'Tutoriale'.

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.


- Fisierele FLA si AS cu exemplele din aceasta lectie pot fi descarcate de la: OOP - Clase si obiecte - Creare clasa

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag e folosit pentru a adauga liste cu definitii in element <dl>?
<dt> <dd> <li>
<dl>
 <dt>HTML</dt>
  <dd> - Hyper Text Markup Language</dd>
  <dd> - Limbaj de cod pentru pagini web</dd>
</dl>
Care proprietate CSS poate sa ascunda un element in pagina, lasand spatiu gol in locul lui?
display position visibility
#id {
  visibility: hidden;
}
Indicati evenimentul declansat cand se apasa clic pe un obiect in pagina.
onclick onmouseover onfocus
document.getElementById("id").onclick = function(){
  alert("http://www.MarPlo.net/");
}
Indicati variabila PHP ce contine datele din $_GET, $_POST si $_COOKIE.
$_SESSION $_GET $_REQUEST
if(isset($_REQUEST["id"])) {
  echo $_REQUEST["id"];
}
Care din urmatoarele cuvinte reprezinta un Verb?
lighting believe path
I believe in my path.
- Eu cred in calea mea.
Care din urmatoarele cuvinte reprezinta un Verb?
creer camino iluminaciĆ³n
creer = a crede; camino = cale /drum; iluminaciĆ³n = iluminare
OOP - Clase si Obiecte - Creare Clasa

Last accessed pages

  1. Definire Variabile si Constante (1320)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (56120)
  3. Download carti electronice si programe pentru Limba Engleza (17559)
  4. Verbe modale - Modal verbs - CAN, COULD, MAY, MIGHT, MUST (27406)
  5. Prezentul simplu si continuu - Present Tense Simple and Continuous (52768)

Popular pages this month

  1. Prezentul simplu si continuu - Present Tense Simple and Continuous (3734)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (3475)
  3. Gramatica limbii engleze - Prezentare Generala (2830)
  4. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (2411)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (2027)