Sunteți pe pagina 1din 5

Curs 2 POO Calc. 2, 12.10.

2021

Operatorul + este folosit , in cazul stringurilor , pentru concatenare.

String s1="Ionescu";
String s2="Ion";
//nume Complet: Ionescu Ion
String numeComplet=s1+" "+s2;
System.out.println(numeComplet);

Operatorul +: daca unul dintre operanzi este String iar celalat nu este, il va
converti de asemenea la String, si va face concatenarea intre doua Stringuri. Ex:
Ex: 12 ---> "12"

Scanner sc=new Scanner(System.in);


System.out.print("nr="); int nr=sc.nextInt();
//Numarul introdus este: ...
System.out.println("Numarul introdus este: "+nr);

Deci, putem folosi operatorul + pentru a converti numere (int, double ) de la tipul
numeric la
tipul String.
int nr=123;
String s_nr=""+nr;

double x=3.123;
String s_x=""+x;

Conversia inversa de la String la int se face folosind clasa Integer si metoda


parseInt(), astfel:
String s="123";
int nr=Integer.parseInt(s);

double x=Double.parseDouble("12.45");//x=12.45

Specificatori de acces
Principiul incapsularii in POO:
datele (var. de instanta, proprietati, atribute) si metodele pot fi accesate
din afara clasei controlat de specificatori de acces.
Acestia sunt:
1. private
Membrii private nu pot fi accesati den afara clasei (ei pot fi accesati doar in
clasa respectiva)
Ex:
private int raza;
2. public
public int raza;
Membrii public pot fi accesati si din afara clasei (ei pot fi accesati si din clasa
respectiva, dar si din afara ei)
Nu se acceseaza insa direct !
Cum se acceseaza din afara clasei:
Sunt doua cazuri:
A.
Daca membrul clasei (var. de instanta sau metoda ) este si static atunci el se
acceseaza folosind sintaxa:
numeClasa.numeMembru

Exemplu: metoda parseInt() din clasa Integer are semnatura urmatoare:


public static int parseInt(String s)
int rezultat=Integer.parseInt("123");

B.
Daca membrul clasei nu este static, dar este public, accesul se face in doi pasi:
- creem (instantiem) obiect din clasa respectiva , cu operatorul new
- folosim sintaxa: obiect.numeMembru
Ex: vreau sa apelez metoda nextInt() din clasa Scanner: (public int nextInt() )
Scanner sc=new Scanner(System.in);
int nr=sc.nextInt();

Este gresit apelul: int nr=nextInt();

3. protected (este legat de conceptul de mostenire)


Ex: protected int raza;
Un membru protected poate fi accesat (nu direct !) din orice clasa ce face parte
din acelasi
package (pachet) cu clasa lui SI poate fi accesat din orice subclasa (clasa
derivata) a clasei lui, chiar daca
subclasa este in alt pachet

4. accesul implicit ( nu este niciun cuvant cheie)


Exemplu:
int raza;
Este acces la nivel de package (poate fi accesat din orice clasa ce face parte
din acelasi
package )

ALT EXEMPLU DE CLASE CE CONTIN DOAR METODE


Vrem sa vedem cum se apeleaza dintr-o metoda a unei clase o alta metoda
OBSERVATIE:
In cadrul aceleasi clasa, dintr-o metoda statica a clasei, pot sa apelez dor
metode statice din aceeasi clasa (Evident, putem apela dintr-o metoda statica,
metode ne-statice dar ale altor clase)

Rescriem aplicatia ce calculeaza divizorii unui numar folosind o metoda separata


ce-i calculeaza si afiseaza:
import java.util.*;//nu e clasa !
class Divizori{

public static void main(String args[]){


int nr;
Scanner sc=new Scanner(System.in);
nr=sc.nextInt();
afisareDivizori(nr);//apel ca in lb. C
}

private static void afisareDivizori(int nr){


int i;
for(i=1;i<=nr;i++)
if(nr%i==0)System.out.println(i);
}

Alt exemplu:
Citim un numar intreg. Sa afisam daca este patrat perfect sau nu.
Vom folosi pe langa main() si o alta metoda ce verifica daca un nr este patrat
perfect.
Obs:
Tipurile primitive de date in Java: int, float , double , char (ca si in C ).
In plus este si tipul de date: boolean ce are doua valori: true si false .

Obs.
Pentru a extrage radicalul dintr-un numar , se foloseste metoda statica sqrt() , ce
face
parte din clasa Math.
Ex. de apel: radical(2) = ?
double rezultat=Math.sqrt(2);

import java.util.*;
class PatratPerfect{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
System.out.print("nr=");
int nr=sc.nextInt();
boolean rezultat=estePatratPerfect(nr);
if(rezultat==true)System.out.println("este");
else System.out.println("nu este");
}
private boolean estePatratPerfect(int x){
int radical=(int)Math.sqrt(x);//in Java, obligatoriu operatorul de fortare de
tip
// cand convertim nr real la integer.
if(radical*radical==x)return true;
else return false;
}
}

CLASE CARE CONTIN DOAR DATE (NU AU METODE)


Sunt echivalentul tipului de date struct din lb. C.
Datele, pentru a putea fi accesate din afara clasei, nu trebuie sa fie private !

Scriem clasa Punct, ce modeleaza un punct in plan:


class Punct{
public int x;
public int y;
}

class TestPunct{
public static void main(String args[]){
//Vrem sa initializam (instantiem) un punct din clasa Punct .cu coordonatele
(3,4) si sa-i calculam
// distanta fata de origine
// x=3; y=4; EROARE DE SINTAXA
//Creem obiect Punct:
Punct p=new Punct();
p.x=3;
p.y=4;
double dist=Math.sqrt(x*x+y*y);
System.out.println(dist);
}
}

Scriem clasa Patrat ce are si date si metode.


- latura : var. de instanta
Se recomanda ca var. de instanta sa fie private si accesul la ele prin metode
publice
Metode:
arie()
afisare()

class Patrat{
private int a;
// pt a seta din afara clasei var. de instanta:
public void set(int a){
this.a=a; //this: o referina pt. obiectul curent
}
//pt a afla cat este a , din afara clasei:
public int get(){
return a;
}
public int arie(){
return a*a;
}

public void afisare(){


System.out.println("a="+a);
}
}

Obs: var. de instanta sunt variabile GLOBALE pe clasa .

class TestPatrat{
public static void main(String args[]){
//creem un patrat cu latura 3.
// Sa-i afisam aria.
Patrat p=new Patrat();
// p.a=3; GRESIT ! Pt ca a este private ! Nu pot s-o accesez din afara !
p.set(3);
double rez=p.arie(); System.out.println("aria="+rez);
//apel afisare():
p.afisare();
}
}

Constructor: ma ajuta sa nu uit de initializarea var. de instanta !

La instantiere obiect se apeleaza automat constructorul

class Patrat{
private int a;
public Patrat(int a){
this.a=a;
}
// pt a seta din afara clasei var. de instanta:
public void set(int a){
this.a=a; //this: o referina pt. obiectul curent
}
//pt a afla cat este a , din afara clasei:
public int get(){
return a;
}
public int arie(){
return a*a;
}

public void afisare(){


System.out.println("a="+a);
}
class TestPatrat{
public static void main(String args[]){
//creem un patrat cu latura 3.
// Sa-i afisam aria.
// Patrat p=new Patrat(); GRESIT
Patrat p=new Patrat(3);
double rez=p.arie(); System.out.println("aria="+rez);

//modific latura:
p.set(5);
//apel afisare():
p.afisare();
}

S-ar putea să vă placă și