O‘zbekiston respublikasi oliy va o‘rta maxsus ta’lim vazirligi tоshkеnt dаvlаt iqtisоdiyot universitеti
Download 1.96 Mb. Pdf ko'rish
|
Obyektga yo`naltirilgan dasturlash tillari
Nazorat uchun savollar 1. Komponentalarning standart sinflardan farqi nimadan iborat? 2. Хususiyatlar qanday e’lon qilinadi? 3. Voqealar ishlatgichlar qanday e’lon qilinadi? 4. Nomlar fazosi mexanizmidan foydalanish. 5. Ochiq oydin va o‘zgaruvchan e’lonlar nima uchun ishlatiladi? 118 15 bob. VORISLIKDAN FOYDALANISH ХUSUSIYAТLARI. INТERFEYSLAR 15.1. Object: global supersinf. equals va toString usullari Object sinfi hamma sinflar ajdodi hisoblanadi. Java tilida xar bir sinf Object sinfini kengaytiradi. Lekin class Employee extends Oblects yozish shart emas. Agar supersinf oshkor ko‘rsatilmagan bo‘lsa Object supersinf hisoblanadi. Java tilida xar bir sinf Object sinfini kengaytirgani uchun Object sinfi imkoniyatlarini bilish muximdir. Object tipidagi o‘zgaruvchini ixtiyoriy tipdagi obyektga ilova sifatida ishlatish mumkin: Object obj = new Employee("Garri Хaker", 35000); Bu tipdagi o‘zgaruvchidan foydalanish uchun avval boshlang‘ich tipni aniqlab, tiplarni keltirishni amalga oshirish lozim: Employee ye = (Employee) obj; Object sinfining equals usuli ikki obyekt bir xilligini tekshiradi. Lekin equals usuli Object sinfiga tegishli bo‘lgani uchun, ikkalasi bir xotira qismiga ilova qilganligini tekshiradi. Ikki obyekt ekvivalentligini tekshirish uchun equals usulini qo‘shimcha yuklash lozim. Mukammal equals usuli yaratish qoidalari. 1. Oshkor otherObject parametrini chaqirish — keyinchalik uning tipini other deb atalgan boshqa o‘zgaruvchi tipiga keltirish lozim. 2. Тekshirish, this va otherObject ilovalar bir xilmi: i f ( this == otherObject) return true; Odatda obyektlar maydonini solishtirgandan ko‘ra ilovalarni solishtirish osondir. 3. Тekshirish otherObject ilova nulga (null) tengmi. Agar xa bo‘lsa false qiymat qaytarish. Bu tekshirishni albatta amalga oshirish lozim. if (otherObject == null) return false; 4. Тekshirish this va other obyektlari bitta sinfga tegishlimi. Bu tekshirish "simmetriklik qoidasiga " ko‘ra majburiydir. if (getClass() != otherObject.getClass()) return false; 5. Тalab qilingan sinf o‘zgaruvchisiga otherObject obyektini o‘zgartirish: 119 ClassName other = (ClassName)otherObject; 6. Хamma maydonlarni solishtirish. Asosiy tipdagi maydonlar uchun == operatori, obyektli maydonlar uchun —equals usuli qo‘llanadi. Agar ikki obyekt hamma mydonlari bir xil bo‘lsa true qaytarish, aks holda false. return fieldl == other.fieldl && field.2. equals (other . field2) Masalan. class Employee{ public boolean equals(Object otherObject) { // Obyektlarni tez solishtirish, if (this == otherObject) return true; // Agar oshkor parametr — null, false qiymat qaytaradi, if (otherObject == null) return false; // Agar sinflar ustma ust tushmasa, ular ekvivalent emas. if (getClass () != otherObject.getClassO) return false; // Obyekt otherObject tipi Employee va u nulga teng emas. Employee other = (Employee) otherObject; // Obyektlar maydonlarini solishtirish, return name.equals(other.name) && salary = other.salary && hireDay.equals(other.hireDay); } } Obyekt tipini getClass usuli orqali aniqlanadi. Obyektlar o‘zaro teng bo‘lishi uchun bir sinf obyektlari bo‘lishlari kerak. Voris ichida avvval spersinf equals usulini chaqirish lozim. Agar bu tekshirish false qiymat qaytarsa, demak obyektlar teng emas. Agar tekshirish muvaffaqiyatli bajarilsa ostki sinf maydonlarini tekshirishga o‘tish mumkin. Masalan quyidagicha. class Manager extends Employee 120 { public boolean.equals(Object otherObject) { if (!super.equals(otherObject)) return false; Manager.other = (Manager)otherObject; // Usul super.equals tekshiradi // this va otherObject obyektlari bitta sinfga tegishlimi. return bonus == other.bonus; } } Object sinfining yana bir muxim usuli toString, bo‘lib obyektni satr shaklida qaytaradi. Bu usul deyarli hamma sinflarda qo‘shimcha yuklanadi, va obyekt xolatini bosmaga chiqarishga mo‘ljallangan. Ko‘p (hammasi emas) toString usullari sinf nomi dan iborat bo‘lib, kvadrat qavslarda maydonlari qiymatlari ko‘rsatiladi. Quyida Employee sinfining toString usuli realizatsiyasi ko‘rsatilgan. public String toString() { return "Employee[name" + name + ",salary =" + salary + ",hireDay =" + hireDay } Bu usulni takomillashtirish mumkin. Sinf nomini toString usuliga kiritmasdan, getClass().getName() usulini chaqiramiz va sinf nomini o‘z ichiga olgan satrni olamiz. public String toString() { return getClass().geName() + "[name=" + name + ",salary=" + salary + ",hireday=" + hireDay 121 } Endi toString usuli voris sinflar bilan ham ishlaydi. Albatta voris sinf yaratgan lasturchi o‘z toString usulini yaratishi va voris sinf nomini qo‘shishi lozim. Agar supersinfda getClass ().getNamef() usuli chaqirilsa, voris sinf super.ToString ( ) usulini chaqiradi. Manager sinfida toString usuliga misol. class manager extends Employee { public String toString() { return super.toString()+ "[bonus=" + bonus Endi Manager sinfi obyekti xolati quyidagi shaklda chiqariladi: Manager[name=...,salary=...,hireDay=...][bonus=...] Agar obyekt satr bilan "+" amali yordamida konkatenatsiya qilinsa Java tili kompilyatori obyekt joriy xolatini olish uchun avtomatik ravishda toString usulini chaqiradi. Birorr x — ixtiyoriy obyekt uchun dasturchi System.out.println(x) usulini chaqirsin; Bu holda println usuli x. toString () usulini chaqiradi va natija satrini chiqaradi. Object sinfida aniqlangan toString usuli sinf nomi va obyekt adresini chiqaradi. Masalan System.out.println(System.out); chaqirish natijasida quyidagi satr xosil bo‘ladi java.io.PrintStream@2f668 4 Buning sababi shuki PrintStream sinfida toString usuli qo‘shimcha yuklanmagan. Standart bibliotekaga tegishli ko‘p sinflarda toString usuli shunday aniqlanganki, uning yordamida dasturni sozlash uchun kerakli ma’lumot olish mumkin. Ba’zi sozlovchilar obyektlar xolatini ekranda akslantinrish uchun toString usulini |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling