Alura > Cursos de Mobile > Cursos de Flutter > Conteúdos de Flutter > Primeiras aulas do curso Dart: entendendo a Orientação a Objetos

Dart: entendendo a Orientação a Objetos

Identificando programação Orientada a Objetos - Apresentação

Caio Couto (Kako): Olá! Bem-vindo e bem-vindas ao nosso curso Dart: Entendendo a Orientação a Objetos. Esse curso será em dupla. Eu sou o Caio Couto, mas vocês podem me chamar de Kako. E vou apresentar este curso com o Ricarth.

Ricarth Lima: Oi pessoal! Tudo bom? Meu nome é Ricarth Lima e eu também sou instrutor aqui da Alura.

Kako: Nós vamos explicar para vocês um pouco sobre como funciona a orientação a objetos, tudo isso usando Dart como base. Então, este curso é feito para quem quer aprender a linguagem Dart e para quem já faz seus aplicativos em Flutter e quer aprender, de verdade, como funciona essa linguagem maravilhosa por trás.

Eu vou dar um pequeno spoiler e mostrar um pouco como vai funcionar este curso. Estou mostrando na tela nosso projeto, que está um pouco maior do que o do último curso, mas não precisam ter medo. Vamos aprender conceitos bem bacanas sobre classes, objetos, heranças, entre outros.

Começaremos falando um pouco sobre Trabalho Colaborativo, explicando como funciona o trabalho colaborativo quando estamos programando. Conversaremos também sobre o que são os Paradigmas e o que é, de fato, a Orientação a Objetos, além de como isso se aplica no Dart.

Fora isso, vamos nos aprofundar aprendendo sobre Funções e Parâmetros. Não é, Ricarth?

Ricarth: É sim! Vamos aprender a modularizar nosso código, começando com funções, entendendo o que são parâmetros e escopos. Depois veremos as classes, que são, basicamente, o que vai definir nosso trabalho aqui. Veremos que as classes têm propriedades, construtores e métodos. Por fim, falamos de herança.

Kako: Exato! Assim teremos uma ideia do que é uma classe, o que é um objeto e como eles se relacionam entre si. Descobriremos como herdar características de uma classe, reutilizando alguns dados, para não precisarmos escrever um código muito repetitivo e de difícil manutenção.

Vamos aprender como funcionam esses membros de uma herança. Brincamos muito com a comparação de frutas, casas e objetos da vida real.

Aprenderemos um pouco sobre o que é a famosa classe abstrata e descobriremos como o abstrato se relaciona com concreto, ou seja, com um objeto, e como podemos criar essas relações. Vamos entender bastante sobre o que é o polimorfismo das classes e porque as classes ficam mudando um pouco.

Enfim, vocês verão muitas coisas neste curso, que será bem bacana para vocês aprenderem. Ele será lecionado por mim e pelo Ricarth. Espero que vocês gostem bastante e o aproveitem!

Ricarth: Aproveitem o curso!

Vejo vocês lá!

Identificando programação Orientada a Objetos - Trabalho colaborativo e ambientes

Kako: Vocês já têm uma boa ideia de como esse curso vai seguir, já assistiram a apresentação de como tudo irá funcionar e já perceberam que este curso, desta vez, será em dupla.

Agora iremos verdadeiramente apresentar para vocês o Ricarth, nosso segundo instrutor de Dart. Ricarth, por favor, se apresente.

Ricarth: Imenso prazer em estar aqui, Kako. Meu nome é Ricarth Lima, para quem ainda não me conhece.

Eu gosto muito de Dart, porque aprendi a programar Dart usando Flutter. Uma das coisas que percebemos quando quisemos fazer essa formação de Dart é que muitas pessoas vêm do Flutter sem ter uma base forte de Dart. Esse também foi meu caso, mesmo antes de entrar na Alura.

Eu sou a prova de que aprender Dart é muito importante para que dominemos verdadeiramente o Flutter. Por isso estou aqui. Eu gosto muito de Dart e de Flutter.

Vamos trabalhar juntos, Kako, para fazer essa formação ficar muito legal.

Kako: Exatamente!

Pessoal, é o seguinte. O Ricarth e eu temos algumas formas diferentes de trabalhar. Por exemplo, lembram quando expliquei para vocês sobre IDEs, ou seja, sobre as ferramentas que nos ajudam a programar? Eu gosto muito de usar o IntelliJ, já o Ricarth gosta de usar o VSCode, que é outra ferramenta que eu havia mencionado no curso passado. Portanto, cada um tem uma forma um pouco diferente de raciocinar e pensar.

Apesar disso, este é um curso colaborativo, feito em dupla, porque, quando estiverem trabalhando com o Dart, eventualmente vocês irão codar com outras pessoas. Sendo assim, é importante vocês saberem sobre colaboração.

Então, como cada um tem uma forma diferente de raciocinar, às vezes as pessoas usam ferramentas diferentes. Entretanto, é importante vocês terem uma comunicação clara e uma forma parecida de se comunicar. Por isso, o Ricarth irá nos mostrar como funciona o VSCode, porque, neste curso, usaremos muito a tela do Ricarth.

Vocês perceberão que é muito similar, mudando apenas alguns detalhes, como partes da interface e alguns atalhos. Essa explicação é apenas para não ficarem muito assustados quando, no futuro, alguém pedir que vocês aprendam outra ferramenta.

Ricarth: Sim, Kako! Na verdade, o que você falou faz todo sentido. Quando trabalhamos no mundo real, percebemos que as pessoas podem usar ferramentas diferentes. Em uma empresa com 10, 20 ou 30 pessoas, elas não precisam usar, necessariamente, a mesma ferramenta, principalmente se tratando de Dart, que é uma linguagem que permite ser usada em várias IDEs.

Citamos aqui o IntelliJ e o VSCode, mas existem outras como o Android Studio e o Xcode. É muito interessante a linguagem permitir que cada um personalize seu ambiente de trabalho para ser mais eficiente e produtivo.

Então, algo muito importante que eu quero que todos vocês saibam é que nós teremos a minha tela trabalhando com o VSCode, mas nada do que eu fizer aqui é diferente do que vocês farão no IntelliJ, porque as coisas são realmente bem parecidas. Portanto, entendam que vocês podem continuar com o IntelliJ se quiserem, mas também podem migrar para o VSCode, que eu prefiro, porque eu acho ele mais fácil de personalizar e acho mais bonito.

Eu programo com o VSCode há muito tempo, realmente gosto dele, e as pessoas podem gostar de coisas diferente. Isso conversa muito com o assunto que apresentaremos sobre programação orientada a objetos.

Os objetos são diferentes, mas que precisam se comunicar. Eles precisam ter formas de entender uns aos outros, trocando informações. Da mesma forma, no mundo real, nós precisamos nos comunicar, ainda que usemos IDEs diferentes.

Kako: Exatamente isso.

Ricarth: Pessoal, agora criaremos um projeto em Dart para continuarmos nosso curso.

O VSCode é bem fácil de entender. No IntelliJ, quando abrimos o programa, têm aquela tela para escolher qual o tipo de projeto vocês querem criar, apresentando, dentre as opções, o Dart. Já no VSCode, para criarmos um arquivo pressionamos "F1". Com isso, abrirmos a barra de pesquisa, que está no centro superior da janela, e escolhemos os tipos de projetos que queremos.

Lembrete: o propósito deste vídeo não é configurar o VSCode para que vocês consigam criar os códigos nele. Essas informações estarão em um na próxima atividade deste curso.

Eu tenho instalado, no meu VSCode, os plugins tanto de Dart, quanto de Flutter. Vocês devem se lembrar que instalaram o plugin do Dart no IntelliJ no curso passado.

Então, na barra de pesquisa, vamos escrever "Dart: New Project", uma opção que já aparece para mim no menu flutuante abaixo da barra de pesquisa. Quando selecionamos o novo projeto, o VSCode pede o tipo de projeto que queremos. Estamos trabalhando apenas com o terminal, que é uma aplicação bem simples, então vamos escolher a opção "Console Application".

Com isso, abre-se uma janela do explorador de arquivos do nosso computador, onde vamos selecionar ou criar uma pasta para salvar o arquivo do projeto. Eu vou criar uma pasta chamada "dart_curso_2". Quando confirmamos nossa opção, a janela do explorador de arquivos fecha somos levados novamente ao VSCode, uma opção de nome para o projeto aparece na barra de pesquisa.

Vamos apagar o nome que foi gerado e nomear o projeto como "dart_curso_2". Confirmado o nome, o VSCode criará o diretório com todos os arquivos e pastas que o Dart precisa para rodar nosso projeto.

Quando concluído, aparece na nossa tela a main(), mesmo que com um exemplo diferente. Podemos deletar todos esses exemplos e deixar apenas o void main(){}, porque trabalharemos com os códigos que vamos criar aqui no curso. Por enquanto, vamos escrever print("Oi mundo!").

void main() {
    print("Oi mundo!")
}

Para rodarmos este código, precisamos abrir o Terminal. Faremos isso clicando nos "...", na barra superior da janela, e depois em "Terminal > Novo terminal". Com isso nosso Terminal abre na metade inferior da janela. Também podemos abrir o Terminal do VSCode com o atalho "Ctrl + Shift + '".

Vocês já estão acostumados e acostumadas com o terminal, que é onde lemos nossos resultados. Para rodarmos nosso código no VSCode, clicamos no terminal, digitamos "dart run" e pressionamos "Enter".

Ele rodou o resultado anterior porque esquecemos de salvar. Então vamos pressionar "Ctrl + S", para salvar, escrever novamente "dart run" no terminal e pressionarmos "Enter". Com isso, o "Oi mundo!" aparece.

Não tem muita diferença entre o VSCode e o IntelliJ. Temos a mesma visão de código na metade superior da tela e, na metade inferior, a execução do código. No lado direito da janela, temos uma barra onde o primeiro ícone é "Explorador". Nele estão as pastas que, no IntelliJ, ficam na coluna da esquerda. Entretanto, essa mudança é bem simples e nem estamos focando muito nas pastas agora, então vou deixá-las ocultas, clicando novamente no ícone.

Deu para entender bem, Kako?

Kako: Deu para entender totalmente. Só para vocês não ficarem perdidos na diferença entre o VSCode e o IntelliJ, vou mostrar o mesmo que o Ricarth fez, agora no IntelliJ. É bem parecido, são pequenas diferenças.

Temos a tela inicial do IntelliJ e podemos clicar no botão "New Project", localizado no lado direito da barra superior. Com isso, abre-se uma nova janela no centro da tela. Percebemos que o IntelliJ é mais visual, não precisando que escrevamos tantos comandos.

Na janela que abriu, na coluna do lado esquerdo, vamos selecionar "Dart" e clicar no botão "Next", localizado na parte inferior desta janela, que é atualizada. No campo "Project name:", que está na parte superior, escrevemos o nome do projeto, que é "dart_curso_dois", e clicamos no botão "Finish", na parte inferior da janela. Com isso, nosso projeto é criado.

Conseguimos perceber que, como o Ricarth falou, na parte superior temos o código com print('Hello World'), que eu vou mudar para print('Oi mundo!'), como ele fez. Só que no VSCode, os arquivos do projeto ficam à direita, enquanto no IntelliJ ficam à esquerda.

O terminal fica na metade inferior da janela tanto no VSCode quanto no IntelliJ. Então, quando executamos o código no IntelliJ, pressionando o "Shift + F10", ele vai exibir o "Oi mundo!" neste terminal. Já na metade superior da tela é onde escrevemos nosso código, o que é comum nos dois programas. Com isso, podemos perceber que não existem muitas diferenças, apenas alguns detalhes, como a cor.

A maior diferença é que no VSCode, o Ricarth escreve "dart run" e no IntelliJ apertamos o botão para executar o código. Então não precisam temer ferramentas diferentes, porque elas são muitos simples.

Ricarth: Perfeito. Você mostrou o quanto a sua forma de trabalhar no IntelliJ é parecida com a minha forma de trabalhar no VSCode. Assim conseguimos perceber que não importa muito onde estamos trabalhando, contanto que consigamos nos comunicar.

É exatamente essa a mensagem que queremos passar quando trabalharmos com o paradigma de orientação a objetos.

Kako: O que queremos passar neste curso, e vocês entenderão mais sobre esse paradigma, é que os objetos têm uma comunicação e tudo, neste paradigma orientado a objetos, tem que se comunicar bem. Tudo tem uma herança, ou seja, uma ligação importante.

Então essa aula foi mais para entenderem um pouco da essência de que as coisas precisam se comunicar muito bem para funcionarem. Em breve veremos como funciona o paradigma de orientação a objetos e como a ligação é importante neste grande paradigma que o Dart está usando.

Ricarth: Até mais.

Identificando programação Orientada a Objetos - Entendendo paradigmas em programação

Kako: Acabamos de ver um pouco mais sobre o trabalho colaborativo e como é importante sabermos nos comunicar. Este é um ótimo gancho para começarmos a falar sobre paradigma e, melhor ainda, sobre orientação a objeto.

Antes de começarmos a aprender sobre paradigma, que é uma palavra estranha que mal ouvimos, vamos conversar mais sobre as linguagem de programação que existem e porque são tantas.

Primeiramente, há várias linguagens de programação, chegando a ser milhares delas, tais como o C++, o JavaScript, Java, Cobol, Dart e Kotlin. Cada uma delas é diferente.

Ricarth, explica um pouco sobre a diferença entre essas linguagens e qual a vantagem disso.

Ricarth: Na verdade, a existência de várias linguagens é o motivo para serem diferentes. Afinal, se todas as linguagens têm por objetivo fazer com que nos comuniquemos com o computador para ele nos gerar um resultado, por que existem tantas? Porque cada linguagem vai resolver problemas diferentes.

Sempre que uma linguagem é pensada em ser criada, ela é pensada para resolver um problema de quem a está desenvolvendo, seja uma pessoa ou, de forma mais frequente, uma empresa. A criação de uma linguagem parte da percepção de que não existem tantas linguagens no mercado que resolvem aquele problema específico da melhor forma que eles conseguem imaginar.

Por exemplo, o Cobol e Dart são linguagens de programação, mas com objetivos completamente diferentes no momento em que foram pensadas. Claramente que, depois que essa linguagem de programação é inserida no mercado e usada pelas empresas, ela pode mudar o propósito original, mas linguagens de programação nascem justamente com o objetivo de resolver problemas. Por isso, existem tantas.

Kako: Exatamente, Ricarth. Por exemplo, o JavaScript é muito usado para fazer websites, enquanto o Dart e o Kotlin são mais usados para fazer aplicativos de celular. O Cobol já é usado para programas de banco. Então cada um tem um objetivo, como o Ricarth falou.

Isso faz com que cada linguagem tenha uma maneira diferente de pensar. Quando estávamos conversando sobre trabalho colaborativo e dissemos que cada pessoa tem uma forma diferente de pensar e se organizar, e as linguagens são da mesma forma.

Antes de explicarmos o que é o paradigma, eu quero fazer uma brincadeira com vocês, mas vou fazer uma pequena introdução. O paradigma é como uma crença ou uma visão. É uma certeza que temos, e isso fará sentido em breve.

Eu tenho uma pergunta bem legal para fazer para vocês, inclusive para o Ricarth: vocês colocam o arroz ou o feijão por cima quando estão servindo a comida?

Imagem que aparece no slide do vídeo. Nela há uma recipiente redondo com exterior vermelho e interior branco. Dentro deste recipiente tem arroz, do lado esquerdo, e feijão, do lado direito, com uma folha de salsa no centro

Ricarth: Foi muito bom você ter escolhido essa imagem, Kako, porque eu não coloco nenhum por cima do outro. Eu entendo que existe um conflito de visão, ou seja, de paradigma, entre colocar o arroz ou o feijão por cima, mas eu prefiro colocar ao lado. Eu sirvo a porção de arroz e a porção de feijão como vem, às vezes, em um restaurante do shopping. E você?

Kako: Não vou negar para você que colocar arroz ao lado do feijão é estranho para mim. Eu gosto de colocar o arroz no prato e o feijão por cima. Apesar disso, cada um tem um jeito diferente de fazer.

Eu tenho essa visão de que o feijão fica por cima do arroz, porque faz muito mais sentido. Gasta menos espaço do prato e eu não tenho problema de misturar o arroz com feijão na hora que eu vou servir. Já você gosta de deixar separado e escolher o que vai comer. Então temos crenças diferentes sobre o mesmo tema. Guardem essa informação, porque vamos explicar o paradigma pensando no exemplo do arroz com feijão.

Nós explicamos que existem várias linguagens diferentes e que cada uma delas têm uma forma de resolver um problema. Por exemplo, temos o Dart e o Kotlin, ambas linguagens utilizadas para criar aplicativos de celular.

Não existe só uma linguagem porque o Kotlin resolve os problemas de uma forma e o Dart de outra. Cada uma delas têm uma visão diferente de como criar de um aplicativo. Então, quando falamos sobre paradigmas, falamos sobre as várias visões sobre como resolver o problema de criar uma aplicação.

Ricarth: Existem vários paradigmas, mas podemos começar pelo que é a chave do que estamos estudando, que é o paradigma de orientação a objetos. Além dele, tem o funcional, o procedural e o concorrente. Para cada um deles, vocês acharão alguma linguagem que é referência naquele paradigma.

Kako: Vou exemplificar algumas linguagens que seguem paradigmas específicos, para vocês não ficarem perdidos. Para começar, o Dart, na sua forma de organização da linguagem, é regido pela crença, ou seja, pelo paradigma de orientação a objeto.

Já o JavaScript é direcionado ao paradigma funcional, o Python para o procedural e o Java para o concorrente. Contudo, existem várias linguagens, então existem muitas linguagens que são orientadas à objetos, muitas que são funcionais, muitas que são procedurais e muitas que são concorrentes.

Ricarth: A Dandara chegou com essa pergunta: "Qual a diferença real entre uma linguagem de programação e um paradigma?

Ela perguntou isso porque, já que existem várias linguagens orientadas por um paradigma, ela se questionou se, aprendendo o paradigma, ela aprenderia todas as linguagens. A resposta está mais para não.

Porque a diferença entre linguagem e paradigma é que cada linguagem terá seu propósito de criação, sua sintaxe e a sua forma de como os comando são escritos para resolver os problemas, obedecendo ao que é o paradigma. O paradigma é um conceito, ou seja, algo mais abstrato. Ele não é algo que digitamos, como a linguagem, e sim a ideia que está regendo a forma como usamos a linguagem.

Portanto, se você aprender um paradigma, você não aprende todas as linguagens que usam o paradigma, porque cada linguagem terá suas especificidades e suas sintaxes. A diferença é que, se aprendemos o paradigma, podemos ter mais facilidade para aprendermos uma segunda linguagem que usa o mesmo paradigma. Isso porque o direcionamento já estará implementado, então aprenderemos apenas sintaxe e outros pontos específicos daquela linguagem.

Sendo assim, Dandara, enquanto aprende Dart, você não aprenderá outra linguagem que usa orientação a objetos. Porém, caso você estude essa outra linguagem no futuro, será bem mais tranquilo, porque você já terá aprendido o conceito na primeira linguagem que estudou.

Kako: Então, fazendo uma relação com os idiomas, eu sei Português, que tem uma estrutura um pouco parecido com Espanhol, mas não quer dizer que eu saiba Espanhol, tanto que eu não sei. Porém, será mais fácil eu aprender Espanhol do que Chinês, porque o Espanhol é mais parecido com o Português.

Portanto as estruturas parecidas facilitam a aprendizagem de outra linguagem de programação como de um idioma.

Contudo, ainda não falamos de Orientação a Objetos.

Vamos falar disso no próximo vídeo?

Ricarth: Vejo vocês no próximo vídeo.

Sobre o curso Dart: entendendo a Orientação a Objetos

O curso Dart: entendendo a Orientação a Objetos possui 216 minutos de vídeos, em um total de 48 atividades. Gostou? Conheça nossos outros cursos de Flutter em Mobile, ou leia nossos artigos de Mobile.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Flutter acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas