4.2. Conceitos avançados de Dart: Herança e polimorfismo

Página 40

Em programação, a herança e o polimorfismo são dois conceitos fundamentais de orientação a objetos. No Dart, esses conceitos são implementados de maneira muito eficaz e intuitiva. Vamos começar com a herança.

Herança

A herança é um mecanismo que permite que uma classe herde as propriedades e métodos de outra classe. A classe que herda é chamada de subclasse ou classe derivada, e a classe da qual ela herda é chamada de superclasse ou classe base.

Em Dart, a herança é implementada usando a palavra-chave 'extends'. Por exemplo, considere a seguinte classe base 'Animal':

class Animal {
  void eat() {
    print('Eating...');
  }
}

Podemos criar uma subclasse 'Dog' que herda de 'Animal' da seguinte maneira:

class Dog extends Animal {
  void bark() {
    print('Barking...');
  }
}

Agora, um objeto da classe 'Dog' pode acessar tanto o método 'eat()' da classe base 'Animal', quanto o método 'bark()' da própria classe:

var d = Dog();
d.eat(); // Output: Eating...
d.bark(); // Output: Barking...

Isso é herança. A classe 'Dog' herda todas as propriedades e métodos da classe 'Animal' e também pode adicionar seus próprios métodos e propriedades.

Polimorfismo

O polimorfismo é um conceito que permite que um objeto seja tratado como uma instância de uma classe base, mesmo que seja realmente uma instância de uma subclasse. Isso é muito útil quando se deseja escrever código que pode lidar com objetos de várias classes diferentes, desde que todas essas classes sejam subclasses de uma certa classe base.

Em Dart, o polimorfismo é implementado através do uso de variáveis de tipo base para referenciar objetos de subclasse. Por exemplo, considere a seguinte classe base 'Shape' e duas subclasses 'Circle' e 'Square':

abstract class Shape {
  void draw();
}

class Circle extends Shape {
  void draw() {
    print('Drawing a circle...');
  }
}

class Square extends Shape {
  void draw() {
    print('Drawing a square...');
  }
}

Agora, podemos criar uma função que aceita um objeto de tipo 'Shape' e chama o método 'draw()' nele:

void drawShape(Shape shape) {
  shape.draw();
}

Podemos então passar um objeto 'Circle' ou 'Square' para esta função, e o método 'draw()' apropriado será chamado:

var c = Circle();
drawShape(c); // Output: Drawing a circle...

var s = Square();
drawShape(s); // Output: Drawing a square...

Isso é polimorfismo. A função 'drawShape()' pode lidar com qualquer objeto que seja uma instância de 'Shape' ou qualquer uma de suas subclasses.

Em resumo, a herança e o polimorfismo são dois conceitos muito poderosos em programação orientada a objetos que permitem escrever código mais reutilizável e flexível. No Dart, esses conceitos são implementados de maneira muito intuitiva e fácil de usar, tornando o Dart uma excelente escolha para o desenvolvimento de aplicativos.

Now answer the exercise about the content:

Qual dos seguintes conceitos em programação orientada a objetos permite que um objeto seja tratado como uma instância de uma classe base, mesmo que seja realmente uma instância de uma subclasse?

You are right! Congratulations, now go to the next page

You missed! Try again.

Next page of the Free Ebook:

414.3. Conceitos avançados de Dart: Mixins

Earn your Certificate for this Course for Free! by downloading the Cursa app and reading the ebook there. Available on Google Play or App Store!

Get it on Google Play Get it on App Store

+ 6.5 million
students

Free and Valid
Certificate with QR Code

48 thousand free
exercises

4.8/5 rating in
app stores

Free courses in
video, audio and text