Algoritmlash asoslari
qayta yuklanuvchi funksiya
Download 1.32 Mb.
|
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.
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 polymorphism, static polymorphism) va programma ishlab turgan vaqtda sodir bo'ladigan polimorfizm (runtime polymorphism, dynamic 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:
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:
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:
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:
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.
public interface Dasta { void ishlatilishSohasi(); void tayorlanganMatirial(); void size(); } Dasta nomli interfeys yaratildi, unda ishlatilishSohasi(), tayorlanganMatirial(), size() nomli funksiyalari bor.
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:
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:
Download 1.32 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling