Interfeyslar

All lectures for UZ purposes
Daraja, Dars
Mavjud

— Salom, Amigo! Bugun senga kashfiyotlar kuni. Yangi va qiziqarli mavzu - bu interfeyslar.

— Ha. Shunday ajoyib kun, uyga borib to'la vannada cho'milishni rejalashtiryapman.

— Interfeys – bu Abstraksiya va Polimorfizmning farzandi. Interfeys juda abstrakt klassga o'xshaydi, u yerda hamma metodlar abstrakt. U klass kabi e'lon qilinadi, faqat kalit so'zi interface ishlatiladi. Misollar:

Kod Tavsif va Faktlar
interface Drawable
{
void draw();
}
interface HasValue
{
int getValue();
}
1) class o'rniga interface yozamiz.

2) Faqat abstrakt metodlarni o'z ichiga oladi (abstrakt so'zini yozish shart emas).

3) Aslida interfeyslarning barcha metodlari — public.

interface Element extends Drawable, HasValue
{
int getX();
int getY();
}
Interfeys faqat interfeyslardan meros olishi mumkin.

Interfeyslarning ota-onalari ko'p bo'lishi mumkin.

abstract class ChessItem implements Drawable, HasValue
{
private int x, y, value;

public int getValue()
{
return value;
}

public int getX()
{
return x;
}

public int getY()
{
return y;
}

}
Klass bir nechta interfeyslardan (va faqat bitta klassdan) meros olish mumkin. Bunda implements kalit so'zi ishlatiladi.

Klass ChessItem abstrakt deb e'lon qilingan: u barcha meros olingan metodlarni amalga oshirgan, faqat drawdan tashqari.

Ya'ni klass ChessItem bitta abstrakt metodni o'z ichiga oladi: draw().

— Qiziq. Interfeyslar nima uchun kerak? Ularni qachon ishlatamiz?

— Interfeyslarning klasslarga nisbatan ikki kuchli ustunligi bor:

1) «Metodlar tavsifi»ni ularning amalga oshirilishidan ajratish.

Avvalroq senga aytgan edim, agar sen o'zingning klasslaring metodlarini boshqa klasslardan chaqirishga ruxsat bermoqchi bo'lsang, ularni public kalit so'zi bilan belgilash kerak. Agar faqat o'z klassingdan chaqirishni istasang, ularni private kalit so'zi bilan belgilash kerak. Boshqa so'zlar bilan aytganda, biz klass metodlarini ikki kategoriya ajratamiz: «hamma uchun» va «faqat o'zimiz uchun».

Interfeyslar yordamida, bu bo'linishni yanada kuchaytirish mumkin. Biz maxsus «hamma uchun klass» va «o'zimiz uchun klass» yaratamiz, ikkinchisi birinchisidan meros oladi. Bu taxminan quyidagicha:

Avval
class Student
{
 private String name;

 public Student(String name)
 {
  this.name = name;
 }

 public String getName() 
 {
  return this.name;
 }

 private void setName(String name)
 {
  this.name = name;
 }
Bo'ldi
interface Student
{
 public String getName();
}

class StudentImpl implements Student
{
 private String name;
 public StudentImpl(String name) 
 {
  this.name = name;
 }
 public String getName()
 {
  return this.name;
 }
 private void setName(String name)
 {
  this.name = name;
 }
}
Avval
public static void main(String[] args)
{
 Student student = 
               new Student("Alibaba");
 System.out.println(student.getName());
}
Bo'ldi
public static void main(String[] args)
{
 Student student = 
               new StudentImpl("Ali");
 System.out.println(student.getName());
}

Biz klassimizni ikkiga ajratdik: interfeys va interfeysdan meros olgan klass.

— Va bunda qanday ustunlik bor?

— Bitta interfeysni (meros olish) turli klasslar amalga oshirishi mumkin. Har birida o'zining o'ziga xos harakati bo'lishi mumkin. Xuddi ArrayList va LinkedList – bu interfeys Listning ikki turli amalga oshirilishi.

Shunday qilib, biz nafaqat turli amalga oshirilishlarni yashiramiz, balki uni saqlovchi klassni ham yashiramiz (kodingizda faqat interfeys ko'rinishi mumkin). Bu dastur bajarilishi davomida, obyektlarni boshqalar bilan almashtirishga, obyektning harakatini uni ishlatuvchi barcha klasslardan yashirishga imkon beradi.

Bu polimorfizm bilan birgalikda juda kuchli texnologiya. Hozircha buni nima uchun qilish kerakligi aniq emas. Avvalo, o'nlab yoki yuzlab klasslardan iborat dasturlar bilan to'qnashishingiz kerak, interfeyslar sizning hayotingizni sezilarli darajada soddalashtirishi mumkinligini tushunishingiz uchun.

2) Ko'p martalik meros olish.

Java da barcha klasslar faqat bitta ota-bobo klassga ega bo'lishi mumkin. Boshqa dasturlash tillarida, klasslar tez-tez bir necha ota-bobo klasslarga ega bo'lishi mumkin. Bu juda qulay, ammo ko'plab muammolarni ham keltirib chiqaradi.

Javada bunga murosaga kelindi – klasslarning ko'p martalik meros olishini taqiqlash, lekin interfeyslarning ko'p martalik meros olishiga ruxsat berildi. Interfeys bir nechta interfeys ota-onalariga ega bo'lishi mumkin. Klass bir nechta interfeys ota-onalariga va faqat bitta ota-klassga ega bo'lishi mumkin.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION