JavaRush /Java Blogu /Random-AZ /Java-da üsullar

Java-da üsullar

Qrupda dərc edilmişdir
Çoxlarının eşitdiyi bir maraqlı prinsip var. Bu, "Parçala və Qələt Et" adlanır. Bu prinsip insan həyatının bir çox sahələrində, məsələn, siyasətdə istifadə olunur. Bu, dövlətdə çoxlu sayda heterojen hissələrin bölünməsini, bu hissələr arasında düşmənçiliyin qızışdırılmasını və istifadəsini bildirir. Başqa sözlə: hakimiyyətə potensial təhlükə yaradanlar arasında münaqişə yaratmaq. Amma biz proqramçıyıq, ona görə də bizi yalnız bu prinsipin texniki şərhi maraqlandırır. Və belədir: “Bölün və qalib gəl” prinsipi böyük problemi elementar hala gələnə qədər kiçik olanlara bölməkdir. Sonra onları ardıcıllıqla həll etməli və hər şeyi bir bütöv sistemdə birləşdirməlisiniz. Bu proqram verilən problemi həll etməlidir” Yəni siz sadəcə olaraq böyük bir problemi daha kiçiklərə bölürsünüz, bu da sizin həll etməyiniz üçün problem deyil. Və sonra həlli bir böyük birinə toplayırsınız. Bu sadə və faydalı prinsipə əməl etmək üçün Java proqramlaşdırma metodlarından istifadə edir. Java-da üsullar - 1Məsələn, biz robot boksçu yaradırıq. Onun yaxşı hərəkət etməsi, dəqiq zərbələr endirməsi, həmçinin zəif nöqtələrin axtarışında düşməni izləməsi bizim üçün vacibdir. Bütün bunları bir əsas metodda yazmaq yöndəmsiz olardı , elə deyilmi? Hər şeyi bir üsulla təsvir etsək, bu belə olacaq:
метод main() {
// Описание действий шага вперед
подача напряжения в отдельные модули;
поднятие ноги;
перевод в другую точку;
поставить ногу;
перенести вес на другую ногу;
если (противникАтакует()) {
        	// Описание действий уклонения робота.
        	...
} еслиНет {
        	// Описание действий обманного атакующего удара.
        	...
}
// Описание действий шага назад
...
}
Proqramın başqa bir yerində irəliyə doğru addım atmaq və ya təpik vurmaq lazım gələrsə nə etməli? Bütün hərəkətləri yenidən təsvir edin? Uyğun deyil. Çox təkrarlanan sətirlər var ki, onları itirmək asandır. Fəaliyyətin təfərrüatlarının təsvirini robot addımını yerinə yetirəcək ayrıca modulda yerləşdirməliyik. Və metodu bir sətirdə çağıra bilərik. Bu kimi bir şey:
метод шагВперед() {
// Описание действий шага вперед
  	подача напряжения в отдельные модули;
  	поднятие ноги;
  	перевод в другую точку;
  	поставить ногу;
  	перенести вес на другую ногу;
}

метод уклонение() {
  	// Действия для уклонения
  	...
}

метод обманныйАтакующийУдар() {
  	// Действия для удара
  	...
}

метод шагНазад() {
  	// Действия для шага назад
  	...
}

метод противникАтакует() {
	// Робот проверяет атакует ли противник
}

метод main() {
	шагВперед();
	если (противникАтакует()) {
        	уклонение();
	} еслиНет {
  	  обманныйАтакующийУдар();
	}
	шагНазад();
}
İndi biz robotun funksionallığını, həmçinin yığcam və aydın main() metodunu ayırdıq . Qalan üsullar da istənilən funksionallığa bölünə bilər, məsələn, aldadıcı Hücum Zərbə üsullarına bölünə bilər aldatma Hərəkət , Ayaq hərəkəti , hücum . Və onlar, öz növbəsində, bir sıra elementar olanları əldə etmək üçün daha sadə tapşırıqlara verilir. Yaxşı, indi hamısını Javanın qəbul edəcəyi formada gözəl yazaq.
public static void stepForward() {
  	    // Многострочный code, описывающий
  	    // действия робота для выполнения шага
  	    System.out.println("The robot takes a step forward");
}

public static void evasion() {
  	    // Действия для уклонения
  	    System.out.println("Robot shy of impact");
}

public static void deceptiveAttackBlow() {
  	    // Действия для удара
  	    System.out.println("The robot performs a deceptive strike");
}

public static void stepBack() {
  	    // Действия для шага назад
  	    System.out.println("The robot takes a step backwards");
}

public static void main(String[] args) {
    	stepForward();
    	if (isEnemyAttacked()) {
        		evasion();
    	} else {
  	    	deceptiveAttackBlow();
    	}
    	stepBack();
}

public static boolean isEnemyAttacked() {
    	// Метод проверяет, атакует ли враг. returns логическое meaning.
    	return true;
}
Başa düşürəm ki, bu kod indi sizin üçün bir az anlaşılmaz ola bilər, xüsusən də bəzi sözlər void , return və s. Pomidor atmağa tələsməyin, indi hər şeyi izah edəcəyəm. "Parçala və Qələt Et" paradiqmasının ümumi ideyası sizə aydın olmalıdır. Metodlar bu işdə bizə kömək edəcək. Metod bəyannamələrinin ümumi strukturu aşağıdakı kimidir:
модификатор_доступа возвращаемое_meaning Name_метода(принимаемые_параметры) {
   	//Тело метода
}

Giriş dəyişdiricisi

Giriş dəyişdiricisi bir neçə açar sözdür: ictimai , özəl , paket . Bu sözlər metodun əhatə dairəsini göstərir. Mən bunu sadə izah edəcəyəm: bu sözlə, deyəsən, başqaları ilə dadlı yemək paylaşırsınız. Dadlı sizin metodunuzdur. Şəxsidirsə , metodu digər siniflərlə paylaşmırsınız. Əgər paket varsa , siz yalnız paket daxilindəki siniflərlə paylaşırsınız (siniflər xüsusi paketlərdə toplanır, bunu daha sonra öyrənəcəksiniz). Yaxşı, ictimaiyyət göstərir ki, siz mehribansınız və bütün proqramla dadlı bir müalicə (metod) paylaşırsınız. Bu kimi bir şey. Bir neçə səviyyədən sonra bu sözlərin rolunu daha yaxşı başa düşəcəksiniz.

Dəyəri qaytarın

Yuxarıdakı nümunəyə baxın: boolean dəyərini qaytaran bir isEnemyAttacked istisna olmaqla, bütün üsullar void açar sözü ilə qeyd olunur . Metod void olaraq işarələnibsə , o, heç nə qaytarmaya bilər. Bu üsul sadəcə bir sıra hərəkətləri yerinə yetirir və budur. İndi əsas üsula diqqət yetirin . Boşluğu qaytaran üsullar metodun gövdəsində məhz belə adlanır. Lakin isEnemyAttacked metodu if ifadəsinin mötərizələri içərisində çağırılır . Boolean dəyəri qaytardığına görə, biz ara dəyişəni istifadə etmək deyil, onu birbaşa daxil etmək imkanı əldə edirik. Dəyərin qaytarılması return açar sözündən istifadə etməklə baş verir . Metod int növünü qaytarırsa , istənilən ifadədən metodu çağıra bilərik:
public static int getNumber() {
 	    return 5;
}

public static void main(String[] args) {
    	int result = 5 + 6 + getNumber();
    	System.out.println(result);
}
Nəticə:
16
getNumber metodu int dəyərini qaytarır , ona görə də biz onu ifadədən çağıra bilərik. Həmçinin, metod özünüz yaratdığınız da daxil olmaqla istənilən növü qaytara bilər. Metod üçün qaytarma növü təyin etmisinizsə, onda siz nəyisə qaytarmalısınız. Bunu belə yaza bilməzsiniz:
public static int findMaxNumber(int a, int b) {
 	if(a>b) {
 	    return a;
 	}
}
Tərtibatçı sizi danlayacaq ki, birinci şərt yerinə yetirildikdə nəyisə qaytarırsınız, ikinci şərt yerinə yetirildikdə isə yox.

Parametrlərin ötürülməsi

Parametrləri əməliyyat zamanı istifadə olunan metoda ötürə bilərsiniz. Ən primitiv nümunə iki ədədin cəmlənməsidir. Amma biz primitiv deyilik, elə deyilmi? Başqa bir nümunə götürək, olduqca stereotipikdir. Tutaq ki, bizdə chef() metodu var - aşpaz. Şorba inqrediyentlərini parametr blokunda bu üsula ötürə bilərik və nəticədə bu üsul şorbanı bizə qaytarır. Bunun kimi:
public static void main(String[] args) {
    	String[] ingredients;
    	// Инициализация массива ингредиентов
    	Soup soup = chef(ingredients);

}

