Aula 3

Paradigmas de programação e Banco de Dados

Objetivos da aula de hoje

  • Discutir sobre paradigmas e suas implementações
  • Estudar métodos e funções
  • Falar sobre banco de dados

Paradigmas

  • POO
  • Funcional
  • Procedural

POO

class Carro {
  velocidade: number;
  
  constructor(velocidade: number) {
    this.velocidade = velocidade;
  }
  
  calcularVelocidadeEmMph(): number {
    return this.velocidade * 0.621371192;
  }
}

function calcularVelocidadeEmMph(velocidade: number): number {
  return velocidade * 0.621371192;
}

Funcional

const calcularVelocidadeEmMph = (velocidade: number): number => velocidade * 0.621371192;

Procedural

function calcularVelocidadeEmMph(velocidade: number): number {
  let velocidadeMph = 0;
  velocidadeMph = velocidade * 0.621371192;
  return velocidadeMph;
}

Funcional

const calcularVelocidadeEmMph = (velocidade: number): number => velocidade * 0.621371192;

const velocidadeKmh = 100;
const velocidadeMph = calcularVelocidadeEmMph(velocidadeKmh);

console.log(`A velocidade em MPH é ${velocidadeMph}`);

Como criar uma função

function somar(a: number, b: number): number {
  return a + b;
}
const resultado = somar(2, 3);
console.log(resultado);

Como criar um método

class Pessoa {
  nome: string;
  
  constructor(nome: string) {
    this.nome = nome;
  }
  
  apresentar(): void {
    console.log(`Olá, meu nome é ${this.nome}`);
  }
}
const pessoa = new Pessoa('João');
pessoa.apresentar();

Tipos de variáveis

let myVariable: string = "Hello";
myVariable = "World";
const myConstVariable: number = 42;
let myVariable = "Hello"; // o TypeScript infere que myVariable é do tipo string
const myConstVariable = 42; // o TypeScript infere que myConstVariable é do tipo number

Tipos de variáveis

  • numberlet x: number = 10.5;

  • string: let nome: string = "Maria";

  • boolean: let ativo: boolean = true;

  • arraylet numeros: number[] = [1, 2, 3]; ou let lista: any[] = [1, "dois", true];

  • tuple: let pessoa: [string, number] = ["Maria", 25];

  • enum: representa um conjunto de valores nomeados. Exemplo:

enum Cor {
  Vermelho,
  Verde,
  Azul
}

let minhaCor: Cor = Cor.Vermelho;

O que é um objeto?

class Pessoa {
  nome: string;
  idade: number;
  sexo: string;

  constructor(nome: string, idade: number, sexo: string) {
    this.nome = nome;
    this.idade = idade;
    this.sexo = sexo;
  }

  falar(): void {
    console.log("Olá, eu sou " + this.nome);
  }
}

let pessoa1 = new Pessoa("Maria", 25, "Feminino");

Dever de casa

function calcularPotenciaEletrica(tensao: number, corrente: number): number {
  return tensao * corrente;
}

class CircuitoEletrico {
  calcularPotencia(tensao: number, corrente: number): number {
    return tensao * corrente;
  }
}

Crie uma função ou um método (na linguagem que quiser) sobre o que quiser.

Ex:

const potencia = calcularPotenciaEletrica(12, 2);
console.log(`A potência elétrica é de ${potencia} W`);

const circuito = new CircuitoEletrico();
const potenciaCircuito = circuito.calcularPotencia(12, 2);
console.log(`A potência elétrica do circuito é de ${potenciaCircuito} W`);

Exemplo de tarefa

class Calculadora {
  private valorAtual: number;

  constructor(valorInicial: number = 0) {
    this.valorAtual = valorInicial;
  }

  public somar(valor: number): void {
    this.valorAtual += valor;
  }

  public subtrair(valor: number): void {
    this.valorAtual -= valor;
  }

  public multiplicar(valor: number): void {
    this.valorAtual *= valor;
  }

  public dividir(valor: number): void {
    this.valorAtual /= valor;
  }

  public limpar(): void {
    this.valorAtual = 0;
  }

  public obterResultado(): number {
    return this.valorAtual;
  }
}

Argumentos e Parâmetros

function calcularAreaRetangulo(base: number, altura: number): number {
  return base * altura;
}
const area = calcularAreaRetangulo(5, 10);

Condição

if (condicao) {
  // bloco de código executado se a condição for verdadeira
} else {
  // bloco de código executado se a condição for falsa
}
const x = 10;

if (x > 5) {
  console.log("x é maior que 5");
} else {
  console.log("x é menor ou igual a 5");
}
const x = 10;

if (x > 15) {
  console.log("x é maior que 15");
} else if (x > 5) {
  console.log("x é maior que 5, mas menor ou igual a 15");
} else {
  console.log("x é menor ou igual a 5");
}

Loops (for, foreach)

for (inicialização; condição; incremento) {
  // bloco de código a ser executado
}
for (let i = 0; i < 10; i++) {
  console.log(i);
}
array.forEach((elemento) => {
  // bloco de código a ser executado para cada elemento do array
});
const numeros = [1, 2, 3, 4, 5];

numeros.forEach((numero) => {
  console.log(numero);
});

Loops (for, foreach)

