referat, referate , referat romana, referat istorie, referat geografie, referat fizica, referat engleza, referat chimie, referat franceza, referat biologie
 
Informatica Educatie Fizica Mecanica Spaniola
Arte Plastice Romana Religie Psihologie
Medicina Matematica Marketing Istorie
Astronomie Germana Geografie Franceza
Fizica Filozofie Engleza Economie
Drept Diverse Chimie Biologie
 

Implementarea bibliotecilor in java

Categoria: Referat Informatica

Descriere:

Trei dintre aceste metode sunt publice si pot fi suprascrise de orice instante obiect, in timp ce doua metode sunt protejate si din acest motiv trebuie declarate publice in momentul in care sunt suprascrise. Vom analiza pe rand aceste metode:...

Varianta Printabila 


1 IMPLEMENTAREA BIBLIOTECILOR
ĪN JAVA


Construirea de biblioteci abstracte (clase si  pachete de clase) este o parte  importanta in dezvoltarea aplicatiilor  Java si nu numai. Voi incerca prin  articolele acestei rubrici  sa va trezesc curiozitatea privind modalitatile de  abstractizarea  a datelor si construirea de noi biblioteci de date abstracte.  Toate  aplicatiile existente in numerele anterioare ale revistei (nr. 1  - 21)  folosesc caracteristici si clase existente in Java care  sunt puse la dispozitie  de bibliotecile standard (java.util, java.awt,  etc.). Pentru inceput voi  prezenta cateva lucruri de baza in realizarea  unor biblioteci abstracte de date,  urmand ca in articolole viitoare  sa trecem la implementarea unei clase  abstracte.

Metode  mostenite din Clasa Object

      Clasa  Object declara  un numar de metode care pot fi suprascrise de subclase ale ei  (acesta  inseamna ca in orice aplicatie putem suprascrie aceste metode).  Cand  implementam o clasa trebuie sa tinem cont de unele aspecte  legate de obiectele  instanta (cum trebuie copiate <cloned>comparate,  sterse, afisate sub forma unui  String). Putem suprascrie aceste  metode atunci cand comportamentul lor implicit  nu satisface cerintele  programului. Urmatoarele metode pot fi supraincarcate: <xmp>public  boolean equals(Object obj); public String toString(); public final  native int hashCode(); protected native Object clone(); protected  void finalize();</xmp>      Obs: obiectele de tip array permit  de asemenea suprascrierea acestor  metode.
      Trei dintre  aceste metode sunt publice si pot fi suprascrise  de orice instante  obiect, in timp ce doua metode sunt protejate si din acest  motiv  trebuie declarate publice in momentul in care sunt suprascrise.  Vom  analiza pe rand aceste metode:

boolean equals(Object  obj)

      Metoda folosita pentru a compara doua  obiecte (obiectul pentru  care se apeleaza metoda si obiectul transmis  ca parametru). Metoda implicita  oferita de clasa Object returneaza  true daca cele doua obiecte reprezinta de  fapt acelasi obiect,  folosindu-se operatorul == . Ramane in sarcina  programatorului  sa decida cum se compara doua obiecte ale aceleeasi clase.
       Documentatia JDK defineste un set riguros de reguli ce trebuie  avute in  vedere atunci cand se doreste stabilirea egalitatii intre  boua obiecte. Metoda  equals implementeaza o relatie de echivalenta:
•    Este reflexiva ;
•    Este simetrica;
•    Este tranzitiva;
String toString()
      Metoda  returneaza  o reprezentare de tip String pentru obiectul care o apeleaza.  Implicit  returneaza un Sring sub forma:
      ClassName @ 1cc7a0,  adica  numele clasei urmat de caracterul @ si apoi o valoare in  hexa a codului hash.  Pentru a genera o reprezentare mult mai utila  putem supraincarca acesta metoda  si returna orice String care  sa ne ofere informatii despre obiect.

int hashCode()

     

1 Un hash cod este o valoare intreaga  ce reprezinta  intreaga valoare a unui obiect. Codurile hash sunt folosite drept  chei in tabelele de dispersie asa cum este implementata clasa  HashTable din  pachetul java.util. Versiunea implicita a metodei  va incerca sa genereze un cod  pentru fiecare obiect dar se poate  ca la un moment dat sa genereze valori  diferite pentru un acelasi  obiect. Daca se intampla acest lucru atunci trebuie  sa suprascriem  metoda pentru a implementa o noua functie de dispersie (hash  function)  care va genera codurile hash corecte.
      De fiecare data  cand  este invocata metoda hashCode asupra aceluiasi obiect ea  trebuie sa returneze in  mod constant aceeasi valoare intreaga.  Daca doua obiecte sunt egale conform  metodei equals, atunci apeland  metoda hashCode pentru fiecare din cele doua  obiecte trebuie sa  obtinem acceasi valoare intreaga.
      Programatorii se  bazeaza de obicei pe implementarea implicita a metodei hashCode  decat sa  implementeze o noua versiune (ceea ce poate duce la o  munca destul de dificila).

object clone()

       Metoda va crea o copie a obiectului.  Implicit doar obiectul  curent este copiat si nu si celelalte obiecte spre care  acesta  poate avea referinte. Valorile primitive in Java sunt intotdeauna  copiate. Metoda suprascrisa trebuie declarata public. Daca un  obiect nu poate fi  clonat va fi aruncata exceptia : CloneNotSupportedException.

void  finalize()

      Acesta metoda  este apelata automat de colectorul de  gunoaie (garbage collector)  cand un obiect nu mai este referentiat si poate fi  sters din memorie.  Varianta implicita nu contine nici o instructiune in corpul  metodei.  Colectorul de gunoaie poate rula oricand, astfel incat nu se poate  determina cu exactitate cand va fi apelata metoda finalize. Putem  supraincarca  acesta metoda in cazul in care de exemplu anumite  date trebuie salvate intr-un  fisier inainte de a fi pierdute sau  o conexiune pe retea trebuie inchisa.
       Daca apare  o eroare metoda poate folosi in declaratie si clauza throw,  aruncand  o exceptie de tipul Throwable. Daca acesta exceptie este aruncata  atunci ea va fi prinsa de colectorul de gunoaie si ignorata, lasand  programul  sa-si desfasoare executia pana la final.
       Cam atat cu teoria !!! :-) Sa  trecem la fapte, adica sa discutam  pe exemple concrete:
      Presupun  cunoscut modul cum  se compileaza programele in Java si cum se ruleaza. Pentru  incepatori  recomand cartea Thinking in Java (Second Edition) de Bruce Eckel,  care poate fi download-ata de pe site-ul autorului: www.bruceeckel.com).  Incepem  cu implementarea clasei ObjectMethods.java: <xmp>import  java.util.Date; class ObjectMethods //extinde implicit clasa Object {  public ObjectMethods(int a, Date b, String[]c)  //constructor cu  parametri  { i = a; d = b; s = c;  }  private ObjectMethods()  //constructor fara parametri  {}  public boolean equals(Object  obj)  //mostenita din Object si suprascrisa  {  if (this ==  obj) return true;  if ((obj == null) ||  !(obj instanceof ObjectMethods))  return false;  ObjectMethods tmp = (ObjectMethods)obj;  if  (i != tmp.i) return false;  if (!d.equals(tmp.d)) return false;  if (s.length != tmp.s.length) return false; /* Un sir este  un obiect. Apeland == sau equals se va verifica doar daca doua  referinte indica acelasi obiect; de aceea un ciclu este necesar pentru  a parcurge toate elementele vectorului si ale compara. */ for(int  i = 0;i<s.length i if s i equals tmp.s i return false return true/gereram aici o reprezentare o  obiectului //sub forma de String public String toString() { StringBuffer  sb = new StringBuffer(); sb.append("i= "+i+", "); sb.append("d= "+d+", "); sb.append("s= "); for(int  i=0;i<s.length i sb.append s i quot quot return sb.tostring public object clone/realizeaza o copie  exacta o obiectului { ObjectMethods tmp = new ObjectMethods(); tmp.i  = i; //nu putem clona un obiect de tip Date(), asa //ca vom  crea un nou obiect initializat //cu valoarea lui d tmp.d =  new Date(d.getTime()); tmp.s = new String[s.length]; for(int  i = 0;i < s.length;i++) { tmp.s[i] = new String(s[i]); } return  tmp; } public void finalize() { for(int i=0;i/true System.out.println(a.equals(b)); //false System.out.println(b.equals(a)); //false System.out.println(b.equals(b)); //true System.out.println(a); System.out.println(b); b  = null; ObjectMethods c = (ObjectMethods)(a.clone()); System.out.println(a.equals(c));//true System.out.println(c.equals(a));//true System.out.println(a); System.out.println(c); //modific  obiectul c (obiectul a //nu se modifica!!!!!)) c.modify(22); System.out.println("NEW  c:"+c); System.out.println(" a:"+a); ObjectMethods  m ;//= new ObjectMethods m = a; //m este referinta la a : daca //modific  m se modifica si a !!!!!!! m.modify(99); System.out.println("m: "+m); System.out.println("a: "+a); System.out.println("NEW  m:"+m); System.out.println("New a:"+a); } }</xmp>
Referat oferit de www.ReferateOk.ro
Home : Despre Noi : Contact : Parteneri  
Horoscop
Copyright(c) 2008 - 2012 Referate Ok
referate, referat, referate romana, referate istorie, referate franceza, referat romana, referate engleza, fizica