public static Soup chef(String[] ingredients) {
    	Soup soup = new Soup();
    	// Процесс варки супа
    	return soup;
}
(Fərz edək ki, bizdə əvvəlcədən hazırlanmış Şorba sinfi var ) Əsas metodda biz inqrediyentlər massivi yaradırıq, sonra isə “aşpaza veririk” (onu aşpaz metoduna keçirik ) . “Aşpaz şorba hazırlayır” və sonra onu Şorba sinfinin obyekti kimi bizə qaytarır . Hər şey çox sadədir. Siz metoda istənilən parametrləri, primitiv tipləri, obyektləri, massivləri və s. ötürə bilərsiniz.

Parametrlərin istinad və dəyər üzrə ötürülməsi

Java proqramlaşdırma dilində istənilən parametrlər öz dəyərinə görə metoda ötürülür. Lakin bu mexanizm primitiv tiplər və obyektlər üçün fərqlidir. Əgər hər hansı bir primitiv növü metoda keçirib onu dəyişdirsəniz, o, əsas metodda dəyişməyəcək. Siz sadəcə olaraq dəyərin surətini keçdiniz və orijinal dəyişən qorunub saxlanıldı. Ən sadə misal:
public static void main(String[] args) {
    	int x = 1;
    	System.out.println(x);
    	getNumber(x);
    	System.out.println(x);

	}

	public static void getNumber(int i) {
    	i = i + 100;
	}
Nəticə:
on bir
Bununla belə, obyektlərin vəziyyətində dəyişikliklər orijinal obyektə təsir göstərir:
public class Program
{
	public static void main(String[] args) {
    	WiseMan wiseMan = new WiseMan();
    	wiseMan.setIq(300);
    	System.out.println(wiseMan);
    	changeObject(wiseMan);
    	System.out.println(wiseMan);

	}

	public static void changeObject(WiseMan m) {
    	m.setIq(100);
	}
}

public class WiseMan {
	int iq;

	public void setIq(int iq) {
    	this.iq = iq;
	}

	public int getIq() {
    	return iq;
	}

	public String toString() {
    	return "Our wise man has an IQ "+iq;
	}
}
Nəticə:
Bizim müdrikimizin IR 300-ü var Bizim müdrikimizin IR 100-ü var
Bizdə iq xüsusiyyəti olan WiseMan sinifimiz var . Və bu sahənin dəyərini idarə edən iki üsul. Əsas metodda biz wiseMan obyekti yaradırıq , iq dəyərini 300-ə təyin edirik . Sonra iq 300 ilə adaçayımızı changeObject metoduna keçirik.Amma bu üsulda o axmaq olur. Biz iq- in qiymətini 100-ə qoyuruq.Sonra əsas metodda obyekti çap edirik. Görə bilərsiniz ki, changeObject metodunda biz m dəyişənində başqa bir adaçayı manipulyasiya edirik . Bununla belə, biz orijinal obyektimizi dəyişdiririk. Məsələ burasındadır ki, əsas metoddakı wiseMan obyekti ilə changeObject metodundakı m obyekti eyni ağıllı adamdır və obyektə istinad parametr kimi metoda kopyalanır. Bir obyekti fərdi üsullarla redaktə edərkən bunu yadda saxlayın.

Nəhayət, statik dəyişdirici haqqında bir neçə söz

Ümumiyyətlə, burada bir neçə söz işləməyəcək, amma çalışacağam. Bu dəyişdirici ilə qeyd olunmayan müntəzəm metodlar sinif obyektinə aiddir. Statik metodlar isə sinfin özünə aiddir. Ayrı-ayrı obyektlərdə müntəzəm üsullardan istifadə edilə bilər. Yuxarıdakı nümunədən WiseMan sinfinə baxın . Hər bir müdrikin öz getIqsetIq metodları olacaq , çünki hər kəsin IQ səviyyəsi fərqlidir. Bu sinifə generatorAWisePhrase statik metodunu əlavə etsək , o zaman belə bir metodu obyektsiz çağıra bilərik:
WiseMan.generateAWisePhrase();
Ümumiyyətlə, bu məlumat hələlik kifayətdir, çünki statik haqqında bir neçə mühazirə yazmaq olar . Kodunuzda nizamı qorumaq üçün metod yazarkən bir neçə qaydaya əməl edin:
  • Metodlarınıza mənalı adlar verin ki, onların nə etdikləri aydın olsun.
  • Çox uzun üsullar yazmamağa çalışın. Optimal uzunluq 8-15 sətirdir.
  • Metod parametrlərinin sayı 4-5-dən çox olmamalıdır.
  • Kodunuzda iki dəfə oxşar funksionallıq varsa, düşünün: bəlkə bunu ümumiləşdirməyə və ayrıca bir üsula qoymağa dəyər?
Bu üsullar proqramınızın performansını yaxşılaşdırmağa və ən əsası kodunuzu daha oxunaqlı etməyə kömək edəcək.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION