CodeGym /Kurslar /JAVA 25 SELF /Sinif və obyekt anlayışı

Sinif və obyekt anlayışı

JAVA 25 SELF
Səviyyə, Dərs
Mövcuddur

1. Sinif və obyekt nədir

Gəlin analoqladan başlayaq. Təsəvvür edin ki, avtomobilin eskizi var. Eskizdə maşının dörd təkəri, mühərriki, rəngi, oturacaqları və s. olduğu göstərilir. Amma eskizin özü nə yollarda gedir, nə mühərrik səsi çıxarır, nə də benzin tələb edir. Bu, sadəcə, maşının necə qurulduğunu təsvir edir.

Sinif proqramlaşdırmada — onun nümunələrində hansı məlumatların (sahələrin) və hansı hərəkətlərin (metodların) olacağını müəyyən edən elə bir “eskiz” (və ya şablon) kimidir.

Obyekt — həmin eskizə görə yığılmış “real” maşın, yəni konkret nümunədir. Hər obyektin öz vəziyyəti var (məsələn, bir maşının rəngi qırmızı, digərinin isə mavi), həmçinin davranışı: hər obyekt sinifdə müəyyən edilmiş hərəkətləri yerinə yetirə bilər (məsələn, getmək, əyləci basmaq, siqnal vermək).

Həyatdan nümunələr

  • Sinif: Insan (Person) — insanın adı, yaşı, boyu olduğunu və onun danışa və ya qaça bildiyini təsvir edir.
  • Obyektlər: Vasya, Petya, Katya — konkret insanlar, hərəsinin öz adı və yaşı var.
Sinif Obyekt 1 Obyekt 2
Person
name = "Vasya" 
age = 25
name = "Katya" 
age = 30

Niyə siniflər vacibdir?

  • Əlaqəli dəyişənləri və metodları bir yerdə qruplaşdırmaq.
  • Eyni quruluşa malik, lakin müxtəlif məlumatlara sahib istənilən sayda obyekt yaratmaq.
  • Mürəkkəb varlıqları asanlıqla təsvir etmək: məsələn, “Bank hesabı”, “Məhsul”, “Kitab”, “İstifadəçi”.

2. Sinifin elan olunmasının sintaksisi

Java-da sinif class açar sözü ilə elan olunur. Onun ardınca sinifin adı (ənənəvi olaraq — böyük hərflə) gəlir, sonra isə fiqurlu mötərizələr, onların içində sahələr və metodlar yazılır.

Ən sadə nümunə

public class Person {
    // Burada sahələr və metodlar olacaq
}

İzah:

  • public — giriş modifikatoru.
  • class — kompilyatora: “mən sinif elan edirəm” deyir.
  • Person — sinifin adı (özünüz seçirsiniz, amma böyük hərflə).

Sinifləri adlandırmağın vacib qaydaları

  • Sinifin adı böyük hərflə başlamalıdır (məsələn, Car, Account, Book).
  • Sinif adında boşluq və xüsusi işarələr olmaz, yalnız alt xətt və $ istisnadır (amma bu nadirdir).
  • Ad bir neçə sözdən ibarətdirsə, CamelCase üslundan istifadə edin: BankAccount, BookStore.

Sinifləri harada yazmaq olar?

Sinifi ayrıca faylda elan etmək olar (adətən belə edirlər: bir fayl — bir sinif) və ya başqa bir sinfin daxilində (daxili siniflərdən sonra danışacağıq).

Məsələn, Person.java faylı:


public class Person {
    // sahələr və metodlar
}

3. Sinifin sahələri və metodları (qısa)

Hələlik yalnız sinfi elan etdik, amma o, boşdur — sanki içində heç nə olmayan bir qutu kimidir. Gəlin ora “xüsusiyyətlər” (sahələr) və “hərəkətlər” (metodlar) əlavə edək.

Sahələr (sinif daxilindəki dəyişənlər)

Sahələr bu sinfin hər obyektində hansı məlumatların olacağını təsvir edir.


public class Person {
    String name; // insanın adı
    int age;     // yaş
}

Metodlar (sinif daxilində funksiyalar)

Metodlar obyektin nə etdiyini təsvir edir.

public class Person {
    String name;
    int age;

    void sayHello() {
        System.out.println("Salam, mənim adım " + name + "!");
    }
}

İzah:

  • void — metod heç nə qaytarmır (qaytarılan dəyərlər barədə sonra danışacağıq).
  • sayHello() — metodun adıdır, dairəvi mötərizələr mütləqdir.
  • Metodun daxilində sinifin sahələrinə müraciət etmək olar (məsələn, name sahəsinə).

4. Obyektin yaradılması

İndi isə — bir az sehr! Eskizdən “real maşını” necə hazırlayırıq? Bunun üçün new açar sözündən istifadə olunur.

Obyekt yaratma sintaksisi


Person vasya = new Person();
  • Person — dəyişənin tipi (bizim sinif).
  • vasya — dəyişənin adı (istənilən adı verə bilərsiniz).
  • new Person() — Person tipindən yeni obyektin yaradılması.

