Olá! Bom dia, boa tarde, boa noite! Vamos agora aprender conceito muito importante desenvolvimento de software e ciências de computação que é a programação orientada a objetos. Vamos ver exemplinho rapidinho. Vamos supor que a gente tem uma classe carro e que representa o que carro tem si. E a gente pode ter muitos carros, então são muitas instâncias dessa classe carro. Para fazer uma brincadeirinha, eu vou criar duas instâncias, uma chamada de meu carro que vai ter informações sobre meu carro e outra chamada de carro do IME que é o carro do local onde trabalho aqui no IME. E quais são os atributos que vou ter nesta classe carro? Eu vou guardar informações sobre carro, por exemplo, o ano do carro, o modelo, a cor, e vamos supor que eu quero fazer algum cálculo com velocidade, a velocidade que ele está se movendo neste instante. E daí eu posso ter métodos que vão manipular estes valores, por exemplo, eu posso ter método de acelera que recebe como parâmetro uma velocidade, daí ele vai mudar a velocidade com a qual o carro está andando. Eu posso ter uma classe pare, que faz com que a velocidade vá para zero e assim por diante. Poderia ter outros métodos também. Vamos agora tentar implementar isto. Como que a gente implementaria? Deixa eu abrir aqui o meu [INAUDÍVEL]. Primeiro eu vou ensinar a criar uma classe vazia e vai criar umas instâncias depois a gente vê como a gente coloca coisas, adiciona coisas a uma classe, adiciona atributos e adiciona metas, mas eu vou começar com uma classe vazia para definir esta classe vazia, eu digito aqui class e o nome da classe, eu vou chamar esta classe de carro, dois pontos e daí aqui na linha de baixo viriam os atributos, as funções na classe, mas eu começar com ela vazia, pra a gente dizer que ela é vazia eu vou simplesmente escrever pass, passo, então pronto. Fazendo isto, eu já defini uma classe carro que por enquanto não tem nenhuma atributo, nenhuma função. Agora eu quero criar uma instância quero criar objeto desta classe carro. Como que eu faço isso? Eu posso fazer isso aqui, meu carro recebe, e daí eu coloco o nome da classe e abre e fecha parenteses, pronto, fazendo isso eu crio novo objeto do tipo carro, eu instanciei a classe carro, criei novo objeto do tipo carro e guardei uma referência para este objeto novo que eu criei, nesta variável meu carro. Então agora meu carro, ela agora se referencia a objeto ali do tipo carro. Particular, se eu digitar isso aqui ele vai dizer que isso aqui é objeto determinado endereço de memória, este é número que não interessa para a gente, é o local de memória. onde este objeto carro está armazenado, normalmente a gente nunca vai olhar para este número. O que a gente vai fazer com carro eu vou mostrar daqui a pouco, mas antes deixa eu criar outro carro, eu vou criar o carro do IME também, vai ser uma nova instância de carro, então agora eu tenho duas instâncias, particular se eu escrever aqui carro do IME a gente vai conseguir ver que ele está outra posição de memória aqui porque o endereço daqui é diferente do endereço daqui, são dois lugares diferentes que estão armazenados nestes dois carros, deles tem uma variável chamada meu carro que está se referenciando a deles e o outro carro do IME se referenciando ao outro dele, então agora tenho dois objetos do tipo carro. Primeira coisa que eu posso fazer é introduzir atributos, como que eu defino novo atributo, eu posso fazer assim, meu carro ponto ano recebe mil novecentos porque eu tenho carro aqui do meu avô, ele tinha carro de 1968 e eu quero falar meu carro ponto modelo, é igual a fusca. Ele tinha fusca sessenta e oito azul. Meu carro ponto cor, recebe azul. Então o que eu fiz aqui, eu criei três atributos, chamados ano modelo e cor e armazenei valores aqui nestes três atributos de meu carro. Então, se agora eu digitar meu carro ponto ano, ele vai falar que é mil novescentos e sessenta e oito meu carro ponto cor, ele vai falar que a cor é azul. Então adicionei três atributos ao meu carro e coloquei alí, valores. Outra coisa, eu posso por exemplo, no carro do IME, definir que o ano do carro do IME é mil novescentos e oitenta e o modelo é uma brasília e carro do IME ponto cor amarelo. Então agora tem essa outra variável, se perguntar, qual que é o carro do IME ponto modelo, vai falar, é uma brasília. Agora tenho duas variáveis, cada uma delas com esses três atributos valores diferentes, o carro do IME modelo é brasília, e aqui o meu carro o modelo se eu colocar, meu carro ponto modelo é fusca. Note uma outra coisinha que eu posso fazer agora, eu posso por exemplo, ter uma outra variável chamada novo fusca. Se eu fizer aqui novo fusca. Se eu fizer aqui carro, abre e fecha parenteses, ele vai criar uma nova instância e vai armazenar nessa variável novo fusca, seria terceiro carro. Agora se ao invés de fazer, se eu simplesmente colocar aqui novo fusca recebe meu carro, note que eu não estou criando novo objeto, nesse caso novo fusca vai estar se referenciando ao meu carro, então vai ser duas variáveis apontando para o mesmo objeto. Particular se eu fizer ao novo fusca, vou somar aqui dez no ano de fabricação dele, opa, eu fiz esqueci de colocar o, não posso somar dez no fusca, tenho que somar dez no ano do fusca. Então, novo fusca ponto ano mais igual a dez. Somei dez no ano do novo fusca, mas se eu fizer aqui meu carro ponto ano, foi para mil novescentos e setenta e oito, lembra que antes era mil novescentos e sessenta e oito, mas foi para setenta e oito, porque eu somei o ano do novo fusca e o ano do meu carro acabou mudando? Sim, porque eram duas variáveis apontando para o mesmo objeto porque aqui eu peguei o endereço do meu carro e guardei nessa variável novo fusca. Então, com isso a gente já aprendeu nesta primeira aulinha de programação orientada objetos que nós temos podemos ter classes, definir classes python, depois a partir daí a gente pode criar instâncias dessas classes que vão ser esses objetos então, tipicamente para cada classe você vai ter muitos objetos daquele tipo, daquela classe, as classes podem ter atributos, e os atributos a gente pode atribuir valores a esses atributos, e resgatar valor desse atributos e podemos até fazer computações que nem esse novo fusca ponto ano mais igual a dez a gente fez uma computação alí com determinado valor de atributo. Na próxima aula nós vamos ver como a gente pode criar métodos que vão ser funções que vão manipular esses dados, nos objetos e também vamos ver jeito mais interessante de a gente construir novos objetos python por meio do construtor, que é a função limite. [MUSIC] [MUSIC] [MUSIC]