0% acharam este documento útil (0 voto)
31 visualizações29 páginas

A4 - Paradigmas de Linguagem de Programação

Enviado por

playdiney
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
31 visualizações29 páginas

A4 - Paradigmas de Linguagem de Programação

Enviado por

playdiney
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

UNIVERSIDADE VEIGA DE ALMEIDA

ENGENHARIA DE SOFTWARE

GUSTAVO SENRA TEIXEIRA – 1250115817

JOÃO ADOLFO MARTINS ARAÚJO – 1250108351

JOÃO CARLOS SEQUEIRA CANDEZUNER – 1250115069

JOÃO VITOR SOUZA DA SILVA – 1250113805

JULLIE DA SILVA NUNES – 1250113236

LUIZ HENRIQUE SIMÕES SOARES – 1250107519

GERADOR DE SENHAS AUTOMÁTICO

PARADIGMA DE LINGUAGEM DE PROGRAMAÇÃO

TIJUCA

2025
Gustavo Senra Teixeira – 1250115817

João Adolfo Martins Araújo – 1250108351

João Carlos Sequeira Candezuner – 1250115069

João Vitor Souza da Silva – 1250113805

Jullie da Silva Nunes – 1250113236

Luiz Henrique Simões Soares – 1250107519

GERADOR DE SENHAS AUTOMÁTICO

Atividade apresentada como requisito


para avaliação da disciplina de
Paradigma de Linguagem de
Programação, no curso de Engenharia de
Software, sob orientação da professor
Claúdio Ribeiro da Silva.

TIJUCA

2025
LISTA DE FIGURAS

1. FIGURA 1 ..............................................................................................................9

2. FIGURA 2 ..............................................................................................................9

3. FIGURA 3 ............................................................................................................ 9

4. FIGURA 4 ........................................................................................................... 10

5. FIGURA 5 ........................................................................................................... 15

6. FIGURA 6 ........................................................................................................... 15

7. FIGURA 7 ........................................................................................................... 16

8. FIGURA 8 ........................................................................................................... 16

9. FIGURA 9 ........................................................................................................... 21

10. FIGURA 10 ......................................................................................................... 21

11. FIGURA 11 ......................................................................................................... 21

12. FIGURA 12 ......................................................................................................... 22

13. FIGURA 13 ......................................................................................................... 25

14. FIGURA 14 ......................................................................................................... 25

15. FIGURA 15 ......................................................................................................... 25

16. FIGURA 16 ......................................................................................................... 26


SUMÁRIO

1. INTRODUÇÃO ..............................................................................................5

2. DESENVOLVIMENTO ..................................................................................6

3. CONCLUSÃO .............................................................................................27

4. REFERÊNCIAS BIBLIOGRÁFICAS ...........................................................28


5

1. INTRODUÇÃO

Neste trabalho, a gente colocou em prática dois jeitos de programar que


a gente aprendeu durante as aulas: a programação estruturada e a orientada a
objetos. Para isso, a gente fez um projeto simples, mas bem útil: um gerador de
senhas. Um projeto simples, porém, muito útil, desenvolvido nas linguagens C,
Python e Java.

A proposta foi criar o mesmo tipo de programa nas três linguagens, mas
aplicando os dois estilos de programação para comparar como cada um
funciona. Em C e Python, usamos a programação estruturada, que segue uma
lógica direta, com o código organizado em funções. Já em Python (de novo) e
Java, usamos a orientação a objetos, onde o código é separado em classes e
objetos, o que ajuda a deixar tudo mais organizado e fácil de reutilizar.

Foi testada cada versão do programa e observamos como cada


linguagem se comporta com os diferentes paradigmas. Isso ajudou a gente a
entender melhor as diferenças entre os dois estilos, e como eles influenciam na
forma de escrever o código, na organização e até na hora de fazer alterações
ou melhorias no futuro.
6

2. DESENVOLVIMENTO

2.1 CÓDIGOS EM PYTHON ESTRUTURADO:

import random

import string

def gerar_senha(tamanho, usar_maiusculas, usar_numeros,


usar_simbolos):

caracteres = string.ascii_lowercase

if usar_maiusculas:

caracteres +=

string.ascii_uppercase if

usar_numeros:

caracteres +=

[Link] if

usar_simbolos:

caracteres += [Link]

senha = ''.join([Link](caracteres) for _ in range(tamanho))

return
senha

def

ler_resposta_sim_nao(pergunta):

while True:
7

resposta =

input(pergunta).strip().lower() if

resposta == "sim":

return True elif resposta ==

"nao" or resposta == "nao":

return

False

else:

print("Resposta inválida! Por favor, digite apenas 'sim' ou


'nao'.")

def main():

print("=== GERADOR DE SENHAS ===\n")

tamanho = int(input("Digite o tamanho da senha desejada: "))

usar_maiusculas = ler_resposta_sim_nao("Incluir letras maiúsculas? (sim/nao):

") usar_numeros = ler_resposta_sim_nao("Incluir números? (sim/nao): ")

usar_simbolos = ler_resposta_sim_nao("Incluir símbolos? (sim/nao): ")

senha = gerar_senha(tamanho, usar_maiusculas, usar_numeros,


usar_simbolos)

print("\nSenha gerada:")
print(senha)

print("\n========================")
8

if __name__ == "__main__":

main()

No código apresentado:

• Função para gerar senha def gerar_senha(tamanho,

usar_maiusculas, usar_numeros, usar_simbolos):

Existe uma função que gera a senha, com parâmetros bem definidos.
A função é modular, ou seja, isolada, e pode ser reutilizada.

• Função para ler "sim" ou "não"

corretamente def

ler_resposta_sim_nao(pergunta): while

True:

A função ler_resposta_sim_nao () demonstra o uso de repetição (while) e


condição
(if)

• Função principal

def main(): if

__name__ ==

"__main__":

main()

Existe um fluxo principal do programa, iniciado pela função main(), como


recomendado na programação estruturada.

A execução segue uma sequência linear: entrada de dados → processamento


→ saída.
9

TESTES DE SENHA 1 (4):

Figura 1 - Teste de senha Python Estruturado 1

Figura 2 - Teste de senha Python Estruturado 2

Figura 3 - Teste de senha Python Estruturado 3


10

Figura de Teste 4 - Teste de senha Python Estruturado 4

2.2 CÓDIGOS EM C ESTRUTURADO

#include
<stdio.h>

#include <stdlib.h>

#include
<time.h>

#include <string.h> #include <ctype.h> void gerarSenha(int

tamanho, int usarMaiusculas, int usarNumeros, int

usarSimbolos, char *senha) { char caracteres[200] =

"abcdefghijklmnopqrstuvwxyz";

if (usarMaiusculas) { strcat(caracteres,

"ABCDEFGHIJKLMNOPQRSTUVWXYZ");

if (usarNumeros) {

strcat(caracteres,

"0123456789");

}
11

if (usarSimbolos) { strcat(caracteres,

"!@#$^&*()-_=+[]{};:,.<>/?");

int len = strlen(caracteres);

for (int i = 0; i < tamanho; i++) {

senha[i] = caracteres[rand() %

len];

senha[tamanho] = '\0'; // fim da string

int lerRespostaSimNao(const char

*mensagem) { char resposta[10];

while (1) { printf("%s", mensagem);

scanf("%9s", resposta); for (int i = 0;

resposta[i]; i++) { resposta[i] =

tolower(resposta[i]);

if (strcmp(resposta, "sim") == 0) {

return
1;

} else if (strcmp(resposta, "nao") == 0 || strcmp(resposta, "não") == 0) {

return 0;

} else { printf("Resposta invalida! Por favor, digite

apenas 'sim' ou 'nao'.\n");

}
12

int lerTamanhoSenha() { char entrada[50];

int valido = 0; int tamanho = 0; while

(!valido) { printf("Digite o tamanho da

senha desejada: "); scanf("%49s",

entrada); valido = 1; for (int i = 0;

entrada[i] != '\0'; i++) { if

(!isdigit((unsigned char)entrada[i])) {

valido = 0; break;

} if (valido) {

tamanho =

atoi(entrada);

if (tamanho <= 0) { printf("Tamanho invalido!

Digite um numero positivo.\n"); valido = 0;

} } else { printf("Entrada invalida! Por favor,

digite apenas numeros.\n");

return tamanho;

int main() { int tamanho; int usarMaiusculas = 0, usarNumeros = 0,

usarSimbolos = 0; char *senha; srand(time(NULL)); printf("===


13

GERADOR DE SENHAS (C - Estruturado) ===\n\n"); tamanho =

lerTamanhoSenha(); usarMaiusculas = lerRespostaSimNao("Incluir letras

maiusculas? (sim/nao): "); usarNumeros = lerRespostaSimNao("Incluir

numeros? (sim/nao): "); usarSimbolos = lerRespostaSimNao("Incluir

simbolos? (sim/nao): "); senha = (char *)malloc((tamanho + 1) *

sizeof(char)); if (senha == NULL) { printf("Erro ao alocar memoria.\n"); return

1;

gerarSenha(tamanho, usarMaiusculas, usarNumeros, usarSimbolos,

senha); printf("\nSenha gerada:\n%s\n", senha);

printf("\n===========================================\n");

free(senha);

return 0;

No código apresentado:

• Modularização por Funções


void gerarSenha (...);
int

lerRespostaSimNao

(...); int

lerTamanhoSenha ();
Isso segue o modelo apresentado no PDF da Aula 05, como nos exemplos de
multiplica() e areaquad() em C, que também usam funções para realizar ações
isoladas.
Torna o código mais organizado, legível e reutilizável, como sugerido na aula.
14

• Controle de Fluxo - Condições


Dentro da função lerRespostaSimNao (), temos: if (strcmp(resposta,

"sim") == 0) {return 1; } else if (strcmp(resposta, "nao") == 0 ||

strcmp(resposta, "não") == 0) {return 0;}

Isso mostra o uso claro de estruturas condicionais, que definem


comportamentos diferentes dependendo da entrada do usuário, um dos pilares
do paradigma estruturado.

• Repetição com While

As funções lerRespostaSimNao() e lerTamanhoSenha() utilizam:

while (1) { ...


} while

(!valido){ ... }
Esses laços garantem que o programa só continue quando o usuário fornecer
dados válidos.
Uso a estrutura de repetição.
• Execução sequencial no main()
int main() {

...

tamanho = tamanho = lerTamanhoSenha();;

usarMaiusculas = lerRespostaSimNao (...);

...

gerarSenha(...);

}
A função main() segue uma sequência lógica de passos, característica essencial
da estrutura sequencial citada na aula: entrada → processamento → saída.
15

TESTE DE SENHAS 2 (8):

Figura 5 - Teste em C Estruturado:

Figura 6 - Teste em C Estruturado:


16

Figura 7 - Teste em C Estruturado:

Figura 8 - Teste em C Estruturado:

2.3 CÓDIGOS EM JAVA ORIENTADO AO OBJETO

import [Link];

import [Link];

public class GeradorSenha {

private int tamanho;


17

private boolean usarMaiusculas;

private boolean usarNumeros;

private boolean usarSimbolos;

public GeradorSenha(int tamanho, boolean usarMaiusculas, boolean

usarNumeros, boolean usarSimbolos) {

[Link] = tamanho;

[Link] = usarMaiusculas;

[Link] = usarNumeros

; [Link] = usarSimbolos;

public String gerar() {

String caracteres =

"abcdefghijklmnopqrstuvwxyz"; if

(usarMaiusculas) {

caracteres += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

if (usarNumeros) {

caracteres += "0123456789";

if (usarSimbolos) { caracteres

+= "!@#$%^&*()-_=+[]{};:,.<>/?";

StringBuilder senha = new StringBuilder();

Random rand = new Random();


18

for (int i = 0; i < tamanho; i++) {

int index = [Link]([Link]());

[Link]([Link](index));

return [Link]();

public static boolean lerRespostaSN(Scanner scanner, String

mensagem) { String resposta; while (true) {

[Link](mensagem);

resposta =

[Link]().trim().toLowerCase(); if

([Link]("sim")) { return true;

} else if ([Link]("nao")) {

return false;

} else {

[Link]("Resposta inválida! Por favor, digite apenas 'sim' ou


'nao'.");

public static void main(String[] args) {

Scanner scanner = new Scanner([Link]);

[Link]("=== GERADOR DE SENHAS (Java - OO) ===\n");

[Link]("Digite o tamanho da senha desejada: "); int tamanho =


19

[Link](); boolean usarMaiusculas = lerRespostaSN(scanner,

"Incluir letras maiúsculas?

(sim/nao): "); boolean usarNumeros = lerRespostaSN(scanner, "Incluir

números? (sim/nao):

");

boolean usarSimbolos = lerRespostaSN(scanner, "Incluir símbolos?


(sim/nao):
");

GeradorSenha gerador = new GeradorSenha(tamanho, usarMaiusculas,


usarNumeros, usarSimbolos);

String senhaGerada = [Link]();

[Link]("\nSenha gerada:");

[Link](senhaGerada);

[Link]("\n=====================================");

[Link]();

No código apresentado:

public class GeradorSenha {

private int tamanho;

private boolean

usarMaiusculas; private

boolean usarNumeros;

private boolean

usarSimbolos;
20

Existe uma classe chamada GeradorSenha, que modela o conceito de um


"gerador de senhas".
A classe tem atributos privados (tamanho, usarMaiusculas, usarNumeros,
usarSimbolos) que representam o estado do objeto, assim como o exemplo da
aula com a classe Pessoa, que tinha nome, sexo, idade, altura.

public GeradorSenha(int tamanho, boolean usarMaiusculas, boolean

usarNumeros, boolean usarSimbolos) { [Link] = tamanho;

[Link] = usarMaiusculas; [Link] = usarNumeros;

[Link] = usarSimbolos;

O construtor da classe permite criar um objeto (instância) com seus próprios


atributos, assim como no exemplo do pdf da aula 7:
Pessoa p1 = new Pessoa("Ana", "F", 20, 1.65);

public String gerar () { ... }


O método gerar() é um comportamento (método) da classe, que encapsula a
lógica de geração de senha.
Isto corresponde aos métodos da classe Pessoa no exemplo da aula: Feliz(),
Triste(), ExibirPessoa(). Cada método define uma ação que o objeto pode
realizar.
GeradorSenha gerador = new GeradorSenha(tamanho, usarMaiusculas,
usarNumeros, usarSimbolos);
String senhaGerada = [Link]();

O programa cria um objeto da classe GeradorSenha (uma instância), como no


exemplo do pdf da aula 7:
Pessoa p1 = new Pessoa("Ana", "F", 20, 1.65);

Em seguida, chama o método do objeto gerar(), que gera a senha.

• Encapsulamento:
A lógica de geração de senha está encapsulada na classe GeradorSenha. Os
dados (atributos) e comportamentos (métodos) ficam juntos, tornando o código
mais organizado e fácil de manter.
21

TESTE DE SENHAS 3 (12):

Figura 9 - Teste em Java Orientado ao Objeto:

Figura 10 - Teste em Java Orientado ao Objeto:

Figura 11 - Teste em Java Orientado ao Objeto:


22

Figura 12 - Teste em Java Orientado ao Objeto:

2.4 CÓDIGOS EM PYTHON ORIENTADO AO OBJETO

import random import string class GeradorSenha: def __init__(self,

tamanho, usar_maiusculas, usar_numeros, usar_simbolos):

[Link] = tamanho

self.usar_maiusculas = usar_maiusculas

self.usar_numeros = usar_numeros

self.usar_simbolos = usar_simbolos def

gerar(self):

caracteres =

string.ascii_lowercase if

self.usar_maiusculas:

caracteres +=

string.ascii_uppercase if

self.usar_numeros:
23

caracteres +=

[Link] if

self.usar_simbolos:

caracteres += [Link] senha =

''.join([Link](caracteres) for _ in range([Link]))

return senha def ler_resposta_sim_nao(pergunta): while True:

resposta =

input(pergunta).strip().lower() if

resposta == "sim":

return True elif resposta ==

"não" or resposta == "nao":

return False else: print("Resposta inválida!

Por favor, digite apenas 'sim' ou 'não'.") def main():

print("=== GERADOR DE SENHAS (Orientado a Objeto) ===\n")

tamanho = int(input("Digite o tamanho da senha desejada: "))

usar_maiusculas = ler_resposta_sim_nao("Incluir letras maiúsculas? (sim/não): ")

usar_numeros = ler_resposta_sim_nao("Incluir números? (sim/não): ")

usar_simbolos = ler_resposta_sim_nao("Incluir símbolos? (sim/não): ")

gerador = GeradorSenha(tamanho, usar_maiusculas, usar_numeros,

usar_simbolos) senha = [Link]() print("\nSenha gerada:")

print(senha)

print("\n===========================================

=") if __name__ == "__main__":


24

main()

No código apresentado:
class GeradorSenha: def __init__(self, tamanho, usar_maiusculas,

usar_numeros, usar_simbolos):

[Link] = tamanho

self.usar_maiusculas = usar_maiusculas

self.usar_numeros = usar_numeros

self.usar_simbolos = usar_simbolos

Temos a definição de uma classe, chamada GeradorSenha.


A classe possui atributos (tamanho, usar_maiusculas, usar_numeros,
usar_simbolos) que representam o estado do objeto.
def
gerar(self):

return senha

O comportamento da classe é definido no método gerar().


Como visto na aula (exemplo da classe Pessoa com métodos Feliz(), Triste(),
ExibirPessoa()), o método gerar() encapsula a lógica para criar a senha.

gerador = GeradorSenha(tamanho, usar_maiusculas, usar_numeros,

usar_simbolos) senha = [Link]()

Aqui o programa cria um objeto do tipo GeradorSenha, ou seja, uma instância


da classe.
O objeto é usado para chamar o método gerar() e produzir uma senha.
25

TESTE DE SENHAS 4 (16):

Figura 13 - Teste em Java Orientado ao Objeto:

Figura 14 - Teste em Java Orientado ao Objeto:

Figura 15 - Teste em Java Orientado ao Objeto:


26

Figura 16 - Teste em Java Orientado ao Objeto:


27

3. CONCLUSÃO

Neste trabalho, entendemos na prática como funcionam dois dos


principais jeitos de programar: o paradigma estruturado e o orientado a objetos.
Pra isso, criamos um gerador de senhas em C, Python e Java, e isso foi
essencial pra enxergar como cada linguagem tem seu próprio estilo e jeito de
organizar o código.

Na programação estruturada, que usamos em C e Python, ficou claro que


o foco está em seguir um passo a passo bem definido: entrada de dados,
processamento e depois a saída. Usamos funções para organizar melhor o
código e deixar tudo mais limpo e reutilizável. Esse tipo de lógica funciona muito
bem em programas mais simples ou quando queremos ter mais controle sobre
a ordem das ações.

Por outro lado, quando partimos para a programação orientada a objetos,


principalmente no Java e também no Python, percebemos uma diferença no
jeito de pensar. Em vez de escrever somente funções soltas, a gente cria
"objetos", que são como mini-programas com suas próprias características (os
atributos) e comportamentos (os métodos). Isso deixa o código mais organizado
e fácil de manter, além de parecer mais com o jeito que vemos as coisas no dia
a dia. Por exemplo, no Java e no Python OO, usamos a classe GeradorSenha,
que representava um "ser" capaz de gerar senhas com diferentes
características.

Além disso, os testes realizados em cada linguagem mostraram que os


programas funcionaram corretamente, gerando senhas diferentes conforme as
escolhas do usuário. Também conseguimos ver como cada linguagem lida com
entrada de dados, estrutura de repetição, condições e tratamento de strings.

Por fim, essa atividade foi importante para nos mostrar que cada
paradigma tem suas vantagens e que o mais importante é saber escolher a
abordagem certa para cada tipo de problema. Programar vai muito além de
digitar comandos, é planejar, organizar e pensar logicamente em como resolver
um desafio da melhor forma possível.
28

5. REFERÊNCIAS BIBLIOGRÁFICAS

[Link]. C library reference. Disponível em: <


[Link] >. Acesso em: 20 jun. 2025.

FERNANDADEV. Poo - Java (Aula 1 - Classes, Objetos, Atributos e Métodos).


YouTube, 2020. 10min14s. Disponível em: <
[Link] >. Acesso em: 17 jun.
2025.

FIGUEREDO, Francisco. EDL - Módulo 02 - Amarração de Nomes (2/5). YouTube,


2020. 29min13s. Disponível em: < [Link] >.
Acesso em: 20 jun. 2025.

HASHTAG, Programação. Como funcionam classes e programação orientada a


objetos em Python - Aprenda em 10 minutos! YouTube, 2022. 11min52s. Disponível
em: < [Link] >. Acesso em: 20 jun. 2025.

ORACLE. Class Random (Java Platform SE 8). Disponível em: <


[Link] >. Acesso em: 22 jun.
2025.

ORACLE. Class StringBuilder (Java Platform SE 8). Disponível em: <


[Link] >. Acesso em:
22 jun. 2025.

PYTHON SOFTWARE FOUNDATION. random — Geração de números


pseudoaleatórios. Disponível em: < [Link]
br/3/library/[Link] >. Acesso em: 20 jun. 2025.

PYTHON SOFTWARE FOUNDATION. string — Operações comuns com texto.


Disponível em: < [Link] >. Acesso em: 20
jun. 2025.

W3SCHOOLS. Java OOP (Object-Oriented Programming). Disponível em: <


[Link] >. Acesso em: 22 jun. 2025.
29

W3SCHOOLS. Python Classes and Objects. Disponível em: <


[Link] >. Acesso em: 20 jun. 2025.

YES+. Aula 04 – Construindo um Programa em C. YouTube, 2020. 12min53s.


Disponível em: < [Link] >. Acesso em:
20 jun. 2025.

Materiais de aulas:

Aula05 - [Link] Aula07 - [Link]

Você também pode gostar