İndi bizdə vasya adlı bir dəyişən var, o Person sinifindən yaradılmış obyektə istinad edir. Bu obyektin öz sahələri və metodları var.

Sahə və metodlara daxilolma

Sahə və metodlara nöqtə operatoru ilə müraciət edilir:

vasya.name = "Vasya";
vasya.age = 25;

vasya.sayHello(); // Çap edəcək: Salam, mənim adım Vasya!

İstənilən sayda obyekt yaratmaq olar

Person petya = new Person();
petya.name = "Petya";
petya.age = 30;

petya.sayHello(); // Salam, mənim adım Petya!

Hər obyekt öz məlumatlarına malik müstəqil bir “nüsxədir”.

5. Əvvəlki mövzularla əlaqə

Bu günə qədər bütün dəyişən və metodları birbaşa main metodu olan sinfin daxilində elan edirdik və öz tiplərimizi yaratmağı düşünmürdük. İndi isə öz “məlumat və funksiya” konteynerlərimizi yarada bilərik.

Bu, böyük imkanlar açır! Artıq tapşırığınızda qarşılaşdığınız istənilən varlığı təsvir edə bilərsiniz: müştərilər, məhsullar, hesablar, sifarişlər, heyvanlar, avtomobillər — nə istəsəniz. Proqramlar daha strukturlaşdırılmış, oxunaqlı və miqyaslana bilən olur.

Nümunə: ilk öz sinfimiz

Gəlin kiçik proqramımız üçün sadə bir sinif yazaq — məsələn, “Bank hesabı” (BankAccount). Kurs boyu bu nümunəni inkişaf etdirəcəyik.

public class BankAccount {
    String owner;     // hesabın sahibi
    int balance;      // hesabın balansı

    void printInfo() {
        System.out.println("Sahib: " + owner + ", balans: " + balance + " avro.");
    }
}

İndi əsas main metodunda (proqramı işə salmaq üçün hələ də lazımdır) bu sinifdən obyektlər yarada bilərik:

public class Main {
    public static void main(String[] args) {
        BankAccount account1 = new BankAccount();
        account1.owner = "Ivan";
        account1.balance = 1000;
        account1.printInfo(); // Sahib: Ivan, balans: 1000 avro.

        BankAccount account2 = new BankAccount();
        account2.owner = "Mariya";
        account2.balance = 2000;
        account2.printInfo(); // Sahib: Mariya, balans: 2000 avro.
    }
}

Diqqət: hər bir obyektin sahə dəyərləri özünə məxsusdur. account1 üçün balansı dəyişsəniz, bu, account2 üçün heç nəyi dəyişməyəcək.

Vizual sxem: sinif və obyektlər

graph TD
    subgraph Class
        Person["Class Person | name:String | age:int | sayHello()"]
    end

    subgraph Objects
        vasya["vasya : Person | name = 'Vasya' | age = 20"]
        petya["petya : Person | name = 'Petya' | age = 25"]
    end

    vasya --> Person
    petya --> Person

İzah:

  • Person — bu, sinifdir (şablon).
  • vasya və petya — həmin şablona görə yaradılmış obyektlər (nümunələr)dir.

6. Siniflərin elanında və obyektlərin yaradılmasında tipik səhvlər

Səhv № 1: Sinif adının kiçik hərflə yazılması.
Java-da qəbul olunmuş qayda (kompilyator etiraz etməsə də, təcrübəli proqramçılar — bəli!) sinif adlarını böyük hərflə yazmaqdır. class person yazmayın — class Person yazın.

Səhv № 2: Fiqurlu mötərizələrin unudulması.
Yadda saxlayın ki, sinifin bədəni həmişə fiqurlu mötərizələrdə olmalıdır.

public class Person // səhv!
    String name;

Düzgün:

public class Person {
    String name;
}

Səhv № 3: Obyekt yaratmadan sinifin sahə və metodlarına müraciət etmək cəhdi.
Əgər metod və ya sahə static kimi elan olunmayıbsa, onlara yalnız obyekt vasitəsilə müraciət etmək olar:

Person.sayHello(); // səhv!

Düzgün:

Person vasya = new Person();
vasya.sayHello();

Səhv № 4: Fayl adının sinif adı ilə uyğun gəlməməsi (public-sinif üçün).
Əgər sinif public kimi elan olunubsa, faylın adı sinifin adı ilə üst-üstə düşməlidir:

// Fayl Person.java
public class Person { ... }

Faylın adı başqa cürdürsə, kompilyator səhv verəcək.

Səhv № 5: Obyekt yaradılmadan sinifin sahələrindən istifadə.
Sinifin sahələri (static olmayanlar) sinifin özünə deyil, obyektə məxsusdur.

1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Virtual dünyanız üçün yeni yoldaş
Virtual dünyanız üçün yeni yoldaş
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Mırlayan möcüzəyə həyat verin
Mırlayan möcüzəyə həyat verin
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Rəqəmsal ensiklopediya yaratmaq
Rəqəmsal ensiklopediya yaratmaq
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Yeni semestrin açılışı: tələbələrin uçotu
Yeni semestrin açılışı: tələbələrin uçotu
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION