OBJEKTINIS PROGRAMAVIMAS

Java OOP: klasės ir objektai

Objektinis programavimas (OOP) organizuoja programą aplink objektus, kurie vienoje vietoje turi duomenis ir su jais atliekamus veiksmus. Klasė aprašo bendrą struktūrą, o objektas yra konkretus tos klasės egzempliorius.

Kas yra OOP?

Procedūriniame kode daugiausia dėmesio skiriama metodams, kurie atlieka veiksmus su atskirai saugomais duomenimis. Objektiniame kode susiję duomenys ir metodai sujungiami į objektus.

Objektinis programavimas padeda:

  • suteikti programai aiškią ir nuoseklią struktūrą;
  • modeliuoti programos sąvokas atskirais objektais;
  • pakartotinai naudoti klases ir jų elgseną;
  • lengviau prižiūrėti, keisti, testuoti ir derinti kodą;
  • kurti didesnes programas iš mažesnių, atsakomybę turinčių dalių.
DRY reiškia „Don't Repeat Yourself“ – nekartok savęs.

Bendrą kodą verta aprašyti vienoje klasės ar metodo vietoje ir panaudoti iš naujo, užuot kopijavus.

Klasė ir objektas

Klasės ir objekto skirtumas
SąvokaPaskirtisPavyzdys
KlasėŠablonas, aprašantis duomenis ir veiksmusKnyga
ObjektasKonkretus pagal klasę sukurtas egzemplioriusmanoKnyga

Pagal vieną Knyga klasę galima sukurti daug skirtingų knygų. Visos jos turi klasėje aprašytus laukus ir metodus, tačiau pavadinimai ar puslapių skaičius gali skirtis.

Klasė yra tarsi tuščia knygos anketa.

Joje aprašome, kokius duomenis turės visos knygos. Objektas yra viena konkrečiai užpildyta anketa, pavyzdžiui, knyga „Mažasis princas“.

Klasės sukūrimas

Klasė kuriama naudojant raktažodį class:

public class Knyga {
    String pavadinimas = "Mažasis princas";
    int puslapiuSkaicius = 96;

    void rodytiInformacija() {
        System.out.println(pavadinimas + ": " + puslapiuSkaicius + " puslapiai");
    }
}
Konsolės rezultato nėra.

Čia tik aprašyta klasė. Objektas nesukurtas, o metodas rodytiInformacija() neiškviestas.

  1. public class Knyga pradeda naujos klasės aprašymą.
  2. pavadinimas ir puslapiuSkaicius yra klasės laukai – duomenys, kuriuos turės kiekvienas objektas.
  3. rodytiInformacija() yra metodas – veiksmas, kurį galės atlikti knygos objektas.
  4. Klasės pavadinimas pradedamas didžiąja raide.
  5. Viešos klasės failo pavadinimas turi sutapti su klasės pavadinimu: Knyga.java.

Objekto sukūrimas su new

Objektas sukuriamas nurodant klasės tipą ir naudojant raktažodį new:

public class Knyga {
    String pavadinimas = "Mažasis princas";
    int puslapiuSkaicius = 96;

    public static void main(String[] args) {
        Knyga knyga = new Knyga();

        System.out.println(knyga.pavadinimas);
        System.out.println(knyga.puslapiuSkaicius);
    }
}
Konsolės rezultatas

Mažasis princas
96

  1. Knyga knyga paskelbia kintamąjį, galintį rodyti į Knyga objektą.
  2. new Knyga() sukuria naują konkretų objektą pagal klasės aprašymą.
  3. Sukurtas objektas gauna klasėje nurodytas pradines reikšmes: pavadinimą ir puslapių skaičių.
  4. Taškas komandoje knyga.pavadinimas leidžia pasiekti konkretaus objekto lauką.
  5. Todėl konsolėje matome knygos pavadinimą ir skaičių 96.

Objekto metodų iškvietimas

Taško operatoriumi taip pat iškviečiami objekto metodai:

public class Knyga {
    String pavadinimas = "Mažasis princas";

    void rodytiPavadinima() {
        System.out.println("Knyga: " + pavadinimas);
    }

    public static void main(String[] args) {
        Knyga knyga = new Knyga();
        knyga.rodytiPavadinima();
    }
}
Konsolės rezultatas

Knyga: Mažasis princas

  1. Pirmiausia sukuriamas konkretus Knyga objektas.
  2. Per tašką iškviečiamas jo metodas rodytiPavadinima().
  3. Metodas pasiekia to paties objekto lauką pavadinimas.
  4. Java sujungia tekstą Knyga: su objekto pavadinimu ir parodo rezultatą.
  5. Metodas nėra static, todėl jis kviečiamas per konkretų objektą knyga.

Keli vienos klasės objektai

Viena klasė gali sukurti daug nepriklausomų objektų:

public class Knyga {
    String pavadinimas;

    public static void main(String[] args) {
        Knyga pirmaKnyga = new Knyga();
        Knyga antraKnyga = new Knyga();

        pirmaKnyga.pavadinimas = "Mažasis princas";
        antraKnyga.pavadinimas = "Pepė Ilgakojinė";

        System.out.println(pirmaKnyga.pavadinimas);
        System.out.println(antraKnyga.pavadinimas);
    }
}
Konsolės rezultatas

Mažasis princas
Pepė Ilgakojinė

  1. Pagal tą pačią klasę sukuriami du atskiri objektai: pirmaKnyga ir antraKnyga.
  2. Pirmos knygos lauke įrašomas pavadinimas Mažasis princas.
  3. Antros knygos lauke įrašomas pavadinimas Pepė Ilgakojinė.
  4. Kiekvienas objektas saugo savo atskirą lauko reikšmę.
  5. Todėl pakeitus vienos knygos pavadinimą kitos knygos pavadinimas nepasikeistų.

Klasių naudojimas atskiruose failuose

Didesnėje programoje klasės paprastai laikomos atskiruose failuose:

// Knyga.java
public class Knyga {
    String pavadinimas = "Mažasis princas";

    void rodytiPavadinima() {
        System.out.println(pavadinimas);
    }
}
// Main.java
public class Main {
    public static void main(String[] args) {
        Knyga knyga = new Knyga();
        knyga.rodytiPavadinima();
    }
}
Konsolės rezultatas

Mažasis princas

  1. Faile Knyga.java laikomas klasės aprašymas, jos laukas ir metodas.
  2. Faile Main.java yra programos pradžios metodas main().
  3. Main sukuria naują Knyga objektą.
  4. Tada per objektą iškviečiamas metodas rodytiPavadinima().
  5. Jei abi klasės yra tame pačiame pakete, Main gali tiesiogiai naudoti pasiekiamą Knyga klasę.

Kas toliau?

Klasės ir objektai yra OOP pagrindas. Toliau galima nagrinėti konstruktorius, prieigos modifikatorius, inkapsuliaciją, paveldėjimą, polimorfizmą ir abstrakciją.