diff --git a/semana18/aula53/.gitignore b/semana18/aula53/.gitignore new file mode 100644 index 0000000..8ece3ba --- /dev/null +++ b/semana18/aula53/.gitignore @@ -0,0 +1,4 @@ +node_modules +package-lock.json +build +.env \ No newline at end of file diff --git a/semana18/aula53/package.json b/semana18/aula53/package.json new file mode 100644 index 0000000..0e9df8c --- /dev/null +++ b/semana18/aula53/package.json @@ -0,0 +1,28 @@ +{ + "name": "aula53", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "ts-node-dev ./src/index.ts", + "start": "tsc && node ./build/index.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@types/knex": "^0.16.1", + "cors": "^2.8.5", + "dotenv": "^14.3.0", + "express": "^4.17.2", + "knex": "^1.0.1", + "mysql": "^2.18.1" + }, + "devDependencies": { + "@types/cors": "^2.8.12", + "@types/express": "^4.17.13", + "@types/node": "^17.0.12", + "ts-node-dev": "^1.1.8", + "typescript": "^4.5.5" + } +} diff --git a/semana18/aula53/respostas.md b/semana18/aula53/respostas.md new file mode 100644 index 0000000..16397e2 --- /dev/null +++ b/semana18/aula53/respostas.md @@ -0,0 +1,56 @@ +# Aula 53 - Herança e Polimorfismo + + + +-----------------------------------------------**HERANÇA**----------------------------------------------- + +### Exercício 1 + +a)Seria possível imprimir a senha (password) atrelada a essa instância? +* Não, pois não foi criado um método getter para gerar a visualização desse atributo. + + +b)Quantas vezes a mensagem "Chamando o construtor da classe User" foi impressa no terminal? +* Apenas uma vez. + + + +### Exercício 2 + +a)Quantas vezes a mensagem "Chamando o construtor da classe Customer" foi impressa no terminal? +* Apenas uma vez. + + +b)Quantas vezes a mensagem "Chamando o construtor da classe User" foi impressa no terminal? Por quê? +* Apenas uma vez. + + + +### Exercício 3 +a)Seria possível imprimir a senha (password) atrelada a essa instância? Por quê? +* Não, pois é uma informação privada e e não existe, ainda, nenhum método para visualizar essa informação. + + + +-----------------------------------------------**POLIMORFISMO**----------------------------------------------- + +### Exercício 1 + +a)Quais propriedades você conseguiu imprimir? Teve alguma que não foi possível? Por que isso aconteceu? +* Todas as propriedades, porém o método ***calculateBill*** por ser uma função(método), só é possível ver seu valor invocando a ***variável.método***. + + +### Exercício 2 +a)Mesmo sabendo que não é possível, tente criar uma instância dessa classe (ou seja: new Place(...)). Qual foi o erro que o Typescript gerou? +* RESPOSTA DO TYPESCRIPT : "Cannot create an instance of an abstract class.". + +b)Pense e responda: o que precisaríamos fazer para conseguir efetivamente criar uma instância dessa classe? +* Para criar uma instância de uma classe abstrata precisamos declarar uma classe filha e criar uma instância dessa última + + +### Exercício 3 +a)Por que a Place não é uma interface? +* Place é uma classe porque precisa ter um acesso restrito a um dos seus atributos, o que é impossível de se fazer em interfaces. + +b)Por que a classe Place é uma Classe Abstrata? +* Por fim, ela é abstrata por um motivo simples. O nosso sistema possui 3 tipos de lugares e preferimos criar uma classe para representar cada um deles. Então não há motivos para querermos instanciar um objeto do tipo Place porque, no nosso contexto, todos os casos deles já estão cobertos por outras classes. Isso responde à terceira pergunta: Place é abstrata porque não enxergamos uma situação em que seria necessário criar uma instância dessa classe. diff --git a/semana18/aula53/src/Light/Client.ts b/semana18/aula53/src/Light/Client.ts new file mode 100644 index 0000000..a648578 --- /dev/null +++ b/semana18/aula53/src/Light/Client.ts @@ -0,0 +1,62 @@ +import { Industry, Residence } from "./Residents"; + +export interface Client { + name: string; + // Refere-se ao nome do cliente + + registrationNumber: number; + // Refere-se ao número de cadastro do cliente na concessionária + // como se fosse um id + + consumedEnergy: number; + // Refere-se à energia consumida pelo cliente no mês + + calculateBill(): number; + // Retorna o valor da conta em reais + } + + +export class ResidentialClient extends Residence implements Client{ + + constructor( + public name:string, + public registrationNumber: number, + public consumedEnergy: number, + private cpf: string, + residentsQuantity:number, + cep: string + ){ + super(registrationNumber,cep) + } + + public getCpf(): string { + return this.cpf; + } + + public calculateBill(): number { + return this.consumedEnergy * 0.75; + } +} + + + +export class IndustrialClinet extends Industry implements Client { + constructor( + public name: string, + public registrationNumber: number, + public consumedEnergy: number, + private insdustryNumber: string, // tanto faz ser string ou number + machinesQuantity: number, + cep: string + ) { + super(machinesQuantity, cep); + } + + public getIndustryNumber(): string { + return this.insdustryNumber; + } + + public calculateBill(): number { + return this.consumedEnergy * 0.45 + this.machinesQuantity * 100; + } +} \ No newline at end of file diff --git a/semana18/aula53/src/Light/Residents.ts b/semana18/aula53/src/Light/Residents.ts new file mode 100644 index 0000000..deb0684 --- /dev/null +++ b/semana18/aula53/src/Light/Residents.ts @@ -0,0 +1,60 @@ +export abstract class Place { + constructor(protected cep: string) {} + + public getCep(): string { + return this.cep; + } +} + + + +//Representa uma casa residencial +export class Residence extends Place { + constructor( + protected residentsQuantity: number, + // Refere-se ao número de moradores da casa + + cep: string + ) { + super(cep); + } + + public getResidentsQuantity():number{ + return this.residentsQuantity + } +} + +//Representa um comércio + export class Commerce extends Place { + constructor( + protected floorsQuantity: number, + // Refere-se à quantidade de andares do lugar + + cep: string + ) { + super(cep); + } + + public getFloorsQuantity():number{ + return this.floorsQuantity + } +} + +//Representa uma indústria +export class Industry extends Place { + constructor( + protected machinesQuantity: number, + // Refere-se à quantidade de máquinas do local + + cep: string + ) { + super(cep); + } + + public getMachinesQuantity():number{ + return this.machinesQuantity + } +} + + + diff --git a/semana18/aula53/src/app.ts b/semana18/aula53/src/app.ts new file mode 100644 index 0000000..9159606 --- /dev/null +++ b/semana18/aula53/src/app.ts @@ -0,0 +1,20 @@ + +import express, {Express} from 'express' +import cors from 'cors' +import { AddressInfo } from 'net'; + +const app: Express = express(); + +app.use(express.json()); +app.use(cors()); + +const server = app.listen(process.env.PORT || 3003, () => { + if (server) { + const address = server.address() as AddressInfo; + console.log(`Server is running in http://localhost:${address.port}`); + } else { + console.error(`Failure upon starting server.`); + } +}); + +export default app \ No newline at end of file diff --git a/semana18/aula53/src/class/Customer.ts b/semana18/aula53/src/class/Customer.ts new file mode 100644 index 0000000..9ac012d --- /dev/null +++ b/semana18/aula53/src/class/Customer.ts @@ -0,0 +1,22 @@ +import { User } from "./User"; + +export class Customer extends User { + public purchaseTotal: number = 0; + private creditCard: string; + + constructor( + id: string, + email: string, + name: string, + password: string, + creditCard: string + ) { + super(id, email, name, password); + console.log("Chamando o construtor da classe Customer"); + this.creditCard = creditCard; + } + + public getCreditCard(): string { + return this.creditCard; + } +} \ No newline at end of file diff --git a/semana18/aula53/src/class/User.ts b/semana18/aula53/src/class/User.ts new file mode 100644 index 0000000..c8ffe0e --- /dev/null +++ b/semana18/aula53/src/class/User.ts @@ -0,0 +1,37 @@ +export class User { + private id: string; + private email: string; + private name: string; + private password: string; + + constructor( + id: string, + email: string, + name: string, + password: string + ){ + console.log("Chamando o construtor da classe User") + this.id = id + this.email = email + this.name = name + this.password = password + } + + public getId(): string { + return this.id + } + + public getEmail(): string { + return this.email + } + + public getName(): string { + return this.name + } + + public introduceYourself():string{ + return `Olá, sou ${this.name}. Bom dia!` + } +} + + diff --git a/semana18/aula53/src/index.ts b/semana18/aula53/src/index.ts new file mode 100644 index 0000000..7830e4b --- /dev/null +++ b/semana18/aula53/src/index.ts @@ -0,0 +1,63 @@ +import { Customer } from "./class/Customer"; +import { User } from "./class/User"; +import { Client} from "./Light/Client"; +import { Commerce, Industry, Place, Residence } from "./Light/Residents"; + + /*HERANÇA */ +//---------------------------------------------------------------------------------------------// +// //Exercício 1 +// const newUser = new User("99999","joao@email.com", "Joao", "123456") +// console.log(newUser.getId()) +// console.log(newUser.getEmail()) +// console.log(newUser.getName()) + +// //Exercício 2 +// const newCustomer = new Customer("99999","joao@email.com", "Joao", "123456","225633251463") +// console.log(newCustomer.getCreditCard()) + +// //Exercício 3 +// const otherCustomer = new Customer("99999","joao@email.com", "Joao", "123456","225633251463") +// console.log(otherCustomer.getId()) +// console.log(otherCustomer.getEmail()) +// console.log(otherCustomer.getName()) +// console.log(otherCustomer.getCreditCard()) +// console.log(otherCustomer.purchaseTotal) + +// //Exercício 4 e 5 +// console.log(otherCustomer.introduceYourself()) + + + /*POLIMORFISMO */ +//---------------------------------------------------------------------------------------------// +//Exercício 1 +// const client:Client = { +// name: "Carlos", +// registrationNumber: 123456789, +// consumedEnergy: 25, +// calculateBill : () => { +// return 2 +// } +// } + +// console.log(client) +// console.log(client.calculateBill()) + +//Exercício 2 + +// const newPlace: Place = new Place("22222222222") //Não pode pois é abstract + +//Exercício 3 + +/*Agora, crie uma instância de cada uma das classes novas. +Imprima no console o CEP de cada uma delas, através do método getCep herdado da classe Place.*/ + +const newResidence: Residence = new Residence(5,"123456789") +console.log(newResidence.getCep()) + +const newCommerce: Commerce = new Commerce(5,"987654321") +console.log(newCommerce.getCep()) + +const newIndustry: Industry = new Industry(5,"213546879") +console.log(newIndustry.getCep()) + + diff --git a/semana18/aula53/tsconfig.json b/semana18/aula53/tsconfig.json new file mode 100644 index 0000000..eacbb43 --- /dev/null +++ b/semana18/aula53/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "sourceMap": true, + "outDir": "./build", + "rootDir": "./src", + "removeComments": true, + "strict": true, + "noImplicitAny": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true + + } +} \ No newline at end of file