diff --git a/Atividades/Em aula/Exercicios.md b/Atividades/Em aula/Exercicios.md index 44ad039..712837c 100644 --- a/Atividades/Em aula/Exercicios.md +++ b/Atividades/Em aula/Exercicios.md @@ -1,6 +1,34 @@ 1. Adicione uma função `quantasChaves()` a **todos** os objetos, que retorna quantas chaves aquele objeto possui. +### Lição feita 🤣👌 + +``` +Object.prototype.quantasChaves = function quantasChaves() { + Object.keys(this).length; +}; + +function Gato(name, idade, cor) { + this.name; + this.idade; + this.cor; +} + +let james = new Gato("James", 10, "cinza"); + +Gato.prototype.especie = "felino"; + +james = { + nome: "James", + idade: 10, + cor: "cinza", +}; + +Object.keys(james); + +``` + 2. A partir do nosso objeto de `Cachorro` da semana passada, escreva um novo construtor que utilize classes. Lembre-se que cachorros precisam `latir()`. + ``` { nome: "Zeus", @@ -12,4 +40,44 @@ } ``` -3. Escreva uma função `brincar`, que te dá instruções sobre como brincar com cada espécie de animal. A função deve receber um animal como parâmetro (gato, cachorro, cobra, papagaio e pelo menos mais um outro animal de sua escolha) e, baseado na sua espécie, retornar qual brinquedo você deveria usar com ele. Ou, se for uma cobra, te dizer para não brincar com ela. \ No newline at end of file +``` +class Dogo { + constructor(nome, idade, cor, castrado, raca) { + this.name; + this.idade; + this.cor; + this.castrado; + this.raca; + this.historico = []; + } + latir() { + console.log("AuAu!"); + } +} + + +const Kank = new Dogo("Kank", 10, "cinza", true, "Border Collie"); + + +``` + +3. Escreva uma função `brincar`, que te dá instruções sobre como brincar com cada espécie de animal. A função deve receber um animal como parâmetro (gato, cachorro, cobra, papagaio e pelo menos mais um outro animal de sua escolha) e, baseado na sua espécie, retornar qual brinquedo você deveria usar com ele. Ou, se for uma cobra, te dizer para não brincar com ela. + +``` +function brincar(animal) { + if (animal instanceof Dogo) { + console.log("brincar de bolinha"); + } else if (animal instanceof Cat) { + console.log("brincar de laser"); + } else if (animal instanceof Papagaio) { + console.log("brincar de cantar"); + } else if (animal instanceof Hamister) { + console.log("brincar de roda de hamister"); + } else if (animal instanceof Macaco) { + console.log("brincar de jogar banana"); + } else { + console.log("não da para brincar"); + } +} + +``` diff --git a/Atividades/Em aula/class.js b/Atividades/Em aula/class.js new file mode 100644 index 0000000..727ca5e --- /dev/null +++ b/Atividades/Em aula/class.js @@ -0,0 +1,97 @@ +class Dogo { + constructor(nome, idade, cor, castrado, raca) { + this.name; + this.idade; + this.cor; + this.castrado; + this.raca; + this.familia = "canidae"; // liçao 3 + this.historico = []; + } + latir() { + console.log("AuAu!"); + } +} + +let Kank = new Dogo("Kank", 10, "cinza", true, "Border Collie"); + +/////////////////// + +function brincar() { + if (this.familia == "canidae") { + return console.log("brincar de bolinha"); + } +} + +Dogo.prototype.brincar = function brincar() { + if (this.familia == "canidae") { + return console.log("brincar de bolinha"); + } +}; + +// Object.defineProperty(Dogo, "brincar", {}); + +/////////////////////////////////////////// + +class Historic { + constructor() { + this.consultas = []; + this.vacinas = []; + this.procedimento = []; + } + consultar() { + this.historico.consultas.push(Date()); + } + vacinar(value) { + this.historico.vacinas.push(value); + } + examinar(value) { + this.historico.procedimento.push(value); + } +} + +function brincar() { + if (this.familia == "canidae") { + return console.log("brincar de bolinha"); + } else if (this.familia == "felinus") { + return console.log("brincar de laser"); + } +} + +class Animal { + constructor(nome, idade, cor) { + this.nome; + this.idade; + this.cor; + } + +} + +class Cat extends Animal { + constructor(nome, idade, cor, raca) { + super(nome, idade, cor); + this.raca; + this.historico = new Historic(); + } + super() + miar() { + console.log("Miau!"); + } +} + + +function brincar(animal) { + if (animal instanceof Dogo) { + console.log("brincar de bolinha"); + } else if (animal instanceof Cat) { + console.log("brincar de laser"); + } else if (animal instanceof Papagaio) { + console.log("brincar de cantar"); + } else if (animal instanceof Hamister) { + console.log("brincar de roda de hamister"); + } else if (animal instanceof Macaco) { + console.log("brincar de jogar banana"); + } else { + console.log("não da para brincar"); + } +} \ No newline at end of file diff --git a/Atividades/Em aula/proto.js b/Atividades/Em aula/proto.js new file mode 100644 index 0000000..ee552a2 --- /dev/null +++ b/Atividades/Em aula/proto.js @@ -0,0 +1,29 @@ +Object.prototype.quantasChaves = function quantasChaves() { + Object.keys(this).length; +}; + +function Gato(name, idade, cor) { + this.name; + this.idade; + this.cor; +} + +// james = new Gato("James", 10, "cinza"); + +Gato.prototype.especie = "felino"; + +james = { + nome: "James", + idade: 10, + cor: "cinza", +}; + +Object.keys(james); + +// resultado = 3 + +// Object.keys() vai mostrar keys que estao fora de __proto__ então +// o resultado vai ser 3 pq so tem nome, idade, cor. + +// Não é boa pratica add coisas em algo que a linguagem ja deu como +// Object diff --git a/Atividades/Em casa/Exercicios.md b/Atividades/Em casa/Exercicios.md index a8ec6c5..92dc4e6 100644 --- a/Atividades/Em casa/Exercicios.md +++ b/Atividades/Em casa/Exercicios.md @@ -1,8 +1,221 @@ -Nome: +Nome:Ellie + +# Lição feita! + +```js +class Historic { + constructor() { + this.consultas = []; + this.vacinas = []; + this.procedimento = []; + } + consultar() { + this.consultas.push(Date()); + } + vacinar(value) { + this.vacinas.push(value); + consultar(); + } + examinar(value) { + this.procedimento.push(value); + consultar(); + } +} + +class Animal { + constructor(nome, idade, cor) { + this.nome = nome; + this.idade = idade; + this.cor = cor; + } +} + +class Cat extends Animal { + static comidas = ["frango", "sache", "peixe"]; + constructor(nome, idade, cor) { + super(nome, idade, cor); + this.castrado = false; + this.externo = false; + this.social = false; + this.historico = new Historic(); + } + + miar() { + console.log("Miau!"); + } + acariciar() { + if (this.social == false) { + console.log(`${this.nome} esta salivando`); + } else { + console.log(`${this.nome} esta ronronando e te amando`); + } + } + alimentar(value) { + if (Cat.comidas.includes(value)) { + this.social = true; + console.log( + `o ${this.nome} esta a se deliciar!\nassim ficando mais proximo a você :3` + ); + } else { + console.log( + `os gatinhos não gostam de ${value}\nsó gostam de ${Cat.comidas.toString()}` + ); + } + } + castrar() { + if (this.castrado == false) { + this.castrado = true; + console.log(`${this.nome} castrado`); + this.historico.consultar(); + } else { + this.castrado = false; + this.historico.consultas.shift(); + console.log(`corrigido. ${this.nome} não castrado`); + } + } + brincar() { + console.log(`${this.nome} esta se divertindo com a brincadeira`); + } +} + +class Dog extends Animal { + static comidas = [`biscoito scooby`, `osso`]; + #ferido; + constructor(nome, idade, cor, raca) { + super(nome, idade, cor); + this.castrado = false; + this.raca; + this.social = true; + this.#ferido = true; + this.historico = new Historic(); + } + + examinar(value) { + this.historico.examinar(value); + this.historico.consultar(); + this.#ferido = false; + } + + latir() { + console.log(`Au!Au!`); + } + acariciar() { + console.log( + `${this.nome} demonstra felicidade e late para voce quando para de fazer carinho` + ); + } + + alimentar(value) { + if (Dog.comidas.includes(value)) { + console.log( + `o ${this.nome} esta a se deliciar!\nassim abanando o rabo parecendo que quer mais!` + ); + } else { + console.log( + `os cachorros não gostam de ${value}\nsó gostam de ${Dog.comidas.toString()}` + ); + } + } + + brincar() { + if (this.#ferido == false) { + console.log(`${this.nome} brinca normalmente :3`); + } else { + console.log(`${this.nome} parece estar com dor\n-status ferido-`); + } + } + castrar() { + if (this.castrado == false) { + this.castrado = true; + console.log(`${this.nome} castrado`); + this.historico.consultar(); + } else { + this.castrado = false; + this.historico.consultas.shift(); + console.log(`corrigido. ${this.nome} não castrado`); + } + } +} + +class Hamster extends Animal { + #confianca; + constructor(nome, idade, cor, tipo) { + super(nome, idade, cor); + this.tipo; + this.consultas = []; + this.#confianca = true; + } + consultar() { + this.consultas.push(Date()); + this.#confianca = false; + } + brincar() { + if (this.#confianca == false) { + this.#confianca = true; + console.log( + `${this.nome} parece estar contente e mais calmo\n+confiança restaurada+` + ); + } else { + console.log(`parece que ${this.nome} já esta muito feliz`); + } + } + acariciar() { + console.log(`${this.nome} esta mais calmo`); + } + alimentar() { + console.log(`hmm... alimentos\n${this.nome} parece satisfeito`); + } +} + +class Papagaio extends Animal { + #confianca; + constructor(nome, idade, cor) { + super(nome, idade, cor); + this.consultas = []; + this.#confianca = false; + } + consultar() { + this.consultas.push(Date()); + } + + falar() { + if (this.#confianca == true) { + this.#confianca = false; + console.log( + `oi amigo eu sou ${this.nome} e estou feliz!\nagradeço o alimento.` + ); + } else { + console.log(`...\n parece que ${this.nome} quer algo`); + } + } + brincar() {} + acariciar() {} + alimentar() { + this.#confianca = true; + console.log(`voce alimentou e ${this.nome} fica dançando`); + } +} + +let crys = new Cat("Crys", 12, "cinza com branco"); +let scooby = new Dog("Scooby", 15, "marrom", "dogue alemão"); +let iogurte = new Hamster("Iogurte", 1.5, "branco e laranja", "sírio"); +let jose = new Papagaio("José", 13, "verde"); + +let listaAnimais = [crys, scooby, iogurte, jose]; + +function chamar(listaAnimais) { + const isAnimalCallable = (animal) => + animal instanceof Dog || (animal instanceof Cat && animal.social == true); + + console.log("psiu"); + return listaAnimais.filter(isAnimalCallable); +} +``` Nossa veterinária agora atende quatro espécies diferentes de animais: dois domésticos (`Gato` e `Cachorro`), e dois exóticos (`Hamster` e `Papagaio`). Usando o que você aprendeu essa semana (classes, herança, sobrescritas, campos privados...) e os exemplos de animais abaixo, escreva um sistema que atenda aos critérios listados: 1. Gatos + ``` { nome: "Nina", @@ -23,33 +236,37 @@ Nossa veterinária agora atende quatro espécies diferentes de animais: dois dom alimentar(), } ``` - - Gatos sociáveis ronronam ao serem acariciados. Se um gato não for sociável, ele deve silvar. - - Você pode tornar um gato sociável alimentando ele com uma das comidas favoritas dos gatos: frango, sachê ou peixe. - - 2. Cachorro - ``` - { - nome: "Zeus", - idade: 3.5 - cor: "preto", - castrado: false, - raça: "labrador", - vacinas: [], - consultas: [], - ferido: false, - latir(), - vacinar(), - consultar(), - castrar(), - brincar(), - acariciar(), - alimentar(), +- Gatos sociáveis ronronam ao serem acariciados. Se um gato não for sociável, ele deve silvar. +- Você pode tornar um gato sociável alimentando ele com uma das comidas favoritas dos gatos: frango, sachê ou peixe. + +2. Cachorro + +``` +{ + nome: "Zeus", + idade: 3.5 + cor: "preto", + castrado: false, + raça: "labrador", + vacinas: [], + consultas: [], + ferido: false, + + latir(), + vacinar(), + consultar(), + castrar(), + brincar(), + acariciar(), + alimentar(), } - ``` - - Cachorros costumam esconder quando estão feridos. Use um campo privado para essa informação, e só a exiba ao tentar `brincar()` com um cãozinho que está ferido. +``` + +- Cachorros costumam esconder quando estão feridos. Use um campo privado para essa informação, e só a exiba ao tentar `brincar()` com um cãozinho que está ferido. 3. Hamster + ``` { nome: "Iogurte", @@ -64,9 +281,11 @@ Nossa veterinária agora atende quatro espécies diferentes de animais: dois dom alimentar(), } ``` - - Ao consultar um hamster, você deve brincar com ele para que ele não fique estressado e tente fugir. + +- Ao consultar um hamster, você deve brincar com ele para que ele não fique estressado e tente fugir. 4. Papagaio + ``` { nome: "José", @@ -81,14 +300,17 @@ Nossa veterinária agora atende quatro espécies diferentes de animais: dois dom alimentar(), } ``` - - Ao brincar com ou alimentar um papagaio, ele deve falar com você. + +- Ao brincar com ou alimentar um papagaio, ele deve falar com você. 5. Outros - - Sempre que vacinar um paciente, você deve adicionar uma nova consulta na lista. O mesmo vale para castrar um animal. - - Você deve ter uma função `chamar()`, que recebe uma lista de animais e retorna quais dos animais da lista responderam e vieram brincar. Todos os cachorros respondem quando chamados, assim como os gatos que são sociais. Hamsters, papagaios e gatos não sociais não virão. - - Tentar castrar um animal que já está castrado deve retornar um erro. + +- Sempre que vacinar um paciente, você deve adicionar uma nova consulta na lista. O mesmo vale para castrar um animal. +- Você deve ter uma função `chamar()`, que recebe uma lista de animais e retorna quais dos animais da lista responderam e vieram brincar. Todos os cachorros respondem quando chamados, assim como os gatos que são sociais. Hamsters, papagaios e gatos não sociais não virão. +- Tentar castrar um animal que já está castrado deve retornar um erro. **Dica:** assinaturas possíveis para as funções: + ``` function acariciar() { ... } diff --git a/Atividades/Em casa/classes/Animal.js b/Atividades/Em casa/classes/Animal.js new file mode 100644 index 0000000..08294dc --- /dev/null +++ b/Atividades/Em casa/classes/Animal.js @@ -0,0 +1,7 @@ +class Animal { + constructor(nome, idade, cor) { + this.nome = nome; + this.idade = idade; + this.cor = cor; + } +} diff --git a/Atividades/Em casa/classes/Cat.js b/Atividades/Em casa/classes/Cat.js new file mode 100644 index 0000000..5e328f5 --- /dev/null +++ b/Atividades/Em casa/classes/Cat.js @@ -0,0 +1,47 @@ +class Cat extends Animal { + static comidas = ["frango", "sache", "peixe"]; + constructor(nome, idade, cor) { + super(nome, idade, cor); + this.castrado = false; + this.externo = false; + this.social = false; + this.historico = new Historic(); + } + + miar() { + console.log("Miau!"); + } + acariciar() { + if (this.social == false) { + console.log(`${this.nome} esta salivando`); + } else { + console.log(`${this.nome} esta ronronando e te amando`); + } + } + alimentar(value) { + if (Cat.comidas.includes(value)) { + this.social = true; + console.log( + `o ${this.nome} esta a se deliciar!\nassim ficando mais proximo a você :3` + ); + } else { + console.log( + `os gatinhos não gostam de ${value}\nsó gostam de ${Cat.comidas.toString()}` + ); + } + } + castrar() { + if (this.castrado == false) { + this.castrado = true; + console.log(`${this.nome} castrado`); + this.historico.consultar(); + } else { + this.castrado = false; + this.historico.consultas.shift(); + console.log(`corrigido. ${this.nome} não castrado`); + } + } + brincar() { + console.log(`${this.nome} esta se divertindo com a brincadeira`); + } +} diff --git a/Atividades/Em casa/classes/Dog.js b/Atividades/Em casa/classes/Dog.js new file mode 100644 index 0000000..f9a587e --- /dev/null +++ b/Atividades/Em casa/classes/Dog.js @@ -0,0 +1,58 @@ +class Dog extends Animal { + static comidas = [`biscoito scooby`, `osso`]; + #ferido; + constructor(nome, idade, cor, raca) { + super(nome, idade, cor); + this.castrado = false; + this.raca; + this.social = true; + this.#ferido = true; + this.historico = new Historic(); + } + + examinar(value) { + this.historico.examinar(value); + this.historico.consultar(); + this.#ferido = false; + } + + latir() { + console.log(`Au!Au!`); + } + acariciar() { + console.log( + `${this.nome} demonstra felicidade e late para voce quando para de fazer carinho` + ); + } + + alimentar(value) { + if (Dog.comidas.includes(value)) { + console.log( + `o ${this.nome} esta a se deliciar!\nassim abanando o rabo parecendo que quer mais!` + ); + } else { + console.log( + `os cachorros não gostam de ${value}\nsó gostam de ${Dog.comidas.toString()}` + ); + } + } + + brincar() { + if (this.#ferido == false) { + console.log(`${this.nome} brinca normalmente :3`); + } else { + console.log(`${this.nome} parece estar com dor\n-status ferido-`); + } + } + castrar() { + if (this.castrado == false) { + this.castrado = true; + console.log(`${this.nome} castrado`); + this.historico.consultar(); + } else { + this.castrado = false; + this.historico.consultas.shift(); + console.log(`corrigido. ${this.nome} não castrado`); + } + } +} diff --git a/Atividades/Em casa/classes/Hamster.js b/Atividades/Em casa/classes/Hamster.js new file mode 100644 index 0000000..696fedb --- /dev/null +++ b/Atividades/Em casa/classes/Hamster.js @@ -0,0 +1,29 @@ +class Hamster extends Animal { + #confianca; + constructor(nome, idade, cor, tipo) { + super(nome, idade, cor); + this.tipo; + this.consultas = []; + this.#confianca = true; + } + consultar() { + this.consultas.push(Date()); + this.#confianca = false; + } + brincar() { + if (this.#confianca == false) { + this.#confianca = true; + console.log( + `${this.nome} parece estar contente e mais calmo\n+confiança restaurada+` + ); + } else { + console.log(`parece que ${this.nome} já esta muito feliz`); + } + } + acariciar() { + console.log(`${this.nome} esta mais calmo`); + } + alimentar() { + console.log(`hmm... alimentos\n${this.nome} parece satisfeito`); + } +} diff --git a/Atividades/Em casa/classes/Historic.js b/Atividades/Em casa/classes/Historic.js new file mode 100644 index 0000000..fb0aaab --- /dev/null +++ b/Atividades/Em casa/classes/Historic.js @@ -0,0 +1,18 @@ +class Historic { + constructor() { + this.consultas = []; + this.vacinas = []; + this.procedimento = []; + } + consultar() { + this.consultas.push(Date()); + } + vacinar(value) { + this.vacinas.push(value); + consultar(); + } + examinar(value) { + this.procedimento.push(value); + consultar(); + } +} diff --git a/Atividades/Em casa/classes/Papagaio.js b/Atividades/Em casa/classes/Papagaio.js new file mode 100644 index 0000000..b83ef96 --- /dev/null +++ b/Atividades/Em casa/classes/Papagaio.js @@ -0,0 +1,28 @@ +class Papagaio extends Animal { + #confianca; + constructor(nome, idade, cor) { + super(nome, idade, cor); + this.consultas = []; + this.#confianca = false; + } + consultar() { + this.consultas.push(Date()); + } + + falar() { + if (this.#confianca == true) { + this.#confianca = false; + console.log( + `oi amigo eu sou ${this.nome} e estou feliz!\nagradeço o alimento.` + ); + } else { + console.log(`...\n parece que ${this.nome} quer algo`); + } + } + brincar() {} + acariciar() {} + alimentar() { + this.#confianca = true; + console.log(`voce alimentou e ${this.nome} fica dançando`); + } +} diff --git a/Atividades/Em casa/funcionalidades.js b/Atividades/Em casa/funcionalidades.js new file mode 100644 index 0000000..280ad62 --- /dev/null +++ b/Atividades/Em casa/funcionalidades.js @@ -0,0 +1,14 @@ +let crys = new Cat("Crys", 12, "cinza com branco"); +let scooby = new Dog("Scooby", 15, "marrom", "dogue alemão"); +let iogurte = new Hamster("Iogurte", 1.5, "branco e laranja", "sírio"); +let jose = new Papagaio("José", 13, "verde"); + +let listaAnimais = [crys, scooby, iogurte, jose]; + +function chamar(listaAnimais) { + const isAnimalCallable = (animal) => + animal instanceof Dog || (animal instanceof Cat && animal.social == true); + + console.log("psiu"); + return listaAnimais.filter(isAnimalCallable); +}