java – clase si obiecte
DESCRIPTION
Java – Clase si obiecte. Clase descriere tipuri import si pachete metode constructori Obiecte creare utilizare. Clase. 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; - PowerPoint PPT PresentationTRANSCRIPT
Java – Clase si obiecte
Clase descriere tipuri import si pachete metode constructori
Obiecte creare utilizare
Clase
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:
variabile metode initialiari alte clase
variabilele si metodele clasei pot fi: de instanta: fiecare obiect are propriile instante; variabilele de
instanta definesc starea obiectului; statice: comune clasei si tututor instantelor.
Clase - continuare 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: 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 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: 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 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
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.
vizibilitate tip nume_met([lista parametri]) {
corp_1}
Metode -apel
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.
refObiect.nume_met(argumente)
Constructor 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.
public nume_clasa() {...
};
Obiecte - creare obiectele se creeaza cu operatorul new
new realizeaza urmtoarele actiuni: 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
refObiect = new nume_clasa();
Exemplul – 1 / 1
public class Punct {//Variabile de instanta private double x; private double y; private double distanta;
//Constructori Punct() { setX(0); setY(0); distanta = 0; } Punct(double x, double y) { setX(x); setY(y); actualizareDistanta(); } // Metode public void setX(double x0) { x = x0; actualizareDistanta(); }
public void setY(double y0) { y = y0; actualizareDistanta(); }
public double x() { return x; }
public double y() { return y; }
public double distantaOrigine() { return distanta; } private void actualizareDistanta() { distanta = Math.sqrt(x*x+y*y); }
public String toString() { return "<" + x + "," + y + ">"; }}
Creati o aplicatie noua, apoi un proiect nou in JDeveloper. Creati clasa Punct ce contine majoritatea elementelor specifice unei clase simple.
Exemplul - 1 /2In 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 p1 si p2 pe baza clasei Punct.
Rulati apliactia si explicati rezultatele afisate.
public class Grafica { public static void main(String[] args){ Punct p1; Punct p2 = new Punct(-1.,7.); p1 = new Punct(); System.out.println("p1 = " + p1.toString()); System.out.println("p2 = " + p2.toString()); p1.setX(12); p2.setY(13.345); System.out.println("p1 = " + p1.toString()); System.out.println("p2 = " + p2.toString()); }}
Exemplul – 1/3public class Grafica1 { public static void main(String[] args) { double x = 5; PunctOK p1 = new PunctOK(); PunctOK p2 = new PunctOK(-1.,7.); System.out.println("in afara lui dubleazaX x este: " + x); dubleazaX(x); System.out.println("in afara lui dubleazaX x este: " + x); System.out.println("p1 = " + p1); System.out.println("p2 = " + p2); interschimba(p1, p2); System.out.println("p1 = " + p1); System.out.println("p2 = " + p2); schimbaX(p1); System.out.println("p1 = " + p1); }
//modificarea valorii argumentului//NU se reflecta in codul apelant public static void dubleazaX(double a) { a = 2. * a; System.out.println("in dubleazaX x este: " + a); } //metoda de interschimbare NU lucreaza//ca urmare a transferului prin valoare public static void interschimba(PunctOK x, PunctOK y){ PunctOK aux = x; x = y; y = aux; }//lucreaza corect public static void schimbaX(PunctOK x) { x.setX(100); }}
In proiectul ce contine clasele Punct si Grafica creati o noua clasa cu numele Grafica1 si codul alaturat. Rulati noua clasa si explicati rezultatele afisate de aplicatie?
Aplicatia 1/1 Scrieti o aplicatie Java pentru gasirea solutiei unei ecuatii transcendente prin injumatatirea intervalului.public class InjumatatireV2 { private double a, b, x, eps; protected int max_iter;
public double f(double x) { return 4. * Math.sin(x) - x + 1.; } public InjumatatireV2(double st, double dr, double prec) { a = st; b = dr; eps = prec; max_iter = 100; }
public void solverInjumatatire() { 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); }
f(x)=4sin(x)-x+1, x in [-3,3]
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) { InjumatatireV2 sol = new InjumatatireV2(-3.,3., 1.e-07); sol.solverInjumatatire(); }}
Aplicatia 2/1Scrieti o aplicatie Java pentru gasirea solutiei unei ecuatii transcendente prin Newton-Raphson intervalului.
public class NewtonRaphsonV1 { 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 NewtonRaphsonV1(double x0, double prec, int iter) { x = x0; max_iter = iter; eps = prec; }
Aplicatia 2/2public void solverNewtonRaphson() { 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 V1): " + x);
if (Math.abs(aux) >= eps) { System.out.println("Precizia nu e a fot atinsa in " + n + " iteratii"); } } public static void main(String[] args) { NewtonRaphsonV1 sol = new NewtonRaphsonV1(-3.,1.e-07,100); sol.solverNewtonRaphson(); }}
Bibliografie
http://www.east.utcluj.ro/mb/mep/antal/downloads.html > Java: course, IDE (JDeveloper), JDK and JRE, JDeveloper labs.
http://docs.oracle.com/cd/E18941_01/tutorials/jdtut_11r2_50/jdtut_11r2_50.html > Getting Started With the JDeveloper IDE