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('თხილი ფრინავს');
}
}