Məzmuna keç
Educora
Orta18 dəq7 / 18

Siniflər və obyektlər

Öz tiplərini yarat: sahələr, konstruktorlar, this, metodlar, inkapsulyasiya, getter və setter-lər, static üzvlər.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Sahələri, konstruktoru və metodları olan sinif yazmaq və ondan obyektlər yaratmaq
  • this açar sözünün mənasını izah etmək
  • private sahələr, getter və setter-lərlə obyekti inkapsulyasiya etmək

Taksi tətbiqi minlərlə avtomobili izləyir: hər birinin markası, buraxılış ili və yürüşü var, hər biri də yol gedə bilir. Hər avtomobil üçün ayrıca dəyişənlər yaratmaq mümkün deyil. Java-nın cavabı siniflərdir: sən bir dəfə «avtomobil nədir» sualını təsvir edirsən, sonra ondan istədiyin qədər obyekt yaradırsan.

Sinif, obyekt və konstruktor

Sinif obyektlərin çertyojudur: o, obyektin hansı məlumatları (sahələri) saxlayacağını və nə edə biləcəyini (metodları) təsvir edir. Obyekt isə new operatoru ilə yaradılmış konkret nüsxədir. Obyekt yaradılanda xüsusi metod — konstruktor işə düşür: onun adı sinfin adı ilə eynidir və qaytarılan tipi yoxdur.

Java
public class Main {
    public static void main(String[] args) {
        Car first = new Car("Toyota", 2019);
        Car second = new Car("Kia", 2023);
        first.drive(120);
        first.drive(35);
        second.drive(60);
        System.out.println(first.brand + ": " + first.mileage + " km");
        System.out.println(second.brand + ": " + second.mileage + " km");
    }
}

class Car {
    String brand;
    int year;
    int mileage;

    Car(String brand, int year) {
        this.brand = brand;
        this.year = year;
        this.mileage = 0;
    }

    void drive(int km) {
        mileage += km;
    }
}
Gözlənilən nəticə
Toyota: 155 km
Kia: 60 km
  • Car sinfinin üç sahəsi (brand, year, mileage) və bir metodu (drive) var.
  • new Car("Toyota", 2019) yaddaşda yeni obyekt yaradır və konstruktoru çağırır.
  • **this** cari obyektin özüdür. this.brand = brand yazılışında soldakı obyektin sahəsi, sağdakı isə konstruktorun parametridir — adlar eyni olduğu üçün this onları ayırır.
  • Hər obyektin öz sahələri var: first 155 km yol getdi, second isə 60 km — biri digərinə təsir etmir.

İnkapsulyasiya: getter və setter-lər

Car sinfində hər kəs first.mileage = -500; yaza bilər — bu isə mənasızdır. İnkapsulyasiya obyektin məlumatını gizlətmək və ona yalnız yoxlama aparan metodlar vasitəsilə çıxış vermək deməkdir. Sahələr private elan olunur, oxumaq üçün getter, dəyişmək üçün isə setter və ya başqa açıq (public) metodlar yazılır.

Java
public class Main {
    public static void main(String[] args) {
        BankAccount acc = new BankAccount("Leyla", 50);
        acc.deposit(30);
        acc.withdraw(100);
        acc.withdraw(20);
        System.out.println(acc.getOwner() + " has " + acc.getBalance() + " AZN");
        System.out.println(acc);
    }
}

class BankAccount {
    private final String owner;
    private double balance;

    BankAccount(String owner, double balance) {
        this.owner = owner;
        this.balance = balance;
    }

    public String getOwner() { return owner; }
    public double getBalance() { return balance; }

    public void deposit(double amount) {
        if (amount > 0) balance += amount;
    }

    public void withdraw(double amount) {
        if (amount > balance) {
            System.out.println("Not enough money!");
            return;
        }
        balance -= amount;
    }

    @Override
    public String toString() {
        return "BankAccount[" + owner + ", " + balance + "]";
    }
}
Gözlənilən nəticə
Not enough money!
Leyla has 60.0 AZN
BankAccount[Leyla, 60.0]

İndi balansı yalnız deposit və withdraw metodları dəyişə bilər və onlar qaydalara əməl edir: mənfi məbləğ qəbul olunmur, hesabda olandan artıq pul çıxarmaq olmur. owner sahəsi final-dır: konstruktorda bir dəfə təyin olunur və sonra dəyişmir, ona görə onun setter-i yoxdur. toString() metodu obyektin println ilə necə göstəriləcəyini müəyyən edir.

ModifikatorKim görür?
publichamı
protectedeyni paket və törəmə siniflər
(modifikatorsuz)yalnız eyni paket
privateyalnız sinfin özü
Giriş modifikatorları — ən açıqdan ən qapalıya

Bir neçə konstruktor və static üzvlər

Konstruktorlar da metodlar kimi yüklənə bilər. Bir konstruktor digərini this(...) ilə çağıra bilər — bu, kodun təkrarlanmasının qarşısını alır. static sahə isə ayrı-ayrı obyektlərə deyil, bütün sinfə aiddir: onun bütün obyektlər üçün ortaq olan bir nüsxəsi var.

Java
public class Main {
    public static void main(String[] args) {
        Student a = new Student("Aysel");
        Student b = new Student("Murad", 9);
        System.out.println(a.info());
        System.out.println(b.info());
        System.out.println("Students created: " + Student.count);
        Student c = b;
        c.setGrade(10);
        System.out.println(b.info());
    }
}

class Student {
    static int count = 0;
    private String name;
    private int grade;

    Student(String name, int grade) {
        this.name = name;
        setGrade(grade);
        count++;
    }

    Student(String name) {
        this(name, 5);
    }

    public void setGrade(int grade) {
        if (grade >= 1 && grade <= 11) {
            this.grade = grade;
        }
    }

    public String info() {
        return name + ", grade " + grade;
    }
}
Gözlənilən nəticə
Aysel, grade 5
Murad, grade 9
Students created: 2
Murad, grade 10
1 / 5

Əsas fikirlər

  • Sinif obyektlərin çertyojudur, obyekt isə new ilə yaradılan konkret nüsxədir.
  • Konstruktor sinfin adını daşıyır, qaytarılan tipi yoxdur və sahələri ilkin qiymətlərlə doldurur.
  • this cari obyektdir; this(...) isə eyni sinfin başqa konstruktorunu çağırır.
  • İnkapsulyasiya: sahələr private, çıxış isə yoxlama aparan getter, setter və metodlarla.
  • static sahə bütün obyektlər üçün ortaqdır; obyekt dəyişənləri isə istinaddır.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
Konstruktor adi metoddan nə ilə fərqlənir?