Oi gente, tudo bem? Eu vou falar para vocês agora pouco sobre a sintaxe da linguagem java. Porque nesse curso a gente vai ver exemplos diferentes linguagens de programação, principalmente Python e Java. Porque excelente programador precisa conhecer várias linguagens de programação, cada vez que você aprende uma linguagem nova, você amplia seus horizontes, você tem novas ideias. Então mesmo aprendendo Java você vai ser melhor programador Python e vice-versa. Então vamos dar uma olhada aqui num exemplo, na verdade eu vou compartilhar minha tela e abrir o editor eclipse que é ambiente integrado de desenvolvimento de software que eu gosto muito e é o que eu vou usar para mostrar para vocês aqui alguns exemplos, tá? Então no eclipse a gente cria uma classe, clicando num ícone aqui de criação de classe e daí a gente dá o nome da classe. Vamos começar por exemplo com uma classe chamada veículo. Ao clicar o finish aqui ele já começa dando esses primeiros comandos indicando que eu estou criando uma nova classe. Então public significa que é uma classe que vai poder ser acessada de qualquer lugar no meu código. Tem a palavra reservada class, o nome da classe veículo e daí abre e fecha Chaves. Aqui dentro desse abre e fecha chaves eu vou dar as informações sobre minha classe. Particular Java é diferente de Python, é uma linguagem que a gente chama de fortemente tipada então a gente precisa definir os tipos das variáveis. E, ao contrário de python, que é uma linguagem mais dinâmica que a gente pode ir acresentando atributos na nossa classe, java você precisa definir a priori quais são todos os atributos da classe. Então, por exemplo, nessa classe veículo, eu posso dizer que eu tenho uma variável chamada "ano de fabricação" que é do tipo inteiro então eu escrevo "int", que é o nome do tipo inteiro e eu coloco aqui ano de fabricação. Eu vou fazer sem assentos para facilitar a nossa vida. Depois eu posso ter string que é o modelo do veículo e outro string que é a marca do veículo. Então definir dessa forma 3 atributos. Tem outra coisa interessante da linguagem Java...Java herdou a sua sintaxe da linguagem C++ então para quem já sabe programar C++ vai ser muito simples fazer essa migração para Java. E uma coisa que java herdou de C++ é a possibilidade de você definir quem pode acessar cada dos atributos ou cada dos métodos determinada classe. É uma boa prática de orientação a objetos você não deixar que outras classes mexam nos seus atributos, idealmente essas outras classes deveriam só invocar métodos da classe, então para você dizer isso que esses 3 atributos não podem ser chamados de fora da classe, você pode simplesmente dizer que eles são atributos privados. você escreve aqui "private". Escrevendo "private" esses 3 atributos agora só podem ser acessados de dentro da própria classe, uma eventual outra classe que queira acessar esses atributos não vai ter essa possibilidade. Vamos agora criar construtor. Construtor na linguagem java é simplesmente método que tem o mesmo nome da classe e recebe como parâmetro o que você quiser, nesse caso eu vou receber como parâmetro essas três informações para inicializar. Então vou chamar "int", ano de fabricação, dei "string" modelo e outro "string" marca. Abre e fecha chaves aqui. E eu vou fazer o ano de fabricação, ou seja, o meu atributo. Ano de fabricação vai receber isso que está sendo passado como parâmetro aqui na variável adf. O meu modelo vai inicialmente receber o que eu vou passar no parâmetro m. E a marca do meu veículo vai receber o que eu passar aqui no ma. Então dessa forma criei construtor toda vez que eu criar novo veículo eu vou poder chamar esse método veículo passando como parâmetro o ano de fabricação o modelo e a marca e ele vai criar uma nova Instância dessa classe, novo objeto contendo os valores que eu passar nesses 3 atributos. Tá? Tem outra coisa interessante, vamos supor que eu queira ter acesso...outras classes têm acesso a esse ano de fabricação desse veículo. Como que eu posso fazer isso? uma forma é liberar, tirar esse "private" e deixar que eles acessem o atributo, mas não é uma boa prática orientação a objetos acessar os atributos. Idealmente, se você quer de fora da classe, ler o valor do atributo ou atribuir novo valor para atributo o que a gente faz normalmente é criar métodos de acesso. Java, tem o padrão de quando a gente quer ler o ano de fabricação a gente cria método de acesso chamado "get" ano de fabricação e quando a gente quer escrever o valor do ano de fabricação a gente cria método chamado "set" ano de fabricação. Então eu poderia escrever aqui "get" ano de fabricação, método para ler esse valor e outro método para escrever, mas no Eclipse tem uma coisa que facilita bastante a nossa vida, se você clicar com o botão direito do Mouse Tem essa opção "source" aqui que ele tem essa opção "Generate getters e setters" que faz isso automaticamente para a gente, tá? Então eu vou falar que eu quero escolher o ano de fabricação, eu quero que ele gere os meus "getters" e "setters", então ele vai gerar "getter" no de fabricação e "setter" no de fabricação. Para marca e modelo eu não quero, e daí eu coloco ali "generate" e ele automaticamente criou o código. Então esse "get" ano de fabricação, esse "int" é para dizer que ele devolve valor do tipo inteiro e a implementação dele é "return" ano de fabricação. Já esse "set" ano de fabricação, "void" quer dizer que ele não devolve nada mas ele recebe como parâmetro ano de fabricação que é uma variável inteira e esse ano de fabricação aqui ele guarda nessa variável ano de fabricação "this". "This" é equivalente ao "self" outras linguagens de programação é ponteiro para o próprio objeto, então "this." ano de fabricação é o atributo ano de fabricação deste objeto. "This" é "Deste". Então ele coloca esse parâmetro ano de fabricação num atributo ano de fabricação. "This", Python seria "self". Smalltalk também seria "self". Tem até uma linguagem que chama "Self", é o nome da linguagem também. Então nós já temos aqui uma classe veículo que está OK essa minha classe veículo, vou apertar aqui CRL + S para salvar. Ele tá dando aqui warning falando que não estou usando para nada o modelo e marca mas tudo bem, deixa aqui por enquanto. Vamos criar outra classe agora, uma subclasse de veículo. Para isso eu venho aqui de novo, neste ícone aqui de criar uma classe e eu digo que a super classe dessa minha classe vai ser veículo. Então veículo vai ser a super classe e o nome da classe vai ser carro, porque carro é veículo. Pronto ele criou uma classe pública, o nome dela é Carro, ela estende veículo. "Extends" é o jeito de indicar herança na linguagem java então eu estou dizendo aqui que carro é uma subclasse de veículo. E daí eu posso, por exemplo, adicionar novos atributos. Eu posso falar "int" cilindradas. Vai dizer as "int" cilindradas. Vamos tornar privado e eu posso também ter outro atributo, por exemplo "boolean", dizendo se tem airbag ou não. Então o meu carro além dos atributos de veículo vai ter também cilindradas e airbag. Uma coisa interessante da linguagem java, que eu gosto bastante, é se a gente quiser mandar imprimir determinado objeto a gente pode implementar nesse objeto método chamado "toString" que devolve "string" [ÁUDIO_EM_BRANCO] e a implementação desse "String" deve devolver "String" obviamente contendo alguma representação textual do conteúdo daquele objeto. Então por exemplo eu poderia devolver "String" que esse aqui é carro, fabricado E daí eu vou pedir "get" ano de fabricação, esse aqui vai ser método que eu herdei. Carro fabricado neste ano de fabricação, com, e daí vou falar quantas cilindradas o carro tem. E daí cilindradas é essa minha variável que está aqui, cilindradas... cilindradas, e ponto de exclamação para ficar bem interessante. Então pronto, eu já tenho método "toString" aqui. Outra coisa interessante que tem na linguagem java, é se você quiser tornar esta classe uma classe executável a partir da linha de comando, eu digitava na linha de comando Java veículo. Daí eu preciso dizer qual é o método principal principal de entrada que tem que ser executado quando eu executo da linha de comando e esse método de entrada, obrigatoriamente tem que ter esse nome aqui, tem que ser método "public" e tem que ter esse nome aqui, "static", "void", "main" e obrigatoriamente ele tem que receber como parâmetro array de "Strings". Então criando esse método aqui, quando eu executar a linha de comando ele vai rodar este método. Daí vamos simplesmente colocar exemplinho para a gente ver se está funcionando. Eu vou criar então instanciar carro aqui dentro, então eu preciso de uma variável para guardar esse carro, eu vou chamar de fordBigode. Só que variáveis java você tem que definir o tipo da variável. Como fordBigode vai guardar carro ela é do tipo carro, então eu escrevo "carro" Ford bigode, recebe e daí eu quero instanciar novo objeto. O jeito de instanciar novo objeto é colocar a palavra "new" e depois chamar o construtor e o carro. Tá, é isso aqui. Só que aqui a gente está com problema porque a gente não está passando como parâmetro os valores, então a gente vai precisar criar construtor aqui na verdade para poder passar como parâmetro. O que é que eu gostaria de passar como parâmetro nesse fordBigode? Não só esse valor desses 2 atributos. Então, por exemplo, número de cilindradas poderia ser 2900. Deixa para lá o airbag, não vou falar do airbag mas eu precisaria passar os atributos do veículo também. Os atributos do veículo são ano de fabricação, modelo e marca. Então eu vou querer passar também aqui o ano de fabricação, modelo e marca. Ano de fabricação do fordBigode é 1910, modelo é bigode e marca Ford. Só que agora eu preciso definir construtor para essas coisas aqui, então vamos definir construtor. Posso definir aqui o construtor vai ser carro e recebe como parâmetro o ano, esse aqui é o modelo, espera, "int" ano, "string" modelo, "string" marca e "int" cilindradas. Aqui eu preciso primeiro chamar o construtor da superclasse. Jeito que eu posso fazer isso é "super" e passar como parâmetro os atributos que precisam ser passados para o construtor da superclasse, que nesse caso é o ano, o modelo e marca. Pronto! Depois de criar a superclasse, eu ainda quero definir as cilindradas, para isso eu vou fazer "this." cilindradas recebe o parâmetro cilindradas. Então eu acho que está certo mas vamos ver, então eu crio aqui e daí eu vou simplesmente mandar imprimir. O comando java é "system.out.println" para imprimir. Eu vou imprimir o carro criado. Foi. O veículo! O veículo criado foi mais fordBigode. Quando eu chamar esse fordBigode, como estou dentro do print ele vai querer transformar esse fordBigode num "string". e como que ele faz isso? Chamando o método do "string" que eu crio ali. Então vamos ver se isso está funcionando, eu dou save aqui. Ele não deu nenhuma mensagem de erro, então pelo menos compilar, ele conseguiu compilar. e agora eu vou executar. Para executar eu venho aqui "Run as Java application" Vamos ver. E apareceu aqui baixo, o veículo criado foi carro fabricado 1910 com 2900 cilindradas. Então deu certo. Falta espaço aqui, a gente coloca espaço aqui no comecinho para gerar espaço aqui. Rodar de novo? Salvar, rodar de novo, rodar com a aplicação java, pronto, o veículo criado foi carro fabricado 1910 com duas 2900 cilindradas, tá? Então a ideia aqui foi para mostrar para vocês a sintaxe básica da linguagem java porque a gente vai ver vários exemplos nesse curso de orientação a objetos que são java também. Então a ideia aqui não é ensinar a linguagem java, se você quiser aprender mais detalhes você deve procurar outro curso. Aqui a ideia é aprofundar nos conceitos de orientação a objetos, vendo exemplos diferentes linguagens de programação. Abraço e até a próxima.