Salt la conținutul principal
Modulul 2 · Lecția 1 din 23/14 în curs~12 min
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).

Java
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:

Java
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ă):

Java
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ă:

  1. 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.
  2. 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 myDog este creată pe Stiva.
  • Obiectul Dog real cu datele sale este creat pe Heap.
  • Variabila myDog indică locația obiectului pe Heap.

Încercați-l singur

Exercițiu#java.m2.l1.e1
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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

Exercițiu#java.m2.l1.e2
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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

Exercițiu#java.m2.l1.e3
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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