Algoritmlash asoslari


qayta yuklanuvchi funksiya


Download 1.32 Mb.
bet10/16
Sana12.06.2020
Hajmi1.32 Mb.
#117719
1   ...   6   7   8   9   10   11   12   13   ...   16
Bog'liq
Algoritmlash asoslari

qayta yuklanuvchi funksiya bo'lmaydi. Chunki static funksiyalar klass bilan bog'langan va u ob’yekt bilan bog'liq. Main funksiyalari ham qayta yuklanmaydi, chunki u static funksiyadir.


Yuklanma funksiya

Qayta yuklanuvchi funksiya

Yuklanma funksiya klass ichida bo'ladi

Qayta yuklanuvchi funksiya ikkita klass ichida bo'ladi, ya'ni bir-biri bilan bog'langan klasslarda.

Yuklanma funksiya parametrlari har xil bo'ladi

Qayta yuklanuvchi funksiya parametrlari bir xil bo'lishi shart

Yuklanma funksiyada polemorfizm kompilyatsiya vaqtida ishlatiladi

Qayta yuklanuvchi funksiyada polemorfizmdan runtime da foydalaniladi

Yuklanma funksiyada qaytarayotgan ma'lumot turlari o'xshashi yoki o'xshamasligi mumkin

Qayta yuklanuvchi funksiya qaytarayotgan ma'lumot turlari o'xshash bo'lishi kerak



19-dars - Javada polimorfizm
Ob’yektga abstrakt darajada qarash xususiyati. Masalan, turli xil oynalar mavjud: deraza oynasi, eshik oynasi, mashina oynasi, telefon oynasi. Bularning barchasi bir biridan ishlatilish sohasi, tuzulishi, shakli bilan farq qiladi. Lekin barchasini umumiy qilib oyna deb qarash mumkin. Polimorfizm turli xil ob’yektlar bilan bir xil uniformada ishlash imkoniyatini beradi.

Polimorfizm orqali bir jarayonni turli yo'llar bilan tashkillashtirishimiz mumkin. Polimorfizm so'zi yunoncha ikki so'zning birikmasidan tashkil topgan «poly» — Ko'p va «morphs» — formalar. Polimorfizm ham ko'p formalar degan ma'noni anglatadi.

Javada polimorfizmni ikki turi mavjud: programma kompilyatsiya bo'layotgan vaqtda sodir bo'ladigan polimorfizm (compile time polymorphismstatic polymorphism) va programma ishlab turgan vaqtda sodir bo'ladigan polimorfizm (runtime polymorphismdynamic polymorphism). Javada polimorfizm funksiyalarni qayta yuklash (overload) va qayta yozish (override) bilan amalga oshiriladi.
Kompilyatsiya vaqtidagi polimorfizm

Agar funksiyani qayta yuklansa (overload) bu — (compile time polimorfizmga) kompilyatsiya vaqtidagi polimorfizmga misol bo'ladi. Funksiyalarni qayta yuklash haqida oldingi maqolalarimizda to'xtalib o'tganmiz.

Quyidagi misolga e'tiboringizni qarating:

Source code

   

  • class X

  •  

  • {

  •  

  • void metodA(int num)

  •  

  • {

  •  

  • System.out.println ("metodA:" + num);

  •  

  • }

  •  

  • void metodA(int num1, int num2)

  •  

  • {

  •  

  • System.out.println ("metodA:" + num1 + "," + num2);

  •  

  • }

  •  

  • double metodA(double num) {

  •  

  • System.out.println("metodA:" + num);

  •  

  • return num;

  •  

  • }

  •  

  • }

  •  

  •  

  • class Y

  •  

  • {

  •  

  • public static void main (String args [])

  •  

  • {

  •  

  • X Obj = new X();

  •  

  • double natija;

  •  

  • Obj.metodA(20);

  •  

  • Obj.metodA(20, 30);

  •  

  • result = Obj.metodA(5.5);

  •  

  • System.out.println("Javob:" + result);

  •  

  • }

  •  

  • }

Natija:

metodA:20

metodA:20,30

metodA:5.5

Javob:5.5
Yuqoridagi misolda, X classning 3 ta funksiyasi bor. Uchala funksiyalarning ham nomlari bir xil — metodA, ammo funksiyalarning argumentlarida farqlar mavjud. Kompilyatsiya vaqtida kompilyator funksiyaga yuborilayotgan argumentlarning soni va ma'lumot turiga qarab kerakli funksiyani tanlab oladi. Qaysi funksiyalarni chaqirish kompilatsiya vaqtida aniqlanishi tufayli ham bu polimorfizm turi kompilyatsiya vaqtidagi polimorfizm deb nomlanadi.

Kompilyatsiya vaqtidagi polimorfizmni yana (Static binding) statik bog'lash, (Early binding) erta bog'lash deb ham ataladi.
Ishchi vaqtdagi kompilyatsiya (Runtime polimorfizm)

Dastlab casting, up-casting va down-casting tushunchalari bilan tanishib olaylik (Aslida, ishchi vaqtdagi polimorfizmni tushunish uchun faqat up-casting ni o'zini bilish yetadi, ammo men to'liqroq yozdim). Ob’yektni bir turdan boshqa turga o'tkazishga (casting) deyiladi.

Agar ota klassning ob’yekti bola klassga o'tkazilsa bu down-casting deyiladi. Misol:

Object satrObject = "Bu shunchaki satr"; // Object – ota class

String satrString = (String)Ob’yektSatr; // String – Object classning bola classi

Yuqoridagi misolda Object turidagi o'zgaruvchi (satrObject) String turiga o'zgartirilyapti. Bilamizki, Ob’yekt klass barcha classlarning otasi hisoblanadi.

Agar bola klassning ob’yekti ota klass turiga o'tkazilsa bu up-casting deyiladi. Misol:

String satrString = "Bu shunchaki satr"; Object satrObject = (Object)satrString;

Agar ota klassning o'zgaruvchisi bola klass ob’yektini ko'rsatsa (xotiradagi adresini ko'rsatsa) ham up-casting deyiladi.
Misol:

Source code

   

  • class A{}

  •  

  • class B extends A{}

  •  

  • A a = new B(); //upcasting


Yuqoridagi misolda A class toifasidagi a o'zgaruvchi (reference variable) B bola classning ob’yektini ko'rsatadi (xotiradagi manzilini ko'rsatadi).

Runtime polimorfizmda bola classdagi override qilingan metod, ota class toifasidagi o'zgaruvchi orqali chaqiriladi. Quyidagi misolga qarang:

Source code

   

  • class Chevrolet{

  •  

  • void run(){System.out.println("running");}

  •  

  • }

  •  

  • class Malibu extends Chevrolet{

  •  

  • void run(){System.out.println("Chevrolet Malibu");}

  •  

  •  

  • public static void main(String args[]){

  •  

  • Chevrolet ch = new Malibu();//upcasting

  •  

  • ch.run();

  •  

  • }

  •  

  • }

Natija:

Chevrolet Malibu
Yuqoridagi misolda biz ikkita klass yaratyapmiz. Malibu class Chevrolet class dan nasl olayapti va run() funksiyani qayta yozyapti(override). Qayta yozilgan run funksiya ota klass turidagi o'zgaruvchi ch orqali chaqirilayapti. ch o'zgaruvchi Malibu turidagi ob’yektni ko'rsatayotgani uchun Malibu klassda qayta yozilgan funksiya chaqiriladi.



20-dars - Javada abstrakt klass
Abstract kalit so'zi bilan yaratilgan klasslar abstrakt klasslar deb nomlanadi. Abstrakt klasslar abstakt funksiyalar (tanasi yozilmagan funksiya) yoki abstrakt bo'lmagan funksiyalardan (tanasi yozilgan funksiya) tashkil topgan bo'ladi.

Abstrakt klass quyidagicha e'lon qilinadi:

abstract class A{

}

  • Abstrakt klasslar odatda super(ota) klasslar yaratishda ishlatiladi;

  • Abstrakt klasslardan yaratilayotgan klasslarimizni sxemasini ya'ni skletini yaratishda foydalaniladi;

  • Abstrakt klassimizda undan meros oladigan klasslar uchun umumiy bo'lgan funksiyalar, konstantlar, o'zgaruvchilar e'lon qilinadi.

Tanasi (implementation) yozilmagan va abstract kalit so'zi bilan yaratilgan funksiya — abstrakt funksiya deyiladi.

abstract void funksiya();

Abstrakt funksiyasi bor bo'lgan abstrakt klassga misol:

Source code

   

  • public abstract class Mashina {

  •  

  • abstract void madeli();

  •  

  • abstract void mashinaTuri();

  •  

  • abstract void uzunligi();

  •  

  • abstract void rangi();

  •  

  • }

  •  

  • public class Malibu extends Mashina{

  •  

  • @Override

  •  

  • void madeli() {

  •  

  • System.out.println("Chevrolet");

  •  

  • }

  •  

  • @Override

  •  

  • void mashinaTuri() {

  •  

  • System.out.println("Malibu");

  •  

  • }

  •  

  • @Override

  •  

  • void uzunligi() {

  •  

  • System.out.println("4.7 metr");

  •  

  • }

  •  

  • @Override

  •  

  • void rangi() {

  •  

  • System.out.println("Qora");

  •  

  • }

  •  

  • public static void main(String[] args) {

  •  

  • Mashina mashina = new Malibu();

  •  

  • mashina.madeli();

  •  

  • mashina.mashinaTuri();

  •  

  • mashina.uzunligi();

  •  

  • mashina.rangi();

  •  

  • }

  •  

  • }

Natija :

Chevrolet

Malibu

4.7 metr

Qora
Yuqoridagi misolda Malibu klassi abstrakt funksiyalari (modeli, mashinaTuri, uzunligi, rangi) bor bo'lgan Mashina abstarkt klassidan nasl olyapti va uning abstrakt klassi tanasini realizatsiya(Override) qilayapti.

Amaliyotda abstrakt klass bir nechta klasslar uchun ota klass vazifasini bajaradi va abstrakt funksiyalar turli bola klasslarda turlicha realizatsiya qilinadi.

Shuningdek abstrakt klass konstruktor, tanasi bor funksiya, ma'lumotlar va hattoki main() funksiyaga ega bo'lishi mumkin. Quyidagi misolga qarang:

Esda tuting: Agar klass tarkibida bitta bo'lsa ham abstarkt funksiya mavjud bo'lsa, klass ham abstract bo'lishi kerak.

Esda tuting: Agar biror klass abstrakt klassdan voris olsa, uning barcha abstrakt funksiyalarini realizatsiya qilishi kerak yoki o'zi ham abstrakt klass bo'lishi kerak.

@tuit_online kanali sizlar uchun maxsus...
21-dars - Javada interfeys
Javada interfeyslar orqali to'liq abstraktsiyani tashkillashtirish mumkin. Interfeys tarkibida funksiyalarning faqat nomlari bo'lishi mumkin, ularning tanasi bo'lishi mumkin emas(Java 8 dan boshlab default funksiyalarga funksiyaning bajarilish qismi yozilishi qo'shildi). Shuningdek, Interfeys tarkibida ma'lumotlar bo'lishi ham mumkin.

Interfeyslarda o'zgaruvchilar e'lon qilinmaydi unda faqat o'zgarmas qiymatlar –final qiymatlar e'lon qilinadi. Interfeysga bitta misol keltirsak.

Source code

   

  • public interface Dasta {

  •  

  • void ishlatilishSohasi();

  •  

  • void tayorlanganMatirial();

  •  

  • void size();

  •  

  • }

Dasta nomli interfeys yaratildi, unda  ishlatilishSohasi(), tayorlanganMatirial(), size() nomli funksiyalari bor.

Source code

   

  • public class Pichoq implements Dasta{

  • @Override

  • public void ishlatilishSohasi() {

  • System.out.println("Pichoq uchun");

  • }

  • @Override

  • public void tayorlanganMatirial() {

  • System.out.println("Yog'och");

  • }

  • @Override

  • public void size() {

  • System.out.println("15 sm");

  • }

  • public static void main(String[] args) {

  • Pichoq pichoq = new Pichoq();

  • pichoq.ishlatilishSohasi();

  • pichoq.tayorlanganMatirial();

  • pichoq.size();

  • }

  • }


Ko'rib turganingizdek, klass yaratildi va Dasta interfeysidan (implement olindi) foydalanildi. Bu holatda dasta barcha dastasi bor ob’yektlar uchun umumiydir.

default funksiyaga misol:

Source code

   

  • interface Formula {

  • double calculate(int a);

  • default double sqrt(int a) {

  • return Math.sqrt(a);

  • }

  • }

  • Formula formula = new Formula() {

  • @Override

  • public double calculate(int a) {

  • return sqrt(a * 100);

  • }

  • };

  • formula.calculate(100);     // 100.0

  • formula.sqrt(16);

Esda tuting: Java kompilyatori interfeys tarkibidagi funksiyalarga public va abstract kalit so’zlarni, interfeys tarkibidagi ma’lumotlarga esa public, static va final kalit so’zlarni qo’shadi.



Bir klass bir vaqtda bir nechta interfeyslardan foydalanishi (implementation) mumkin. Quyidagi misolga qarang:




Source code

   
1   ...   6   7   8   9   10   11   12   13   ...   16




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling