e fala deve seja bem-vindo ao nosso curso em paz onde programação orientada a objetos essa é a primeira aula de vários assuntos que a gente vai trazer relacionado orientação a objetos que vão estar aqui nessa playlist do YouTube então se você tem interesse em aprender esse assunto já se inscreve no canal e Ative o Sininho porque vai agregar muito para você nesse vídeo de hoje vamos falar sobre criação de classes e objetos e também sobre a importância de orientação a objetos no mundo da programação foram a programação orientada a objetos nada mais é do que o paradigma de programação parece complicado é um bicho de sete cabeças mas na verdade é simplesmente uma forma de você conseguir programaticamente através de código representar objetos na realidade é uma forma de aproximar O que precisamos tangibilizar da nossa realidade da programação esse paradigma ele gira em torno de dois principais conceitos objetos e classes as classes elas são moldes que vão dizer quais informações um objeto vai ter o qual funcionalidade esse objeto vai o e os objetos são instâncias dessa classe mas isso ainda tá confuso vão melhorar um país por exemplo ele sempre tem pelo menos três informações básicas o seu nome à capital EA sua população o sonoro no caso por exemplo do Brasil é Brasil a capital é Brasília a população em torno de 200 milhões de habitantes os Estados Unidos nos Estados Unidos capital é o Washington de si EA sua população em torno de 300 milhões de habitantes de cerveja que essas três principais informações como o nome Capital em população é um molde das informações que o país precisa ter e isso é representado pela classe e as instâncias são os países então o Brasil é uma Instância da classe para isso os Estados Unidos vai ser uma distância na classe país e a gente pode representar todos os países utilizando esse mesmo modelo podemos ser também um atributo que pertence à classe e isso significa que ele vai pertencer também a todos os objetos Então vai ser um atributo que ele é ali com e entre os objetos e a classe isso é muito útil em situações por exemplo quando a gente quer salvar informações de todos os objetos no caso que a gente está analisando aqui dos países a gente poderia ter um atributo da classe que salva a população total de todos os países cadastrados aqui nesse modelo que nós estamos utilizando a sobra extensão uma coisa que gera muita dúvida quando a gente fala de programação orientada a objetos é que as pessoas associam que esse tipo de paradigma é para representar objetos concretos Como por exemplo o carro você vai lá salvar a quantidade de portas a placa e a marca isso seria uma representação válida assim mas você pode também fazer representação de coisas são abstratas Como o clima para você representar o clima você pode salvar na informação da temperatura do dia a umidade EA velocidade do vento isso também seria uma representação válida para orientação a objetos e ponto que eu quero chegar aqui é que você deve utilizar esse paradigma para empoderar a sua forma de programar para você conseguir resolver mais problemas e com mais qualidade e não se prenda a ideia de que você só vai utilizar isso para representar objetos concretos isso não tem nada a ver outro grande benefício que temas de orientação a objetos é a gente tem mais controle em cima dessas informações das classes e dos objetos dessa classe por exemplo a gente pode ter uma um metro que faz a verificação se o valor ficar sendo citado é um valor válido ou não por exemplo se alguém tentar colocar o valor de população de um país negativo é possível que a gente faça uma verificação antes mesmo desse valor citado e a gente ir a uma exceção aviso para pessoa que o valor que ela tá tentando colocar ali é completamente inconsistente E além disso uma perspectiva diferente que vai além da simples criação do código a orientação a objetos permite que a gente reaproveite mais código e permite também que a gente tenha mais controle mais segurança em cima do que está sendo acessado E como está sendo acessado permitindo que o software criado utilizando orientação a objetos tem uma vida mais longa permitindo que só manutenção de a sua sustentação sejam feitas de forma muito mais eficiente m eu acho que você já deve ter percebido que saber programação orientada a objetos é algo que vai te ajudar muito entrar no mercado de trabalho nada a quantidade de coisas de benefícios que ela vai para você então que a gente vai fazer agora a gente vai colocar a mão na massa para você dominar esse novo paradigma Bora lá seguindo o exemplo dos países para a gente fazer a representação de um país que tenha nome capital e população sem usar orientação a objetos a gente chegar em algo muito parecido com isso aqui a gente teria o prefixo no caso aqui é paz um se tivesse um segundo vai ser a paz dois e depois do atributo que queremos salvar desse país no caso aqui temos nome capital e população assim como o nosso exemplo E aí a gente atribuiria o valor essas variáveis veja que a única com relação que existe entre essas três variáveis é o prefixo que dá nome as variáveis que a que o prefixo faz um não existe mais nenhuma outra com relação a isso daqui é ruim porque eu poderia fazer a criação de um país por dentro mais dois ali sem a informação de Capital que pode ser fundamental para execução do nosso programa uma outra coisa se você já tenha percebido é quando a gente olha o tipo de variáveis como essa ela tem sempre um prefixo Aliexpress deixou mostrar para você é e não quando a gente pede para o pai para retornar para gente o tipo de uma variável como por exemplo país nome é esse o primeiro veja que é do tipo Spring Mas é uma Instância da classe string a mesma coisa para o país Um capital é uma Instância um objeto da classe Spring econômico lote ele também é uma Instância da classe cloat e seria muito legal Se a gente pudesse fazer a criação das nossas próprias classes E dos nossos próprios objetos com as propriedades que a gente quiser certo e para fazer isso a gente utiliza a palavra a palavra que reservada Class seguido pelo nome da classe que queremos dar então no nosso caso vai chamar país um bom que importante referente ao nome das classes é que diferente de variáveis em que a gente utilizava sempre todas as letras minúsculas e as palavras separadas por underline os nomes das classes a gente utiliza sempre letras maiúsculas para fazer a distinção entre as palavras então aqui no caso o nome da classe e país começa a cumprir maiúsculo e se tivesse uma segunda palavra por exemplo país independente o pendente também comessaria com o i maiúsculo para gente conseguir definir que aqui são duas palavras país independente da gente já vai ver como fazer um Construtor para obrigar esse formato aqui esse template Zinho mas por enquanto eu vou utilizar a palavra peça aqui só para ele continuar mas ele fazer a criação da classe para gente país por causa que eu vou tirar independente então para gente fazer a criação de um objeto país do mesmo jeito que a gente fez aqui são aqui de um objeto do tipo Spring a gente tem que utilizar a seguinte notação faz abre e fecha parentes ou seja o nome da classe que a gente quer fazer a instanciação de um novo objeto ou seja a gente quer um novo país para a gente fazer isso a gente tem que utilizar essa simpatia o nome da da classe abre e fecha parentes isso daqui significa que o pai vão vai chamar o Construtor dessa classe e aí a gente tem que atribuir O Retorno desse Construtor a uma variável então a gente pode colocar aqui faz um é igual a país abre e fecha parentes dessa forma a gente já consegue fazer a impressão do tipo dessa variável país Oi Débora a principal principais faz isso E aí quando a gente executa Deixa aquele já retornou que esse objeto faz um esse esse essa variável país um é uma classe que tá executada no modo no meio a gente vai ver o que são módulos e pacotes mais para frente mas está aqui no pacote nem ponto país ou seja é um objeto do tipo país Ele já tá trazendo aqui que o tipo desse objeto é referente a classe país legal né agora a gente pode adicionar atributos é esse objeto Faz um então a gente vai criar agora os atributos as informações referente a esse objeto faz um que pertence à classe país de um país um ponto nome é igual a Brasil veja que assim táxi agora é o nome da variável que contém um objeto no nosso no nosso caso é país um ponto o nome do atributo que a gente quer salvar para esse objeto no caso a gente está adicionando o atributo nome ao objeto país um como valor Brasil alto eu vou tirar o pai parte por enquanto eu vou colocar o país 1. 9 veja que ele já retornou para a gente o valor do atributo o nome desse desse objeto que faz um a gente pode fazer a mesma coisa para os outros atributos Então faz um ponto capital é igual a Brasília e paz um bom população é igual 212 pontos seis ele não pode fazer a impressão de todos esses atributos da mesma forma é o nome do objeto. O atributo que você quer que seja retornado Então faz um ponto capital e faz um ponto população e quando a gente executa ele já trouxe todos os valores aqui dos atributos deste objeto aí visão agora se olharmos o tipo desses atributos a gente vai ver que os títulos ainda permanecem como os tipos primitivos do pai porque os atributos continua utilizando as classes nativas do pai tão destruir em efluente da gente continuar sendo Spring flores mas agora esses atributos estão encapsulados aqui pelo objeto O que é da classe país mas eu falei para vocês que utilizando classes aqui a gente poderia ter um controle melhor dos atributos do que estava acontecendo com os objetos dessa classe e do jeito que tá aqui ainda não parece muito isso contém né porque a pessoal a porta simplesmente adicionado atributos aqui é esse objeto faz um e Mas você lembra que eu falei que quando a gente chama que o nome da classe abre e fecha afarensis ele chama um construtor da classe esse construtor é definido por um método chamado rinite e pra gente definir se Construtor a gente tem que definir esse método dentro da classe e para gente fazer isso é bem simples A gente tem que colocar a palavra defe é o mesmo deve que a gente utiliza para definir uma função só que por ele estar dentro de uma classe ele é chamado de método em uma função e aí o nome desse método construtor é underline underline summit underline underline abre e fecha parentes: esse método ele sempre tem que receber um objeto que o objeto que vai ser criado então aqui a gente tem que passar é muito comum é uma convenção do e passa a palavra selfie selfie que significa eu mesmo então você tá passando como parâmetro esse método Construtor ele tá recebendo o objeto que vai ser construído e quando a gente coloca aqui só abre e fecha parentes por padrão o pai tão ele já passa o esse objeto que vai ser construído aqui como selfie então aqui ele já está passando esse objeto selfie pro método Construtor e é aqui que a gente vai fazer a criação do contrato do modelo de qualquer um molde que os nossos objetos vão ter Obrigatoriamente Então a gente tem que passar aqui e crescimento do Construtor Quais são as informações obrigatórias para gente fazer a criação do nosso objeto no caso do nosso objeto faz então a gente tem que ter aqui nome já tem que passar para o nome temos passado para a capital e temos que passar o parâmetro população e eu vou por pesca aqui de novo se eu executar o código do jeito que tá a gente vai dar um problema quer ver deixa que ele já começou a reclamar se o início o limite da classe país ela precisa de três parâmetros profissionais nome Capital em população mas no caso aqui eu não tô passando nenhum porque o nosso Construtor ainda está vazio então do mesmo jeito que quando a gente chama função a gente tem que passar parâmetros para ela a gente tem que passar esses parâmetros também para esse método Construtor e aqui a gente tem que passar nome capital e população simples assim então dentro aqui na chamada por o consultor eu vou colocar esses três parâmetros Brazil Brasília Oi e o tamanho da população vou executar novamente não ele já voltou a executar mas a gente ainda não tá fazendo nada com esses parâmetros aqui dentro do Construtor para a gente criar o objeto de fato a gente tem que associar esses parâmetros que o Construtor tá recebendo com o objeto E para isso a gente utiliza o selfie se é o próprio objeto.
O nome do atributo que a gente quer salvar a gente quer salvar que o atributo nome igual ao nome do parâmetro que é recebido e a gente faz isso para todos os Falamos assim a gente quer salvar e atribui ao nosso objeto dessa forma mesmo que utiliza essas atribuições que temos aqui que fizemos anteriormente por um Construtor já está recebendo elas a gente pode imprimir essas informações aqui no print de final tarde novamente Ah e deixa aqui agora foi o método Construtor que citou essas informações no objeto e a gente consegue retornar esses informações no objeto que foram criadas aqui no Construtor esse método Construtor ele é literalmente uma função só que por ele estar dentro da classe de chamamento e você pode fazer qualquer coisa você pode por exemplo Adicionar lembrete é mais então cliente entrei não Construtor e quando você executar o consultor vou até tirar esses outros prints desde que ele imprimiu aqui em treino consultor você pode chamar outras funções você pode chamar outros métodos que essa classe país vai ter você pode inclusive pegar esses parâmetros Você tá recebendo e que a outra tributo que não tem nada a ver com eles por exemplo selfie. Abreviação e abreviação vai ser igual as duas primeiras letras do nome e a gente consegue imprimir aqui se o contrato de Viação e ele vai retornar aqui BR Ou seja a gente pegou uma informação que foi passada comum dos parâmetros e a gente utilizou isso para criar um novo atributo chamado abreviação a gente também poderia ter utilizado um atributo que já foi citado no próprio objeto então não precisaria ter usado necessariamente aqui vou parar no seu nome eu poderia ter utilizado o atributo nome do objeto que já cê tá essa informação aqui nesse novo atributo Celso contra abreviação aqui no caso qualquer porque é só os dois primeiros né ele já imprimi aqui abreviação que isso daqui também pode ser acessado fora do método Construtor Então esse selfie. Abreviação ele fica disponível para todo mundo que tem acesso a esse objeto então a gente pode colocar aqui print abre parentes né e aqui a gente tem que colocar em vez de selfie com o nome do objeto lembra o Celso aqui dentro do método Construtor ele é o objeto que está sendo criado mas o objeto de criado aqui no contexto Global do parto é o país um logo para gente fazer a impressão dos fim de mais um a gente tem que colocar mais um confronto o seu atributo que a gente consegue continuar utilizando o atributo abreviação que foi criado dentro do método Construtor veja que Desse modo é obrigatório que todo o país foi criado tem a nome capital e população assim todo mundo que utilizar essa classe tem como o ganache aqui os objetos da classe país vão ter nome Capital em população e isso é muito importante na execução de um programa porque você tá definindo um contrato para a criação determinado de determinados objetos que você tá falando que essas informações aqui são obrigatórias logo quem for utilizar o outro programador até você mesmo que for utilizar essa classe sabe que essas informações vão estar presentes que que ele pode contar com isso do código dele veja também que apesar aqui do nome dos paramos ser igual ao nome dos atributos isso não necessariamente é uma verdade você pode ter aqui por exemplo um parando chamado o nome do país e você vai salvar a informação desse parâmetro aqui numa figura o self continuamos não tem correlação nenhuma entre o nome do atributo e com o nome do parâmetro da função você pode dar nome diferente para os dois sem nenhum problema a gente pode adicionar título cliente Faz Um ponto nós seja aqui não precisa ser nome do país Inclusive só colocar para imprimir aqui país um ponto nome do país ele quebra porque o objeto tem um atributo nome e não nome do país então eu vou agora tirar de novo aqui para ficar certinho é ponto nome ele voltou a Executar a esteja que não é porque a gente tem o contrato o modelo do Construtor de objetos da classe país que a gente não pode criar atributos fora desse Construtor a gente poderia ter utilizado a que esse abreviação fora do Construtor após ele né Mas a gente pode criar também um atributo para faz um depois que a utilização do Construtor então no caso é que eu tô criando o atributo.
Abreviação que vai ser impresso aqui na minha 12 fora do consultor e isso continua funcionando sem nenhum problema e tem importante que saltar aqui é que o que você cria fora do Construtor ele não é padrão para todos os objetos você tá particularizando somente para esse objeto se você adicionar esse atributo.