Java Clase si obiecte Clase n n n
Java – Clase si obiecte Clase n n n descriere tipuri import si pachete metode constructori Obiecte n n creare utilizare
Clase n n n se declara folosind cuvantul cheie class; corpul clasei se scrie intre acolade { … }; dupa ce clasa a fost definita, se pot crea obiecte pe baza ei; obiectul reprezinta o instantiere a clasei clasa poate sa contina: n n n variabile metode initialiari alte clase variabilele si metodele clasei pot fi: n n de instanta: fiecare obiect are propriile instante; variabilele de instanta definesc starea obiectului; statice: comune clasei si tututor instantelor.
Clase - continuare n n metoda main() este punctul de intrare intr-o aplicatie Java; trebuie sa fie publica pentru a putea fi apelata de Masina Virtuala Java (MVJ); este statica si nu necesita crearea unei instante de clasa; persistenta variabileleor din clase sau metode poate fi: n n membru: creata si la crearea instantei si distrusa la distrugerea obiectului automata (locale in metoda): create la intrarea in metoda (prin apel) si pastrata atat timp cat metoda se ruleaza; clasa (sau statica): creata la incarcarea clasei de MVJ si distrusa la descarcarea clasei. modificatorii de acces la clasa se scriu inainte de declaratia de clasa (public, protected si private) si controleaza vizibilitatea clasei.
Tipuri de clase n n n clasa se pot declara ca si subclasa unei alte clase prin folosirea cuvantului cheie extends; prin subclasare se formeaza ierarhii de clase; cel mai inalt nivel in ierarhie se numeste superclasa sau clasa de baza; subclasa mosteneste toate variabilele si metodele (ce nu sunt private) superclasei pe care o extinde; o clasa poate extinde sau mosteni o singura superclasa; subclasa adauga superclasei noi variabile si metode; clasele de baza din Java sunt din urmatoarele categorii: n n n publice: clase care sunt vizibile pentru alte clase indiferent de pachet; toate clasele sunt extensia clasei Object in Java; abstracte: o clasa ce este implementata incomplet (are metode abstracte); din acest motiv nu poate fi instantiata si trebuie extinsa de subclase finale: o clasa care nu poate avea subclase.
Import si pachet n n n codul Java este organizat in pachete; numele de pachete sunt utilzate de MVJ pentru identificarea si controlul accesului la obiecte; pachetul contine diferite tipuri de clase; numele publice dintr-un pachet trebuie sa fie unice; pachetele sunt organizate ierarhic si stocate utilizand directori si fisiere; in cod, numele unei clase trebuie scris complet sub forma numepachet. numesubpachet; importul defineste procesul de aducere intr-un spatiu intern a ceva din cel extern; procedura de import permire ca in locul numelui complet, in cod, sa se foloseasca doar numesubpachet; codul poate sa nu aiba un nume de pachet, insa atunci nu poate contine subpachete si va fi stocat intr-un singur director, dar in fisirere distincte (fiecare clasa e un fisier); bibliotecile de clase standard (java. lang, java. util, java. io, java. net, java. awt, java. swing) Java se pot folosi de programator prin import.
Metode definitie n n n vizibilitate tip nume_met([lista parametri]) { corp_1 } metoda implementeaza o operatie cu datele obiectului se implementeaza sub forma unor proceduri sau functii (acestea întorc valori cu return) ce realizeaz anumite operatii se definesc numai într-o declaratie de clasa; tip - defineşte tipul de date întors de metoda; nume_met - defineşte numele metodei ; [lista parametri] - o secventa opionala de perechi tip nume separate prin virgule; vizibilitatea defineste cine anume poate apela metoda; pentru public acesta este apelabila in toata aplicatia, pentru private numai de alte metode din clasa în care s-a definit. daca metoda întoarce valoare (este functie), ea va avea specificat unul dintre tipurile deja discutate şi o instruciune de salt neconditionat return expresie ca va genera întoarcerea în codul apelant cu valoarea lui expresie. daca metoda nu întoarce valoare (este procedura), tipul ei este obligatoriu void şi nu contine instructiunea return.
Metode - ref. Obiect. nume_met(argumente) apel n n n sintaxa generala pentru apelul unei metode este data mai sus; aplelul este o instructiune de salt ce are ca efect rularea codului din corpul metodei; parametrii din definitia de metoda sunt variabile ce primesc valori în momentul apelului şi se numesc argumente; valorile parametrilor ce sunt tipuri de date primitive se transfera printr-o metoda numita transfer prin valoare; la transferul prin valoare, metodei, i se transfer o copie a valorilor parametrilor din programul apelant; ca urmare modificarea lor in metoda nu afecteaza valorile originale; in cazul parametrilor de tipul referinta la obiect se poate modifica starea obiectului utilizând metodele puse la dispozitie în acest scop, dar nu se pot modifica referintele argumentelor de tipul referinta la obiect în corpul metodei.
Constructor n n n n public nume_clasa() {. . . }; defineşte starea initiala a obiectelor; are acelaşi nume cu clasa; este apelat automat dupa crearea obiectului, înainte ca operatorul new sa se termine; nu întorc o valoarea de un anumit tip (nu se scrie nici macar void); sintactic sunt identice cu metodele (pot avea parametri); este posibil sa nu aiba parametri; daca nu este scris explicit in cod, compilatorul creeaza automat unul implicit constructorii nu se mostenesc, trebuie definiti pentru fiecare subclasa; un constructor poate apela un altul, dein aceeasi clasa, folosind sintaxa this(argumente); constructorii supercalsei se pot apela foloind sintaxa super(argumente) iar acest apel trebuie sa fie prima linie din constructor; constructorii pot fi supraincarcati.
Obiecte - creare n obiectele se creeaza cu operatorul new ref. Obiect = new nume_clasa(); n new realizeaza urmtoarele actiuni: n n aloca memorie pentru nou obiect; apeleaza o metoda speciala de initializare numita constructor; întoarce o referinta la noul obiect (ce trebuie obligatoriu stocata intr-o variabila referinta la obiect sau, mai pe scurt, referinta, pentru a putea lucra cu obiectul pe mai departe). variabila referinta la obiect se foloseste pentru a referi (accesa) obiectul; ea trebuie sa fie declarata de un anumit tip (clasa) ce nu se poate schimba dar poate referi orice subtip (subclasa) a tipului
Exemplul – 1 / 1 Creati o aplicatie noua, apoi un proiect nou in JDeveloper. Creati clasa Punct ce contine majoritatea elementelor specifice unei clase simple. public class Punct { //Variabile de instanta private double x; private double y; private double distanta; //Constructori Punct() { set. X(0); set. Y(0); distanta = 0; } Punct(double x, double y) { set. X(x); set. Y(y); actualizare. Distanta(); } // Metode public void set. X(double x 0) { x = x 0; actualizare. Distanta(); } public void set. Y(double y 0) { y = y 0; actualizare. Distanta(); } public double x() { return x; } public double y() { return y; } public double distanta. Origine() { return distanta; } private void actualizare. Distanta() { distanta = Math. sqrt(x*x+y*y); } public String to. String() { return "<" + x + ", " + y + ">"; } }
Exemplul - 1 /2 In proiectul ce contine clasa Punct creati o noua clasa cu numele Grafica si codul alaturat. Observati ca aceasta clasa are doar o metoda main() din care se foloseste pentru crearea de doua obiecte p 1 si p 2 pe baza clasei Punct. Rulati apliactia si explicati rezultatele afisate. public class Grafica { public static void main(String[] args){ Punct p 1; Punct p 2 = new Punct(-1. , 7. ); p 1 = new Punct(); System. out. println("p 1 = " + p 1. to. String()); System. out. println("p 2 = " + p 2. to. String()); p 1. set. X(12); p 2. set. Y(13. 345); System. out. println("p 1 = " + p 1. to. String()); System. out. println("p 2 = " + p 2. to. String()); } }
Exemplul – 1/3 public class Grafica 1 { public static void main(String[] args) { double x = 5; Punct. OK p 1 = new Punct. OK(); Punct. OK p 2 = new Punct. OK(-1. , 7. ); System. out. println("in afara lui dubleaza. X x este: " + x); dubleaza. X(x); System. out. println("in afara lui dubleaza. X x este: " + x); System. out. println("p 1 = " + p 1); //modificarea valorii argumentului System. out. println("p 2 = " + p 2); //NU se reflecta in codul apelant interschimba(p 1, p 2); public static void dubleaza. X(double a) { System. out. println("p 1 = " + p 1); a = 2. * a; System. out. println("p 2 = " + p 2); System. out. println("in dubleaza. X x este: " + a); } schimba. X(p 1); //metoda de interschimbare NU lucreaza System. out. println("p 1 = " + p 1); //ca urmare a transferului prin valoare } public static void interschimba(Punct. OK x, Punct. OK y){ Punct. OK aux = x; x = y; In proiectul ce contine clasele Punct si y = aux; } Grafica creati o noua clasa cu //lucreaza corect public static void schimba. X(Punct. OK x) { numele Grafica 1 si codul alaturat. x. set. X(100); Rulati noua clasa si explicati rezultatele } afisate de aplicatie? }
Aplicatia 1/1 f(x)=4 sin(x)-x+1, x in [-3, 3] Scrieti o aplicatie Java pentru gasirea solutiei unei ecuatii transcendente prin injumatatirea intervalului. public class Injumatatire. V 2 { private double a, b, x, eps; protected int max_iter; public double f(double x) { return 4. * Math. sin(x) - x + 1. ; } public Injumatatire. V 2( double st, double dr, double prec) { a = st; b = dr; eps = prec; max_iter = 100; } public void solver. Injumatatire() { int n = 0; while ((Math. abs(b - a) > eps) && (n++ < max_iter)) { x = (a + b) / 2. ; if (f(x) == 0) { System. out. println("Radacina este: " + x); System. exit(0); }
Aplicatia 1/2 if (Math. signum(f(a)) * Math. signum(f(x)) > 0) a = x; else b = x; } if (Math. abs(b - a) > eps) System. out. println("Precizia nu e a fot atinsa in " + (n-1) + " iteratii"); else System. out. println("Radacina aprox. (cu Inj): " + x); } public static void main(String[] args) { Injumatatire. V 2 sol = new Injumatatire. V 2(-3. , 1. e-07); solver. Injumatatire(); } }
Aplicatia 2/1 Scrieti o aplicatie Java pentru gasirea solutiei unei ecuatii transcendente prin Newton-Raphson intervalului. public class Newton. Raphson. V 1 { private double x, eps; private int max_iter, n; private double f(double x) { return 4. * Math. sin(x) - x + 1. ; } private double fderivat(double x) { final double h = 0. 001; return (f(x + h) - f(x)) / h; } public Newton. Raphson. V 1( double x 0, double prec, int iter) { x = x 0; max_iter = iter; eps = prec; }
Aplicatia 2/2 public void solver. Newton. Raphson() { double aux; do { aux = f(x) / fderivat(x); x -= aux; ++n; } while ((Math. abs(aux) > eps) && (n <= max_iter)); System. out. println("Radacina aprox. (cu N-R V 1): " + x); if (Math. abs(aux) >= eps) { System. out. println("Precizia nu e a fot atinsa in " + n + " iteratii"); } } public static void main(String[] args) { Newton. Raphson. V 1 sol = new Newton. Raphson. V 1(-3. , 1. e-07, 100); solver. Newton. Raphson(); } }
Bibliografie n n http: //www. east. utcluj. ro/mb/mep/antal/downloads. html > Java: course, IDE (JDeveloper), JDK and JRE, JDeveloper labs. http: //docs. oracle. com/cd/E 18941_01/tutorials/jdtut_11 r 2_50/jdtut_11 r 2 _50. html > Getting Started With the JDeveloper IDE
- Slides: 17