Lecții din modul (1/2)
Clase și Obiecte
Java este un limbaj axat pe Programare orientată pe obiecte (OOP). În OOP, modelăm lumea reală folosind obiecte. Un obiect are stare (date) și comportamente (acțiuni).
Clase și Obiecte
- Class: este un model (sau șablon) care definește proprietățile și comportamentul unui tip de obiect.
- Obiect: Este o instanță concretă creată dintr-o clasă.
De exemplu, dacă Car este clasa, mașina dvs. din garaj este obiectul real.
Câmpuri de instanță și constructori
Datele din interiorul unei clase se numesc câmpuri de instanță (sau atribute). Pentru a inițializa starea unui obiect în momentul creării lui, folosim o metodă specială numită constructor.
Un constructor are același nume ca și clasa și nu are niciun tip de returnare (nici măcar void).
class Dog {
// Instance fields
String name;
int age;
// Constructor
public Dog(String name, int age) {
this.name = name; // 'this' refers to the current object's field
this.age = age;
}
}Crearea unui obiect cu new
Pentru a crea un obiect în memorie, folosim cuvântul cheie new urmat de constructorul clasei:
public class Main {
public static void main(String[] args) {
// Creating a Dog object
Dog myDog = new Dog("Fido", 3);
// Accessing fields
System.out.println(myDog.name + " is " + myDog.age + " years old.");
}
}Referința this
Cuvântul cheie this din Java se referă la obiectul curent pe care se execută constructorul sau o metodă. Este folosit în primul rând pentru a evita ambiguitatea atunci când parametrii constructorului au același nume ca și câmpurile de instanță ale obiectului (umbrire variabilă):
class User {
String username;
public User(String username) {
this.username = username; // this.username is the instance field, username is the parameter
}
}Alocarea memoriei: stack vs heap
Înțelegerea modului în care Java alocă memoria este esențială:
- Stiva: Este o zonă de memorie rapidă și organizată în care sunt stocate variabilele primitive și referințele la obiecte (adresele de memorie) locale pentru metode.
- Heap: este o zonă de memorie mai mare și dinamică în care sunt alocate obiectele reale (folosind cuvântul cheie
new).
Când declarăm Dog myDog = new Dog("Fido", 3);:
- Referința
myDogeste creată pe Stiva. - Obiectul
Dogreal cu datele sale este creat pe Heap. - Variabila
myDogindică locația obiectului pe Heap.
Încercați-l singur
Completați clasa Persoană adăugând numele câmpului și un constructor adecvat. Apoi, în metoda principală, creați un obiect Person numit p cu numele Alice.
Afișează indiciu
Scrieți `String name;` în interiorul clasei, declarați constructorul `public Person(String name) { this.name = name; }` și instanțiați-l cu `new Person('Alice')`.
Soluție disponibilă după 3 încercări
Creați o clasă Book cu câmpurile title (String) și pages (int), un constructor complet și instanțiați în metoda principală o carte numită b cu titlul Moby Dick și 600 de pagini.
Afișează indiciu
Nu uitați să definiți ambele câmpuri în Book, să le mapați în constructor folosind `this.title = title;` și `this.pages = pages;` și folosiți `new Book('Moby Dick', 600)`.
Soluție disponibilă după 3 încercări
Creați o clasă de produse cu nume de câmpuri (String) și preț (dublu) și un constructor care inițializează ambele câmpuri. În metoda principală, creați un obiect produs numit p cu numele Laptop și preț 999,99.
Afișează indiciu
Declarați câmpurile `String name;` și `double price;` în Produs, atribuiți-le în constructor cu `this.name = name;` și `this.price = price;` și, în final, creați obiectul în metoda principală.
Soluție disponibilă după 3 încercări