Se você está começando agora na programação, é bem provável que já tenha se deparado com o conceito de Orientação a Objetos e ficado totalmente perdido, sem entender direito o que é ou por onde começar, né?

Scared cat

E não é por menos! A Programação Orientada a Objetos (POO) pode realmente parecer um pouco complicada no início. A boa notícia é que esse é um dos modelos de programação mais utilizados, especialmente quando queremos criar código reutilizável e bem organizado.

Com a POO, conseguimos estruturar nosso código de forma que ele seja mais fácil de entender, manter e expandir, o que facilita e muito nosso trabalho no dia a dia como desenvolvedores.

O que é Programação Orientada a Objetos?

Antes de tudo, precisamos entender o que é essa tal de POO.

De maneira geral, é um modelo de programação que usa classes para definir o que e como nossos objetos vão ser ou fazer.

Vamos imaginar que queremos criar uma classe que represente o seu gatinho.
Primeiro, a gente começa pensando no que o seu gato tem:

class Cat {
  String name;   // Tem nome
  String breed;  // Tem raça
  double weight; // Tem peso
  int age;       // Tem idade

  // Construtor
  Cat({
    required this.name,
    required this.breed,
    required this.weight,
    required this.age,
  });
}

Opa, pera... o que é um construtor?

Um construtor é como se fosse o "formulário de cadastro" de um objeto.
Quando você cria um novo gato com Cat(...), é o construtor que recebe as informações necessárias pra esse gato "nascer" com nome, raça, peso e idade.

No nosso exemplo:

Cat({
  required this.name,
  required this.breed,
  required this.weight,
  required this.age,
});

Esse trecho basicamente diz:

Pra criar um gato, você precisa me passar o nome, a raça, o peso e a idade. Sem isso, nada feito!

Pronto! Agora o Dart consegue criar um objeto Cat com todas essas infos.

E o que o seu gatinho faz?

Agora podemos pensar nos comportamentos do seu gato — ou seja, as ações que ele realiza:

class Cat {
  String name;
  String breed;
  double weight;
  int age;

  Cat({
    required this.name,
    required this.breed,
    required this.weight,
    required this.age,
  });

  // Ele mia
  void meow() {
    print('Meoooooooow!');
  }

  // Ele faz xixi
  void pee() {
    print('🐈🚽');
  }

  // Ele dorme
  void sleep() {
    print('🐈💤');
  }
}

Usando a classe na prática

Beleza! Temos nossa classe Cat pronta. E agora? Como a gente usa isso?

Simples:

void main() {
  var cat = Cat(
    name: 'Garfield',
    breed: 'Persian',
    weight: 6.5,
    age: 5,
  );

  cat.meow();
}

Saída no terminal:
Meoooooooow!

Kisses