A programação orientada a objetos (POO) é um paradigma de programação que utiliza a ideia de "objetos" para representar dados e métodos. Isso é particularmente útil quando se trata de criar aplicativos complexos, pois permite que os desenvolvedores organizem melhor seu código e o tornem mais reutilizável. Nesta seção, vamos introduzir o conceito de programação orientada a objetos em Dart, a linguagem de programação usada pelo Flutter.
1. Classes e Objetos
Na programação orientada a objetos, uma classe é um plano ou modelo a partir do qual os objetos são criados. Em Dart, você define uma classe usando a palavra-chave class
. Por exemplo, você pode ter uma classe chamada Person
que tem propriedades como name
e age
. Uma vez que você tem uma classe, você pode criar um objeto a partir dela. Por exemplo:
class Person { String name; int age; } void main() { Person person = Person(); person.name = 'John'; person.age = 30; }
Neste exemplo, Person
é a classe e person
é o objeto. Observe que você pode atribuir valores às propriedades do objeto usando a notação de ponto.
2. Métodos
Os métodos são funções que pertencem a uma classe. Eles geralmente manipulam as propriedades da classe. Por exemplo, você pode ter um método greet
na classe Person
que imprime uma saudação personalizada:
class Person { String name; int age; void greet() { print('Hello, I am $name and I am $age years old.'); } } void main() { Person person = Person(); person.name = 'John'; person.age = 30; person.greet(); // prints: Hello, I am John and I am 30 years old. }
3. Construtores
Um construtor é um método especial que é chamado quando um objeto é criado a partir de uma classe. Em Dart, o construtor tem o mesmo nome que a classe. Você pode usar o construtor para inicializar as propriedades do objeto. Por exemplo:
class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } void greet() { print('Hello, I am $name and I am $age years old.'); } } void main() { Person person = Person('John', 30); person.greet(); // prints: Hello, I am John and I am 30 years old. }
Neste exemplo, o construtor Person
aceita dois parâmetros e os usa para inicializar as propriedades name
e age
.
4. Herança
A herança é um recurso da programação orientada a objetos que permite que uma classe herde propriedades e métodos de outra classe. Em Dart, você usa a palavra-chave extends
para criar uma classe filha. Por exemplo, você pode ter uma classe Employee
que herda de Person
:
class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } void greet() { print('Hello, I am $name and I am $age years old.'); } } class Employee extends Person { String company; Employee(String name, int age, this.company) : super(name, age); } void main() { Employee employee = Employee('John', 30, 'Google'); employee.greet(); // prints: Hello, I am John and I am 30 years old. print(employee.company); // prints: Google }
Neste exemplo, Employee
é uma classe filha de Person
e herda suas propriedades e métodos. Observe o uso do super
no construtor de Employee
para chamar o construtor de Person
.
5. Encapsulamento
O encapsulamento é o princípio de ocultar detalhes de implementação e permitir o acesso apenas por meio de métodos. Em Dart, você pode usar a palavra-chave _
(underscore) para tornar uma propriedade ou método privado. Por exemplo:
class Person { String _name; int _age; Person(this._name, this._age); void greet() { print('Hello, I am $_name and I am $_age years old.'); } } void main() { Person person = Person('John', 30); person.greet(); // prints: Hello, I am John and I am 30 years old. }
Neste exemplo, as propriedades _name
e _age
são privadas, o que significa que elas não podem ser acessadas fora da classe Person
.
Esses são os conceitos básicos da programação orientada a objetos em Dart. Eles formam a base para a criação de aplicativos Flutter mais complexos e reutilizáveis.