Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions semana18/aula53/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules
package-lock.json
build
.env
28 changes: 28 additions & 0 deletions semana18/aula53/package.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
56 changes: 56 additions & 0 deletions semana18/aula53/respostas.md
Original file line number Diff line number Diff line change
@@ -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.
62 changes: 62 additions & 0 deletions semana18/aula53/src/Light/Client.ts
Original file line number Diff line number Diff line change
@@ -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;
}
}
60 changes: 60 additions & 0 deletions semana18/aula53/src/Light/Residents.ts
Original file line number Diff line number Diff line change
@@ -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
}
}



20 changes: 20 additions & 0 deletions semana18/aula53/src/app.ts
Original file line number Diff line number Diff line change
@@ -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
22 changes: 22 additions & 0 deletions semana18/aula53/src/class/Customer.ts
Original file line number Diff line number Diff line change
@@ -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;
}
}
37 changes: 37 additions & 0 deletions semana18/aula53/src/class/User.ts
Original file line number Diff line number Diff line change
@@ -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!`
}
}


63 changes: 63 additions & 0 deletions semana18/aula53/src/index.ts
Original file line number Diff line number Diff line change
@@ -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())


17 changes: 17 additions & 0 deletions semana18/aula53/tsconfig.json
Original file line number Diff line number Diff line change
@@ -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

}
}