for (inicialização; condição; incremento) {
  // bloco de código a ser executado
}
for (let i = 0; i < 10; i++) {
  console.log(i);
}
array.forEach((elemento) => {
  // bloco de código a ser executado para cada elemento do array
});
const numeros = [1, 2, 3, 4, 5];

numeros.forEach((numero) => {
  console.log(numero);
});

Loops (while)

while (condição) {
  // bloco de código a ser executado enquanto a condição for verdadeira
}
let i = 0;

while (i < 10) {
  console.log(i);
  i++;
}

Recursão

function fatorial(n: number): number {
  if (n === 0) {
    return 1;
  } else {
    return n * fatorial(n - 1);
  }
}

console.log(fatorial(5)); // imprime 120

Array

// Declarando um array de números
let numeros: number[] = [1, 2, 3, 4, 5];

// Iterando pelo array com um for loop
for(let i = 0; i < numeros.length; i++) {
    console.log(numeros[i]);
}

// Iterando pelo array com um forEach
numeros.forEach((numero) => {
    console.log(numero);
});

// Filtrando elementos do array
let numerosPares = numeros.filter((numero) => {
    return numero % 2 == 0;
});

// Mapeando elementos do array
let numerosAoQuadrado = numeros.map((numero) => {
    return numero * numero;
});

// Reduzindo o array para um valor único
let somaDosNumeros = numeros.reduce((total, numero) => {
    return total + numero;
}, 0);

Objetos

// Declarando um objeto
let pessoa = {
    nome: "João",
    idade: 30,
    endereco: {
        rua: "Rua A",
        numero: 123
    }
};

// Acessando propriedades do objeto
console.log(pessoa.nome);
console.log(pessoa.endereco.rua);

// Modificando propriedades do objeto
pessoa.nome = "Maria";
pessoa.endereco.numero = 456;

// Declarando um objeto com tipo definido
interface Pessoa {
    nome: string;
    idade: number;
    endereco: {
        rua: string;
        numero: number;
    }
}

let outraPessoa: Pessoa = {
    nome: "José",
    idade: 25,
    endereco: {
        rua: "Rua B",
        numero: 789
    }
};

Operadores

// Atribuição
let x = 1;

// Aritméticos
let soma = 2 + 3;
let subtracao = 5 - 2;
let multiplicacao = 4 * 6;
let divisao = 10 / 2;
let restoDaDivisao = 10 % 3;

// Comparação
let igualdade = 2 == 2;
let desigualdade = 3 != 4;
let maiorQue = 5 > 3;
let menorQue = 1 < 2;
let maiorOuIgual = 6 >= 6;
let menorOuIgual = 7 <= 8;

// Lógicos
let e = true && false;
let ou = true || false;
let nao = !true;

Modularidade

// Módulo A
export function funcaoA() {
    console.log("Função A");
}

// Módulo B
export function funcaoB() {
    console.log("Função B");
}

// Módulo principal
import { funcaoA } from "./moduloA";
import { funcaoB } from "./moduloB";

funcaoA();
funcaoB();

Exercício

Você precisa criar uma função que recebe um array de objetos com informações de livros e retorna uma lista com os títulos dos livros que foram publicados nos últimos 15 anos. Além disso, você precisa criar um módulo separado que exporta uma função que recebe uma string e retorna a mesma string, mas com todas as letras maiúsculas.

Dados a serem recebidos

const livros = [
  { titulo: "Clean Code", autor: "Robert C. Martin", anoPublicacao: 2008 },
  { titulo: "The Pragmatic Programmer", autor: "Andrew Hunt and David Thomas", anoPublicacao: 1999 },
  { titulo: "Refactoring", autor: "Martin Fowler", anoPublicacao: 1999 },
  { titulo: "Design Patterns", autor: "Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides", anoPublicacao: 1994 },
  { titulo: "Eloquent JavaScript", autor: "Marijn Haverbeke", anoPublicacao: 2011 },
  { titulo: "JavaScript: The Good Parts", autor: "Douglas Crockford", anoPublicacao: 2008 }
];

Resolução

// Módulo com a função que converte uma string para uppercase
export function uppercase(str: string): string {
  return str.toUpperCase();
}

// Função que retorna uma lista de títulos de livros publicados nos últimos 5 anos
function livrosRecentes(livros: any[]): string[] {
  const hoje = new Date();
  const anoAtual = hoje.getFullYear();
  const livrosRecentes = [];

  for (let i = 0; i < livros.length; i++) {
    const livro = livros[i];
    const anosDesdePublicacao = anoAtual - livro.anoPublicacao;
    if (anosDesdePublicacao <= 5) {
      livrosRecentes.push(livro.titulo);
    }
  }

  return livrosRecentes;
}

// Testando a função
const titulosLivrosRecentes = livrosRecentes(livros);
console.log("Títulos de livros recentes: ", titulosLivrosRecentes);

// Testando o módulo de uppercase
const texto = "Olá, mundo!";
const textoUppercase = uppercase(texto);
console.log("Texto em uppercase: ", textoUppercase);

Manipulação de String

// Declarando uma string
let nome = "João";

// Concatenando strings
let saudacao = "Olá, " + nome + "!";

// Interpolação de string
let idade = 30;
let mensagem = `Você tem ${idade} anos.`;

// Verificando o tamanho da string
let tamanho = nome.length;

// Acessando caracteres da string
let primeiroCaractere = nome[0];

//

Aula 8

By Kaleb Alves

Aula 8

  • 136