Uploaded by laurentiu.zamfirache

Introduction to Java Programming (1)

advertisement
Introduction
to Java
Programming
Java is a popular high-level programming language
used to create robust and dynamic applications.
It comes in the form of either a JDK or JDE.
What is
Java?
Java Runtime Environment (JDE) is the environment necessary to run programs written in
Java. It contains (compiled) bytecode of standard classes as well as a virtual machine
(JVM) and tools enabling program execution.
Java Development Kit (JDK) is a necessary environment for programming in Java. It
contains JRE, and in addition everything that is required to be able to write a program in
Java: source code of standard classes and support tools (compiler, archiver, debugger
etc.).
Let's write our
first program
Before that:
Make sure you have the JDK installed and added
to the ENV_PATH of the system and user.
https://www.youtube.com/watch?
v=TksJc5O3wz4
Have an IDE set up on your local machine.
https://www.jetbrains.com/idea/download/
Make sure you
have Maven
installed as well.
Download from the
official link then follow
either this step-by-step
guide or this video for
the installation process.
Apache
Maven
Ensure the following are
the same as in the image:
Name
JDK
Catalog
Archetype
Creating a
project
Create a new project as shown in the image.
Basic Java
Syntax
Write the below code in a new java class file
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Basic Java
Syntax
The provided syntax is a basic example of a Java program. Let's break it down step by step:
1. public class HelloWorld: This line declares a public class named "HelloWorld." In Java, every
program starts with a class definition, and the class name must match the file name (in this case,
HelloWorld.java). The public keyword means that the class is accessible from other classes.
2. {: The opening curly brace marks the beginning of the class's body. It encapsulates all the
statements and declarations within the class.
3. public static void main(String[] args) {: This line declares a method called main within the class. It
is a special method that serves as the entry point of the program. The public keyword indicates
that the method can be accessed from other classes. The static keyword means the method
belongs to the class itself, not to an instance of the class. The void keyword specifies that the
method does not return any value. The method accepts a single parameter, an array of strings
named args, which can be used to pass command-line arguments to the program.
4. System.out.println("Hello world!");: This line is a statement within the main method. It uses the
System.out.println method to print the string "Hello world!" to the console. The println method
adds a newline character after printing the string.
5. }: The closing curly brace marks the end of the main method.
6. }: The closing curly brace marks the end of the class body.
Overall, this Java program defines a class called HelloWorld with a main method that prints "Hello
world!" to the console when executed.
How does
a method
that
returns
something,
looks like?
Variabile
Variabilele sunt aliasuri pentru a defini niste valori. Odata definite ele pot fi
refolosite ulterior in cadrul codului oriunde este necesar.
Mai departe vom vorbi de tipurile lor dar si despre conventii.
Variabile
Tipuri
Java este un strongly typed language ceea ce inseamna ca fiecare variabila va
fi scrisa cu un scop precis in minte si va fi folosita intr-un scenariu unde acel tip
de variabila este necesar.
Logica variabilelor este de a specifica tipul variabilei, apoi sa denumim variabila.
Desi nu obligatoriu, de obicei dupa definirea tipului si numelui variabilei ii
adaugam valoarea, aceasta fiind precedata de un semn de egal.
Exemplu teoretic:
variableType variableName
Exemplu practic:
int unNumeDeVariabila
Variabilele sunt declarate initial:
int variabilaMea;
Apoi ele sunt initializate cand li se confera prima valoare:
variabilaMea = 8;
Daca ulterior ele sunt manipulate si li se schimba valoarea, atunci lor le sunt
atribuite alte valori
variabilaMea = 10
Majoritatea variabilelor vor fi declarate si initializate in aceeasi linie de cod:
int numarBujiiInlocuire= 10
Variabilele pot fi simple (int, float) sau complexe (string sau clase create de noi).
Clasele de tip wrapper se infasoara (to wrap) in jurul tipurilor simple. Acestea sunt
obiecte ale limbajului de programare si vor ocupa mai mult spatiu decat cele simple.
Wrapperele le vom folosi de fel cand definim argumente sau initializam variabile cu
scope extins. Scope extins inseamna ca se folosesc in cadrul mai multor clase din
acelasi test.
Variabile
Reguli de scriere
1. Camel Case: Variable names should be written in camel case, starting with
a lowercase letter and capitalizing the first letter of each subsequent
concatenated word. For example:
firstName
numOfStudents
totalAmount
2. Meaningful Names: Variable names should be descriptive and reflect the
purpose or content of the variable. Avoid using single-letter names or
cryptic abbreviations that may be difficult to understand. For example:
customerName instead of cn
numberOfItems instead of noi
isAvailable instead of ia
3. Use of lowercase: Variable names should be in lowercase, except for
constants, which are typically written in uppercase with underscores
between words. For example:
final int MAX_VALUE = 100;
final double PI = 3.14;
4. Avoid Reserved Keywords: Do not use reserved keywords as variable
names, as they have predefined meanings in Java. Examples of reserved
keywords include int, boolean, class, if, for, etc.
5. Class and Interface Names: Class and interface names should follow
similar conventions as variable names, but with the first letter capitalized.
For example:
Student
Person
PaymentProcessor
6. Instance Variables: Instance variables (variables defined within a class)
should begin with a prefix of this. to distinguish them from local variables.
For example:
private int age;
private String name;
7. Constant Variables: Constants should be declared using the final
keyword, and their names should be in uppercase with underscores
between words. For example:
final int MAX_LENGTH = 100;
final String ERROR_MESSAGE = "An error occurred.";
These conventions help make your code more readable, understandable,
and maintainable by yourself and others who may read or work on your
code. It's important to follow these conventions to promote consistency
and improve code quality.
Bonus:
Variables can contain numbers in their names. Example: var123 = 5
Variables can not start with numbers. Example: 123Var = 5
Another naming convention is the snake case where variables are written
in all lower case and each subsequent word is separated by an
underscore. Example: this_is_snake_case.
The camel case naming convention and snake convention can be merged.
Example: this_Is_Both_Camel_Case_And_Snake_Case
Bonus 2:
Constants are like variables but they have usually one predetermined goal.
Once they are defined they will not be changed throughout the project, no
matter what. It is always written with uppercase letters and each word
separated by an underscore.
final constantType CONSTANT_NAME;
Operators
Operatorii sunt simboluri utilizate pentru a putea manipula valori si variabile.
In urmatoarele slide-uri vom discuta cei mai utilizati operatori dar si tipurile lor.
Cei mai frecventi operatori intalniti vor fi cei de :
aditie
substractie
incrementare
decrementare
Operatori
aritmetici
Exemple utilizare operatori
Operatori
comparativi
Cei mai frecventi operatori intalniti vor fi cei de :
Equal to ==
Not equal !=
Exemple utilizare operatori
Assignment
operators
Cei mai frecventi operatori intalniti vor fi cei ce :
Asigneaza valoarea expresiei din dreapta la variabila din stanga x = y
Fac aditia inainte de asignare x+=y sau altfel spus x = x + y
Fac substractia inainte de asignare x-=y sau altfel spus x = x - y
Exemple utilizare operatori
Toti operatorii sunt des folositi.
Exemple utilizare operatori
Logical
operators
Cel mai frecvent operator intalnit aici va fi cel ternar / ternary operator.
Exemple utilizare operatori
Alti
operatori
String este o clasa pe care limbajul Java o contine implicit in cod. Este folosita pentru a pastra texte in variabile. Clasa contine
multiple metode , descrise mai jos, metode ce permit programatorului sa lucreze cu texte.
String
Class
Metoda
Descriere
Exemplu
isEmpty()
Intoarce un raspuns de tip boolean in functie de string. Daca string-ul este gol
returneaza true daca string-ul are minim un caracter atunci intoarce false.
String myVar = new String("Hello world!");
System.out.println(myVar.isEmpty()); // false
equals()
Verifica continutul variabilei sa fie acelasi, nu il intereseaza daca face referinta la
aceeasi locatie din memorie alocata variabilei, ergo nu il intereseaza ce instantiere
(new String sau String) este. In JavaScript in loc de aceasta metoda, se inlocuieste
cu ==, iar functionalitatea == este inlocuita cu ===
String myVar = new String("Hello world! What a world.");
String str = "Hello world! What a world.";
System.out.println(myVar.equals(str)); // true
System.out.println(myVar == str); // false
split()
Imparte un obiect in mai multe elemente. Scopul este fie sa testam fiecare element
in parte ori ca sa testam doar anumite elemente, in functie de caz. Elementele de
obicei le salvam in array-uri. (ex. Verificam ca butoanele de tip Read more...
functioneaza fiecare in mod corect.)
String myVar = new String("Hello world!");
String[] elements = myVar.split(" "); // split an object in little piecese
System.out.println(elements[0]); // Hello
System.out.println(elements[1]); // world!
substring()
Daca argumentul este singular atunci cauta indexul conform argumentului si
returneaza string-ul ramas care incepe de la acel index. Daca sunt doua argumente
atunci returneaza string-ul care incepe cu primul index dar nu include si caracterul
de la cel de-al doilea index.
String myVar = new String("Hello world! What a world.");
System.out.println(myVar.substring(13)); // What a world.
System.out.println(myVar.substring(13, 16)); // Wha
contains()
Verifica daca string-ul folosit ca argument se regaseste in cadrul variabilei (stringului mama). Daca argumentul se regaseste in string-ul mare atunci intoarce
raspuns boolean true altfel intoarce false.
String myVar = new String("Hello world!");
System.out.println(myVar.contains("wor")); // true
concat()
Aceasta metoda inseamna concatenare adica alipirea unui string la un alt string. Se
poate alipi un alt tip de date (ex. int) daca e transformat in string (ex. (string)123 ).
Nu suporta diferite tipuri de date in argumente, nu suporta null si creeaza un nou
obiect chiar daca e gol.
String str1 = "Hello";
String str2 = " ";
String str3 = "World";
String result = str1.concat(str2).concat(str3);
System.out.println(result);
join()
String.join(String delim, String arg1, ..., String argN);
Metoda accepta n numar de parametrii/argumente dar este chemata numai la
clasa String nu la variabila precum celelalte metode de pana acum.
Putem inlocui metoda concat() cu operatorul + ,
acesta concateneaza si alte tipuri de date (ex. int), nu
arunca eroare la null si creeaza intotdeauna un nou
obiect. Ex: myVar = myVar + " We meet again...";
String myVar = new String("Hello world!");
System.out.println(String.join(" ", myVar, "We meet", "again...")); // Hello world! We meet again...
String este o clasa pe care limbajul Java o contine implicit in cod. Este folosita pentru a pastra texte in variabile. Clasa contine
multiple metode , descrise mai jos, metode ce permit programatorului sa lucreze cu texte.
String
Class
Metoda
Descriere
Exemplu
length()
Metoda care intoarce lungimea uni string, mai exact intoarce numarul de
caractere din string.
String myVar = new String("Hello world!");
System.out.println("Your string is " + myVar.length() + " character(s) long.");
// Your string is 12 character(s) long.
indexOf()
Metoda intoarce primul index pe care il intalneste in cadrul stringului unde
argumentul este prezent. Indexii se numara de la 0. Daca nu gaseste index
pentru argument, intoarce valoarea -1.
String myVar = new String("Hello world! What a world.");
System.out.println(myVar.indexOf("wor")); // 6
replace()
Inlocuieste toate instantele celui de-al doilea argument cu primul argument din cadrul variabilei atasate
metodei.
myVar.replace(char oldChar, char newChar);
myVar.replace(String oldChar, String newChar);
// in fact the method accepts CharSequence type parameters, but we can easily use String
toUpperCase()
Schimba componenta string-ului in acelasi string dar scris cu majuscule.
String myVar = new String("H.e.l.l.o world!");
System.out.println(myVar.replace('.', '-')); // H-e-l-l-o world!
myVar = new String("H.e...l.l...o world!");
System.out.println(myVar.replace("...", "->")); // H.e->l.l->o world!
String myVar = new String("Hello world!");
System.out.println(myVar.toUpperCase()); // HELLO WORLD!
toLowerCase()
Schimba componenta string-ului in acelasi string dar scris cu minuscule.
String myVar = new String("Hello world!");
System.out.println(myVar.toLowerCase()); // hello world!
lastIndexOf()
Mentioneaza ultimul index unde se regaseste argumentul dat metodei, fie ca
vorbim de un caracter sau un grupaj de caractere.
String myVar = new String("Hello world! What a world.");
System.out.println(myVar.lastIndexOf("wor")); // 20
Printarea se face in cadrul terminalului, intotdeauna dar exista metode aditionale care sa permita salvarea unui print ca string si
utilizarea sa ulterioara. In aceasta pagina vom vorbi despre cum putem altera un string in functie de variabilele primite.
print()
Modalitati de printare
Bonus
Primul fel de a printa ceva in terminal este sa ne folosim de clasa System
System.out.print(param);
A doua metoda este de a printa parametrul si a spune terminalului sa treaca pe urmatoarea linie (ca si cum ar apasa Enter)
System.out.println(param);
\n inseamna new-line asadar:
System.out.print(param+"\n");
e acelasi lucru cu
System.out.println(param);
Metoda printf() este cea mai avansata. Ea permite sa oferim drept parametrii alte variabile in cadrul unui string. Extrem de
util cand folosim date dinamice (ex. vezi codurile din url-uri care se modifica in functie de instanta deschisa).
In stanga putem vedea coduri pentru inlocuirea in cadrul string-ului a
variilor cuvinte ce vor veni din cadrul variabilelor.
String catName = "Fluffy";
int catAge = 8;
System.out.printf("My cat, %s, is %d years old.%n", catName, catAge);​
// My cat, Fluffy, is 8 years old.
Totusi, ne vom trezi in situatia in care nu vom dori sa printam ci sa salvam un string a carui componenta este atat text dar si
variabile, fie in cazul datelor dinamice ce se schimba des, fie in cazul testarii cu mai multi parametrii. In cazul acela folosim metoda
format() aceasta putand fi apelata doar de catre clasa String. Asadar vom crea o variabila de tip string si vom chema String.format
int age = 25;
double height = 1.75;
String name = "John";
String formattedString = String.format("My name is %s, I am %d years old, and my height is %.2f meters.", name, age, height);
System.out.println(formattedString);
Exista o diferenta intre un string gol (empty string) si conceptul de null.
Gandeste-te la diferenta dintre aer si vidul din cosmos, ambele par goale
dar una dintre ele totusi contine ceva.
La fel, un string gol, este un obiect real, existent pentru care codul pune
deoparte memorie. Putem folosi metode asupra unui string gol
String emptyString = "";
System.out.println(emptyString.length()); // 0
In cazul null avem o variabila declarata dar fara memorie alocata pentru
ea. Aceasta nu este un obiect si daca incercam sa folosim metoda pe ea,
vom intampina erori ce au cuvantul Null in componenta lor.
String nullString = null;//nullString = "";
// if we assign any String to our variable, the next line will work correctly
System.out.println(nullString.length());
// throws an exception: java.lang.NullPointerException
Conditional
Statements
Scopul lor este de a executa un anumit cod intr-o
anumita situatie iar daca situatia impune o alta
rezolvare, sa execute un alt cod.
Declaratii conditionale: if, else if, else si switch.
IF STATEMENT
IF
Cea mai des declaratia conditionala utilizata pentru a
executa o parte de cod, este declaratia IF. Sintaxa contine
conditia IF urmata de un parametru intre paranteze ce
mentioneaza conditia in care codul va rula, iar apoi doua
acolade inauntrul carora va fi scris codul ce va executa
DACA CONDITIA DINTRE PARANTEZE ESTE TRUE
Scopul lui IF este deobicei de a compara variabile folosind
operatori comparativi fie solitari fie in combinatie cu
operatori logici.
ELSE IF, ELSE
STATEMENTS
Conditia IF poate fi extinsa cu un ELSE sau cu mai
multe ELSE IF-uri, dupa cum putem vedea in
exemplul din partea dreapta. Inainte de asta, ar fi
util sa intelegem sintaxa si motivul pentru
aplicarea acesteia.
ELSE IF, ELSE
01
04
Recapitulare: daca conditia IF nu este
indeplinita atunci codul menit sa fie
executat va fi omis/ignorat.
Verificarea continua pana se indeplineste
una dintre conditii sau nu mai exista conditii
de verificat.
02
05
Daca IF nu este indeplinit, va fi
verificata conditia ELSE IF
In momentul in care una dintre conditii a fost
validata, programul se opreste iar restul
conditiilor nu se mai verifica.
03
Bonus
Daca se intoarce TRUE conditia de la
punctul 02, atunci codul este executat
si programul se opreste. Daca
returneaza FALSE , codul cauta
urmatorul ELSE IF pentru a verifica
conditia.
Putem folosi doar ELSE in caz cazul in care dorim sa executam
un cod ca rezultat al lipsei satisfacerii conditiei IF.
Daca niciuna dintre conditii din cadrul unui block de ELSE IF nu
este satisfacuta, atunci codul va fi ignorat si aplicatia va rula in
continuare de parca nici nu a existat bucata de cod IF-ELSEIF.
SWITCH
STATEMENT
SWITCH STEATEMENT
Logica
Default
JAVA 14+
Expresia switch incepe prin folosirea cuvantului
switch apoi continua cu un parametru intre
paranteze. In functie de parametru, se decide care
code-block va fi executat. Code-block-ul este
declarat prin cuvantul case urmat de o valoare.
Aceasta valoarea este comparata cu parametrul si
se stabileste daca va fi rulat acel case sau daca se
cauta altul. La finalul unui case se incheie rularea
codului prin break. Odata gasit un case compatibil
cu parametrul, restul case-urilor nu mai sunt
verificate.
Exista optiunea de a adauga un caz
default care va rula automat daca
cazurile definite sunt incompatibile cu
parametrul definit. Acest caz default
este optional. In cazul in care toate
cazurile sunt incompatibile si nu exista
cazul default, tot code-block-ul switchului va fi ignorat.
In ultimele iteratii ale JAVA a fostr
introdusa sintaxa ->
Folosindu-ne de ea, putem evita ca
case-urile sa fie iterate in numar
constant pana la final in cazul lipsei
unui break. Iar codul va fi mai clar, scurt
si usor de citit.
Vezi pagina urmatoare pentru exemple.
SWITCH
STATEMENT
MORE ABOUT SWITCHES:
HTTPS://NIPAFX.DEV/JAVA-SWITCH/
EXEMPLE
VS
STUDIO SHODWE
Loops &
Arrays
F O R L O O P
W H I L E L O O P
D O W H I L E L O O P
A R R A Y S
A R R A Y S A N D L O O P S
M U L T I D I M E N S I O N A L
F O R E A C H L O O P
A R R A Y S
LOOPS
For LOOP
Cand avem bucati de cod care s-ar repeta de multiple ori, folosim
loops. FOR se foloseste atunci cand stim exact cate repetitii vrem sa
existe.
Sintaxa contine 3 expresii si functioneaza in urmatorul fel:
expresia1 ruleaza o singura data la inceputul codului. Aici avem
o declaratie sau initializare a unei variabile deja declarate
expresia2 ruleaza la inceputul fiecarei iteratii a codului, ea are
scope boolean adica daca este TRUE , loop-ul ruleaza in
continuare, daca devine FALSE atunci loop-ul inceteaza.
expresia3 este executata la finalul fiecarui loop si este folosita
drept punct de reper pentru expresia2
Cu alte cuvinte, un loop functioneaza in felul urmator: expresia 1
este notata, expresia doi vede daca conform codului este TRUE sau
FALSE, daca expresia 2 este true, se executa codul din loop, apoi
expresia 3 este executata, apoi iar expresia 2, iar se verifica aceasta
si daca este FALSE atunci codul nu mai este executat.
LOOPS
În acest exemplu, avem o listă
listaProduse care conține unele
produse. În bucla for, verificăm indexul
fiecărui element.
Dacă indexul este 2, utilizăm
instrucțiunea continue pentru a sări
peste afișarea acestui element și
pentru a continua cu următorul
element.
For LOOP Example
În acest exemplu, avem un ArrayList numit cartItems care
stochează elementele din coșul de cumpărături. Bucla FOR iterează
prin elementele listei cartItems utilizând variabila de loop i, care
reprezintă indexul fiecărui element.
Bucla continuă atât timp cât i este mai mic decât dimensiunea
listei (cartItems.size()).
În interiorul buclei, fiecare element este preluat folosind
cartItems.get(i) și afișat cu un prefix de puncte.
Dacă indexul este 4, utilizăm
instrucțiunea break pentru a ieși din
buclă și a opri afișarea celorlalte
elemente.
Astfel, vom afișa doar primele două
produse din listă.
Exemplul ilustrează cum putem utiliza
instrucțiunile continue și break pentru
a controla fluxul unei bucle for, în
funcție de anumite condiții sau criterii.
Acest exemplu demonstrează cum un FOR loop poate fi utilizat într-un scenariu
real pentru a itera printr-o colecție de produse, cum ar fi afișarea conținutului
unui coș de cumpărături pe un site de comerț electronic.
LOOPS
while loop
While loop se foloseste atunci cand nu suntem siguri
cate iteratii vom avea pentru repetitia codului. Sintaxa
contine o singura conditie, ea este validata la inceputul
fiecarei iteratii si returneaza o valoarea de tip boolean
(TRUE sau FALSE). Daca este true atunci continua codul,
daca este false atunci codul nu mai ruleaza.
Exemplu simplu
STUDIO SHODWE
While loop
Exemplu
În acest exemplu, clasa FileProcessing conține metoda main care demonstrează procesarea unui fișier utilizând un
ciclu while. Inițializăm variabila currentLine cu valoarea 1 pentru a indica linia curentă din fișier, iar variabila
booleană fileContinues este setată inițial pe true pentru a indica că procesarea fișierului continuă.
În cadrul ciclului while, se citește o linie din fișier utilizând metoda readLineFromFile care primește ca argument
numărul liniei. Dacă linia returnată este null, înseamnă că am ajuns la sfârșitul fișierului, deci setăm fileContinues
pe false pentru a ieși din ciclu.
Dacă linia conține textul "important text", apelăm metoda processLine pentru a procesa acea linie. În caz contrar,
trecem la linia următoare prin incrementarea valorii variabilei currentLine și utilizând instrucțiunea continue
pentru a sări la următoarea iterație a ciclului.
După fiecare iterație a ciclului, incrementăm currentLine pentru a trece la următoarea linie din fișier.
Metoda readLineFromFile este responsabilă cu citirea unei linii din fișier pe baza numărului de linie primit ca
argument și returnează conținutul liniei sau null în cazul în care am ajuns la sfârșitul fișierului.
Metoda processLine este folosită pentru a procesa o linie din fișier și conține codul specific de procesare.
Prin utilizarea acestui ciclu while, putem parcurge un fișier linie cu linie și efectua anumite acțiuni în funcție de
conținutul fiecărei linii.
LOOPS
Do While
Conditia pentru do - while, este verificata la finalul fiecarei iteratii. Ea returneaza o valoare de tip
boolean, daca este TRUE atunci se executa urmatoarea iteratie , daca este FALSE atunci loop-ul
se opreste.
LOOPS
Exemplu
DO WHILE
Acest exemplu simulează interacțiunea cu utilizatorul pentru a citi un
număr între 1 și 10. Programul va solicita în mod repetat
introducerea unui număr până când utilizatorul furnizează un număr
valid.
Loop-ul do-while se asigură că cererea de introducere a numărului
este afișată cel puțin o dată, indiferent de validitatea inițială a
introducerii. Apoi, în interiorul buclei, programul verifică dacă
numărul introdus se află în intervalul specificat (1-10). Dacă este
valid, variabila validInput devine true, iar bucla se oprește. În caz
contrar, variabila rămâne false, iar utilizatorul este solicitat să
reintroducă un număr valid.
La finalul programului, se afișează un mesaj de încheiere și se închide
obiectul Scanner pentru eliberarea resurselor.
Acest exemplu ilustrează utilizarea buclei do-while pentru a obține și
valida introducerile de la utilizator într-un scenariu real.
ARRAYS
Un array în Java este o structură de date care poate stoca o colecție de
elemente de același tip. Aceste elemente sunt accesate utilizând un
index bazat pe zero, care reprezintă poziția fiecărui element în array.
Pentru a crea un array, specificăm tipul elementelor și numărul de
elemente pe care dorim să le stocăm. Iată un exemplu de creare a unui
array de întregi:
Array
În acest exemplu, am asignat valoarea 10 primului element (numbers[0]).
Pentru a obține valoarea celui de-al treilea element (numbers[2]), am folosit
indexul 2. De asemenea, am asignat al cincilea element ca suma celui de-al
doilea și celui de-al patrulea element (numbers[4] = numbers[1] +
numbers[3]).
De asemenea, putem itera prin toate elementele array-ului folosind o buclă
for sau o buclă foreach. Iată un exemplu de utilizare a unei bucle for pentru a
afișa toate elementele array-ului numbers:
În acest exemplu, am creat un array numit numbers care poate stoca 5 valori
întregi. Prin utilizarea expresiei new int[5], alocăm spațiu în memorie pentru
array și specificăm că acesta va conține 5 elemente de tip întreg.
Putem accesa și modifica elementele array-ului utilizând indexul lor. Indexul
începe de la 0 pentru primul element și se termină la lungimea array-ului
minus 1. Iată cum putem accesa și modifica elementele array-ului numbers:
În acest exemplu, numbers.length returnează lungimea array-ului, iar bucla
for iterează de la indexul 0 până la lungimea array-ului minus 1. Astfel, putem
afișa fiecare element al array-ului utilizând indexul i.
Arrays în Java oferă o modalitate eficientă de a stoca și manipula colecții de
elemente de același tip. Utilizând indexul, putem accesa și modifica
elementele individual, precum și itera prin întregul array pentru a le procesa
sau afișa.
LOOPS AND ARRAYS
În acest exemplu, se simulează o aplicație de vânzare a mașinilor. Am
creat o clasă Car pentru a reprezenta un obiect de tip mașină, cu atributele
de marcă (make), model (model) și an de fabricație (year).
Am creat, de asemenea, un array de mașini (inventory) pentru a stoca
inventarul mașinilor disponibile în dealer. Fiecare element din array
reprezintă un obiect de tip Car, care este creat și adăugat la inventar
utilizând constructorul clasei Car.
for loop
Ulterior, am afișat inventarul de
mașini utilizând o buclă for-each.
Pentru fiecare mașină din
inventar, am afișat informațiile
despre marcă, model și anul
mașinii.
Pe scurt
Acest exemplu ilustrează modul
în care un array poate fi utilizat
pentru a stoca și accesa diferite
obiecte în cadrul unei aplicații
de vânzare a mașinilor.
DAR NOI
TESTĂM
Aici mai trebuia un import:
import App/path/catre/locatia/unde/e/definit/CarDealership.java
În acest exemplu, am creat o clasă de test CarDealershipTest folosind
framework-ul JUnit. Am definit o metodă de test testCarInventory() care
testează funcționalitatea inventarului de mașini din clasa CarDealership.
În interiorul metodei de test, am creat un array de obiecte Car pentru a
simula un inventar de mașini. Apoi, am creat o instanță a clasei
CarDealership și am furnizat inventarul de mașini ca argument la
construcție.
Am definit un array expectedCarInfo care conține informațiile despre
mașinile așteptate în inventarul de mașini. Apoi, am apelat metoda
getCarInventory() din clasa CarDealership pentru a obține informațiile
reale despre mașini.
Folosind aserțiunea assertArrayEquals(), am comparat array-ul așteptat
expectedCarInfo cu array-ul actual actualCarInfo pentru a verifica dacă
inventarul de mașini returnat de clasa CarDealership este corect.
Un astfel de test automatizat ar verifica dacă clasa CarDealership
funcționează corect în ceea ce privește stocarea și returnarea
informațiilor despre mașinile din inventar.
FUNDAMENTALS
OF
OBJECT
ORIENTED
PROGRAMMING
OBJECT ORIENTED
PROGRAMMING
(OOP)
Ce este OOP?
Object oriented programming este o paradigma adica un
tipar a felului in care vedeam lumea din jurul nostru. Ne
folosim de obiectele din viata noastra de zi cu zi si le
transpunem in cuvinte. Cuvintele in programare sunt
abstracte asadar nu folosim propozitii ca in viata de zi
cu zi ci abstractizari ale conceptelor.
NEXT
CLASS
Ce este o clasă?
Clasa prezintă definiția unui obiect. Când spunem
definiția unui obiect, ne referim la caracteristicile lui,
mai specific la ce date îl vor reprezenta pe acel
obiect.
Vom discuta despre o celebră analogie folosită în
cadrul învățării programării.
Vom discuta despre clasa Măr, acesta are culoare și
mărime drept proprietăți și ajunge să putrezească.
Putrezirea este o metodă fiindcă reprezintă un
proces.
CLASS
Vă aduceți aminte primul
program pe care l-am scris la
începutul cursului? Cel cu
Hello World?! Acela era un
program compus dintr-o clasă
și o metodă
OBIECTE
Ce este un obiect?
Exemplu concret
Obiectul este o instanțiere a clasei.
Pentru un măr vom avea un obiect de
Acesta nu are reguli generale ci
tipul roșu și de mărimea 3. Acest
specifice. În cadrul lui, dăm valori
obiect poate folosi/chema metoda
proprietăților din clasă.
putrezire. Dacă va fi folosită, metoda
va fi aplicată doar acestui obiect.
Cum creăm un obiect mai
exact?
Ca să putem crea un obiect pe baza unei clase, o vom instanția chemând
clasa. Evident plecăm de la premisa că avem deja creată clasa.
PROPRIETĂȚI / FIELD
Field-ul este o proprietate a unei clase ce definește schema pentru
obiecte sau a o variabilă prezentă într-un obiect.
Object state
Setul de proprietăți din cadrul unei
clase se numesc object state, fiindcă
oferă o stare default/standard pe
care obiectele create din clasa
respectivă o vor avea
La ce sunt bune
proprietățile?
Proprietățile sunt utilizate pentru a
reține starea (state) unui obiect și
sunt accesibile în cadrul metodelor
din aceeași clasă.
Acestea pot fi inițializate cu valori
implicite sau pot fi atribuite valori
personalizate în constructor sau în
alte metode.
Tipul returnat
După ce rulează metoda, aceasta întoarce o
valoare (variabilă sau alt obiect). Gândește-te la
valoarea putrezit pentru măr.
Constructor
Constructorul este cazul specific al metodei care
va rula automat atunci când este creat un obiect.
Constructor parametrizat
Ca să evităm să dăm valori în constructor putem
stabili parametrii sub forma de variabile care pot fi
definite ulterior la crearea unui obiect.
Getter-i și setter-i
METODE
Metoda este o bucată de cod asociată cu o clasă și menită să facă o
sarcină anume. Putem să o definim drept o funcție dedicată obiectelor
unei clase.
Prin aceste metode putem defini comportamentul unui obiect.
Fiindcă este de evitat ca o clasă să fie parametrizată
cu valori, putem crea metode de a aduce o valoare
dintr-un obiect dar și pentru a o seta
Chemare metode
Metodele pot instanția un obiect nou (new Măr) sau
pot modifica comportamentul prin a pune un punct
după obiect iar apoi numele metodei
(măr.putrezire)
Returned type and parameters
METODE
EXPLICAȚIE EXTINSĂ
Tipul returnat
Mai jos avem o metodă care acceptă
parametrii, și a cărui scop este să simuleze
procesul de putrezire a unui măr.
Analizează și înțelege parametrii metodei dar și
cum se va termina.
Când termină de alterat obiectul, metoda poate
returna o valoare. Până acum am văzut cuvântul
void care specifică faptul că nu se returnează
ceva iar obiectul este pur și simplu alterat și
salvat cu modificările în cauză.
Tipul de returnare al unei metode poate fi și o
valoare precum un string sau un int.
Parametrii sunt variabilele unei metode, aceste
variabile vor primii valori când este chemată
metoda. Toți parametrii trebuie să dețină valori
când este chemată metoda.
Returned type and parameters
Cum apelăm metoda?
Folosind următorii pași:
1. Apelăm clasa Apple (clasă în care
metoda este definită) și o instanțiem
Iată fragmentul complet de cod:
3. Capturăm valoarea returnată de
metoda. În acest caz, metoda returnează
un String, deci poți asigna valoarea
returnată unei variabile de tip String:
2. Invocăm metoda rot pe instanța
Acest cod va invoca metoda rot pe
apple și furnizăm argumentele necesare,
rotTime și rotColour
În acest exemplu, apelăm metoda rot cu
rotTime setat la 5 și rotColour setat la
"maro".
obiectul Apple, va simula procesul de
Poți folosi apoi variabila message pentru
putrezire, va actualiza culoarea mărului și
a efectua orice operații dorite, cum ar fi
în cele din urmă va afișa mesajul "Marul
afișarea sa în consolă sau utilizarea sa în
este putrezit." în consolă.
alte calcule.
CONSTRUCTOR
Detaliere
Constructorul este cel ce definește un
comportament default al unei clase și
implicit a unui obiect creat pe baza clasei
în cauză.
Constructorul va iniția parametrii predeterminați pentru un obiect, acesta din
urmă moștenind parametrii din
constructor.
În exemplul alăturat, orice măr nou va
avea o anumită culoare și o anumită
mărime.
Poți spune ce mărime va avea o
instanțiere a unui măr nou? Dar culoarea?
Detaliere
Constructor parametrizat
Dacă ați sesizat, pe parcursul acestei lecturi, am evitat să
scriem constructori de orice fel pe cât posibil. Motivul
În acest cod, clasa Apple are două variabile de instanță
este fiindcă ei au o valoare defaul în funcție de tipul definit
private: colour de tip String și size de tip int.
al parametrului (ex. String gol pentru string sau 0 pentru
int).
Clasa are, de asemenea, un constructor Apple care
primește doi parametri: param1 de tip int și param2 de
tip String.
În interiorul constructorului, valorile parametrilor sunt
atribuite variabilelor de instanță. Valoarea lui param1
este atribuită variabilei size, iar valoarea lui param2
este atribuită variabilei colour.
Acest constructor permite crearea unui obiect Apple și
inițializarea proprietăților size și colour cu valori
specifice. De exemplu:
În acest exemplu, se creează un obiect de tip Apple cu un size de 5 și o colour de "rosu".
Getter-i
Este indicat ca field-urile/parametrii clasei să
Detaliere
nu fie utilizați direct pe obiect. Pentru asta,
putem folosi două metode getter și setter.
Setter-i
Detaliere
Getter-ul este o metodă ce nu
Setter-ul nu are un return type iar
are parametri dar are un return
parametrii săi sunt preluați din clasă
type. Acesta din urmă trebuie să
pentru a li se putea da noi valori.
fie aibe același nume cu variabila
definită în clasă fiindcă întoarce
Când avem setteri, ni se permite să
acea variabilă drept răspuns.
modificăm doar o valoare a unei
variabile dintr-un obiect, permițând o
Totodată, getter-ul va fi de
maleabilitate mai mare.
același tip precum tipul variabilei
definite în clasă.
În exemplul alăturat metodele
setColour(String newColour) și
În exemplul alăturat metodele
setSize(int newSize) sunt exemple de
getColour() și getSize() sunt
metode setters. Ele permit modificarea
exemple de metode getters. Ele
valorilor variabilelor private colour și
returnează valorile actuale ale
variabilelor private colour și size.
Exemplu aplicabilitate
size prin primirea unor noi valori ca
argumente.
Chemare metode / Utilizarea metodelor
Detaliere
Primul tip de metodă chemată este atunci când folosim
cuvântul cheie: new, această metodă fiind contructorul.
Ex 1. new Apple1()
Ex 2. new Apple2(2, "verde")
În primul exemplu chemăm metoda neparametrizată (cu
valori default) iar în al doilea exemplu parametrizăm
constructorul.
Al doilea tip de metodă este cea chemată asupra
obiectelor, unde prima oară scriem numele, a doua oară
punem punct, a treia oară scriem numele metodei și
ulterior oferim sintaxa de parametrizare adică parantezele.
Popularea parametrilor este opțională.
Ex A. Apple1.rot()
Ex B. Apple1.rot(2, "maro")
Al treilea tip de chemare a unei metode este asemănătoare
cu cea anterioară din punct de vedere al sintaxei dar față
de chemarea unei metode asupra unor obiecte unde se
modifică multiple valori, aceasta modifică la nivel singular
una dintre valorile constructului.
Ex.
String ceCuloareEraCaAmUitat = Apple1.getColour();
Apple1.setColour("mov");
this.assertIsSame(apple1.getColour(), ceCuloareEraCaAmUitat);
Access Modifiers/
Modificatori de permisiune
Modificatorii sunt cuvinte cheie care determină gradul de vizibilitate al unui
element. Acel element poate fi o clasa, un parametru/field sau o metodă.
ACCESS
MODIFIER
Sunt întotdeauna puși primii înainte de crearea
sau instanțierea elementului.
Tipuri
Tipurile de acces sunt:
public - orice alt element din aplicație poate folosi elementul public
protected - doar elementele din pachetul respectiv pot folosi
elementul privat. Util pentru a-l apela prin subclase și a limita
accesul la el.
private - element valabil doar în clasa în care este declarat
dacă nu punem unul dintre cele trei modificatoare anterior
menționate (întotdeauna punem la clase, omitem de fel la metode
și parametrii), elementul va fi valabil în pachetul din care face parte
pentru orice clasă, ergo un fel de protected
În acest fragment de cod, avem o clasă publică numită Apple. Câmpul colour este
EXEMPLU
declarat ca fiind private, ceea ce înseamnă că este accesibil doar în interiorul clasei
în sine. Clasa Apple are, de asemenea, un constructor public, permițând crearea de
instanțe Apple din afara clasei.
Metoda getColour() este declarată ca fiind publică, ceea ce o face accesibilă din
orice parte a programului. Această metodă este un getter care returnează valoarea
câmpului colour.
În cele din urmă, există o metodă numită someMethod(), care nu are niciun
modificator de acces specificat. În acest caz, aceasta are o vizibilitate packageprivate, ceea ce înseamnă că este accesibilă doar în cadrul aceluiași pachet.
Acești modificatori de acces au un rol crucial în controlul vizibilității și accesibilității
membrilor unei clase, asigurând o încapsulare corectă și gestionarea interacțiunii
între diferitele părți ale programului.
TABEL ACCES
O simplificare ale aspectelor discutate în
legătură cu modificatorii de acces discutați până
acum, pusă în formă de tabelă.
Ce reprezintă un
pachet?
PACKAGE
IMPORT
Pachetul / Package este o grupare de clase. Toate clasele dintr-un pachet (folder de tip pachet) pot interacționa unele cu celelalte
în cazul unui acces de tip protejat (protected). Așa cum într-un folder putem crea altul, la fel în pachete putem crea sub-pachete.
Întotdeauna un fișier al cărui scop este execuția unui cod va avea definit pachetul și sub-pachetele în care se află la începutul
fișierului pe prima linie. (ex. package my; SAU package my.apple;)
Pachetele deservesc atunci când vrem să utilizăm funcționalități utile programului/codului nostru fără a le rescrie. Pentru asta
folosim funcționalitatea importurilor, sintaxa importurilor fiind cuvântul import urmat de spațiu, apoi de numele pachetului principal,
apoi un punct, apoi subdirectorul următor apoi iar punct și tot așa până la fișierul unde este clasa/metoda pe care vrem să o
importăm.
Ex. import my.pack.apple;
TRECEM LA
EXERCIȚII
https://tester.en.sdacademy.pro/exercises/programming_fundamentals/prework/
Thank you for joining me on
this journey into the world
of Java programming!
Download