Oi gente, tudo bem? Vamos então, fazer agora uma recapitulação de orientação a objetos dos conceitos básicos imagino que vocês todos aqui ja conhecem os conhecimentos básicos mas vamos fazer essa recapitulação para que todo mundo fique no mesmo nível. Falar pouquinho da história, primeiro nos primórdios havia o caos como era o caos? era a linguaguem de máquina, monte de zeros e uns espalhados pelo universo e a gente não entendia nada. Aí os deuses da computação falaram: precisamos de uma forma mais organizada vamos criar o que? a linguagem de montagem, o assembly language que a ideia era ter pequenos comandos de três letras tipicamente que seriam que a gente lembraria o significado então o comando ADD seria o comando para fazer somas muito se escreveu de programas linguagem de montagem. Mas depois de tempo o pessoal viu: essa linguagem de montagem é horrível, eu preciso escrever centenas e centenas de comandos para fazer uma simples formula matemática. Precisamos de uma linguagem de alto nível daí foi criado a primeira linguagem de alto nível era a Formula Translator, FORTRAN que era para transformar formulas matemáticas código, linguagem de montagem mas você escrevia numa linguagem que era considerada, na época, de alto nível. Muito código foi escrito FORTRAN mas depois de tempo falaram: precisamos de alguma estruturação melhor nesse código que a linguagem FORTRAN não está nos dando e daí inventaram a linguagem ALGOL, de Algorithmic Language que a idéia era permitir conceito de programação estruturada você poder modularizar melhor o seu código E milhões de linhas de código por milhares de programadores foram escritos com programação estruturada. E depois desses milhões de linhas de códigos foram escritos por esses milhares de programadores o pessoal viu: a gente ta fazendo muita coisa boa mas está sendo difícil programar porque a gente ta enxergando muita repetição de código, as pessoas ficam fazendo Copy and Paste de lugar pro outro com esse código o código ta mal organizado, ta difícil de entender, quando você vai ler código escrito por outras pessoas é difícil de entender e isso ta gerando muitos erros, muitos bugs no nosso código e daí, que que aconteceu? alguns pesquisadores entre 1987 e 1980 criaram o conceito de programação Orientada a Objetos. Começou no meado da década de 60 lá na Dinamarca, com o pessoal que criou a linguagem Simula 67 e depois... Não é Dinamarca [INAUDIVEL] Então, isso começou lá na Noruega com o pessoal que criou a linguagem Simula 67 e depois continuou com o pessoal que trabalhou no Xerox PARC Palo Alto, no Estados Unidos na linguagem Smalltalk, 1980 lançaram a linguagem Smalltalk80 que continha todos os conceitos modernos de orientação a objetos e que conceitos são esses? primeiro conceito é objeto, o que é objeto? Objeto é algo que encapsula, guarda dentro de si, como se fosse numa cápsula, duas coisas: os dados, que o nosso programa manipula e o código correspondente a aqueles dados e isso é diferente do que a gente via, por exemplo, num programa na linguagem C anteriormente que os dados ficavam espalhados por vários lugares, particular na linguagem C você pode ter variáveis globais que qualquer pedaço do código, qualquer função de qualquer arquivo pode acessar aquela variável global. isso a gente diz que quebra esse encapsulamento, a gente gostaria de ter os dados separados de acordo com a sua funcionalidade e o código que manipula aqueles dados está encapsulado junto com esses dados. Então isso é capsulamento de dados e códigos várias capsulas diferentes gerar esse conceito de objeto. Os dados vão ser as variáveis do nosso programa que quando uma variável ta associada a determinado objeto a gente diz que aquelas variáveis são os atributos daquele determinado objeto, e o código são as funções, ou como diz a orientação a objetos são os métodos do nosso objeto. Ai tem o conceito de classe uma classe é como se fosse uma receita, uma especificação que define os elementos que vão estar presentes conjunto de objetos então essa classe ela descreve quais são os métodos que aquele conjunto de objetos vai ter e quais são os atributos. Diz o nome dessas variáveis, ou se for o caso o tipo das variáveis e o nome dos métodos, quais são os parâmetros e se for o caso, o tipo dos parâmetros desses métodos. Então essa lista que especifica como é determinado tipo de objeto que a gente chama de classe. As classes além de definirem essa receitinha de bolo de como objeto funciona, ela também funciona como uma fábrica de objetos. então você pode falar para uma classe: crie novo objeto do seu tipo do tipo que você definir, e daí acontece o que a gente chama de instanciação de objeto O que é uma instanciação de objeto? A partir de uma classe a gente cria instâncias daquela classe que são os objetos diferentes linguagens de programação tem diferentes formas de fazer isso, então por exemplo na linguagem Java e na linguagem C+ você simplesmente faz assim: carro c aqui eu to definindo que eu tenho uma variável c do tipo carro, e como eu crio uma nova instância? Eu pego esse construtor da classe carro carro abre e fecha parênteses ponto e vírgula para mostrar que não to passando nenhum parâmetro para o construtor eu uso essa palavra reservada new, a palavra reservada new cria uma nova instância. Esse pedaço aqui cria uma nova instância e nesse caso eu to armazenando uma referência para a nova instância nessa variável c que é do tipo carro. Então esse é o jeito que eu instancio java C+ novo carro. C++ é bem parecido só que C++ geral não usa referências, usa apontadores e tem esse simbolo de asterisco para representar que c é apontador ele ta apontando para uma nova instância da classe carro Python talvez o jeito mais enxuto, porque você não precisa definir o tipo, porque não é uma linguagem que se define o tipo e tempo de compilação, e você simplesmente coloca aqui o nome do construtor e ele já sabe que tem que distanciar uma nova [INCOMPREENSÍVEL] e o Ruby é dessa forma, você coloca o nome da classe .new é como se tivesse chamando o método, na verdade Ruby new é o método da classe então vai ser new método da classe carro, que vai gerar a nova instância igual da nossa variável c a linguagem Smalltalk 80 é pouquinho diferente é quase igual a Ruby, você não precisa do ponto você coloca simplesmente espaço branco, chamando o método new na classe carro, e a atribuição Smalltalk é dessa forma dois pontos igual, que é igual a linguagem Pascal. Então é assim que se instancia objetos diferentes linguagens orientadas do objeto Uma vez que você instanciou tem vários objetos lá rodando no seu programa, a ação acontece quando a comunicação entre objetos troca de mensagens entre objetos, orientação a objetos a gente diz que há envio de uma mensagem de objeto para o outro esse envio de mensagem também é chamado de chamada de método, porque quando a mensagem chega no destinatário o destinatário vai ver se ele tem método com aquele nome da mensagem, se tiver ele executa linguagem tipo C++ se diz chamada de função ao invés de chamada de método, é a mesma coisa. Ultimo conceito aqui é o conceito de abstração numa linguagem orientada a objeto quando a gente ta programando o que a gente vai fazer é criar classes para representar coisas do mundo real ou coisas do mundo virtual computacional. Então se eu to fazendo, por exemplo, sistema que vai cuidar de uma fábrica que constrói carros eu vou abstrair as coisas importantes que são dos objetos que existem na minha fábrica e vou criar classes representando essas coisas da fábrica. Então uma fábrica vai ter carros, vai ter pneus, vai ter chassi, vai ter o robô que faz o carro e outras coisas que tem dentro de uma fábrica. Então eu vou ter classes para essas coisas, e essas classes são abstrações. Abstrair é você remover detalhes menos importantes e pegar aquilo que é mais importante então você pega os conceitos mais importantes de carro para esse meu sistema e represento nessa classe carro. Detalhes menos importantes eu não represento, eu abstraio. Esse é exemplo que o sistema ta representando coisas do mundo real: carro, pneu a gente pode ter sistema que representa coisas do mundo virtual, por exemplo num videogame eu posso ter as vidas de determinado personagem, vida não é do mundo real, é uma entidade abstrata assim ja por si só é uma coisa do mundo virtual, principalmente no videogame Mas você vai ter classes para representar essas coisas virtuais que acontecem ali no videogame também. Uma magia... Uma coisa do mundo real, ou uma coisa do mundo virtual E programar numa linguagem orientada a objetos é escrever sentenças da linguagem lidando com essas abstrações, com essas coisas do seu domínio de atividade com isso a gente diz que a gente aumenta o nível de abstração de programação então ao invés de a gente ficar programando termos de variáveis, pilhas, listas, ligadas a gente programa termos das coisas do nosso domínio, então se você ta fazendo sistema de folha de pagamento, as coisas são os funcionários salários, aumento, são as coisas relacionadas ao seu domínio Então esses aqui são os principais conceitos iniciais de orientação a objetos que a gente precisa saber, resumindo, objetos encapsulam dados mais código numa única coisa. Classes descrevem os tipos dos objetos, eles funcionam como fábricas, a gente instancia objetos a partir das classes sistemas orientados a objetos são compostos por vários objetos que trocam mensagens entre si, sistema grande vai ter milhares, alguns casos milhões de objetos trocando mensagens milhares ou milhões de mensagens entre si num sistema de grande porte. E programa orientado a objetos usa esses objetos para representar os elementos do seu domínio, o domínio com o qual ele ta trabalhando então por enquanto é isso, a gente vai ver nesse curso agora alguns conceitos pouquinho mais avançados do que esse.