Sobes.tech
Middle

Dart-ში აბსტრაქტული კლასი და მიკსინი რა განსხვავებაა?

sobes.tech AI

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

აბსტრაქტული კლასი:

  • პირდაპირი ინსტანცირება არ შეიძლება.
  • შეიძლება შეიცავდეს აბსტრაქტულ მეთოდებს (რეალიზაციის გარეშე) და რეალიზებულ მეთოდებს.
  • კლასი იშლება აბსტრაქტული კლასი extends გასაღების სიტყვით.
  • კლასი შეიძლება იშლება მხოლოდ ერთი კლასი (სინგლ თაობა).

მიქსინი:

  • პირდაპირი ინსტანცირება არ შეიძლება.
  • კონსტრუქტორები არ შეიძლება ჰქონდეს.
  • შეიძლება შეიცავდეს რეალიზებულ მეთოდებს, მაგრამ არ შეიძლება ჰქონდეს აბსტრაქტული მეთოდები (Dart 2.1-მდე, სადაც გამოჩნდა აბსტრაქტული მიქსინები).
  • კლასები იყენებენ მიქსინების ფუნქციონალობას with გასაღების სიტყვით.
  • კლასი შეიძლება გამოიყენოს რამდენიმე მიქსინი.
  • გამოიყენება კოდის გადამეორებისთვის და ფუნქციონალობის დამატებისთვის კლასებს შორის, მემკვიდრეობის გარეშე. არსებითად, ეს საშუალებას აძლევს "ჩამატოთ" ქცევა.

აბსტრაქტული კლასი მაგალითი:

abstract class Animal {
  void makeSound(); // აბსტრაქტული მეთოდი
  void eat() {
    print('ჭამა...');
  }
}

class Dog extends Animal {
  @override
  void makeSound() {
    print('ვუוף!');
  }
}

მიქსინის მაგალითი:

mixin CanJump {
  void jump() {
    print('ხტომა!');
  }
}

class Cat with CanJump { }

შედარება სქემატურად:

ნიშნული აბსტრაქტული კლასი მიქსინი
ინსტანცირება არა არა
კონსტრუქტორი შეიძლება ჰქონდეს არ შეიძლება ჰქონდეს
აბსტრაქტული მეთოდები შეიძლება ჰქონდეს არ შეიძლება (Dart 2.1-მდე)
რეალიზებული მეთოდები შეიძლება ჰქონდეს შეიძლება ჰქონდეს
გამოყენება extends with
მემკვიდრეობა/გამოყენება ერთჯერადი მემკვიდრეობა მრავალჯერადი გამოყენება
დანიშნულება საერთო კონტრაქტის განსაზღვრა კოდის გადამეორება, ქცევის დამატება