Sobes.tech
Junior

Jakie aspekty programowania obiektowego występują w języku Dart?

sobes.tech AI

Odpowiedź od AI

W Dart istnieją następujące aspekty programowania obiektowego:

  • Klasy i obiekty: Możliwość definiowania klas z polami i metodami, tworzenia instancji klas (obiektów).
  • Enkapsulacja: Ukrywanie szczegółów implementacji za pomocą modyfikatorów dostępu (_ dla członków prywatnych) i metod getter/setter.
  • Dziedziczenie: Rozszerzanie funkcjonalności istniejących klas za pomocą słowa kluczowego extends.
  • Polimorfizm: Możliwość obsługi obiektów różnych klas w jednolity sposób poprzez wspólny interfejs lub klasę bazową.
  • Abstrakcja: Tworzenie klas abstrakcyjnych i interfejsów do definiowania kontraktów.

Przykład klasy w Dart:

class Animal {
  String _name; // Prywatne pole

  Animal(this._name); // Konstruktor

  String get name => _name; // Getter

  void makeSound() {
    print('Ogólny dźwięk zwierzęcia'); // Metoda
  }
}

Przykład dziedziczenia:

class Dog extends Animal {
  Dog(String name) : super(name); // Wywołanie konstruktora klasy bazowej

  @override // Nadpisanie metody klasy bazowej
  void makeSound() {
    print('Hau!');
  }
}

Przykład polimorfizmu:

void makeAnimalSound(Animal animal) {
  animal.makeSound(); // Wywołanie metody makeSound(), która może być różna dla różnych typów Animal
}

// Użycie:
// makeAnimalSound(Dog('Buddy')); // Wypisze "Hau!"

Dart obsługuje również mixiny za pomocą słowa kluczowego with, co pozwala na wielokrotne użycie kodu klas bez bezpośredniego dziedziczenia.