Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


ORGANIZAREA CLASELOR SI COMPORTAMENTUL ACESTORA

java



+ Font mai mare | - Font mai mic



ORGANIZAREA CLASELOR SI COMPORTAMENTUL ACESTORA

MOSTENIREA

Mostenirea reprezinta unul dintre cele mai importante concepte ale programarii OOP, avand un efect direct asupra modului de proiectare si scriere a claselor noastre Java.

Mostenirea este un mecanism care permite unei clase sa mosteneasca comportamentul si stributele unei alte clase.

Prin mostenire, o clasa dobandeste imediat tot comportamentul unei clase existente.Din acest motiv, noua clasa poate fi creata prin simpla specificare a diferentelor fata de clasa existenta.

Prin mostenire toate clasele sunt aranjate intr-o ierarhie stricta - cele pe care le cream si cele provenite din biblioteca Java sau din alte biblioteci.

O clasa care mosteneste alta clasa este denumita subclasa iar clasa care isi ofera mostenirea se numeste superclasa.

O clasa poate avea o singura superclasa, insa poate avea un numar nelimitat de subclase.Subclasele mostenesc toate atributele si comportamentul superclaselor lor.

In varful ierarhiei de clase Java se afla clasa Object - toate clasele mostenesc aceasta unica superclasa.Object reprezinta cea mai generica clasa din ierarhie, care defineste comportamentul si atributele mostenite de toate clasele din biblioteca Java.Fiecare clasa aflata mai jos in ierarhie devine din ce in ce mai adaptata unui scop precis.O ierarhie de clase defineste conceptele abstracte la varful ierarhiei ; aceste concepte devin din ce in ce mai concrete odata cu coborarea spre subclase.

In mod normal, cand cream o noua clasa Java dorim ca ea sa prezinte toate caracteristicile unei clase existente, cu unele modificari ; de exemplu putem dori o versiune a butonului CommandButton care sa produca un zgomot la folosirea sa.

Pentru a mosteni toate caracteristicile clasei CommandButton fara effort vom defini noua noastra clasa ca o subclasa a clasei CommandButton.Clasa noastra va mosteni automat comportamentul si atributele superclasei.Tot ceea ce trebuie sa facem este sa introducem diferenta fata de superclasa.

Subclasarea reprezinta crearea unei noi clase, care mosteneste o clasa existenta.Singurul lucru care trebuie facut in subclasa este definirea diferentelor in comportament si atribute fata de superclasa.

Cand clasa noastra defineste un comportament complet nou si nu este o subclasa atunci ea mosteneste direct clasa Object.Acest lucru ii permite acesteia sa se integreze corect in ierarhia claselor Java ; in practica, daca definim o clasa care nu specifica o superclasa atunci Java presupune automat ca noua clasa mosteneste direct clasa Object

Atunci cand cream un nou obiect Java pastreaza urma fiecarei variabile definite pentru acel obiect si a fiecarei variabile definite pentru fiecare clasa a obiectului.In acest fel, toate clasele se combina pentru a forma un model al obiectului curent, iar fiecare obiect isi completeaza informatiile corespunzatoare acestei situatii.

Metodele se comporta in acelasi fel:noile obiecte au acces la toate metodele clasei si superclaselor de care apartin.Acest lucru este determinat dinamic, atunci cand o metoda este folosita intr-un program aflat in executie.Daca apelam o metoda a unui anumit obiect, interpretorul Java verifica mai intai clasa obiectului, pentru a gasi acea metoda.Daca metoda nu este gasita interpretorul o cauta in superclasa clasei si asa mai departe pana la gasirea definitiei metodei.

Problema se complica atunci cand o subclasa defineste o metoda cu acelasi nume, tip de rezultat si argumente care sunt definite si intr-o superclasa.In acest caz se foloseste definitia metodei care este gasita prima (incepand din partea de jos a ierarhiei si mergand in sus).Atfel intr-o subclasa putem crea o metoda cu acelasi nume, tip de rezultat si argumente ca ale metodei din superclasa ; aceasta procedura se numeste anulare prin suprascriere sau simplu suprascriere.

MOSTENIREA SIMPLA SI MULTIPLA

Forma de mostenire folosita in Java este denumita mostenire simpla deoarece fiecare clasa Java poate avea o singura superclasa.

In alte limbaje de programare - si in C++ - clasele pot avea mai multe superclase, mostenind variabile si metode combinate din toate aceste superclase.Aceasta forma de mostenire este denumita mostenire multipla si ofera mijloace de creare a unor clase care cuprind aproape orice comportament imaginabil.Totusi, acest lucru complica mult definitia clasei si a codului necesar pentru producerea acesteia.Java simplifica acest concept permitand doar mostenirea simpla.

INTERFETE

Mostenirea simpla face ca relatiile intre clase si comportamentul pe care aceste clase il implementeaza sa devina usor de inteles si de proiectat. Totusi ea poate fi restrictiva - mai ales atunci cand avem un comportament similar care trebuie duplicat pe diferite ramuri ale ierarhiei de clase.Java rezolva aceasta problema a comportamentului partajat prin folosirea interfetelor.

O interfata este o colectie de metode care indica faptul ca o clasa are un anumit comportament suplimentar fata de ceea ce mosteneste de la superclasele sale.

Tehnic vorbind, o interfata Java nu contine nimic altceva decat definitii de metode abstracte si constante - fara variabile de instanta sau implementari de metode (cuvantul cheie folosit pentru a semnala folosirea unei interfete este implements).

PACHETE

Pachetele in Java reprezinta o modalitate de a grupa clasele si interfetele inrudite. Pachetele permit grupurilor de clase sa fie disponibile doar daca este nevoie de ele, eliminand potentialele conflicte intre numele claselor din diferite grupuri de clase.

Bibliotecile de clase Java sunt continute intr-un pachet denumit java. Clasele din pachetul Java sunt disponibile garantat in orice implementare Java si sunt singurele disponibile in diferite implementari. Pachetul Java contine pachete mai mici care definesc seturi specifice ale caracteristicilor limbajului Java, cum ar fi caracteristicile standard, manipularea fisierelor, multimedia, etc. Clasele din alte pachete, ca sun sau netscape, pot fi disponibile doar in anumite implementari.

In mod prestabilit clasele noastre Java au acces doar la clasele din java.lang (caracteristicile de baza ale limbajului). Pentru a folosi clasele din alte pachete trebuie sa ne referim explicit la numele pachetului sau sa importam clasele in fisierul nostru sursa.

Pentru a ne referi la o clasa din cadrul unui pachet trebuie sa introducem toate pachetele care contin clasa, urmate de numele clasei, elementele fiind separate prin



puncte. De exemplu sa luam clasa Color. Ea este continuta in pachetul awt, care la randul lui este continut in pachetul java.Pentru a referi clasa Color in program trebuie folosita notatia java.awt.Color.

CREAREA UNEI SUBCLASE

Cea mai uzuala folosire a subclasarii este la crearea de applet-uri. Crearea applet-urilor este diferita de crearea aplicatiilor; applet-urile Java ruleaza ca parte a unei pagini web, deci au reguli specifice privind comportamentul lor. Din cauza acestor reguli speciale aplicate applet-urilor, crearea unui applet simplu este mai complicata decat crearea unei aplicatii simple.

Toate applet-urile reprezinta subclase ale clasei Applet (care face parte din pachetul java.applet). Prin crearea unei subclase a clsei Applet vom mosteni automat comportamentul si atributele care permit unui program Java sa ruleze ca parte a unei pagini web.

In continuare vom prezenta un exemplu simplu de applet Java.

Mai intai vom construi definitia clasei:

public class Palindrom extends java.applet.Applet

Aceste instructiuni definesc o clasa Palindrom; singurul lucru nou aparut este textul extends java.applet.Applet.

Clauza extends reprezinta modul prin care se declara o clasa ca fiind o subclasa a alteia. Clasa Palindrom este o subclasa a clasei Applet, care face parte din pachetul java.applet. Pentru a indica in program faptul ca intre cele doua clase exista o relatie se foloseste clauza extends.

Cuvantul cheie public indica faptul ca clasa noastra este accesibila altor clase care ar putea avea nevoie sa o foloseasca. In mod normal, singurul motiv pentru care am avea nevoie sa definim o clasa drept publica este atunci cand dorim ca ea sa fie accesata de catre alte clase din programul nostru. Totusi, in cazul applet-urilor trebuie sa folosim totdeauna declaratia public.

Sa adaugam acum o noua instructiune in program:

Font f=new Font("TimesRoman",Font.BOLD,36);

Aceasta instructiune realizeaza doua lucruri:

-         se creaza un obiect de tip Font, numit f.Font, componenta a pachetului java.awt, este folosit pentru a reprezenta un font pe ecran. Clasa este folosita pentru a afisa un font si un stil diferite de cele folosite implicit de un applet.

-         obiectului Font i se atribuie o valoare de font de 36 de puncte, stil TimesRoman, cu litere aldine. Instructiunea new creaza un nou obiect de tip Font avand valorile specificate in paranteze si care este atribuit variabilei f.

Prin crearea unei variabile de instanta care sa-l contina, am facut obiectul Font disponibil tuturor metodelor din clasa noastra. Urmatorul pas in proiectul nostru este de a crea o metoda care sa-l foloseasca.

Atunci cand scriem applet-uri, exista mai multe metode definite in superclasa Applet, care, de obicei, sunt anulate prin suprascriere. Printre acestea exista metode care configureaza applet-ul inainte de a fi lansat in executie, care lanseaza applet-ul, care raspund la evenimentele mouse-ului sau care elibereaza memoria cand applet-ul isi inceteaza executia.

Una dintre aceste metode este paint(), care se ocupa de orice se intampla cand applet-ul este afisat pe pagina web. Metoda paint() mostenita de clasa Palindrom nu face nimic - este o metoda goala. Prin suprascrierea metodei paint() vom indica ce anume dorim sa fie desenat in fereastra applet-ului, ori de cate ori este nevoie sa se afiseze ceva, atunci cand programul ruleaza.

Sa adaugam la clasa noastra urmatoarele instructiuni:

public void paint(Graphics ecran)

Metoda paint() este declarata public, ca si applet-ul ; acest lucru apare deoarece metoda pe care o suprascrie este si ea publica.O metoda publica apartinand unei superclase nu poate fi suprascrisa decat de o metoda publica, altfel apar erori la compilare.

Metoda paint() preia un singur argument:o instanta a clasei Graphics, denumita ecran.Clasa Graphics se ocupa cu reprezentarea fonturilor, culorilor si desenarea liniilor si altor forme.

In metoda paint() se realizeaza trei lucruri:

-         am indicat obiectului Graphics faptul ca fontul pe care vrem sa-l folosim este cel continut in variabila de instanta f

-         am indicat obiectului Graphics faptul ca culoarea pe care dorim sa o folosim pentru text si alte operatii de desenare este o instanta a clasei Color pentru culoarea rosu (red).

-         in final am scris pe ecran un text la coordonatele x,y egale cu 5 si 40.

La acest moment applet-ul nostru arata astfel:

public class Palindrom extends java.applet.Applet

}

In cazul in care incercam sa compilam acest fisier sursa vom obtine o serie de erori de genul:"Class not found"

Aceste erori apar deoarece clasele Graphics, Font si Color apartin pachetului java.awt, care nu este disponibil implicit.Am referit clasa Applet din prima linie a sursei prin numele sau complet - incluzand si numele pachetului din care face parte.In restul programului am referit insa celelalte clase fara a folosi numele pachetului din care acestea fac parte.

Exista doua metode pentru a rezolva problema:

-         referim toate clasele externe prin numele lor complet, cum ar fi java.awt.Graphics

-         folosim instructiunea import la inceputul programului pentru a face disponibile unul sau mai multe pachete si clase.

Pentru o scriere mai usoara si mai rapida a codului sursa se foloseste de obicei a doua varianta, fapt tradus in programul nostru prin inserarea liniilor:

import java.awt.Graphics;

import java.awt.Color;

import java.awt.Font;

Pentru o si mai mare usurinta putem folosi simbolul "*" in locul unui anumit nume de clasa.Putem astfel folosi instructiunea:

import java.awt.*;

Deoarece fisierul sursa contine o clasa publica, Palindrom, numele fisierului trebuie sa fie identic cu numele clasei publice - cu folosirea corecta a majusculelor si minusculelor.

Pentru a putea vedea ce am realizat trebuie sa cream o pagina web care sa foloseasca applet-ul nostru.

Vom crea o pagina web cu urmatorul continut:

<applet code="Palindrom.class" width=600 height=100>

</applet>

-         atributul CODE indica numele clasei care contine applet-ul

-         atributele WIDTH si HEIGHT determina cat de mare va fi fereastra applet-ului in cadrul paginii web, exprimat in pixeli.

In lipsa unui browser putem folosi pentru a vizualiza pagina noastra utilitarul appletviewer din pachetul JDK, cu sintaxa:

appletviewer Palindrom.html

Acest utilitar, spre deosebire de un browser, va afisa doar applet-urile incluse in pagina web, neafisand nimic altceva continut eventual in pagina.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1326
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved