Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
POO – Curso em Vídeo Objetivo - aproximar o mundo digital do mundo real. Como era? – programação baixo nível >> programação linear >> programação estruturada >> programação modular >> programação orientada a objetos [POO]. Definições Tosca Classe – seria um molde Objeto – seria a execução do molde, do modelo. Para se criar um objeto, antes se cria uma classe. Exemplo da caneta, antes de criar a caneta, se tem o molde dela, objetivo final. Três perguntas chaves para uma classe: exemplo de uma caneta. · Coisas que eu tenho? -- [Atributos] características Modelo, cor, ponta, carga, tampada · Coisas que eu faço? -- [Métodos] comportamentos Escrever, rabiscar, pintar, tampar, destampar · Como eu estou agora? -- [Estado] estado sempre atual 50% carga, ponta fina, azul, destampada, escrevendo Exemplo didático, de forma simples: Classe Caneta Modelo: Caractere Cor: Caractere Ponta: Real Carga: Inteiro Tampada: Lógico Método rabiscar() Se (tampada) então Escreva(“ERRO”) se não Escreva(“Rabisco”) FimSe FimMétodo Método tampar() Tampada = verdadeiro FimMétodo FimClasse Instanciar Gerar um objeto a partir de uma classe. Exemplo: c1 = nome do objeto; nova = instanciar; Caneta = classe c1 = nova Caneta c1.cor = “Azul” c1.ponta = 0.5 c1.tampada = falso c1.rabiscar() c2 = nova Caneta # c1 e c2 são completamente diferentes c2.cor = “Vermelho” c2.ponta = 1.0 c2.tampada = falso c2.tampar() Definição Classe: define os atributos e métodos comuns que serão compartilhados por um objeto. Objeto: é uma instancia de uma classe. Abstração Focar nos atributos que importam para o objeto no momento. EXERCICIO: 1) Identificar dois objetos físicos do meu ambiente e classifique-os. Classe Copo Atributos: formato, material, tamanho. Métodos: encher, esvaziar Estado: Vazio/ cheio Classe Estojo Atributos: cor, tamanho, bolsos, zíper ou velcro. Métodos: guardar, pegar algo, Estado: vazio, com materiais, cheio 2) Identificar dois objetos conceituais do seu dia-a-dia e classifique-os. Classe Estudo Atributos: matéria, forma (digital, vídeo, livro), tempo Métodos: Estado: Classe Desenho Atributos: desenho corpo todo, rosto, quadrinho, formas Métodos: material, caneta, tinta, nanquim, bico de pena Estado, esboço, finalização, finalizado Aula 3 – Mudando Visibilidade Linguagem de Modelagem Unificada – UML Diagrama de Classes Caneta + modelo + cor - ponta # carga # tampa + escrever() + rabiscar() + pintar() - tampar() - destampar() Modificadores de Visibilidade Indicam o nível de acesso aos componentes internos de uma classe. + pública ex: orelhão (qualquer um pode usar) A classe atual e todas as outras classes. - privado ex: celular (só eu posso usar) Somente a classe atual. # protegido ex: telefone residencial (só minha mãe e os filhos dela) A classe atual e todas as suas subclasses. Aula 4 – Métodos Especiais Métodos Acesso (Getters) – pega(get) alguma coisa. Exemplo com método: e = nova Estante Método Get é mais seguro do que deixar o acesso t = e.getTotDoc() para qualquer pessoa. Exemplo sem método: e = nova Estante Esse modo seria o equivalente a deixar qualquer pessoa t = e.totDoc mexer na estante, deixando vulnerável. Métodos Modificadores (Setters) – modificam coisas que estão dentro do objeto, garantindo a segurança. Exemplo com método: e = nova Estante Método Set é mais seguro do que deixar o acesso t = e.setTotDoc(doc) para qualquer pessoa. Exemplo sem método: e = nova Estante Esse modo seria o equivalente a deixar qualquer pessoa e.totDoc = e.totDoc + 1 mexer na estante, deixando vulnerável. Caneta + modelo - ponta + getModelo() + setModelo(m) + getPonta() + setPonta(p) Classe Caneta público modelo: Caractere privado ponta: Real público Método getModelo() retorne modelo FimMétodo público Método setModelo (m: Caractere) modelo = m FimMétodo público Método getPont() Retorne ponta FimMétodo Público Método setPonta (p: Real) ponta = p FimMétodo FimClasse c1 = nova Caneta c1.setModelo(“BIC Cristal”) c1.setPonta(0.5) Escreva(c1.getModelo()) Escreva(c1.getPonta()) Método Construtor (Construct) - fazer uma ação automaticamente, no momento em que a classe for instanciada. Classe Caneta Método construtor() (m: Caractere, c: Caractere, p: real) setModelo(m) setCor(c) setPonta(p) tampar() FimMétodo FimClasse c1 = nova Caneta (“BIC”, “Azul”, 0.5) Aula 5 – Exemplo Prático ContaBanco + numConta # tipo - dono - saldo - status + abrirConta() + fecharConta() + depositar() + sacar() + pagarMensal() getnumConta() setnumConta() gettipo() settipo() getdono() setdono() getsaldo() setsaldo() getstatus() setstatus() construtor() Classe ContaBanco // atributos público numConta: inteiro protegido tipo: Caractere privado dono: Caractere privado saldo: real privado status: lógico // métodos público Método abrirConta() setTipo(t) setStatus(verdadeiro) se (t = “CC”) então saldo = 50 senão se (t = “CP”) então saldo = 150 FimSe FimMétodo público Método fecharConta() se (saldo > 0 )então Escreva(“Conta com dinheiro”) senão se (saldo < 0 )então Escreva(“Conta em débito”) senão setStatus(false) fimSe FimMétodo público Método depositar(v: Real) se (status = verdadeiro) então setSaldo(getSaldo() + v) ou saldo = saldo + v ( 1º é melhor) senão Escreva(“Impossível depositar”) fimSe FimMétodo público Método sacar(v: Real) se (status = verdadeiro) então se (saldo > v) então saldo = saldo – v senão Escreva(“Saldo insuficiente”) fimSe senão Escreva(“Impossível sacar”) fimSe FimMétodo público Método pagarMensal() var v: Real se (tipo = “CC”) então v = 12 senão se (tipo = “CP”) então v = 20 fimSe se (status = verdadeiro) então se (saldo > v) então saldo = saldo – v senão Escreva(“Saldo insuficiente”) fimSe senão Escreva(“Impossível pagar”) fimSe FimMétodo // métodos especiais público Método construtor() saldo = 0 status = falso FimMétodo público Método setNumConta(n: Inteiro) numConta = n FimMétodo público Método getNumConta() retorne numConta FimMétodo público Método setTipo(t: Caractere) tipo = t FimMétodo público Método getTipo() retorne tipo FimMétodo público Método setDono(d: Caractere) dono = d FimMétodo público Método getDono() retorne dono FimMétodo público Método setSaldo(s: Real) saldo = s FimMétodo público Método getSaldo() retorne saldo FimMétodo público Método setStatus(s: Lógico) status = s FimMétodo público Método getStatus() retorne status FimMétodo FimClasse Aula 6 – Pilares da POO Encapsulamento Herança Polimorfismo Encapsulamento Ocultar partes independentes da implementação, permitindo construir partes invisíveis ao mundo exterior. # Você pode mandar mensagens para a capsula, troca de informações entre o usuário e a capsula, não precisa entender como a capsula funciona. # Um bom objeto encapsulado tem uma boa INTERFACE. # INTERFACE = lista de serviços fornecidos por um componente. É o contato com o mundo exterior, que define o que pode ser feito com um objeto dessa classe. Exemplo: uma PILHA seria um software encapsulado, seus polos (positivo e negativo) seriam sua interface. Exemplo 2: controle remoto IMPORTANTE: encapsular não é obrigatório, mas é uma boa prática para produzir Classes mais eficientes. Vantagens em Encapsular 1) Tornar mudanças invisíveis Exemplo: quando acaba a pilha do controle remoto, pode ser trocado por qualquer outra pilha, independente da marca, basta caber 2) Facilitar reutilização do código Exemplo: posso pegar uma pilha de um determinado aparelho, controle de vídeo game por exemplo, e colocar no controle da TV 3) Reduzir efeitos colaterais Exemplo: uma pilha tem componente químicos, se não fosse encapsulado poderia por em risco a saúde do usuário, e o usuário pode acabar danificando a pilha também. Como Encapsular Controle Remoto <<interface>> Controlador + ligar() + desligar() + abrirMenu() + fecharMenu() + maisVolume() + menosVolume() + ligarMudo() + desligarMudo() + play() + pause() Interfaces não tem atributos, apenas métodos. Métodos abstratos – o método não é desenvolvido na interface, ele só aparece na interface. Só precisa saber o que vai acontecer. Previsto, mas não implementado. Geralmente, dentro da interface, todos os métodos definidos são públicos. ControleRemoto - volume - ligado - tocando + ligar() + desligar() + abrirMenu() + fecharMenu() + maisVolume() + menosVolume() + ligarMudo() + desligarMudo() + play() + pause() - setVolume() - getVolume() - setLigado() - getLigado() - setTocando() - getTocando() Quando se está encapsulando um objeto, NUNCA se coloca os atributos como público, normalmente como privado ou protegido. Quando se une uma classe a uma interface por meio de uma seta, é o mesmo que dizer que a Classe utilizará os métodos abstratos dessa Interface. Normalmente os métodos especiais (get e set) são públicos, porém Guanabara quis demonstrar que eles podem ser privados. Interface Controlador // Métodos Abstratos público abstrato Método ligar() público abstrato Método desligar() público abstrato Método abrirMenu() público abstrato Método fecharMenu() público abstrato Método maisVolume() público abstrato Método menosVolume() público abstrato Método ligarMudo() público abstrato Método desligarMudo() público abstrato Método play() público abstrato Método pause() FimInterface Classe ControleRemoto //Atributos privado inteiro volume privado lógico ligado privado lógico tocando // Métodos Especiais público Método Construtor() volume = 50 ligado = falso tocando = falso FimMétodo privado Método getVolume() retorne volume FimMétodo privado Método getLigado() retorne volume FimMétodo privado Método getTocando() retorne volume FimMétodo privado Método setVolume(v: Inteiro) volume = v FimMétodo privado Método setLigado(l: lógico) ligado = l FimMétodo privado Método setTocando(t: lógico) tocando = t FimMétodo FimClasse Classe ControleRemoto implementa Controlador // Sobrescrevendo Métodos público Método ligar() setLigado(verdadeiro) FimMétodo público Método desligar() setLigado(falso) FimMétodo público Método abrirMenu() Escreva(getLigado()) Escreva(getVolume()) Para i = 0 até getVolume() passo 10 faça Escreva(“|”) FimPara Escreva(getTocando) FimMétodo público Método fecharMenu() Escreva(“Fechando Menu...”) FimMétodo público Método maisVolume() Se (getLigado()) então setVolume(getVolume + 1) FimSe FimMétodo público Método menosVolume() Se (getLigado()) então setVolume(getVolume - 1) FimSe FimMétodo público Método ligarMudo() Se (getLigado() e getVolume() > 0) então setVolume(0) FimSe FimMétodo público Método desligarMudo() Se (getLigado() e getVolume() = 0) então setVolume(50) FimSe FimMétodo público Método play() Se (getLigado() e não getTocando()) então setTocando(verdadeiro) FimSe FimMétodo público Método pause() Se (getLigado() e getTocando()) então setTocando(falso) FimSe FimMétodo Aula 7 – Relacionamento entre Classes Lutador - nome - nacionalidade - idade - altura - peso - categoria - vitórias - derrotas - empates + apresentar() + status() + ganharLuta() + perderLuta() + empatarLuta()
Compartilhar