[Música] Olá pequeno gafanhoto seja bem-vindo a mais uma aula do seu curso em vídeo de programação orientada a objeto o meu nome é estavo Guanabara eu sou seu professor e agora a gente chegou na 11ª aula e nessa 11ª aula a gente vai continuar um conceito que a gente começou na aula passada e nós vamos continuar a falar sobre herança na aula passada a gente viu a base da herança e agora a gente vai ver alguns outros conceitos que são muito importantes e que você pequeno gafanhoto que tá aprendendo programar orientado a objeto precisa saber
essa já é uma aula do introdutório pro intermediário então a gente já percebe que o curso já está and e que você agora já sabe muitos conceitos da programação orientado objeto e depois dessa aula você vai saber ainda mais e antes de começar a aula em si eu queria te pedir mais uma vez uma ajuda essas aulas estão saindo graças ao apoio dos nossos gafanhotos Você tá gostando da qualidade tá achando que o curso é melhor do que muito curso pago como todo mundo tá colocando por aí então seja um apoiador seja um colaborador acessando
esse site que tá aparecendo aqui embaixo que é o apoi PME bar curso em vídeo você pode Escolher uma das faixas de valores e ser um apoiador essa grana tá sendo utilizada para pagar os nossos editores para pagar nossa infraestrutura e tudo aquilo que precisa para que as aulas cheguem até você toda segunda-feira às 11 da manhã todos estão recebendo três aulas uma aula teórica que é essa que você tá assistindo e hoje mesmo no dia que saiu essa aula também saiu uma de PHP e uma de Java Então seja um colaborador Mas voltando pra
aula Você lembra na aula passada que a gente viu o iniciozinho de herança Você viu como fazer uma classe herdar coisas de outra e a partir daí a gente pode criar uma árvore de heranças e uma das coisas que você precisa saber conceitualmente na programação orientada a objeto é Navegar por essa árvore de heranças não é difícil você vai utilizar termos que você já utiliza no seu dia a dia já que a programação orientada a objeto é algo simples de se compreender e utiliza a linguagem natural como a gente viu lá no início Zinho do
curso mas vamos ver um exemplo aqui eu criei um exemplo bem genérico com nomes genéricos para você entender como percorrer uma árvore de herança tá vendo aqui do lado eu representei uma classe A classe A essa é uma classe que foi criada do zero ela não tem mãe isso é ela não erda nada de ninguém e aí eu crio três filhas para a eu crio três subclasses para a a a b e a AC exatamente como tá representado aqui você deve est vendo que a a a b e ac herdam de a é só você
olhar a setinha que tá acontecendo ali essa é uma representação oficial é a representação da uml vamos f fazer também a a ter uma filha ela tem a filha a a a e se você analisar a a a tem tudo que a a tem e já que a a tem tudo que a tem então a aa que é neta de a também tem tudo aquilo que a avó tem ficou confuso calma aí que já já você vai entender a b que é a segunda filha de a também tem duas filhas AB a e ABB e
a também tem uma filha que é aca e para finalizar essa árvore para não ficar tão confuso assim eu vou fazer com que aba tenha duas filhas aba A e AB a b é só olhar o gráfico aqui para você que tá com outra aba aberta com certeza você se enrolou todo mas é só olhar o gráfico que tá aparecendo aqui do lado e com certeza você vai entender eu vou usar o laser para facilitar tua vida aqui Presta atenção então a gente vai utilizar alguns termos como por exemplo a gente diz que a é
progenitora de aa por exemplo a é progenitora de AB e a é progenitora de AC aí você vai falar assim então tá bom a é progenitora Depende do ponto de vista no nosso caso aqui a é sempre progenitora porque ela é a classe principal mas dará uma olhada aqui ó AB AB é subclasse de a a b é filha de a aí você falar então tá bom a b não é progenitora É sim porque a também tem AB a e ABB então AB que é filha de a também tem filhas que são AB a e
ABB então AB em relação a a é subclasse AB em relação a ABB por exemplo é superclasse deu para ent entender superclasse é quem tá acima subclasse é quem tá embaixo então você não pode afirmar que uma classe ela é superclasse sempre não ela é superclasse dependendo da comparação que você tá fazendo dá uma olhada outro exemplo aqui ó AB AB ela é subclasse de aba mas aba por sua vez também é subclasse de ab mas aba também é superclasse de abaa Deu para entender então o conceito de superclasse e subclasse depende do seu ponto
de referencial uma classe prog também pode ser uma subclasse dependendo do ponto que a gente estiver dando uma olhada e é importante que você lembre o seguinte toda subclasse erda todos os seus conteúdos das suas ancestrais e é importante que você lembre do seguinte toda subclasse erda tudo que a sua superclasse tem mesmo que não esteja totalmente disponível ela tem e eu torno isso disponível ou indisponível utilizando o nosso método de acesso público privado e protegido esses conceitos você viu lá nas aulas anteriores então não adianta pular passos se você ainda se enrola com privado
protegido e público você tem que voltar lá nas aulas anteriores de teoria e dar uma olhada nesses conceitos nunca se esqueça a qualquer momento você pode clicar lá em cima no izinho de interatividade e acessar a Playlist completa e ter acesso a todos os vídeos que foram disponibilizados para esse curso esse curso não é só uma aula essa é a 11ª aula então existem outras 10 aulas conceituais antes dessa e você precisa saber todo esse conteúdo mas vamos continuar com outras nomenclaturas que existem na programação orientada do objeto você deve estar percebendo ali em cima
que a não tem mãe a não é subclasse de ninguém quando eu tenho uma classe que não tem superclasses ela é considerada a raiz da minha árvore hierárquica e você pode estar pensando Caramba isso não é natural uma raiz tá embaixo da árvore nesse caso A árvore tá representada como se fosse de coisa para baixo ela iniciou pela raiz a raiz é representada em cima e aí ela vai crescendo todas as suas subclasses para baixo e por falar de nomenclatura de árvore a parte de baixo que são as subclasses que não t subclasses isso é
as classes que não TM filhas a gente vai chamar de folhas então presta atenção a que eu nomeei ali é a AB a ela é uma folha mas existem outras no meu caso aqui todas as classes que não TM filhas por exemplo aaa abaa abab ABB e aca são folhas isso é elas não têm filhas eu não tô dizendo que elas não podem ter filhas no momento nessa representação que tá aparecendo aqui do lado elas não TM filhas então elas são folhas outros dois conceitos que são muito utilizados em árvore hierárquica no nosso dia a
dia são os conceitos de descendentes e o conceito de ancestrais vamos analisar com o laser aqui para você poder entender direito então Analisa aqui ó o a é a minha raiz a c é uma filha de a certo a c não é descendente de a AC c é filha de a AC c tem uma filha que é aca AC a é descendente de a isso é a teve uma filha que foi a c e a c teve uma filha que foi a ca então a gente diz que aca é descendente de a AB AB também
é descendente de a olha só a teve um filho que foi AB a teve dois filhos foi aba e ABB aba teve dois filhos uma deles é abab abab é filho de aba abab também é descendente de AB e também abab também é descendente de A então para eu definir o descendente eu não conto a mãe a mesma linha de raciocínio serve pros ancestrais então eu digo por exemplo que a é ancestral de aba A também é ancestral de ABB agora a não é ancestral de ab para você dizer que ele é ancestral ele não
pode ser ancestral das suas próprias filhas ancestral é dos netos para baixo eu acho que ficou claro para você entender e para finalizar essas nomenclaturas todas pra programação orientada do objeto Quando Você percorre a árvore de cima para baixo você diz que você tá fazendo uma especialização e quando você percorre a árvore de baixo para cima você está fazendo uma generalização então de maneira resumida esse gráfico que tá aparecendo aqui do lado são nomenclaturas utilizados em árvores hierárquicas você precisa saber todos esses nomes porque mais cedo ou mais tarde eles vão aparecer em livros lá
seu professor da na faculdade no colégio vai falar e você precisa saber esses conceitos qualquer dúvida que apareça depois é só voltar aqui na 10 primeira aula e dá uma revisada Mas vamos partir pra frente e vamos dar um exemplo um exemplo prático baseado naquele exemplo anterior e baseado nesse exemplo a gente vai saber quais são os tipos de herança os tipos de herança que existem são vários os que eu vou considerar são apenas dois tipos cada livro considera um conjunto de tipos de herança e tudo mais mas explicando esses dois aqui você consegue entender
a grande maioria dos conceitos relacionados à herança os dois tipos de herança que a gente vai ver durante essa aula são em primeiro lugar a herança de implementação essa herança também é conhecida como herança pobre é a herança mais simples que existe e você vai conseguir entender já já o segundo tipo de herança é a herança para diferença é a herança mais completa é a herança que a gente vai utilizar também bastante nas aulas na verdade a herança pra diferença a gente já utilizou na aula anterior Você só não sabia que ela tinha esse nome
e eu vou me basear mais ou menos no exercício que a gente viu na aula anterior só que com um pouquinho de alteração para facilitar o meu jeito de explicar aqui para você na aula anterior você viu que tinha a gente tinha uma classe que era a classe pessoa ela era uma classe genérica que a gente vai chamar de classe abstrata e que vai ter alguns atributos e métodos então eu tenho aqui ó a pessoa tem nome idade sexo e o método de fazer aniversário mais ou menos o que a gente tinha feito na aula
passada na verdade mais ou menos não exatamente que tinha feito e nós vamos criar uma herança aqui ó aqui do lado vão aparecer três classes a classe de visitante de aluno e de professor para um colégio um visitante um aluno e um professor os três são pessoas são então eu posso definir aqui do lado uma herança Então estou dizendo que visitante aluno e professor erdam tudo aquilo que a classe pessoa tem é só olhar aqui do lado e você vai entender então eu tô dizendo que visitante aluno e professor tem nome tem idade tem sexo
e fazem aniversário eu vou dizer que aluno também tem matrícula curso e ele pode pagar a mensalidade eu também vou dizer que Professor tem especialidade salário e recebe aumento Então vamos analisar aqui com o laser Olha só então o professor vai ter quais atributos ele vai ter especialidade vai ter salário e também vai ter nome idade e Sexo Que métodos um professor vai poder executar Ah um professor ele vai poder fazer aniversário e vai poder receber aumento Deu para entender Qual é a ideia a herança Ela traz isso tudo e o visitante dá uma olhada
aqui embaixo o visitante o visitante não tem atributo o visitante não tem método Tem sim ele tem os métodos e atributos herdados os métodos e atributos que vieram da sua mãe que no caso aqui é pessoa então pessoa forneceu todos esses atributos e métodos diretamente para visitante visitante não vai implementar mais nenhum atributo e nenhum método então é o que a gente diz que é uma herança pobre essa herança que tá acontecendo aqui entre pessoa e visitante é o que a gente vai chamar de herança de implementação uma herança de implementação é basicamente para implementar
uma classe abstrata já já você vai entender melhor como é que funciona isso já as outras heranças né pessoa né aluno herdou tudo de pessoa herdou mas também adicionou matrícula curso e pagar mensalidade Professor também teve a herança de pessoa mas também acrescentou especialidade salário e receber aumento então eu tenho a herança paraa implementação eu pego algumas coisas da mãe mas eu implemento coisas novas e para aprimorar ainda mais o nosso exemplo você poder entender melhor ainda eu vou propor mais duas classes nós vamos adicionar nessa árvore duas especializações ó já tô utilizando termos aí
duas especializações de aluno que são bolsista e técnico então eu tenho o meu aluno eu também tenho aluno bolsista e aluno técnico O que diferencia um aluno bolsista de um aluno técnico de um aluno comum tanto alunos bolsistas quanto alunos técnicos tem todas as características de aluno então tem matrícula tem curso e paga mensalidade só que o bolsista é uma especialização dele é uma especialização da generalização de aluno aluno alo é uma generalização de bolsista bolsista é uma especialização de aluno viu o percurso que a gente viu anteriormente Então são termos que você precisa aprender
bolsista também vai acrescentar o valor da bolsa e os métodos renovar bolsa e pagar mensalidade a você vai falar pô pera aí pagar mensalidade já tá em cima aí você vai ver um outro conceito que são as sobrescribir a gente vai ver como é que funciona isso e o aluno técnico aqui eu tenho registro profissional que é um atributo e praticar que é um método que um aluno técnico tem que fazer Deu para entender aqui é claro que você vai poder Fer não mas dá para condensar tudo isso em aluno senhores nós estamos criando um
exemplo prático e essa árvore Ela Vai facilitar o seu aprendizado lá pra frente por mais que você Ah não eu consigo simplificar isso você consegue simplificar Isso você já está mais avançado em programação onit do objeto e o meu foco aqui é no gafanhoto que está aprendendo sempre nunca se esqueça disso vamos guardar isso aqui no nossos pequenos coraçõezinhos e eu preciso passar mais um conceito para vocês que são os conceitos de abstrato e de final abstrato e final vai depender de onde eu quero aplicar esse conceito um método e uma classe podem ser abstratos
e finais então eu posso ter um método abstrato um método final e também posso ter uma classe abstrata e uma classe final o nome é o mesmo né o final e abstrato mas a funcionalidade a operacion abilidade disso vai ser diferente e eu vou montar aqui um painel para facilitar sua vida dá uma olhada só eu vou ter quatro conceitos diferentes Então eu tenho aqui do lado classe abstrata método abstrato classe final e método final você vai precisar diferenciar isso vamos ver os conceitos segundo as bibliografias né segundo principalmente a bibliografia que eu estou me
baseando que é o seguinte uma classe abstrata não pode ser instanciada só pode servir como progenitora isso é se eu tenho uma classe e defino ela como abstrata ela não pode pode gerar objetos isso é um conceito da orientação objeto e é aplicável a todas as linguagens que se dizem Poo Então você definir uma classe como abstrata ela não pode gerar objetos guarda isso um método abstrato vamos lá método abstrato é um método declarado mas não implementado na progenitora a gente viu isso funcionando quando a gente viu a aula de interfaces então dá uma procurada
lá na aula de interface a gente falou sobre métodos abstratos E aí eu deixo uma observação um método abstrato só pode ser coloc AD dentro de uma interface ou de uma classe abstrata Vamos partir pro próximo aqui ó classe final a classe final não pode ser herdada por outra classe ela é Obrigatoriamente folha Resumindo e falando do jeito que o Guanabara gosta de falar para você aqui uma classe final ela não pode ter filhos uma classe final é Obrigatoriamente uma folha Isso é uma folha é aquela que não tem filhos mas a classe final é
o que eu chamo sala de aula de uma classe estéril ela não pode ter filhos então se você botar lá uma classe final você não pode utilizar herança nessa Classe A gente vai ver na aula prática como isso funciona e por fim a gente tem o método final aqui embaixo o método final é aquele que não pode ser sobrescrito pelas suas subclasses ele é Obrigatoriamente herdado a gente vai ver um pouquinho mais para frente ainda nessa aula já já a gente vai ver o conceito de sobreposição então o método final ele não pode ser sobreposto
is é você não pode gerar uma especialização desse método isso aqui é extremamente importante você precisa guardar esses conceitos Eu recomendo até que você tire um print da tela nesse momento Salva eu vou fazer até uma pose para você tirar o print ó tira vai vai tira tira aí pronto agora que você já tem esses conceitos você precisa muito saber isso daqui porque são palavrinhas que vão aparecer em exercícios e que você precisa saber exatamente como funcionam esses mecanismos e não se preocupa se é muito termo técnico é só você assistir essa aula de novo
as aulas conceituais de vez em quando faz uma playlist aí só com as aulas conceituais PR você assistir esporadicamente e fixar todos esses conceitos com certeza isso vai ser muito importante não só para PHP e Java que são as linguagens que a gente vê são importantes para qualquer linguagem chegou a hora então da gente começar a construir o nosso código então a gente vai criar aquele eu vou construir uma parte daquele código naquele diagrama que a gente viu anteriormente vamos começar aqui com a classe pessoa então botei lá ó classe abstrata pessoa já usei a
palavra abstrata que a gente viu Nessa aula então se ela é uma classe abstrata ela não pode ser instanciada ela não pode ter filhos Vamos colocar aqui os atributos então Ten o nome idade e Sexo botei tudo como privado para manter o encapsulamento um conceito que a gente viu anteriormente também vou ter os métodos getter e Setter que eu não vou colocar aqui mas saiba que gather Setter vão precisar já que os atributos são privados Ah eu vou ter um fazer aniversário que é um método final que que é um método final um método final
não pode ser sobreescrito não pode ser sobreposto na aula prática a gente vai ver isso tudo funcionando Então essa é minha classe essa aqui é a classe pessoa que é uma classe abstrata e tem um método final dentro dele se eu chegar lá embaixo no programa principal aqui embaixo ó vou criar um programa principal se eu chegar aqui botar P1 igual a novo pessoa isso é P1 é um novo objeto da classe pessoa se isso acontecer olha só eu tô tentando criar P1 que é um objeto de pessoa só que se você olhar lá em
cima pessoa é uma classe abstrata e a regra da classe trata é não pode gerar objetos Então essa linha aqui de baixo ela não funcionaria daria erro só pra gente poder se acostumando Vamos criar outra classe aqui ó a classe visitante a classe visitante Você se lembra bem É a nossa herança pobre é a nossa herança de implementação a erança mais simples que tem eu não vou escrever nada dentro dele eu vou botar lá classe visitante e fim da classe do lado do visitante eu vou colocar que eles têm de pessoa então automaticamente ele vai
trazer todos os atributos e métodos de pessoa para dentro de visitante então ele vai ter visitante vai ter nome idade sexo e também vai fazer aniversário que é um método final Note que se o método final traz pro filho isso é se visitante recebe esse método eu não estou sobrepondo ele já já você vai ver o que é uma sobreposição explícita se eu vi lá embaixo no meu programa principal e botar v1 recebe novo visitante Sem problema nenhum essa linha Funciona porque visitante não é uma classe abstrata visitante é uma classe que herda coisas de
uma classe abstrata E aí ele não torna ele por ele herdar de pessoa isso não torna essa classe abstrata também visitante é uma classe totalmente instanci Vel Então essa segunda linha aqui ó o v1 recebe novo visitante funciona sem problema nenhum Vamos criar agora a nossa classe aluno aluno estende pessoa também então o aluno vai estender pessoa e também vai acrescentar matrícula curso e vai ter o método de pagar mensalidade essa herança que eu tô fazendo aqui embaixo ela é uma herança pra diferença então Ó a herança que eu tô utilizando aqui em visitante é
a nossa herança de implementação e a herança que a gente tá utilizando no aluno aqui embaixo é o que a gente chama de herança para diferença notou as particularidades da coisa Teoricamente eu tenho dois tipos de herança Funcionando aqui e eu vou pegar um outro exemplo aqui ó nós vamos colocar aqui embaixo também ó A1 recebe novo aluno e vai funcionar sem problema nenhum vamos escar uma outra classe aqui ó a classe bolsista bolsista ele não estende pessoa ele não erda de pess pessoa se você olhar no gráfico anterior bolsista é um tipo de aluno
é uma especialização de aluno então eu digo que bolsista estende aluno automaticamente já que bolsista erda tudo de aluno então ele vai ter matrícula e Curso certo também vai ter nome idade e Sexo já que aluno estende pessoa Então olha só a minha árvore de herança funcionando bolsista estende aluno então o bolsista vai ter todos tudo aquilo que aluno tem só que aluno também estende pessoa então aluno tendo tudo que pessoa tem bolsista tem tudo que aluno e que pessoa tem sendo assim bolsista vai ter nome idade sexo matrícula curso e Nós também vamos acrescentar
a bolsa que é um valor inteiro nós vamos acrescentar o método de renovar bolsa e se você se lembra muito bem um bolsista ele paga a mensalidade um pouco diferente N é isso o pagar mensalidade de um bolsista é diferente do pagar mensalidade de um aluno então eu vou sobrepor esse método olha ali ó eu tô colocando a palavra sobrepor na frente tô botando @r sobrepor ali em cima e ele vai ter um outro pagar mensalidade Isso é para um aluno paga mensalidade de um jeito para um bolsista eu pago mensalidade de outro então eu
preciso utilizar essa palavra sobrepor Na verdade o que a gente começou a fazer aqui é o terceiro Pilar lembra que a gente tem três pilares encapsulamento herança e polimorfismo encapsulamento é você proteger tudo você fazer com que uma classe erde coisa das outras e o polimorfismo é a gente fazer coisas diferentes fazer a mesma coisa né uma coisa que tem o mesmo nome de maneiras diferentes isso que você tá acabando de presenciar aqui é o pagar mensalidade de duas formas diferentes de poliformas de polimorfos mas fica tranquilo Aguarda aí Isso aqui é só o start
Zinho que a gente tá dando pro terceiro e último Pilar da programação orientada do objeto que é o polimorfismo e os conceitos de polimorfismo e herança eles estão muito intrínsecos os três pilares eles estão muito relacionados entre si então às vezes fica difícil separar de uma aula falar só de herança e não citar polimorfismo falar só de herança e não tocar em encapsulamento que eu já toquei no assunto aqui em cima todos os atributos já estão e encapsulados Então essa é a beleza da programação orientada objeto Então por fim vamos instanciar aqui um objeto B1
é um novo bolsista e ele vai funcionar sem problema a única linha que não funciona é a a linha do P1 ali a linha da pessoa porque eu não posso instanciar uma pessoa se a classe pessoa é uma classe abstrata Com certeza Essa é uma das aulas de programação orientada objeto com o maior número de palavras técnicas com o maior número de conceitos para você aprender Então o que eu recomendo é o seguinte assiste essa aula teórica mais de uma vez antes de você partir pra aula prática para que você se acostume com os nomes
aquela classe abstrata método abstrato classe final método final entende primeiro o que que são esses conceitos fixa esses essas teorias antes de passar PR as aulas práticas e por falar em aula prática agora chegou aquela hora aquela hora que todo mundo fica esperando ó escolha aí você quer uma aula de PHP Ou você quer uma aula de Java Você quer aprender esses conceitos em PHP ou em Java Ou você quer aprender nas duas não se esqueça lá em cima no Zin de interatividade se você tá assistindo o celular você tem acesso a duas playlists a
Playlist de programação orientada objeto com conceitos e PHP e a Playlist com conceito e Java Então é isso pequeno gafanhoto Eu espero que você tenha gostado da aula ela é meio confusa ela confunde a cabeça principalmente se você não tava prestando atenção você não tava lá você tava lá no WhatsApp você tava com outra aba deixando só eu falar com certeza foi muito confuso Então volta assiste a teoria de novo pega seu Lápis e Papel vai Desenhando desenhando árvores hierárquicas Porque vai ser de suma importância na hora de colocar isso em prática e você vai
colocar isso em prática a agora escolhe aí sua playlist É só escolher aqui ó clica no Elefantinho que tá aqui em cima pra aula de PHP clica na xicarazinha aqui embaixo para você assistir a aula de Java você vai ser desviado direto pra Playlist e vai procurar pela aula 11b então vai lá clica e a gente se vê já já [Música]