JavaRush /Java Blog /Random-TK /Sapaklara giriş: öz synplaryňyzy, konstruktorlaryňyzy ýaz...

Sapaklara giriş: öz synplaryňyzy, konstruktorlaryňyzy ýazmak

Toparda çap edildi
Salam! Bu gün Java-daky sapaklar barada gürleşeris. Sapaklary Java programmirlemegiň özeni diýip bileris. Programmist bolanyňyzda esasy wezipäňiz dürli funksiýaly öz synplaryňyzy ýazmak bolar. Sapaklara giriş: öz synplaryňyzy, konstruktorlaryňyzy ýazmak - 1Geliň, bu zadyň nämedigini we nähili işleýändigini anyklalyň :) Öňden bilşiňiz ýaly, Java obýekte gönükdirilen programmirleme dilidir. Programshli programmalar birek-birege bagly bolan obýektlerden durýar. Synp, esasan, bir obýekt üçin şablon. Obýektiň nähili görünjekdigini we haýsy funksiýalaryň boljakdygyny kesgitleýär. Her bir obýekt haýsydyr bir synpyň obýektidir . Iň ýönekeý mysala seredeliň:
public class Cat {

    String name;
    int age;

}
Programma ýazýarys diýeliň we bu programmada bir zat üçin pişik gerek (mysal üçin, onlaýn duşuşyk geçirip bilýän weterinariýa klinikamyz bar). Bir synp döretdik Catwe onuň üçin iki üýtgeýjini kesgitledik - setir namewe san age. Şeýle synp üýtgeýjilere meýdan diýilýär . Aslynda, bu geljekde döredjek ähli pişiklerimiz üçin şablon. Her bir pişigiň (synp obýekti Cat) iki üýtgeýjisi bolar - ady we ýaşy.
public class Cat {

    String name;
    int age;

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = "Barsik";

        System.out.println("We created a cat named" + barsik.name + ", his age - " + barsik.age);
    }

}
Ine, şeýle işleýär! Pişik döretdik, oňa at we ýaş berdik we hemmesini konsola çykardyk. Çylşyrymly zat ýok :) Synplar köplenç daş-töweregindäki zatlary we hadysalary suratlandyrýarlar. Pişik, stol, adam, ýyldyrym, kitap sahypasy, tigir - bularyň hemmesi aýratyn synplary ulanyp programmaňyzda dörediler. Indi synpda döreden üýtgeýänlerimize göz aýlalyň Cat. Bulara meýdanlar ýa-da mysal üýtgeýjileri diýilýär . Aslynda bu at olaryň düýp manysyny açýar. Synpyň her mysalynda (üýtgeýjisi) bu üýtgeýjiler bolar Cat. nameDöredýän her bir pişigimiziň öz üýtgeýjisi we özüne mahsus aýratynlygy bolar age. Umuman mantykly: hakyky pişikler bilen hemme zat birmeňzeş :) Mysal üýtgeýjilerinden başga-da başgalary bar - synp üýtgeýjileri ýa-da statiki üýtgeýjiler. Mysalymyza goşalyň:
public class Cat {

    String name;
    int age;

    static int count = 0;

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = "Barsik";
        count++;

        Cat vasia = new Cat();
        vasia.age = 5;
        vasia.name = "Vasya";
        count++;

        System.out.println("We created a cat named" + barsik.name + ", his age - " + barsik.age);
        System.out.println("We created a cat named" + vasia.name + ", his age - " + vasia.age);

        System.out.println("Total number of cats = " + count);
    }
}
Konsol çykyşy:

Мы создали кота по имени Барсик, его возраст - 3
Мы создали кота по имени Вася, его возраст - 5
Общее количество котов = 2
Indi synpymyzda täze üýtgeýji bar - count(mukdar). Döredilen pişikleri sanamaga jogapkärdir. Her gezek esasy usulda pişik döredenimizde, bu üýtgeýjini 1-e köpeldýäris. Bu üýtgeýji statiki açar söz bilen kesgitlenýär . Bu , synpyň belli bir obýektine däl-de, synpa degişlidigini aňladýar . Elbetde, bu mantykly: her pişigiň öz ady bolmaly bolsa, hemmeler üçin bir pişik hasaplaýjy gerek. Statik sözüniň size ýetmegine mümkinçilik berýän zat - countähli pişikler üçin birmeňzeş üýtgeýji. Üns beriň: ony konsola çap edenimizde ýazmaýarys barsik.countýa-da ýazmaýarys vasia.count. Ol Barsik ýa-da Wasýa degişli däl - ol tutuş synpa degişlidir Cat. Şonuň üçin bu ýönekeý count. Şeýle hem ýazyp bilersiňiz Cat.count- bu hem dogry bolar. Bu konsola üýtgeýjini çykarmak bilen nameişlemez :
public class Cat {

    String name;
    int age;

    static int count = 0;

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = "Barsik";
        count++;

        System.out.println("We created a cat named" + name + ", his age - " + barsik.age);

        System.out.println("Total number of cats = " + count);
    }
}
Roralňyşlyk! nameHer pişigiň özüne degişlidir. Ine, düzüji bulaşýar. "Ady konsola çykaryň? Kimiň ady ?: /"

Usullar

Üýtgeýjilerden başga-da, her synpyň usullary bar. Olar hakda aýratyn leksiýada has jikme-jik gürleşeris, ýöne umumy pikirler gaty ýönekeý. Usullar synpyňyzyň işleýşidir; bu synpyň obýektleri näme edip biler. Usullaryň biri bilen eýýäm tanyş - bu main(). Emma usul main, ýadyňyzda bolsa, statikdir, ýagny tutuş synpa degişlidir (logika üýtgeýänler bilen deňdir). Adaty, statik däl usullary diňe döreden aýratyn obýektlerimize çagyryp bolar. Mysal üçin, pişik üçin synp ýazmak islesek, programmamyzda pişigiň haýsy funksiýalara eýe bolmalydygyna düşünmelidiris. Şundan ugur alyp, munuň üçin birnäçe usul ýazalyň:
public class Cat {

    String name;
    int age;

    public void sayMeow() {
        System.out.println("Meow!");
    }

    public void jump() {
        System.out.println("Jumping gallop!");
    }

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = "Barsik";

        barsik.sayMeow();
        barsik.jump();

    }
}
Bolýar, indi synpymyz hakyky pişigiň beýanyna meňzeýär! Indi diňe ady we ýaşy bolan Barsik atly pişik ýok. Mundan başga-da, meow we böküp bilýär! Şeýle “işleýişsiz” haýsy pişik :) Biz belli bir obýekt alýarys - barsikwe onuň usullaryna jaň edýäris sayMeow()we jump(). Konsola seredýäris:

Мяу!
Прыг-скок!
Hakyky pişik! :)

Öz synplaryňyzy döretmek. Abstraksiýa

Geljekde öz sapaklaryňyzy ýazmaly bolarsyňyz. Olary ýazanyňyzda nämä üns bermeli? Üýtgeýjiler hakda aýdýan bolsak, abstraksiýa diýilýän zady ulanmaly . Abstraksiýa obýekte gönükdirilen programmirlemegiň dört esasy ýörelgesidir. Bu obýektiň esasy, iň möhüm aýratynlyklaryny görkezmegi we tersine - ikinji derejeli, ähmiýetsizleri taşlamagy öz içine alýar. Mysal üçin, kompaniýanyň işgärleriniň faýlyny döredýäris. Işgärleriň obýektlerini döretmek üçin synp ýazdyk Employee. Işgäri kompaniýa faýlynda beýan etmek üçin haýsy aýratynlyklar möhümdir? Doly ady, doglan senesi, sosial üpjünçilik belgisi, salgyt şahsyýet belgisi. Emma kompaniýanyň işgäriniň kartasyndaky beýikligine, gözüne we saç reňkine mätäçligimiz ýok. Kompaniýa bu maglumata mätäç däldir. Şonuň üçin synp üçin üýtgeýjileri Employeebelläris we biz üçin zerur däl maglumatlary (gözüň reňki ýaly) terk ederis we abstrakt ederis . Aöne modelleme gullugy üçin surat modelleriniň katalogyny döretsek, ýagdaý düýpgöter üýtgeýär. Moda modelini, beýikligini, göz reňkini we saç reňkini suratlandyrmak biziň üçin gaty möhümdir, ýöne TIN belgisi biziň üçin düýbünden möhüm däl. Şonuň üçin synpda üýtgeýjiler döretmeli ,, . Abstraksiýa şeýle işleýär, ýönekeý! :) String nameint ageint socialInsuranceNumberint taxNumberModelint heightString hairString eyes

Gurluşykçylar

Geliň, pişigimiziň mysalyna gaýdyp geleliň.
public class Cat {

    String name;
    int age;

    public static void main(String[] args) {
        Cat barsik = new Cat();

        System.out.println("Something has been happening in the program for 2 hours...");

        barsik.age = 3;
        barsik.name = "Barsik";

    }
}
Bu koda serediň we programmamyzda nämäniň bardygyny çaklamaga synanyşyň. Programmamyzda iki sagatlap ady ýa-da ýaşy bolmadyk pişik bardy! Elbetde, bu düýbünden ýalňyş. Weterinariýa klinikasynyň maglumatlar bazasynda olar hakda maglumat bolmasa pişikler bolmaly däldir. Indi ony programmistiň elinde goýýarys. Adyny we ýaşyny görkezmegi ýatdan çykarmasa, hemme zat gowy bolar. Forgetatdan çykarsa, maglumatlar bazasynda ýalňyşlyk bolar, näbelli pişikler. Bu meseläni nädip çözüp bileris? Pişikleriň adyny we ýaşy bolmazdan döredilmegini nädip gadagan etmeli. Ine, konstruktor funksiýalary bize kömek edýär . Ine bir mysal:
public class Cat {

    String name;
    int age;

    //constructor for class Cat
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat("Barsik", 5);
    }
}
Konstruktor , esasan, synp obýektleri üçin şablon. catBu ýagdaýda, her bir obýekt üçin iki argumentiň - setir we san görkezilmelidigini kesgitleýäris . Indi atsyz pişigi döretmäge synanyşsak, üstünlik gazanyp bilmeris.
public class Cat {

    String name;
    int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat(); //error!
    }
}
Indi synpda konstruktor bar bolsa, Java düzüjisi obýektleriň nähili bolmalydygyny bilýär we görkezilen argumentler bolmazdan obýektleriň döredilmegine ýol bermeýär. thisIndi konstruktoryň içinde görýän açar sözüňize seredeliň . Hemme zat onuň bilen ýönekeý. Iňlis dilinde "bu" "şu, şu" diýmegi aňladýar. .Agny, bu söz belli bir obýekti görkezýär. Konstruktordaky kod
public Cat(String name, int age) {
    this.name = name;
    this.age = age;
}
göni manyda terjime edilip bilner: " bu pişigiň ady (biz döredýäris) = konstruktorda görkezilen at argumenti. bu pişigiň ýaşy (biz döredýäris) = konstruktorda görkezilen ýaş argumenti." Konstruktor ot açandan soň, pişigimize ähli zerur bahalaryň berlendigini barlap bilersiňiz:
public class Cat {

    String name;
    int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat("Barsik", 5);
        System.out.println(barsik.name);
        System.out.println(barsik.age);
    }
}
Konsol çykyşy:

Барсик
5
Gurluşykçy gutarandan soň:
Cat barsik = new Cat("Barsik", 5);
Içinde aşakdakylar bolup geçdi:
this.name = "Barsik";
this.age = 5;
Obýekt barsik(bolsa this) konstruktor argumentlerinden bahalar berildi. Aslynda, synpda konstruktorlary görkezmeseňiz, konstruktory işden çykarar ! Emma bu nädip mümkin? O_O Hakykat, Java-da ähli synplarda deslapky konstruktor diýilýän zat bar . Munuň hiç hili argumenti ýok, ýöne her gezek haýsydyr bir synpyň obýekti döredilende ot alýar.
public class Cat {

    public static void main(String[] args) {

        Cat barsik = new Cat(); //this is where the default constructor worked
    }
}
Bir seretseň bu göze ilmeýär. Bir obýekt döredip, ony döretdik, dizaýneriň işi nirede? Muny görmek üçin, öz elimiz bilen synp üçin boş konstruktor ýazalyň Catwe onuň içinde konsola käbir sözlem çykararys. Görkezilse, konstruktor işledi.
public class Cat {

    public Cat() {
        System.out.println("Created a cat!");
    }

    public static void main(String[] args) {

        Cat barsik = new Cat(); //this is where the default constructor worked
    }
}
Konsol çykyşy:

Создали кота!
Ine, tassyklama Adaty konstruktor sapaklaryňyzda elmydama görünmeýär. Emma munuň ýene bir aýratynlygyny bilmeli. Argumentler bilen käbir konstruktor döredeniňizde, deslapky konstruktor synpdan ýitýär. Munuň subutnamasy, aslynda ýokarda gördük. Ine şu kodda:
public class Cat {

    String name;
    int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat(); //error!
    }
}
Ady we ýaşy bolmasa pişik döredip bilmedik, sebäbi Cat: string + number üçin konstruktor kesgitledik. Adaty konstruktor şondan soň derrew synpdan ýitdi. Şonuň üçin ýadyňyzdan çykarmaň: synpyňyzda boş gurluşyk ýaly birnäçe konstruktor gerek bolsa, ony aýratyn döretmeli . Mysal üçin, weterinariýa hassahanamyz gowy işler etmek we atlaryny we ýaşyny bilmeýän öýsüz pişiklere kömek etmek isleýär. Soňra kodumyz şeýle bolmaly:
public class Cat {

    String name;
    int age;

    //for domestic cats
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //for street cats
    public Cat() {
    }

    public static void main(String[] args) {

        Cat barsik = new Cat("Barsik", 5);
        Cat streetCat = new Cat();
    }
}
Adaty konstruktory aç-açan kesgitlänimizden soň, iki görnüşli pişigi hem döredip bileris. Konstruktorda bahalary aç-açan belläp bilersiňiz, diňe argumentlerden almaň. Mysal üçin, köçe pişikleriniň hemmesini "Köçe pişiginiň belgisi ..." ady bilen maglumatlar bazasyna ýazyp bileris:
public class Cat {

    String name;
    int age;

    static int count = 0;

    public Cat() {
        count++;
        this.name = "Street cat number" + count;
    }

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat streetCat1 = new Cat();
        Cat streetCat2 = new Cat();
        System.out.println(streetCat1.name);
        System.out.println(streetCat2.name);
    }
}
Bizde countköçe pişiginiň hasaplaýjysy bar. Her gezek deslapky konstruktory işledenimizde, ony 1-e köpeldýäris we şol belgini pişigiň ady hökmünde belleýäris. Gurluşykçy üçin argumentleriň tertibi gaty möhümdir. Geliň, konstruktorymyzda ady we ýaş argumentlerini çalşalyň.
public class Cat {

    String name;
    int age;

    public Cat(int age, String name) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat("Barsik", 10); //error!
    }
}
Roralňyşlyk! Konstruktor aç-açan suratlandyrýar: obýekt döredilende, tertipde san we setirdenCat geçmeli . Şonuň üçin kodumyz işlemeýär. Öz synplaryňyzy döredeniňizde muny ýadyňyzdan çykarmaň we muny ýatda saklaň:
public Cat(String name, int age) {
    this.name = name;
    this.age = age;
}

public Cat(int age, String name) {
    this.age = age;
    this.name = name;
}
Bular düýbünden başga iki dizaýner! Indi materialy birleşdirmek üçin birnäçe meseläni çözüň :)
  • Gadymyýet muzeýi.
Siziň wezipäňiz synpy dizaýn etmek Artifact. Muzeýde saklanýan artefaktlar üç görnüşlidir. Birinjisi, muzeý tarapyndan bellenen seriýa belgisinden başga hiç zat bilinmeýär (mysal üçin: 212121). Ikinjisi, seriýa belgisi we döredilen medeniýeti belli (mysal üçin: 212121, “Aztekler”). Üçünji görnüş, seriýa belgisiniň belli bolmagy, döredilen medeniýeti we döredilişiniň takyk ýaşy (mysal üçin: 212121, “Aztekler”, 12). ArtifactMuzeýde saklanýan gadymyýetleri suratlandyrýan synp dörediň we onuň üçin zerur mukdarda gurluşykçylary ýazyň. Usulda main(), her görnüşden bir artefakt dörediň.
public class Artifact {

    public static void main(String[] args) {
    }
}
  • Duşuşyk web sahypasy
Tanyşlyk sahypasy üçin ulanyjy maglumatlar bazasyny döredýärsiňiz. Theöne mesele, haýsy tertipde görkezilmelidigini ýatdan çykardyňyz we eliňizde tehniki aýratynlyklar ýok. Meýdanlary - ady ( ), ýaşy ( ) we beýikligi ( ) Userboljak synpy dizaýn ediň . Adyny, ýaşyny we beýikligini islendik tertipde kesgitlemek üçin zerur mukdarda konstruktor dörediň. Stringshortint
public class User {

    String name;
    short age;
    int height;

    public static void main(String[] args) {

    }
}
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION