Lekcje modułu (1/2)
Klasy i Obiekty
Java jest językiem skupionym na Programowaniu Zorientowanym Obiektowo (OOP). W OOP modelujemy świat rzeczywisty za pomocą obiektów. Obiekt posiada stan (dane) i zachowania (akcje).
Klasy i Obiekty
- Klasa: Jest to szablon (lub projekt), który definiuje cechy i zachowanie danego typu obiektu.
- Obiekt: Jest to konkretna instancja utworzona na podstawie klasy.
Na przykład, jeśli Car jest klasą, to Twój samochód w garażu jest konkretnym obiektem.
Pola Instancji i Konstruktory
Dane wewnątrz klasy nazywane są polami instancji (lub atrybutami). Aby zainicjalizować stan obiektu w momencie jego tworzenia, używa się specjalnej metody zwanej konstruktorem.
Konstruktor ma taką samą nazwę jak klasa i nie posiada typu zwracanego (nawet void).
class Dog {
// Campi istanza
String name;
int age;
// Costruttore
public Dog(String name, int age) {
this.name = name; // 'this' fa riferimento al campo dell'oggetto corrente
this.age = age;
}
}
Tworzenie Obiektu za Pomocą new
Aby utworzyć obiekt w pamięci, używamy słowa kluczowego new, po którym następuje konstruktor klasy:
public class Main {
public static void main(String[] args) {
// Creazione di un oggetto Dog
Dog myDog = new Dog("Fido", 3);
// Accesso ai campi
System.out.println(myDog.name + " ha " + myDog.age + " anni.");
}
}
Referencja this
Słowo kluczowe this w Javie odnosi się do bieżącego obiektu, na rzecz którego wywoływany jest konstruktor lub metoda. Jest używane głównie do unikania dwuznaczności, gdy parametry konstruktora mają takie same nazwy jak pola instancji obiektu (przesłanianie zmiennych):
class User {
String username;
public User(String username) {
this.username = username; // this.username è il campo istanza, username è il parametro
}
}
Alokacja Pamięci: Stack vs Heap
Zrozumienie sposobu alokacji pamięci w Javie jest kluczowe:
- Stack (Stos): Szybki, zorganizowany obszar pamięci, w którym przechowywane są zmienne typów prostych oraz referencje do obiektów (adresy w pamięci) lokalne dla metod.
- Heap (Sterta): Większy, dynamiczny obszar pamięci, w którym alokowane są faktyczne obiekty (za pomocą słowa kluczowego
new).
Kiedy deklarujemy Dog myDog = new Dog("Fido", 3);:
- Referencja
myDogjest tworzona na Stosie (Stack). - Rzeczywisty obiekt
Dogwraz ze swoimi danymi tworzony jest na Stercie (Heap). - Zmienna
myDogwskazuje na adres obiektu na Stercie.
Spróbuj sam
Uzupełnij klasę Person dodając pole name oraz odpowiedni konstruktor. Następnie w metodzie main utwórz obiekt Person o nazwie p i imieniu Alice.
Pokaż wskazówkę
Wpisz `String name;` wewnątrz klasy, zadeklaruj konstruktor `public Person(String name) { this.name = name; }` i utwórz obiekt za pomocą `new Person('Alice')`.
Rozwiązanie dostępne po 3 próbach
Utwórz klasę Book z polami title (String) oraz pages (int), pełnym konstruktorem, a następnie w metodzie main utwórz książkę o nazwie b, tytule Moby Dick i mającą 600 stron.
Pokaż wskazówkę
Pamiętaj, aby zdefiniować oba pola w klasie Book, przypisać je w konstruktorze za pomocą `this.title = title;` i `this.pages = pages;` oraz użyć `new Book('Moby Dick', 600)`.
Rozwiązanie dostępne po 3 próbach
Utwórz klasę Product z polami name (String) oraz price (double) i konstruktorem inicjalizującym oba pola. W metodzie main utwórz obiekt Product o nazwie p, nazwie Laptop i cenie 999.99.
Pokaż wskazówkę
Zadeklaruj pola `String name;` oraz `double price;` w klasie Product, przypisz je w konstruktorze przy użyciu `this.name = name;` i `this.price = price;`, a na koniec utwórz obiekt w metodzie main.
Rozwiązanie dostępne po 3 próbach