curs 2_tr var 1

Upload: florin-oprea

Post on 18-Jan-2016

234 views

Category:

Documents


0 download

DESCRIPTION

Curs de java

TRANSCRIPT

Curs 2https://docs.oracle.com/javase/tutorial/java/javaOO/index.htmlhttp://pages.cs.wisc.edu/~cs368-2/JavaTutorial/NOTES/Java-Classes.htmlhttps://www.cs.utexas.edu/~scottm/cs307/codingSamples.htm

Atentie toate temele/aplicatiile se vor trimite la adresa: [email protected]

Tipuri de dateIn Java tipurile de date se impart in doua categorii: tipuri primitive si tipuri referinta.Tipuri primitive aritmetice intregi: byte (1 octet), short (2), int (4), long (8) reale: float (4 octeti), double (8) caracter: char (2 octeti) logic: boolean (true si false)Tipuri de referinta vectorii; clasele; interfetele;Valoarea unei variabile de acest tip este o referinta (adresa de memorie).VariabileVariabilele pot fi de tip primitiv sau referinte la obiecte (tip referinta). Declararea variabilelor: Tip numeVariabila; Initializarea variabilelor: Tip numeVariabila = valoare; Declararea constantelor: final Tip numeVariabila;In functie de locul in care sunt declarate, variabilele se impart in urmatoatele categorii:Variabile membre, declarate in interiorul unei clase;Parametri metodelor, vizibili doar in metoda respectiva;Variabile locale, declarate intr-o metoda, vizibile doar in metoda respectiva.Variabile locale, declarate intr-un bloc de cod, vizibile doar in blocul respectiv.

Definirea claselor in Java este obligatorie definirea a cel putin unei clase (clasa de baza); nu este obligatorie crearea unei instante a clasei de baza, caz in care se vor utiliza date si metode statice.Sintaxa unei clase:[modificator] class NumeClasa{Corpul clasei;}Modificatorii pot fi:- public : poate fi folosita din orice alta clasa, indiferent de pachetul in care se gaseste.- abstract : este incomplet definita ; nu poate fi instantiata, fiind folosita doar pentru a crea un model comun pentru o serie de subclase.- final : nu se mai pot defini subclase.Obs : daca modificatorul lipseste, clasa este implicita si poate fi folosita doar de clasele care se afla in accelasi pachet.Corpul unei clase contine: Declararea si/sau initializarea variabilelor de instanta si de clasa (variabile membre). Declararea si implementarea constructorilor; Declararea si implementarea metodelor de instanta si de clasa (metode membre). Declararea unor clase imbricate (interne).Observatie : implementarea metodei unei clase trebuie sa se faca obligatoriu in corpul clasei.Declararea datelor membreVariabilele membre ale unei clase se declara de obicei inaintea metodelor.O variabila se declara astfel: [modificatori] Tip numeVariabila [ = valoareInitiala ];unde un modificator poate fi : un modificator de acces : public, protected, private unul din cuvintele rezervate: static, final; Static: variabila este de clasa si nu de instanta;static tip variabilaClasa; Final: indica faptul ca valoarea variabilei nu mai poate fi schimbata (declararea constantelor ).final double PI = 3.14 ;Exemplu simplu:public class BicycleDemo { public static void main(String[] args) { // Creeaza doua obiecte de tip Bicycle// Bicycle este tipul zonei de memorie Bicycle bike1 = new Bicycle(); Bicycle bike2 = new Bicycle(); // bike1 numele instantei, new - operatorul de instantiere ,iar Bicycle(); este- constructor implicit; se putea crea obiectul si: Bicycle bike1;As fi putut face definirea si in urmatorul fel:

// Apeleaza metodele pentru aceste obiecte bike1.changeCadence(50); bike1.speedUp(10); bike1.changeGear(2); bike1.printStates(); bike2.changeCadence(50); bike2.speedUp(10); bike2.changeGear(2); bike2.changeCadence(40); bike2.speedUp(10); bike2.changeGear(3); bike2.printStates(); }}class Bicycle { int cadence = 0; int speed = 0; int gear = 1;//atribute//metode void changeCadence(int newValue) {// int newValue parametru formal, care la apelul metodei va fi inlocuit cu parametru efectiv cadence = newValue; } void changeGear(int newValue) { gear = newValue; } void speedUp(int increment) { speed = speed + increment; } void applyBrakes(int decrement) { speed = speed - decrement; } void printStates() { System.out.println("cadenta:"+cadence+" viteza:"+speed+" treapta:"+gear); }}

Constructorii unei clase- sunt metode speciale care au aceelasi nume cu cel clasei, nu returneza nici o valoare si sunt folosite pentru initializarea obiectelor clasei;- o clasa poate avea mai multi constructori care trebuie sa difere prin lista argumentelor;- daca in clasa nu se declara nici un constructor, sistemul ii creaza automat un constructor implicit.

Tipuri de constructori:- fara argumente;- cu argumente;Declararea metodelor:- Metodele sunt responsabile cu descrierea comportamentului unui obiect. - Metodele se pot gasi doar in cadrul claselor. O metoda se declara astfel:[modificatori] TipReturnat numeMetoda ( [argumente] ){// Corpul metodei}unde un modificator poate fi : un specificator de acces : public, protected, private . unul din cuvintele rezervate: static, abstract, final.Unde: static : metoda este de clasa si nu de instanta; abstract : metoda care nu are implementare si trebuie obligatoriu sa faca parte dintr-o clasa abstracta; final : metoda nu mai poate fi supradefinita in subclasele clasei in care a fost definita.Ciclul de viata al unui obiectIn limbajul Java argumentele sunt transmise doar prin valoare- daca argumentul are tip primitiv de date, metoda nu ii poate schimba valoare decat local;- daca argumentul este de tip referinta, metoda nu poate modifica valoarea referintei obiectului. 1. Crearea obiectelorCrearea obiectelor se realizeaza prin instantierea unei clase si implica urmatoarele lucruri: DeclarareaPresupune specificarea tipului acelui obiect, cu alte cuvinte specificarea clasei acestuia NumeClasa numeObiect; InstantiereaSe realizeaza prin intermediul operatorului new si are ca efect crearea efectiva a obiectului cu alocarea spatiului de memorie corespunzator.numeObiect = new NumeClasa();2. Folosirea obiectelorObiectul creat poate fi folosit in urmatoarele sensuri: aflarea unor informatii despre obiect, schimbarea starii sale sau executarea unor actiuni.obiect.NumeVariabila sau obiect.NumeMetoda(argument)Operatorul . (punct) se numeste si operator de dereferentiere.Observatie : programare orientata pe obiecte descurajeaza folosirea directa a variabilelor unui obiect , in schimb, pentru fiecare variabila se pot definii metode care sa permita schimbarea/aflarea valorilor (set_variabila si get_variabila).obiect. x=3; // setare inconstientaobiect.set_x =3; //metode setter3. Distrugerea obiectelor - in limajul Java programele nu mai au responsabilitatea distrugerii obiectelor.- in momentul rularii unui program, ruleaza un proces care se ocupa cu distrugerea obiectelor numit garbage collector (dispus pe platforma de lucru Java).- un obiect este eliminat din memorie atunci cand nu mai exista nici o referinta la acesta.Domeniul de vizibilitate al variabilelor si metodelor memberExista patru niveluri de acces : public, protected, implicit si private.

O variabila/metoda membra de clasa se poate accesa doar daca tipul de clasa este accesibil.a). daca membrul este declarat public se permite accesul de oriunde;b). daca membrul este declarat protected atunci accesul este permis doar daca:- accesul este cerut din pachetul clasei in care este declarat;- accesul apare dintr-o subclasa a clasei.c). daca membrul este declarat private atunci accesul este permis doar in cadrul clasei;d). daca membrul este implicit accesul este permis doar din pachetul in care este declarat tipul.

Aplicatie:Fie pachetul Matematica ce contine clasele complex si dreptunghi

REZULTAT:

Extinderea claselor- Java permite doar mostenirea simpla - o clasa poate avea un singur parinte (superclasa).- o clasa poate avea un numar nelimitat de subclase;- radacina arborelui este clasa Object din pachetul java.langSintaxa extinderii:class clasa1 extends clasa2unde clasa1 este subclasa si clasa2 este superclasa.- relatia de derivare a claselor este tranzitiva.class C1{int x;}class C2 extends C1{int y;}C1 este clasa derivata din clasa Object si este supercalasa pentru clasa C2.Clasa C2 este subclasa directa a clasei C1 si subclasa indirecta a clasei Object.Clasa Object- in limbajul Java, clasa Object este superclasa pentru toate clasele. Clasa Object defineste si implementeaza comportamentul comun al tuturor celorlalte clase Java prin metode specifice: returnarea clasei din care face parte un obiectul curent: getclass( ) reprezentarea obiectiului curent intr-un String:toString( )

exemplu:

class Curs_2 { public static void main(String args[]) { String ob="abc"; System.out.println(ob.getClass()); System.out.println(ob.getClass().getClass()); } }

Constructorii subclaselorInstantierea unui obiect din clasa extinsa implica instantierea unui obiect din clasa parinte. Fiecare constructor al subuclasei trebuie sa aiba un constructor cu aceeasi signatura in parinte sau sa apeleze explicit un constructor al clasei extinse.Apelul explicit al unui constructor din superclasa se realizeaza cu expresia:super([argumente])

Polimorfism

supraincarcarea (overloading) : in cadrul unei clase pot exista metode cu acelasi nume cu conditia ca signaturile lor sa fie diferite. supradefinirea (overriding): o subclasa poate rescrie o metoda a clasei parinte prin implementarea unei metode cu acelasi nume si aceeasi signatura ca ale superclasei.Observatii:- o metoda supradefinita poate sa ignore codul din superclasa sau poate sa il extinda prin expresia super.- o metoda nu poate supradefini o metoda declarata final in clasa parinte.- in Java nu este posibila supraincarcarea operatorilor.Modificatorii de aces- o subclasa mosteneste de la parintele sau toate variabilele si metodele care nu sunt private.

Variabile de instanta si de clasaO clasa Java poate contine doua tipuri de variabile si metode : de instanta: specifice fiecare instante create dintr-o clasa . de clasa: declarate cu modificatorul static, specifice clasei.class Exemplu {int x ; //variabila de instanta};- la fiecare creare a unui obiect al clasei Exemplu sistemul aloca o zona de memorie separata pentru memorarea valorii lui x.Exemplu o1 = new Exemplu();o1.x=100;Exemplu o2 = new Exemplu();o2.x = 200;System.out.println(o1.x); // Afiseaza 100System.out.println(o2.x); // Afiseaza 200 ;- pentru variabilele de clasa (statice) sistemul aloca o singura zona de memorie la care au acces toate instantele clasei respective;- daca un obiect modifica valoarea unei variabile statice ea se va modifica si pentru toate celelalte obiecte;- variabilele statice pot fi referite si sub forma:NumeClasa.numeVariabilaStaticaclass Exemplu {static long n =2; // Variabila de clasa}Exemplu o1 = new Exemplu();Exemplu o2 = new Exemplu();o1.n = 100;System.out.println(o2.n); // Afiseaza 100Metode de instanta si de clasa- metodele declarate fara modificatorul static sunt metode de instanta iar cele declarate cu static sunt metode de clasa.Diferente intre cele doua tipuri de metode: metodele de instanta opereaza atat pe variabilele de instanta cat si pe cele statice ale clasei; metodele de clasa opereaza doar pe variabilele statice ale clasei.

//import java.util.Scanner;

//clasa Test_punct

Tablouri- tabloul este un obiect creat dinamic care poate fi assignat variabilelor de tip Object;- toate elementele unui tablou au aceelasi tip;Declararea vectorului Se realizeaza prin expresii de forma:Tip[] numeVector; Tip numeVector[];Exemplu:int[] intregi;String adrese[];- delararea unui tablou nu creaza obiectul tablou si nici nu aloca spatiu de memorie pentru componente;Instantierea unui tablouOperatia de alocare a memoriei se realizeaza prin intermediul operatorului newnumeVector = new Tip[nrElemente];- in urma instantierii vor fi alocati: nrElemente * dimensiune(Tip) octeti necesari pentru memorarea elementelor din vector;v = new int[10];//aloca spatiu pentru 10 intregi: 40 octetic = new char[10];//aloca spatiu pentru 10 caractere: 20 octetiIntializarea (optional) - dupa declararea unui vector, acesta poate fi initializat, caz in care nu mai este instantiat (alocarea memoriei se realizeaza automat).String culori[] = {"Rosu", "Galben", "Verde"};int []factorial = {1, 1, 2, 6, 24, 120};Tabluri mutidimensionali- tablourile multidimensionale sunt vectori de vectori;Tip matrice[][] = new Tip[nrLinii][nrColoane];- matrice[i] este linia i din matrice si reprezinta un vector cu nrColoane elemente.Operatii asupra unui tablou- dimeniunea unui tablou se poate calcula cu ajutorul variabilei length.int []a = new int[5];// a.length are valoarea 5int m[][] = new int[5][10];// m[0].length are valoarea 10- copierea unui vector se poate realiza fie element cu element, fie cu ajutorul metodei System.arraycopyint a[] = {1, 2, 3, 4};int b[] = new int[4];for(int i=0; i