Sobes.tech
Junior — Middle

ობიექტზე ორიენტირებული პროგრამირების სფეროში აბსტრაქტული კლასი და ინტერფეისის შორის რა განსხვავებები არსებობს?

sobes.tech AI

პასუხი AI-სგან

აბსტრაქტული კლასი და ინტერფეისი ობიექტზე ორიენტირებულ პროგრამირებაში კონტრაქტებისა და ქცევების აღწერის ორი გზა არიან, მაგრამ სხვადასხვა თვისებებით:

  • აბსტრაქტული კლასი შეიძლება შეიცავდეს აბსტრაქტულ მეთოდებს (შეუძლებელი განხორციელება), ასევე მეთოდებს with განხორციელება და ველებს (სტატუსი). ის ემსახურება როგორც ძირითადი კლასი, რომლისგანაც შეიძლება მემკვიდრეობა.
  • ინტერფეისი აღწერს მხოლოდ მეთოდების ხელმოწერებს (კონტრაქტი), არ შეიცავს სტატუსს და ჩვეულებრივ არ შეიცავს განხორციელებას (თუმცა ზოგიერთ ენაში შესაძლებელია დეფოლტ მეთოდები).

განსხვავებები:

  • კლასი შეიძლება მემკვიდრეობით მიიღოს მხოლოდ ერთი აბსტრაქტული კლასი, მაგრამ შეუძლია რამდენიმე ინტერფეისი განახორციელოს.
  • აბსტრაქტული კლასი შეიძლება ჰქონდეს კონსტრუქტორები, ინტერფეისი — არა.
  • აბსტრაქტული კლასი გამოიყენება, როდესაც საჭიროა ნაწილობრივ განხორციელება, ინტერფეისი — როდესაც მხოლოდ კონტრაქტის განსაზღვრა.

მაგალითი Dart (Flutter):

abstract class Animal {
  void eat(); // აბსტრაქტული მეთოდი
  void sleep() {
    print('ძინავს'); // განხორციელებული მეთოდი
  }
}

// ინტერფეისი Dart-ში — ეს არის კლასი მხოლოდ აბსტრაქტული მეთოდებით
abstract class Flyable {
  void fly();
}

class Bird extends Animal implements Flyable {
  @override
  void eat() {
    print('თხილი ჭამს');
  }

  @override
  void fly() {
    print('თხილი ფრინავს');
  }
}