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. Geliň, 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 Cat
we onuň üçin iki üýtgeýjini kesgitledik - setir name
we 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
. name
Dö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 name
iş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! name
Her 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ş - bumain()
. 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 - barsik
we 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 ýazdykEmployee
. 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 Employee
bellä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 name
int age
int socialInsuranceNumber
int taxNumber
Model
int height
String hair
String 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. cat
Bu ý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. this
Indi 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ň Cat
we 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 count
köç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.
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). Artifact
Muzeý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
User
boljak synpy dizaýn ediň . Adyny, ýaşyny we beýikligini islendik tertipde kesgitlemek üçin zerur mukdarda konstruktor dörediň. String
short
int
public class User {
String name;
short age;
int height;
public static void main(String[] args) {
}
}
GO TO FULL VERSION