E aí pessoal na aula de hoje a gente vai falar sobre orientação a objetos em que consiste esse conceito orientação objetos é um paradigma para desenvolvimento de sistemas que busca representar os elementos do mundo que a gente está modelando com qual a gente está trabalhando como se fosse objetos então tudo que a gente vai representar no sistema a gente representa na forma de um objeto classes e objetos isso traz uma série de benefícios quais são eles O primeiro é que facilita reutilização de código então a gente uma vez que use esse paradigma a gente implementa
as coisas de uma forma em que se torna mais fácil reutilizar código evitando retrabalho que pode ocorrer em muitas equipes de desenvolvimento então a gente desenvolve de uma forma que fica mais fácil você reutilizar algo que você já implementou e já tá pronto e fácil de ser acoplado a qualquer outro sistema esse paradigma torna mais fácil também é compreensão do código fica mais fácil de manter é um paradigma utilizado internacionalmente então qualquer pessoa que eu conheça consegue trabalhar com ele e fica fácil implantar isso em uma equipe como um todo é uma linguagem Universal e
para trabalhar com orientação objetos a gente precisa compreender alguns conceitos o primeiro deles é o conceito de classe O que é uma classe uma classe é uma representação de um elemento que a gente está querendo modelar então é uma representação de um objeto do mundo que a gente vai implementar trazendo para o nosso dia a dia por exemplo todo mundo tem uma uma conta no Facebook e cada usuário pode ser visto pelo sistema do Facebook como provavelmente é como uma classe que é uma representação do usuário que criou uma conta e cada classe possui uma
série de características acerca daquele objeto que a gente tá querendo representar no caso o usuário usuário do Facebook então o usuário é uma classe Quais as características que essa que esse usuário possui todo mundo todo usuário possui nome sexo idade uma série de informações próprias desse objeto dessa classe que é o usuário uma série de informações específicas dessa classe então descreve um conjunto de objetos indivíduo individuais né é uma representação de um elemento do domínio com qual a gente está trabalhando e uma classe é composta de atributos e métodos O que são os atributos os
atributos são essas essas características específicas é das quais acabei de falar nome idade etc aqui eu tenho um outro exemplo num contexto de um sistema bancário como se tivéssemos desenvolver um sistema para um banco a gente provavelmente teria uma classe para a conta o que que toda conta tem de característica ela tem um número ela tem o nome do dono da conta ela tem um tipo ela tem um saldo um limite uma série de informações Então essas informações acerca da classe são chamadas de atributos métodos os métodos dizem respeito aquilo que a classe pode fazer
então no mesmo domínio de um sistema bancário o que que um uma conta pode fazer Quais são as funções que ela pode executar a gente tem aqui alguns exemplos sacar uma quantia x depositar uma quantia imprimir o nome do dono da conta informar o saldo tirar o extrato Então são alguns métodos algumas ações que essa classe consegue executar aqui eu tenho uma representação através de um diagrama de classes nas próximas aulas a gente vai falar sobre isso então isso aqui é uma classe eu tenho aqui um retângulo com três sessões a primeira a primeira linha
aqui diz o nome da classe aqui no caso é produto aqui na segunda sessão eu tenho os atributos Quais são as características informações acerca dessa classe e na última sessão eu tenho os métodos o que que essa classe consegue realizar então vejamos produto poderia ser uma classe de um sistema de vendas online por exemplo um sistemas da Amazon da Americanas Então eu tenho lá uma classe chamada produto com essas informações acerca do produto então observem que o produto é um objeto é uma representação de algo domínio dessa empresa então ele tá representando um objeto dentro
da empresa lá no caso da Americanas é um objeto que ele quer vender então eu tenho aqui quais são os atributos que um produto poderia ter código nome descrição preço de compra e de venda e aqui a gente já consegue por exemplo através do preço da compra da venda a gente já consegue saber qual foi o faturamento o lucro né quantidade em estoque e uma série de informações do lado esquerdo tem um nome do atributo do lado direito aqui eu tenho depois os dois pontos eu tenho um tipo de retorno no tipo desse atributo tributo
inteiro só número tributo string decimal e etc aqui na última sessão os métodos O que é que esse produto o que que essa classe pode fazer a gente consegue por exemplo inserir um produto alterar as informações do produto excluir um produto então um sistema de vendas da Americanas por exemplo a gente poderia ter a função de cadastrar produto e aí para que a gente consiga realizar isso a gente através dessa Classe A gente vai criar um objeto do qual vou falar a seguir e dentro desse objeto a gente vai inserir as informações desse produto que
a gente acabou de cadastrar e vai salvar isso no banco é assim que funciona na prática objeto o que que é um objeto o objeto é uma Instância da classe veja o seguinte a classe é como se fosse uma forma uma forma de um chocolate de um picolé de algo nesse sentido uma forma de gelo então ela dá as características do elemento que vai ser gerado a partir dela então você tem uma forma de chocolate e ela tem um formato uma série de características e uma vez que você coloca o chocolate lá depois de pronto
você retira Então esse chocolate que saiu com base na forma é o objeto então ele é uma Instância da classe então ele foi gerado a partir daquela classe é uma representação daquela classe outro exemplo no caso lá do Facebook eu teria a classe usuário mas um objeto poderia ser O João O João é um uma implementação daquela classe então João 30 anos de idade sexo masculino não sei o que mais então isso é um objeto é uma Instância da classe representa uma entidade no mundo real que possui uma identidade informação importante aqui cada objeto possui
seus próprios valores para cada tributo e o objeto pode representar objeto é classe entidades concretas ou abstratas concretas carro produto a gente falou sobre alguns aqui e abstratas também por exemplo num jogo a gente se a gente vai implementar um jogo a gente tem lá a figura do dos inimigos os personagens das entidades então inimigo pode ser uma classe também com suas características inimigo tem um nome o tipo quantidade de vida poder ser não sei o que mais Então essas são características dessa classe abstrata que é inimigos por exemplo aqui um outro exemplo eu tenho
aqui a classe é isso aqui ó número cliente saldo e limite são alguns atributos da classe mas nesses três quadrados eu tenho a representação dos objetos que são aí a instanciação daquela classe então por exemplo primeiro objeto número número da conta conta número tal é do cliente João saldo tal limite e tal um outro objeto que foi gerado com base na classe conta número um número é diferente veja que é um outro valor cliente não são informações acerca um objeto específico que foi gerado com base na classe um outro exemplo para facilitar a compreensão eu
tenho a classe que funcionário com três atributos nome data de nascimento salário e dois métodos em formar salário e calcular idade então vejam que a classe ela é só o esqueleto é só a forma do que vai ser gerado e aqui eu tenho dois objetos duas instâncias da classe Helena Reis nasceu dia tal salário tal e aqui o Mário com suas informações também e os métodos né os métodos são são as ações que essa classe consegue executar um outro exemplo um outro exemplo é esse aqui ó eu tenho aqui um diagrama que representa a classe
cachorro e o cachorro ele possui alguns atributos tamanho e Raça tamanho do tipo inteiro né que é um número um número sem casa desse mal inteiro Então qual o tamanho desse cachorro e Raça string que é uma descrição um conjunto de caracteres caracteres alfanuméricos pode ter texto número caracter especial e etc e por fim as ações os métodos que essa classe consegue executar aqui no caso late e poderia ser ter uma série de outras coisas isso aqui é uma abstração para facilitar a nossa compreensão entendia dos conceitos de classe e objeto a gente precisa entender
agora o conceito de herança em alguns casos se faz necessário acontece de repetir informações Então a gente tem classes com informações iguais então nessas situações muitas vezes dá para utilizar o conceito de herança e reutilizar propriedades características os atributos e os métodos então por exemplo eu tenho aqui uma uma chamada de super classe funcionário com nome na data de nascimento salário e dois métodos e com base nessa classe eu tenho duas subclasses isso aqui é um diagrama de classe como eu falei e o que representa esse relacionamento de herança é essa seta fechada como Vocês
conseguem observar aqui a seta fechada ela fica encostada na super classe então gerente programador são duas espécies de funcionários são duas subclasses da Super classe funcionário que quer dizer isso aqui pessoal então gerente foi gerado com base em funcionário e o que que a herança Diz para mim que as características que funcionaram possui vão ser dadas pelo gerente é o que o nome já diz herança então a super classe ela é das características da Super classe falando de novo a subclasse herda as características da superclasse e para que que eu preciso definir relacionamento para evitar
reescrever atributos em classes distintas Então se gerente programador possui também possui nome data de nascimento de salário esses atributos que são comuns aos dois eu coloco na superclasse então quando tem uma herança assim como Vocês conseguem ver aqui representada tá dizendo para mim que o gerente além do atributo Projeto vai ter também os atributos nome data de nascimento e salário e programador além do atributo linguagem que diz qual a linguagem com a qual Ele trabalha ele vai ter também os atributos nome data de nascimento e salário e para que isso se não fosse assim se
a gente não utilizar segurança esses atributos teriam que está em gerente e em programador usando herança a gente otimiza a utilização de memória por exemplo Então a gente vai ter menos replicação de informações beleza então novamente tenho aqui duas subclasses gerente e programador e elas herdam os atributos e os métodos do funcionário então o gerente faz tudo que o funcionário pode fazer mais as coisas específicas do gerente e os atributos específicos e as ações específicas programador possui os atributos e os métodos de funcionário e também os atributos e os métodos específicos do programador essa é
uma herança dentro do mundo de orientação a objetos ó uma classe pode ser definida genericamente depois refinada através de subclasses cara subclasse é das propriedades de sua super classe e adiciona suas particulares as propriedades da classe base não precisam ser repetidas na classe derivada como eu falei reduza repetição de código e consequentemente melhora o uso de memória o desempenho e tudo mais um exemplo aqui eu tenho uma classe super clássica também chamada de classe pai chamada veículo e ela possui alguns atributos modelo velocidade passageiros e combustível e aqui eu tenho duas classes filhas carro e
avião observem que carro é um tipo de veículo e avião também é um tipo de veículo e professor Quando é que eu vou criar uma uma super classe quando é que eu sei que eu vou ter que utilizar uma herança quando você observar que existem duas classes aqui por exemplo o carro e avião que possuem atributos iguais velocidade passageiros combustível modelo aqui é a mesma forma modelo velocidade passageiros e combustível observem que são atributos iguais nos dois então ao invés de repetir em cada um a gente cria uma super classe então carro e avião também
são veículos Então são uma derivação de veículo então a gente cria essa super classe e pega esses atributos comum comuns as duas classes e coloca na classe pai então aqui na classe filho a gente não precisaria mais ter essas propriedades aqui definidas na super classe e Deixaremos aqui apenas as propriedades específicas da classe filha da subclasse um outro exemplo uma super classe pessoa que possui lá o nome e o endereço e duas subclasses pessoa física e jurídica isso aqui é um exemplo muito comum em qualquer sistema de compras ou de vendas a gente tem lá
o cadastro da pessoa e você pode definir isso lá você tá vendendo para pessoa física para pessoa jurídica Porque se o cadastro for de uma pessoa física a gente vai ter que colher o CPF se for da pessoa jurídica ou CNPJ então lá quando a pessoa tiver preenchendo o formulário ela vai definir isso e quando for cadastrar programaticamente a gente vai gerar um objeto em silenciar um objeto ou da classe pessoa física ou da pessoa jurídica dependendo do que foi informado e vai salvar isso no banco de dados outro conceito polimorfismo como o nome já
diz polimorfismo diz respeito a aquelas situações onde se há várias formas de se realizar uma mesma coisa uma mesma ação com a mesma operação ela pode se comportar de modo diferente em classe distintas existem aqui dois cenários de aplicação do polimorfismo primeiro é de sobreposição o que que é a sobreposição dentro do polimorfismo eu tenho aqui uma super classe empregado e três subclasses vejam que o relacionamento de herança a seta fechada na superclasse uma das subclasse são assalariado depois eu tenho comissiorista então novamente as propriedades que estão aqui são herdadas por essa subclasses também bem
como este método aqui e assalariado tem aqui um atributo salário que é só dele comissionado tem outras informações e onde está a sobreposição vejam que as quatro classes possuem o método vencimento então a forma de obter qual é o valor que esse empregado recebe quanto que esse empregado ganha Então tem um método lá uma ação que vai dizer para mim o quanto que ele ganha e onde é que tá a sobreposição justamente aqui nesse nesse contexto onde cada classe vai implementar a forma de obter o vencimento do empregado de forma diferente então eu tenho aqui
um uma forma de através da classe empregado obter o vencimento deste deste funcionário através desse método vencimento da classe empregada mas aqui em assalariado também buscam através da classe assalariada Eu também consigo obter o vencimento do empregado Então esta este método está sobrepondo o método que está lá na super classe beleza esta é uma sobreposição e também uma representação de polimorfismo então eu consigo obter o vencimento através da classe pai e através da classe filha então este é o polimorfismo outro conceito dentro do polimorfismo é a sobrecarga aqui não sobrecarga eu tenho é quando na
mesma classe eu tenho várias implementações de um mesmo método então aqui por exemplo eu consigo poderia ser ao invés de soma poderia ser aqui uma classe chamada calculadora e lá dentro dela eu tenho aqui três métodos para somar valores observem que são que o nome do método é o mesmo soma Então são três formas de se fazer uma mesma coisa somar o que que muda é o tipo de parâmetro que este método vai receber aqui na primeira soma ele vai trabalhar com dois números inteiros aqui na segunda soma duas Strings aqui na terceira dois números
Double Double é número com casa decimal inteiro sem casa decimal Então são três formas de se realizar a mesma coisa a mesma operação Este é um polimorfismo do tipo sobrecarga Então dentro da mesma classe eu consigo Executar a mesma operação de três formas diferentes na sobreposição observem que há o conceito de herança relacionado então a subclasse ela é implementa o que tá lá na super classe ela sobreponham um método na super classe e a sobrecarga são formas de se fazer a mesma coisa dentro da mesma classe não há herança aqui um exemplo aqui de polimorfismo
também eu tenho aqui uma classe animal com nomes sexo e raça e três métodos emitir som dormir e caminhar e eu tenho aqui uma série de classes especializadas de subclasses e observem que em cada subclasse ela possui uma forma própria de emitir o seu som observem que emitir som é uma reem implementação está sobrepondo um método que tá na super classe emitir som então tigre limite um som de uma forma diferente o lobo de uma forma diferente o gato então eles estão fazendo a mesma coisa que meti um som só que eles geram resultados diferentes
fazem de uma forma específica Este é o polimorfismo para finalizar o conceito de abstração e encapsulamento abração Em algumas situações a gente não tem muito detalhes sobre como uma classe vai ser implementada a gente só sabe que ela vai precisar existir no nosso sistema então nesses casos a gente vai utilizar o conceito de classe abstrata permite postergar decisões de desenvolvimento aqui eu tenho uma figura ilustrativa muitas vezes a gente sabe que um objeto vai ter que existir aqui como a gente consegue ver tem um gato e duas pessoas com pensamentos diferentes então é uma Senhorinha
ela vê um gato de uma forma e um veterinário ver o gato de outra forma mas de todo jeito ele sabe que a gente vai precisar da figura do gato no nosso sistema por exemplo Mas como que ele vai ser implementado aí é uma questão pode ser uma questão Futura olha um exemplo prático eu tenho aqui um diagrama de classe com a classe uma super classe abstrata a classe abstrata ela é representada pelo nome em Itálico que vocês observaram o nome da classe em Itálico é uma classe abstrata e ela possui aqui um método ativa
e eu tenho três subclasses bomba d'água de combustível e atômica cada uma é sobre escrevendo olha que o polimorfismo sobre escrevendo um método na super classe então cada um tem uma forma própria de e o que que muda pessoal como eu falei para vocês a classe abstrata ela não traz muitas informações sobre como ela vai ser implementada então na prática ela não pode ser instanciada o que vai ser instanciado ou vai ser uma bomba de água de combustível atômica então não eu não posso gerar um objeto através dessa classe abstrata e sim só vou poder
gerar objeto através das classes especializadas das subclasses entendido não posso gerar objeto através da classe abstrata encapsulamento para finalizar encapsulamento é uma forma de proteger os dados de uma classe então algumas informações a gente não quer tornar ela totalmente acessível para fora uma questão de segurança também para o sistema para aplicação vou mostrar para vocês olha essa figura aqui dentro esse ciclo interno eu tenho os atributos de uma classe saldo nome do titular CPF histórico de transações então que aparentemente uma classe de uma conta Só que eu não quero tornar esses dados acessíveis em todo
o meu sistema então por exemplo se um rack conseguisse acessar invadir o meu sistema ele poderia facilmente ter acesso a qualquer quaisquer uma dessas informações então através do encapsulamento a gente protege esses atributos como que funciona isso a gente não vai deixar o saldo acessível a gente vai implementar um método aqui get saldo pegar o saldo que vai retornar o saldo então os objetos externos as classes externas vão conseguir ter acesso a classe conta para pegar o saldo apenas através do método get saldo Então se uma outra classe uma outra classe quiser pegar o saldo
ela vem aqui nesse método get saldo e o get saldo vai retornar o saldo daquele objeto que ela tá procurando eu tenho aqui um outro método sacar e depositar novamente então eu não vou retirar um valor ou acrescentar um valor a propriedade de saldo de forma direta eu vou fazer isso através dos métodos então novamente o encapsulamento é uma forma de proteger os atributos internos do objeto eu só vou torná-los disponíveis através dos seus métodos das suas interfaces aqui um exemplo eu tenho uma conta tem um tipo do cliente a data de abertura o saldo
e os métodos sacar e depositar e calcular valor da tarifa de manutenção e uma conta poupança e conta de investimento que são duas subclasses que possuem uma um método sobrepondo o método lá na super classe então observem que para que eu consiga retirar um valor do saldo eu vou usar o método sacar aí como é que funciona isso na prática não tá entendendo direito na prática veja um exemplo quando a gente faz um uma transferência por exemplo ou um saque não caixa não caixa eletrônico de qualquer banco Banco do Brasil por exemplo eu tenho lá
mil reais existe uma um objeto que representa a minha conta no sistema do banco conta do Professor Arnaldo eu tenho lá mil reais quando eu saco lá 200 reais o sistema não vai de forma programática ele não vai lá na propriedade de saldo e vai colocar saldo menos 200 ele vai usar o método sacar para fazer isso então o método sacar está encapsulando essa propriedade saldo então não vou conseguir acessar saldo diretamente ele vai lá vai chamar o método sacar vai decrementar o valor que eu saquei E aí eu vou ter um novo saldo Então
é isso aí qualquer dúvida vocês podem fazer o comentário aí no próprio vídeo que no YouTube ou através de e-mail Fique à vontade para postar suas dúvidas valeu até a próxima