e os caras alunos sejam bem-vindos para mais uma aula do nosso da nossa disciplina de estruturas de dados hoje nós vamos falar sobre o conceito de classe sem ser mais no nosso roteiro nós vamos falar um pouco sobre as noções básicas de classes e depois nós vamos falar um pouco sobre a classe time que utilizaremos como exemplo Apenas para saber como é assim táxi em ser mais Primeiramente um pouco sobre as doações básicas toda vez que nós utilizamos esse termo classe isso nos remete a programação orientada a objetos Você já foi introduzido na programação orientada a objetos na disciplina anterior você viu programação orientada a objetos utilizando a linguagem Python os conceitos de orientação a objetos que você aprendeu com o pai nós somos mesmos do conselho dos conceitos de orientação a objetos que você aprendeu vai aprender agora em ser mais mais por quê Porque eu te conceitos não mudam da dependendo da maneira que foram implementados Tá mas existem coisas que você deveria prestar atenção ao mudar de uma linguagem para outra o nosso caso nós não vamos implementar os nossos códigos realmente utilizando orientação a objetos não a gente vai utilizar apenas o conceito de classes você vai ver que nós não utilizaremos por exemplo é ansa pode morfismo aqui na nossa disciplinam o mínimo que a gente precisa é de classes para poder modularizar o nosso código separando a visão lógica de uma estrutura de dados que a gente vai interpretar com o sendo um tipo abstrato de dados da visão de implementação classe são muitas para nós por conta disso vai nos dar aí uma clara divisão do que que a parte lógica Ou seja é fácil pública a estrutura de dados do que que é implementação dessa estrutura de dados e do que é a aplicação dessa estrutura de dados em outras palavras não entraremos em muitos detalhes teórico apenas Vamos se conhecer hoje nessa aula assim um táxi de ser mais novos conceitos serão introduzidos nas outras disciplinas sempre que necessário é a unidade básica de modularização da programação orientada a objetos é a classe o que que é aquela é uma maneira de encapsula atributos estáticos e comportamentos dinâmicos em uma caixa é o termo encapsulamento que vocês já aprenderam em que se apenas anteriores significa em justamente isso que tem cápsula é transformar em uma cápsula na o nosso caso é transformar em uma caixa assim que eu coloquei no slimes Esse é um termo muito conhecido aí do mundo real já que programação orientada a objetos na verdade ela tem um pezinho no mundo real ela foi motivada pelo mundo real o que que eu quero dizer com isso vamos pensar uma geladeira uma geladeira ela é um algo muito complexo você pode imaginar como é que algum ninguém hoje em dia deve saber não sei Claro as pessoas que estudam isso outras pessoas que usam a geladeira sabem realmente como e funciona então a gente não precisa saber como ela funciona porque porque quem criou a geladeira encapsulou transformou tudo o que é complexo e colocou-o dentro de uma caixa entregou para gente de sódio os botões da geladeira são esses é só isso que você precisa saber Não tente abrir a geladeira não vai lá e mecha nos fios por que você não sabe mexer nos botões então encapsulamento facilita isso a gente coloca a implementação separado da interface pública tem interface com as outras pessoas utilizaram Além disso temos esse conceito de classe tá e como nós vamos interpretar essa classe que a que vai ser o nosso o nosso unidade de motorização nós vamos utilizar as classes para gerar objetos já que os as classes são moldes para a geração de objetos e dentro da clássica que a gente vai fazer dentro da classe A gente vai definir insitamente a interface pública compartilhada por todos os objetos da interface privada que seria a gente é fácil privada não já ter muita é fácil privado já que esquisito vou mudar o tema eu vou separar a interface pública da implementação interna da classe de implementação interna da classe é aquilo que vai ficar escondido dentro da clássica as outras pessoas não vão precisar saber tá então o que que vai ficar dentro da classe a implementação das estruturas de dados o que que vai ser a interface pública da Classe A e aqueles métodos que a gente quer utilizar da classe por exemplo inserir um novo elemento buscaram um novo elemento atualizar remover isso tudo vai ser parte da interface pública e na hora que a gente for fazer a aplicação das estruturas de dados o que a gente vai fazer nós vamos criar objetos das classes para poder utilizar fazer chamadas aos metros Então é assim que nós vamos fazer nesta disciplina é uma vantagem desse paradigma é o isolamento o que que é o isolamento é quando alterações não afetam todo o sistema esse isolamento engenharia de software é o que facilita a adição de novas funcionalidades e permite aí uma correção de problemas garante sair uma certa facilidade de manutenção como os detalhes da implementação ficam escondidos dentro da classe nós podemos gerar implementações diferentes para uma mesma classe facilmente então é muito fácil você pensa Olha eu tinha uma determinada implementação só que eu bolei uma melhor como eu bolei uma melhor eu vou lá e troca implementação daquela classe se eu garanto que não mexi na interface pública se eu garanto que aquela classe continua fazendo aquilo que fazia antes então isso garante que eu não tô danificando aplicação como um todo tá ou amor a mim o cartão vai ficar isolada dentro daquela casa E como eu já disse anteriormente essa ideia permitirá separar a visão lógica da visão de implementação e da visão de aplicação porque essa separação é importante porque em alguns casos por exemplo filas pilhas nós vamos dar mais de uma implementação para uma mesma estrutura de dados então nós manteremos a interface pública onde ficaremos apenas os atributos privados e modificar emos apenas o a implementação E aí e o que é que você precisa saber agora a visão lógica de uma classe será sempre criada em um arquivo de extensão. H que é o arquivo de cabeçalho Então na hora de definir uma classe umas utilizaremos um arquivo chamado pontuar e nesse arquivo definiremos os membros públicos e privados de uma classe a todos os membros vão ser declarados no ponto H nenhum deles no no que se refere aos métodos nenhum deles vai ser implementado diretamente no ponto H nessa disciplina você poderia poderia colocar código no ponto h não vai ser o caso aqui com a implementação das classes da classe será sempre feita em um arquivo de extensão. CPP.
CPP significa o arquivo que conterá código e o arquivo. CPP deverá sempre importar o arquivo. H com a diretiva inclusi e às vezes a gente dá uma em clube de uma classe inclusive de um arquivo e esse arquivo dá um inclusive de outro arquivo que a gente acabou também dando inclusive porque a gente não sabia que teve um encadeamento de incluídos aí se a gente não tomar cuidado isso pode gerar um determinado erro em tempo de compilação Então qual é o cuidado que a gente toma o cuidado que a gente toma é sempre de utilizar essa diretiva aqui quando acha que isso vai acontecer Estas diretivas são esse sustenido fnf que significa se não estiver definido essa sintaxe e se definir aqui aí ele pula ele só entra no determinado bloco se não estiver definido por exemplo aqui ele está dizendo se não estiver definido esse time.
H que é uma string que eu coloquei aqui se isso não tiver definida a primeira coisa que você faz é e se já tiver definido o time. H por alguém então ele nem entra nessa linha de código aqui tá então ele não passa por aqui então aqui dentro a gente pode colocar uma declaração de uma classe e esse fmdf aqui vai garantir que essa definição desta classe não vai ocorrer várias vezes caso uma sequência de inclui diz faça com que essa classe por exemplo que está bem aqui seja incluída duas vezes nesse que deu dois inclusive Grande para uma classe por um arquivo B que inclui o arquivo onde estava essa classe e o inclusive desse arquivo para o arquivo diretamente que está nessa seja teria que ela será incluída duas vezes a utilizar essas diretivas garante que isso não vai ocorrer Ah tá bom só falar um pouco mais sobre ela e se n der se não estiver definido continue e esse definir aqui significa defina ou seja se não estiver definido eu próximo a linha é de Fina e daí continue executando o código normalmente e isso daqui ele vai acabar quando ele deu encontrar esse and e fica aqui isso aqui é um são diretivas que a gente informa o compilador que que ele tem que fazer e vamos falar agora sobre a classe tem que que essa classe tem a classe time ela é uma classe que vai modelar um uma distância de tempo específica que que seria uma Instância de tempo específica seria uma Instância de tempo que tem hora minuto e segundo então eu quero saber o tempo em função de hora minutos e então nessa classe eu colocarei três atributos que são hora minuto e segundo eu criarei um Construtor público para inicializar os atributos desta classe Construtora estão métodos especiais que inicializam uma classe na hora que você vai instanciar um objeto sempre que vocês estão objeto esse Construtor público um Construtor público vai ser chamado eu também vou criar alguns métodos de creches e centros médicos de Gates são que ter são métodos que vão mudar os atributos ou seja um recebo de alguém de fora um novo o novo valor para colocar no atributo Neto nos 7 que permite que a gente Diga para o mundo exterior o valor em uma tributo o método público print eu gosto esse método para classe dizer como ela quer se Empresta não necessariamente era necessário mas eu gosto de colocar eu acho que vou seguir esse padrão na disciplina em um método público que adiciona um segundo por exemplo se eu estou em ceva hora 0 minutos era o segundo e alguém o colocar esse método eu vou entrar metade de um vai virar zero horas era um minuto um segundo tu e essa basicamente a classe que eu quero modelar é como eu disse eu vou ter a definição da classe a implementação dos métodos e aplicação da classe eu vou preferir agora olhar o código e aqui o poder de uma pasta vou colocar um LS percebam aqui o teu tenho o time ponto agora o time. CPP e o time Man pontos e TP Como eu disse para vocês a declaração da classe está dentro do time.
H vamos olhar assim táxi aqui dessa classe aqui eu coloquei esse fntf que a gente já viu nos slides e agora eu vou olhar a definição da classe tão percebo a definição da classe está entre o erro ou definir e o and I e II Ah tá isso aqui é o final do bloco eu coloco a definição da classe aqui dentro e vamos olhar um pouco para esta sintáxi dessa classe aqui nessa sintáxi O que que a gente está vendo a gente tá vendo a palavra reservada Class dizendo qual é o nome da classe time com T maiúsculo e daí eu abro o escopo com a chave isso o nome classe é o mesmo que você usa no Python é uma palavra reservada no pai tem uma palavra reservada aqui também Existem duas sessões aqui a sessão privada onde eu coloco a definição dos atributos aqui eu não quero que alguém de fora acessa tributos a Então quais são as mais atributos privados hora minuto e segundo então eles são privados e também tem uma parte pública a parte que fica acessível para quem está fora dessa classe e nessa parte pública o que que eu coloco o Construtor onde a pessoa pode informar hora minuto e segundo eu coloquei aqui int our dizendo gostei' vai receber por parâmetro inteiro que vai ser a hora esse igual a zero significa o valor de fosse bem parecido com o valor da força do pai se a pessoa não passar esse valor para hora por exemplo o valor 0 será usado o mesmo com um minuto e o mesmo conseguindo esses aqui são os outros métodos que Eu mencionei os gamers get our get segundo os 77 hour 7 minutes and o print e o next step Então é assim que a gente declara uma classe dentro do arquivo como pagar vamos dar uma olhada agora para implementação dessa classe dentro do arquivo. CPP de dentro do arquivo. CPP a primeira coisa que eu tenho que fazer é dar um incluso no arquivo outra A então estou colocando aqui em Cloud time ponto pagar percebam que quando é um arquivo que eu gerei por exemplo time.
H fui eu que tirei eu coloco includ e coloco acho que faz aqui quanto é um arquivo do próprio ser mais mais eu coloco includ e coloco aqui os colchetes angulares e aqui eu estou colocando em usineiros tem esse essa entender porque eu vou usar o SBT de dois pontos sem alto tá:: altos e aqui está a minha a minha classe a implementação das minhas passe a implementação da classe tá poxa olhar aqui primeiro só que é o do time. H aqui em cima e o próximo passo a inclui a implementação para todos os métodos no time. CPP esse dois pontos: aqui ele é o operador de resolução de escopo é ele que vai parear a classe com a implementação por exemplo havia um método declarado que era o get our dentro da classe time Por enquanto ele não tem método quando eu quero dizer qual é o método do que é Tchau ver eu coloco int que era o retorno que foi declarado time: O que é operador de resolução de escopo get our e aqui eu digo conste porque porque esse método ele não vai alterar nenhum dos atributos quando os métodos não vão alterar os atributos você pode colocar um post isso garante que se você tentar fazer a modificação você não vai conseguir então os get asked our Ele simplesmente vai pegar o que está no atributo e retornar time:: Gates menos mesma coisa vai pegar Está no atributo e retornar uma cópia e that Second a mesma coisa vai pegar o que está no atributo segundo e me retornar é da mesma maneira vamos olhar os héteros E tem alguns comentários aí no código depois quando vocês forem olhar o código vocês podem olhar os como os comentários por hora eu vou logo explicando o set our bem aqui você vai receber um parâmetro que a wind Power perceba não coloquei curte aqui por quê Porque se eu colocar assim com este aqui eu não poderia mais fazer essa atribuição bom então Recebi uma hora e daqui eu disse olha essa hora que eu receber por parâmetro eu vou colocar ela no atributo fumo o meu atributo tem o mesmo nome do parâmetro eu coloquei esse diz aqui esse bem significa que é um objeto atual no objeto atual tá no atributo hora do objeto atual coloca o que veio por parâmetro os outros são semelhantes só que para minuto e ir para segunda para imprimir só pra imprimir eu vou utilizar simplesmente o seu altos colocar hora: um minuto: o segundo e colocar uma quebra de linha no fim então imprimir não é complicado e o Next secam de que eu coloquei aquele também não é nem um pouco complicada eu vou acrescentar um segundo ou seja se era 00 2.
00 2. 00 vai virar 000 2. 0 02.
01 única coisa que eu tenho que tomar cuidado é se ao incrementar de um segundo é de virar 60 por exemplo se ele era 59 nesse caso se ele vira se ele era 59,60 eu vou fazer com que ele ele zero tá e vou acrescentar um em um minuto se o minuto pelas 60 eu vou fazer um minuto vira zero e acrescentar um na hora se a hora virou o maior = 24 eu vou dizer que a hora é 10 por quê Porque é o dia seguinte como eu não interpreta a que dias essa hora minutos segundos segundo então vou simplesmente colocar hora igual a zero por voltar aqui para os slides estão nesses slides estão essas implementações e as explicações que eu já falei lá no código get out get out get set of 7 - 700 de uma indicação de que estão no time. CPP E agora como é que a gente utiliza essa essa classe que a gente gerou para utilizar essa classe que a gente gerou nós precisamos criar um objeto e essa é a instanciação de um objeto time ter um onde eu estou colocando esse código de instanciação do objeto eu estou colocando esse código dentro desse time nem encontro CPP porque eu chamei ele de time nem porque aqui dentro que tem o o o o método meio que é o método que vai iniciar a execução do código observa em aqui inicialmente nesse primeiro a primeira nesse primeiro bloco aqui eu crio ta MT um dizem Olha a minha hora é 23 59/59 eu dou um ponto print quando vocês podem ver vai ser isso que vai ser impresso na tela tá E depois o que que eu faço eu inicializei com esses valores e depois eu usei os cetros isso aqui é só para vocês verem os setters sendo usado depois que eu uso espetros e tento imprimir de novo ele vai devolver esse valor aqui por quê Porque eu citei esses valores tá percebo uma coisa que eu passei todos os parâmetros hora minuto e segundo Mas vocês devem lembrar que eu falei anteriormente que havia um valores de fogo por exemplo nesse segundo bloco aqui eu estou utilizando os valores de fogo eu só passei hora e eu não passei um minuto e não passei o segundo isso quer dizer que minuto como eu coloquei como de fogo zero e segunda como eu coloquei como depois zero Quando eu der um print ele vai colocar 12 2. 00 2.
00 e por fim no terceiro bloco eu coloquei para ele instanciar inicializar com 23 horas 59 minutos e 58 segundos daí eu coloquei um next second se eu deixar se eu der um print ele vai retornar esse mesmo valor se eu pedi para ele implementar de um segundo ele vai retornar esse valor que vai virar 23 horas 59 minutos e 59 segundos e se eu der um next second novo pedir um print ele vai zerar ele vai virar 00 2. 00 2. 00 E Agora Nós temos esses 3 arquivos como eu compilo agora que tem o ponto h e um ponto CPP na hora de compilar você não vai passar para o compilador o ponto.
H você só vai passar implementações o time. CPP Oi e o time meio. CPP para que você pode colocar um traço ó e colocar por exemplo e time e ele vai compilar e você vai poder executar por exemplo um ponto barra time ao executado o ponto/time ele vai aparecer justamente aquelas linhas de códigos que estavam como comentários dentro do time do time Man.
CPP então algumas linhas de código tinha colocado como comentário e aqui E aí eu pediria para vocês depois confirmarem que isso daqui é realmente o que apareceu na saída para só título de exercício e lembrando aqui que você poderia usar esse gemas mais por exemplo gemas mais asteriscos com CPP já que eu vou usar nesse dia mais mais todas e percebam que eu não coloquei o traço ou aqui para dizer qual vai ser o nome do executável Então nesse caso o que podia mais mais vai fazer é gerar um arquivo a ponto alto então aqui eu posso colocar.