CATEGORII DOCUMENTE |
Clase
O clasa se defineste astfel:
[modificator] class NumeClasaDefinita [extends NumeClasa] [implements NumeInterfete]
Campurile unei clase sunt variabile atasate clasei respective si se declara astfel:
[modificatori] tip lista_identificatori;
Metodele sunt functiile declarate in interiorul clasei. O metoda nu poate contine alta metoda. Numele metodei este prefixat cu tipul rezultatului intors de metoda (sau void daca metoda nu intoarce vreo valoare) si urmat de lista parametrilor, cuprinsa intre paranteze rotunde; cele doua paranteze rotunde trebuie specificate chiar daca nu exista parametri.
[modificatori] tip_returnat nume_metoda(lista_parametrii);
Lista tipurilor parametrilor, in ordinea lor de aparitie, formeaza signatura metodei. In aceeasi clasa pot aparea mai multe metode cu acelasi nume, dar cu signaturi diferite. Prin urmare, nu este permisa aparitia a doua metode cu acelasi nume si aceeasi signatura, indiferent de tipul rezultatului intors.
Clasele sunt considerate tipuri. Entitatile al caror tip este o clasa se numesc obiecte ale clasei respective. Se mai spune ca obiectele sunt instantieri (instante) ale claselor.
Constructorii unei clase seamana cu metodele, dar numele lor este obligatoriu numele clasei si nu intorc valori. Unul dintre constructori este automat invocat la crearea unui obiect de tipul clasei respective. Actiunea constructorilor poate fi oricat de complexa, dar in principal sunt folositi pentru initializarea unor campuri ale obiectului. Ca si pentru metode, pot exista mai multi constructori, dar cu signaturi diferite.
Aceasta posibilitate de a exista mai multi constructori, respectiv mai multe metode cu acelasi nume, dar cu signaturi diferite, poarta numele de supraincarcare (overloading).
Crearea obiectelor se face cu ajutorul operatorului new.
Un obiect poate folosi o variabila pentru a pastra o referinta catre el. Mai multe variabile pot referi acelasi obiect.
De exemplu, daca C este o clasa, atunci crearea unui obiect de tipul clasei C se poate face astfel:
1)
new C();
prin care este creat un obiect anonim de tipul C;
2)
C ob; //declararea varabilei
ob = new C(); //crearea obiectului
sau prescurtat:
C ob = new C();
prin care este creat un obiect de tipul C la care ne putem referi prin variabila ob.
La folosirea operatorului new se intampla mai multe lucruri: se creeaza o noua instanta a clasei date, se aloca memorie pentru aceasta si este invocat constructorul corespunzator (cu aceeasi signatura cu cea din lista de argumente). Daca in clasa C nu exista vreun constructor (declarat explicit), se presupune ca "exista" totusi un constructor fara parametrii, care nu prevede nici o actiune. Drept urmare, la creare trebuie folosita forma new C().
Variabila referinta ob poate fi folosita pentru accesarea campurilor si metodelor clasei. Astfel, daca x este un camp al clasei, el poate fi referit prin ob.x, iar daca met este o metoda a clasei, ea poate fi invocata prin ob.met(); (evident, este invocata acea metoda care are aceeasi signatura cu cea din lista de argumente).
O variabila poate fi de un tip primitiv (numeric, caracter etc.) sau o referinta.
O variabila de tip referinta poate avea valoarea null, care indica o referinta catre 'nimic'; drept urmare variabila nu contine o referinta valida, deci nu poate fi folosita pentru a accesa campuri sau invoca metode.
Deoarece gestionarea memoriei in Java se face automat, nu este nevoie sa fie dezalocata memoria ocupata de obiect, atunci cand se termina lucrul cu acesta. Java poseda un colector de reziduuri (garbage collector). Interpretorul Java este capabil de a detecta momentul in care un obiect nu mai este referit si il poate 'distruge', sarcina preluata de colectorul de reziduuri. Aceasta nu implica eliberarea imediata a spatiului alocat obiectului. Este posibil ca interpretorul Java sa termine executarea programului inaintea colectorului de reziduuri (acesta nu a elibrat inca toate spatiile inutile); in aceasta situatie, resursele ramase alocate vor fi eliberate de sistemul de operare.
Exemplu Vom scrie o clasa Dreptunghi ce are doua campuri, repezentand lungimea si latimea dreptunghiului si doi constructori: un constructor fara parametrii in care se initializeaza lungimea si latimea dreptunghiului cu 1 si un constructor cu doi parametrii, reprezentand lungimea si latimea dreptunghiului. Clasa va avea urmatoarele metode:
- o metoda de calcul al ariei dreptunghiului
- o metoda ce primeste ca parametru un obiect de tip Dreptunghi si verifica daca aria acestuia este mai mare decat aria dreptunghiului curent
- o metoda de afisare a dimensiunilor dreptunghiului
Pentru citirea de la tastatura vom folosi in acest exemplu clasa IO care se foloseste si la curs. Clasa contine metode statice pentru citirea unui caracter (metoda readch()), a unui String (readString() ) sau unui numar de tip double (metoda read()) si foloseste in acest scop clasa StreamTokenizer din pachetul java.io. In laboratoarele urmatoare vom vedea cum putem citi folosind direct o clasa din java, introdusa din versiunea 5 - clasa Scanner.
Pe scurt, clasa StreamTokenizer permite, prin intermediul campurilor si metodelor sale, sa actionam asupra unui flux de intrare in scopul detectarii entitatilor sale (tokens). Metoda centrala a clasei StreamTokenizer este nextToken(), a carei invocare are drept efect detectarea urmatoarei entitati din sirul de caractere de la intrare. Astfel se pot obtine valori numerice, siruri de caractere, in functie de tipul entitatii detectate.
In clasa IO obiectul de tip StreamTokenizer este creat pe baza fluxului standard de intare, System.in, folosind un obiect de tip InputStreamReader care converteste octetii din flux din codificarea locala in caractere Unicode, inainte ca obiectele StreamTokenizer sa‑i prelucreze.
class Dreptunghi
Dreptunghi(double lung1,double lat1)
double arie()
boolean maiMare(Dreptunghi d)
void afisare()
}
Pentru a folosi clasa Dreptunghi putem adauga in aceasta clasa metoda main sau putem crea o noua clasa care sa aiba doar metoda main (clasa principala). Vom alege in continuare cea de a doua varianta.
class DreptunghiMain
}
Observatii:
1. In Java orice clasa extinde direct (implicit sau explicit) sau indirect clasa Object, a carei definitie apare in pachetul java.lang (clasele formeaza o structura de arbore in care radacina este clasa Object). Metoda
public String toString()
a clasei Object returneaza reprezentarea obiectului curent intr-un String si este apelata de cate ori este necesara o conversie la tipul String. Putem suprascrie aceasta metoda in orice clasa pentru a intoarce reprezentarea obiectului ca sir de caractere in forma dorita de noi. Astfel, daca adaugam in clasa Dreptunghi metoda
public String toString()
in loc de d.afisare() putem scrie direct
System.out.print('Dreptunghi initial: '+d);
System.out.print('Dreptunghi unitate: '+d2);
2. Pentru a citi un inreg folosind clasa IO, se apeleaza metoda read() si se face o conversie explicita
int x = (int) IO.read()
Exercitiu
1. Sa se scrie o clasa Complex pentru lucru cu numere complexe. Clasa va avea doua campuri, reprezentand partea reala si partea imaginara a numarului complex, trei constructori:
- un constructor fara argumente, care lasa partea reala si cea imaginara zero
- un constructor cu un argument, reprezentand partea reala a numarului complex, partea imaginara fiind initializata cu zero (pentru crearea de numere reale)
- un constructor cu doua argumente, reprezentand partea reala si partea imaginara a numarului complex.
De asemenea, clasa va avea urmatoarele metode:
- o metoda care returneaza modulul numarului complex curent
- o metoda care aduna la numarul complex curent un numar complex primit ca parametru
- o metoda care returneaza conjugatul numarului complex curent
- o metoda de afisare a numarului complex.
Sa se scrie apoi clasa principala care, in metoda main creeaza doua obiecte de tip Complex, le afiseaza, afiseaza modulul si conjugatul acestora, precum si numarul obtinut adunand la primul numar complex pe cel de al doilea. Creati si afisati apoi trei numere complexe, apeland fiecare din cei trei constructori ai clasei.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1253
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved