0% found this document useful (0 votes)
4 views48 pages

C02

The document provides an overview of data types, control structures, constants, comments, and object-oriented programming in Java. It covers primitive data types, wrapper classes, and the String class, including methods for string manipulation and comparison. Additionally, it discusses object reference types and includes an example of a registration form application with validation rules.

Uploaded by

birlea24
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views48 pages

C02

The document provides an overview of data types, control structures, constants, comments, and object-oriented programming in Java. It covers primitive data types, wrapper classes, and the String class, including methods for string manipulation and comparison. Additionally, it discusses object reference types and includes an example of a registration form application with validation rules.

Uploaded by

birlea24
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 48

Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Programare Orientată Pe Obiecte


Curs 2
Tipuri de date, structuri de control s, i operatori ı̂n Java
Clase şi Obiecte: constructori s, i metode

Octombrie 2024

1/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Agenda

1 Tipuri de date ı̂n Java

2 Operatori s, i structuri de control

3 Constante, comentarii, documentat, ie ı̂n JAVA

4 Clase s, i Obiecte

2/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Tipuri de date ı̂n Java

3/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Tipuri de date ı̂n JAVA

4/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Tipuri de date primitive ı̂n JAVA

5/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Tipuri de date primitive s, i clase ı̂nvelitoare


Clasele ı̂nvelitoare sunt clasele care ı̂ncapsulează tipurile primitive,
astfel ı̂ncât să se poată manipula ca nis, te obiecte s, i pentru a le putea
‘atas, a’ metode (ı̂n special cu rol de conversie)
Exista o clasa wrapper pentru fiecare tip primitiv !

6/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Clase ı̂nvelitoare
Boxing s, i unboxing

Boxing (ı̂mpachetare): procesul


de trecere de la o valoare import java.util.ArrayList;
public class DemoBoxing {
primitivă la un obiect al clasei public static void main(String
sale ı̂nvelitoare. [] args) {
Integer a = 10;
int i = 288; System.out.println(a);
Integer iw = new Integer(i); ArrayList<Integer> lst = new
ArrayList<Integer>();
Unboxing (despachetare): lst.add(20);
lst.add(a);
procesul de trecere de la un System.out.println(lst);
obiect al unei clase ı̂nvelitoare la int b = lst.get(0);
valoarea corespunzătoare a unui System.out.println(b);
}
tip primitiv }
int uw = iw.intValue();

7/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Clase ı̂nvelitoare
Boxing şi Unboxing automat

class WrapperDemo{
WrapperDemo(){}
void takeNumber(Integer i){System.out.println("i este " + i);}
int giveNumber(){ Integer a = 20; return a; }
}
public class WrapperExamples{
public static void main(String args[]){
WrapperDemo w = new WrapperDemo();
//argumente pentru metode
w.takeNumber(12);
//valori returnate
int x = w.giveNumber();
System.out.println("x " + x);
Boolean b = true;
if (b) {System.out.println("true");} //Expresii boolean
Integer a = 23;
a++; // Operatii cu numere
System.out.println("a este " + a);
Double j = 1098.2;
Double k = j + 2; //Atribuiri
System.out.println("k este "+ k);
} 8/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Verificarea egalităt, ii s, i constantele ı̂n clasele ı̂nvelitoare

Pentru a verifica dacă două variabile de tip referint, ă au aceeas, i valoare,


vom folosi metoda equals():
Integer i1 = 42; // impachetare automata
Integer i2 = 42; // impachetare automata
if (i1 != i2) // nu este garantat ca sunt diferite
System.out.println("obiecte diferite");
if (i1.equals(i2)) // garantat ca sunt identice!
System.out.println("Variabile cu valori egale");

Constante pentru valori maxime şi minime pentru tipurile primitive:


Integer.MAX_VALUE, Integer.MIN_VALUE, Double.MAX_VALUE, Double.
MIN_VALUE, etc.

Clasa Boolean are nume pentru două constante de tipul Boolean:


Boolean.TRUE şi Boolean.FALSE sunt obiectele booleene corespunzătoare
valorilor true şi false ale tipului primitiv boolean.

9/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Clasa String
Nu există un tip primitiv pentru şiruri ı̂n Java; Clasa String este o
clasă Java predefinită folosită la stocarea şi prelucrarea şirurilor de
caractere
Obiectele de tipul String sunt compuse din şiruri de caractere scrise
ı̂ntre ghilimele; Orice şir scris ı̂ntre ghilimele este de clasă String:
”Curs de POO”
Metode de creare a unui String ı̂n Java:
String s1 = "CursJAVA";
String s2 = new String ("Curs");

Concatenarea stringurilor se realizează folosind operatorul +


String s1 = "Buna ziua, ";
String s2 = "colegi";
String s3 = s1 + s2 // "Buna ziua, colegi"

Orice număr de şiruri pot fi concatenate;


La combinarea unui şir de caractere cu aproape orice alt tip,
rezultatul este un şir de caractere
String s3 = "valoarea este " + 42 10/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Metodele clasei String

O metodă a clasei String se apelează prin numele unui obiect String,


un punct, numele metodei şi o pereche de paranteze ı̂ntre care sunt
cuprinse argumentele (dacă sunt)
Poziţia sau indexul unui caracter ı̂ntr-un şir se numără ı̂ntotdeauna de
la zero
Lungimea s, irului s: int i = s.length()

11/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Clasa String
Metode pentru a compara String-uri

Folosiţi aceste metode ı̂n loc de == şi !=


i = s.compareTo(t): compară s cu t. Returnează < 0 dacă s < t, 0
dacă ==, > 0 dacă s > t
i = s.compareToIgnoreCase(t): compară s cu t fără a t, ine cont de
majuscule / minuscule. Returnează < 0 dacă s < t, 0 dacă ==, > 0
dacă s > t
b = s.equals(t); Returnează true dacă s s, i t au valori egale
b = s.equalsIgnoreCase(t); compara fara a tine cont de minuscule /
majuscule
b = s.startsWith(t); returnează true dacă s ı̂ncepe cu t
b = s.startsWith(t, i); returnează true dacă t apare ı̂ncepând cu
indexul i
i = s.IndexOf(c); returnează indicele caracterului c
12/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Clasa String
Metode ale clasei String

Pentru a obt, ine substringuri (părt, i dintr-un String):


c = s.charAt(i): caracterul de la poziţia i din s.
s1 = s.substring(i): subşirul de la indexul i până la sfârşitul lui s.
s1 = s.substring(i, j): subşirul de la indexul i până ı̂nainte de indexul
j din s.
Crearea unui nou şir din original:
s1 = s.toLowerCase()
s1 = s.toUpperCase()
s1 = s.trim()
s1 = s.replace(c1, c2)
Metode statice pentru conversia la String:
s = String.valueOf(x)
s = String.format(f, x...)
13/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Seturi de caractere

ASCII: Set de caractere folosit de multe limbaje de programare, care


conţine toate caracterele folosite ı̂n mod normal pe o tastatură
pentru limba engleză plus câteva caractere speciale; Fiecare caracter
este reprezentat de un cod numeric
Unicode: Set de caractere folosit de limbajul Java care include tot
setul ASCII plus multe dintre caracterele folosite cu alfabete nelatine
Exemple:

char c=’\u0103’; // litera ’ă’


String s="\u00eencoto\u015fm\u0103ni\u0163i";
//ı̂ncotoşmăniţi

14/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Tipuri de date referint, ă

Toate obiectele sunt create ı̂n memorie (pe heap – zona de memorie
unde se face alocarea dinamică)
Pentru a accesa datele dintr-un obiect sau a lucra cu un obiect, este
nevoie de o variabilă pe stivă, variabilă care poate stoca o referinţă la
adresa obiectului
Despre variabilele care stochează referinţe la adrese de obiecte se
spune că păstrează tipul de date referinţă
Exemplu: Dog t = new Dog(”Patrocle”);
ı̂n Java nu exista variabile obiecte, exista variabile referint, ă la obiecte
O variabila referinta stocheaza biti care reprezinta modalitatea de a
accesa un obiect.
Nu stocheaza obiectul in sine, ci stocheaza o adresa.

15/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Variabilele referint, ă (obiecte)


Declarare, creare s, i asignare

Cei trei pas, i de declarare, creare s, i asignare pentru un obiect:

16/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Compararea obiectelor

La compararea a două variabile, se compară conţinutul lor;


În cazul obiectelor, conţinutul este adresa unde este stocat obiectul
(adică se vor compara referinţele)
Şirurile de caractere ı̂n Java sunt obiecte ale clasei String
Clasa String furnizează metode de comparare
Cea mai bună metodă ı̂n ceea ce priveşte compararea obiectelor este
să definim metode de comparare pentru clasa respectivă
Atent, ie la diferent, a dintre metoda equals() s, i operatorul ==
Equals() testează egalitatea de continut
== testează egalitatea adreselor (dacă ambele obiecte refera aceeas, i
zona de memorie)
TODO EXEMPLU

17/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Exerict, iu
Formular de Înregistrare cu Validare ı̂n Java

Dezvoltat, i o aplicat, ie JAVA pentru crearea unui formular de ı̂nregistrare simplu.


Formularul colectează date de la utilizator s, i validează intrările conform regulilor.

Câmpuri: Nume Complet (text); Telefon: cont, ine exact 10 cifre; Nu


Email (text); Telefon (text); Parolă are litere sau simboluri speciale.
(Input parolă); Confirmare Parolă
Parolă: lungime de cel put, in 8
(Input parolă); Vârstă (numeric)
caractere; Cont, ine cel put, in: O
Validare câmpuri: literă majusculă, o literă minusculă,
o cifră, un caracter special (de ex.,
Toate câmpurile trebuie să
aibă cont, inut @, #, $, %, !, etc.).
Nume Complet: cont, ine cel Confirmare Parolă: corespunde cu
put, in 3 caractere; cont, ine câmpul Parolă.
doar litere s, i spat, ii.
Email: format valid de email Vârstă: Trebuie să fie un număr
ı̂ntreg valid ı̂ntre 18 s, i 100.
s, i nu cont, ine caractere
invalide. 18/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Exercitiu
exemplu metode

import java.util.Scanner;
...
public static Boolean containsOnlyDigits(String str){
for (char c : str.toCharArray()) {
System.out.print(c);
if (!Character.isDigit(c)) return false;
}
return true;
}
public static void main(String[] args) {
String nume;
//citire de la tastatura - user input
Scanner reader = new Scanner(System.in);
System.out.println("Dati numele: ");
nume = reader.nextLine();
...
}

19/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Exercitiu
Validare adresa email: java.util.regex.*

import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Demo {
public static boolean validEmail(String email) {
String emailRegex = "ˆ[a-zA-Z0-9_+&*-]+(?:\\."+
"[a-zA-Z0-9_+&*-]+)*@" +
"(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
Pattern pat = Pattern.compile(emailRegex);
if (email == null) return false;
return pat.matcher(email).matches();
}

public static void main(String[] args) {


String addres = "exemplu@gmail.com";
if (validEmail(address)) System.out.println("Valid!");
else System.out.println("Email Invalid!");
}
}

20/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Operatori s, i structuri de control

21/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Operatori in JAVA
Vedet, i lucrarea de laborator

Câteva diferenţe faţă de C:


Concatenarea pentru String: operatorul +
Operatorul pe biţi >>> ; D.e. n >>> p; deplasează biţii lui n spre
dreapta cu p poziţii. În poziţiile de rang superior se inserează zerouri.
System.out.println(Integer.toBinaryString(-2));
//afiseaza 11111111111111111111111111111110 (32 biti)
System.out.println(Integer.toBinaryString(-2>>1)); //afiseaza ?
System.out.println(Integer.toBinaryString(-2>>>1)); // afiseaza
System.out.println(Integer.toBinaryString(-2>>>16));//afiseaza ?

Operatori pentru lucrul cu obiecte – vor fi tratat, i ı̂n detaliu mai


târziui ı̂n detaliu mai târziu

22/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Precedent, a operatorilor

23/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Instructiunea if

Instrucţiunea if specifică ce bloc de cod să se execute ı̂n funcţie de


rezultatul evaluării unei condiţii numită expresie booleană.

if (<expresie booleană>)
<then> Instr1
else
<else> Instr 2
Sau:
(<expresie booleană>)? Instr1 : Instr2
ex: int max = (a>b)? a:b;

Sintaxă similară limbajului C, dar atenţie la ce este o expresie


booleană ı̂n Java

24/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Sugestii pentru if
Începeţi testul cu cazul cel mai relevant
Face codul mai uşor de citit
Nu uitaţi de clauza else!
Evitaţi condiţiile complicate
Divizaţi condiţiile ı̂n variabile/funcţii booleene
Încercaţi să folosiţi condiţii pozitive
Exemplu – se preferă a doua variantă
//varianta 1
if (!node.isFirst() && node.value() != null)
instr1
else
instr2
//varianta 2
if (node.isFirst() || node.value() == null)
instr2
else
instr1
25/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Instructiunea switch
Sintaxa s, i exemplu

switch(expresie) {
case x: // code block
break;
case y: // code block
break;
default: // code block
}

Tipul de dată al < expresie >s trebuie să fie char, byte, short, int
int month = 8; String monthString;
switch (month) {
case 1: monthString = "January";
break;
case 2: monthString = "February";
break;
//. . .
case 12: monthString = "December";
break;
default: monthString = "Invalid month";
break;
}
System.out.println(monthString); 26/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Instruct, iunea switch

Dacă există o valoare care se potriveşte cu valoarea expresiei, atunci


se execută corpul acesteia. Altfel execuţia continuă cu instrucţiunea
care urmează instrucţiunii switch
Instrucţiunea break face să nu se execute porţiunea care urmează din
switch, ci să se continue cu ceea ce vine după switch
break este necesar pentru a executa instrucţiunile dintr-un caz, şi
numai unul (iarăşi, ca ı̂n C)
Sugestii pentru switch:
Ordonaţi cazurile (logic sau alfabetic)
Prevedeţi ı̂ntotdeauna cazul implicit (default)
Întotdeauna folosiţi break ı̂ntre cazuri
Încercaţi să păstraţi mică dimensiunea instrucţiunii switch
Divizaţi cazurile de mari dimensiuni ı̂n funcţii

27/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Instruct, iuni repetitive


while, do-while, for

Instrucţiunile repetitive controlează un bloc de cod de executat un


număr fixat de ori sau până la ı̂ndeplinirea unei anumite condiţii
Ca şi C, Java are trei instrucţiuni repetitive:

while (condition) { do { for (statement1; statement2;


// code block to // code block to statement3) {
be executed be executed // code block to be
} } executed
while (condition); }

Instrucţiunea while este o buclă cu pre-testare (testul se face la


intrarea ı̂n buclă): Corpul buclei poate să nu fie executat niciodată
Instrucţiunea do-while este o buclă cu post-testare: Corpul ciclului
este executat cel puţin o dată

28/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Exemplu: while, do-while

int countdown = 3; int i = 0;


while (countdown > 0) { do {
System.out.println(countdown); System.out.println(i);
countdown--; i++;
} }
System.out.println("Happy Year!!" while (i < 5);
);

La instrucţiunile repetitive este important să se asigure terminarea ciclului


la un moment dat. Exemple de bucle infinite:
int item = 0; int count = 1;
while (item < 5000) { while (count != 10) {
item = item * 5; count = count + 2;
} }

Numerele reale nu se folosesc ı̂n teste exacte sau incrementări, deoarece


valorile lor sunt reprezentate cu aproximaţie.

29/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Exemplu: for

Buclele for sunt ideale atunci când


int sum = 0; numărul de iteraţii este cunoscut
for (int i = 1; i <=100; i++){
sum += i;
Folosiţi o instrucţiune pentru
} fiecare parte
Declaraţi variabilele de ciclu ı̂n
Variabila i din exemplu se
antet (reduce vizibilitatea şi
numeşte variabilă de control
interferenţa)
(contorizează numărul de
repetiţii) Nu se recomandă modificarea
variabilei de control ı̂n corpul
< increment > poate fi orice
ciclului
cantitate
Din nou, ca ı̂n C

30/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Exemplu:
for pentru iteraţii peste colecţii şi tablouri

public class ForEachDemo { Creat special pentru


public static void main(String[] args) {
int[] a = {32, 87, 3, 589, 12, 1076};
iteraţii peste colecţii şi
for (int el : a) { tablouri
System.out.print(element + " ");
} Nu funcţionează oriunde
} (d.e. nu se pot accesa
}
indicii de tablouri)
Afis, are la ies, irea standard:
32 87 3 589 12 1076

31/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Constante, comentarii, documentat, ie ı̂n JAVA

32/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Numirea constantelor

În loc de numere ”anonime”, declaraţi constante simbolice (cu nume)


şi folosiţi-le numele:
public static final double CM_PER_INCH = 2.54;
public static final int HOURS_PER_DAY = 24;

Previne schimbarea nedorită a valorii


Uşurează modificarea valorii
Convenţia de nume pentru constante
Toate literele majuscule
Limitele de cuvinte marcate prin liniuţa de subliniere

33/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Comentarii s, i documentarea programului

Comentarii:
Comentariu de o linie: ı̂ncepe cu simbolurile // şi provoacă ignorarea
a ceea ce urmează până la sfârşitul liniei
Comentariul bloc: La fel ca ı̂n C (perechea /*, */); Furnizează
documentaţie utilizatorilor programului

Documentarea programului:
Java include programul javadoc care extrage automat documentaţia
din comentariile bloc din clasele definite, dacă ı̂nceputul
comentariului are un asterisc suplimentar (/**)
Un program bine scris este autodocumentat: structura sa se clarifică
prin alegerea numelor de identificatori şi modelul de indentare

34/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Clase s, i Obiecte

35/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Anatomia unei clase


public class Taxi
{ // VARIABILE INSTANTA
private String driver;
private int km;

//CONSTRUCTOR:
//construct a Taxi copying in the data into the instance
variables
public Taxi(String initDriver, int initKm){
driver = initDriver;
km = initKm;
}
// METODE
public void print() {
System.out.println("Taxi Driver: " + driver);
System.out.println("Total Killometers: " + km);
}
public int getKm(){
return km;
}
public void drive(int kms){
this.km += kms;
}
36/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Constructorii

Scop: iniţializează starea unui obiect


Init, ializează toate atributele obiectului. Dacă acestea nu se init, ializează
explicit, ele vor fi init, ializate implicit cu valorile init, iale din Java, ı̂n funct, ie
de tipul lor.

Nume: La fel cu numele clasei. Prima literă mare.


Intrare: 0 sau mai mulţi parametri.
Ieşire: Nu este tip de retur ı̂n antet.
Numar de apelari: se apelează cel mult o dată pe obiect; este
invocat de operatorul ”new”.

Cod:
public Taxi() ...

37/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Constructori multipli
O operaţie ”new” ı̂ncununată
public class Taxi de succes creează un obiect
{ // VARIABILE INSTANTA pe heap şi execută
private String driver;
private int km; constructorul al cărui listă de
parametri ”corespunde” listei
//CONSTRUCTORI MULTIPLI:
public Taxi(){
sale de argumente (ca număr,
km = 0; tip, ordine).
driver = "Unknown";
}
public Taxi(String initDriver, int
initKm){
driver = initDriver;
km = initKm;
}
public static void main(String[] args
){
Taxi t = new Taxi();
}
}
38/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Folosirea corespunzătoare a constructorilor

Un constructor ar trebui ı̂ntotdeauna să creeze obiectele ı̂ntr-o stare


validă:
Constructorii nu trebuie să facă nimic altceva decât să creeze obiecte
Dacă un constructor nu poate garanta că obiectul construit este
valid, atunci ar trebui să fie private şi accesat prin intermediul unei
metode de fabricare (factory method)
Notă: ı̂n general, termenul de metodă de fabricare este folosit pentru
a se referi la orice metodă al cărei scop principal este crearea de
obiecte

39/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Factory method

Factory method: metodă statică care apelează un constructor


(Constructorul este de obicei private)
Metoda de fabricare poate determina dacă să invoce sau nu
constructorul
Metoda de fabricare poate arunca o excepţie, sau poate face altceva
potrivit ı̂n cazul ı̂n care i se dau argumente ilegale sau nu poate crea
un obiect valid
public static Taxi create(int kms) {
if (kms < 0)
throw new IllegalArgumentException("Too few kms!");
else
return new Taxi(kms);
}

40/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Metode

Scop:
Execută comportamentul obiectului

Nume: Un verb; Începe cu literă mică.


Intrare: 0 sau mai mulţi parametri.
Ieşire: Pentru ieşire este nevoie de un tip returnat.
Numar de apelari: nelimitat pentru un obiect; se apelează folosind
operatorul ”punct”: numeObiect.numeMetoda(argumente)

Cod:
public void turnLeft() ...

41/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Ce poate face o metodă:

Schimbă starea obiectului său


Raportează starea obiectului său
Operează asupra numerelor, a textului, a fişierelor, graficii, paginilor
web, hardware, etc.
Poate crea alte obiecte
Poate apela o metodă a unui alt obiect: obiect.metoda(args)
Poate apela o metodă din aceeaşi clasă: this.metoda(args);
Se poate autoapela (recursivitate)

42/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Intrarea pentru o metodă

O metodă poate primi 0 sau mai multe intrări


Intrările pe care le aşteaptă o metodă sunt specificate prin lista de
”parametri formali” (tip nume1, tip nume2, ...)
La apelul unei metode, numărul, ordinea şi tipul argumentelor trebuie
să se potrivească cu parametrii corespunzători

43/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Ies, irea unei metode

O metodă trebuie să returneze ceva: void sau non-void


Dacă nu returnează nimic (nu are ieşire), tipul returnat este ”void”
public void setKm(int km)..
Dacă tipul returnat este non-void (d.e. int, boolean, Taxi) atunci
metoda trebuie să conţină o instrucţiune return cu o valoare; valoarea
returnată trebuie să se potrivească cu tipul returnat.
public int getKm(){
return km;
}

44/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Metode setter s, i getter


mutatoare s, i accesoare

public class Taxi{


private int km;
public Taxi(){
km = 0;
}
// raporteaza # km
public int getKm(){
return km;
}
// seteaza (schimba) # km
public void setKm(int m){
km = m;
}
public static void main(String[] args){
Taxi cab1;
cab1 = new Taxi();
cab1.getKm(); // 0
cab1.setKm(500);
cab1.getKm(); //500
}
}
45/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Exercit, iu: constructori s, i metode

Scriet, i o aplicat, ie Java care să permită gestionarea s, i controlul


informat, iilor despre taxiuri.
Pe măsură ce avansăm ı̂n conceptele de programare orientată pe
obiecte, vom actualiza cerint, ele s, i vom crea o aplicat, ie care simulează
un sistem cababil să urmărească taxiurile, s, oferii s, i cursele client, ilor,
oferind funct, ionalităt, i de bază pentru adăugarea, actualizarea s, i
vizualizarea ı̂nregistrărilor.
Deocamdată, utilizând cunos, tint, ele acumulate până la cursul de azi
vom crea clasele de mai jos cu constructori s, i metode relevante:
Taxi
S, ofer
Client
Locat, ie / Adresă

46/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Exercit, iu: constructori s, i metode

Clase:
Clasa Taxi:
Câmpuri: taxiID, model, numărDeÎnmatriculare, status (disponibil,
ı̂nCursă, ı̂nMentenant, ă)
Metode: getters/setters, displayTaxiDetails(), updateStatus()
Clasa S, ofer:
Câmpuri: driverID, nume, numărPermis, taxiAtribuit
Metode: getters/setters, displayDriverDetails()
Clasa Client:
Câmpuri: clientID, nume,
Metode: getters/setters, displayCientDetails()
Clasa Adresa:
Câmpuri: strada, numar, oras, tara
Metode: getters/setters, displayAddressDetails()

47/ 48
Tipuri de date ı̂n Java Operatori s, i structuri de control Constante, comentarii, documentat, ie ı̂n JAVA Clase s, i Obiecte

Concluzii s, i discut, ii

48/ 48

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy