Você está na página 1de 14

UNIVERSIDADE NORTE DO PARANÁ - UNOPAR

TI

PROJETO INTEGRADO

PROJETO INTEGRADO II

Salvador

2023
Salvador

2023
ADRIEL FREITAS DOS SANTOS

SUMÁRIO

1. INTRODUÇÃO...............................................................................................3
TAREFA 1.............................................................................................................3
Tarefa 2:................................................................................................................5
Tarefa 3:................................................................................................................6
Tarefa 4:................................................................................................................8
Tarefa 5:................................................................................................................9
Produção Textual Referente ao Projeto Integrado II do
Curso Superior de Tecnologia em Análise e
2. CONCLUSÃO..............................................................................................11
Desenvolvimento de Sistemas, apresentado como
3. REFERÊNCIAS............................................................................................12
requisito parcial para a obtenção de média semestral na
disciplina de: Projeto Integrado II

Orientador:

Professores Titulares:

 Profª. Tiago Barroso dos Santos

Salvador

2023
Salvador

2023
5

1. INTRODUÇÃO

A Unified Modeling Language (UML), ou Linguagem de Modelagem


Unificada, é uma linguagem visual utilizada para modelar sistemas orientados a
objetos. Um dos principais diagramas da UML é o diagrama de classes, que é
um diagrama estrutural que representa as classes, seus atributos, métodos e
os relacionamentos entre elas.

Os relacionamentos são fundamentais na modelagem de classes, pois


representam como as classes se relacionam e interagem no sistema. Existem
diversos tipos de relacionamentos que podem ser representados no diagrama
de classes da UML, como o encapsulamento, a herança, a agregação e a
composição.

Neste contexto, é importante compreender os diferentes tipos de


relacionamentos presentes no diagrama de classes da UML, suas
características e como eles são representados graficamente. Nesta tarefa,
serão explicados os relacionamentos de encapsulamento, herança, agregação
e composição, com o objetivo de compreender suas funcionalidades e
aplicações na modelagem de sistemas orientados a objetos.

TAREFA 1

Nesse ano de eleições, os candidatos a presidente estão apresentando


seus programas de governo. Um desses programas é sobre a agricultura
familiar. É bem interessante, vamos analisar a sua experiência.

Ele fez uma experiência com 13.500 agricultores e verificou-se que:

• 7.000 plantam arroz;


• 4.100 plantam banana;
• 3.100 plantam uva;
6

• 2.100 plantam arroz e banana;


• 1.400 plantam arroz e uva;
• plantam banana e uva;
• 400 plantam arroz, banana e uva.
Tendo essas informações, vamos responder com a lógica:

a) Quantos plantam pelo menos uma das três espécies?


b)
Podemos somar o número de agricultores que plantam cada uma das três
espécies (arroz, banana e uva) e subtrair o número de agricultores que plantam
mais de uma espécie para evitar duplicidade.

7.000 (arroz) + 4.100 (banana) + 3.100 (uva) - 2.100 (arroz e banana) - 1.400
(arroz e uva) - (banana e uva) - 400 (arroz, banana e uva)

= 14.300 agricultores plantam pelo menos uma das três espécies.

c) Quantos não plantam nenhuma das três espécies?

Podemos subtrair o número de agricultores que plantam pelo menos uma das
três espécies do total de agricultores na experiência.
13.500 (total de agricultores) - 14.300 (agricultores que plantam pelo menos
uma das três espécies)
= -800 agricultores. Como não é possível ter um número negativo de
agricultores, a resposta é que não há agricultores que não plantam nenhuma
das três espécies.

d) Quantos plantam arroz ou banana, mas não plantam uvas?

Podemos somar o número de agricultores que plantam arroz e o número de


agricultores que plantam banana, e subtrair o número de agricultores que
plantam arroz, banana e uva, para evitar duplicidade.

7.000 (arroz) + 4.100 (banana) - 2.100 (arroz e banana) - (banana e uva) - 400
(arroz, banana e uva)
7

= 8.600 agricultores plantam arroz ou banana, mas não plantam uvas.

d) Quantas plantam apenas uvas?

Podemos subtrair o número de agricultores que plantam uvas e outra espécie


(arroz e uva, banana e uva, arroz, banana e uva) do total de agricultores que
plantam uvas.

3.100 (uva) - 1.400 (arroz e uva) - (banana e uva) - 400 (arroz, banana e uva)

= 1.300 agricultores plantam apenas uvas.

Tarefa 2:

O teste de software geralmente faz parte da última etapa na construção de


um programa, visando encontrar defeitos/erros. No entanto, existe uma
prática que faz a inversão, o teste passa a uma das primeiras etapas.
Sobre o desenvolvimento orientado a testes – TDD (Test Driven
Development), explique com suas palavras o funcionamento e as etapas
que estão presentes nesta prática.

O Desenvolvimento Orientado a Testes (TDD), também conhecido como


Test Driven Development, é uma abordagem de desenvolvimento de software
em que os testes são escritos antes do código de produção. É uma prática que
inverte a ordem tradicional de desenvolvimento de software, onde os testes são
geralmente realizados após a implementação do código.

O funcionamento do TDD pode ser resumido em três etapas principais:

Escrever o teste: O desenvolvedor escreve um teste automatizado que


descreve o comportamento desejado do software. O teste é escrito antes do
código de produção e geralmente falha inicialmente, pois o código ainda não foi
implementado.

Implementar o código mínimo necessário: O desenvolvedor implementa o


código de produção mínimo necessário para fazer o teste passar. O objetivo é
8

escrever apenas o suficiente para que o teste passe, sem adicionar


funcionalidades desnecessárias.

Refatorar o código: Após o teste passar, o desenvolvedor pode refatorar o


código para melhorar sua qualidade e legibilidade, mantendo os testes
passando. A refatoração é uma prática importante no TDD, pois ajuda a manter
o código limpo e livre de duplicação.

Essas etapas são repetidas em um ciclo iterativo, conhecido como ciclo


TDD: escrever o teste, implementar o código mínimo necessário e refatorar o
código. Isso permite que o desenvolvedor tenha uma cobertura de testes
abrangente e contínua à medida que o software é desenvolvido, o que pode
ajudar a identificar e corrigir problemas de forma mais rápida e eficaz.

O TDD tem como objetivo principal garantir a qualidade do software,


reduzir a probabilidade de introdução de bugs e melhorar a manutenibilidade
do código. Além disso, o uso de testes automatizados permite que os
desenvolvedores tenham confiança de que as mudanças feitas no código não
introduzem regressões em funcionalidades já existentes. É uma prática
amplamente utilizada em metodologias ágeis de desenvolvimento de software,
como o Scrum e o Extreme Programming (XP).

Tarefa 3:

O Modelo de Entidade-Relacionamentos (MER) foi desenvolvido


para aperfeiçoar o projeto do banco de dados, sendo largamente utilizado
apesar de ter sido elaborado na década 70, continua sendo a principal
técnica para consolidar um banco de dados através do mapeamento dos
dados necessários para refletir as necessidades de requisitos de um
sistema. Indique uma ferramenta CASE que permite a criação de um MER
para um projeto de banco de dados relacional e explique as principais
vantagens desta abordagem, inclusive, explanando sobre o grau de
relacionamento ou de cardinalidade entre as tabelas. Como base de
conhecimento para o desenvolvimento dessa atividade poderá utilizar o
9

livro didático do autor Werlich (2018), unidade 2, seção 2, Modelagem de


Dados.

Uma ferramenta CASE (Computer-Aided Software Engineering)


amplamente utilizada para a criação de Modelos de Entidade-Relacionamento
(MER) é o software "Lucidchart". O Lucidchart é uma ferramenta de
modelagem de dados online que permite aos desenvolvedores criar diagramas
de entidade-relacionamento de forma visual e intuitiva.

As principais vantagens do uso do Lucidchart para criar um MER para


um projeto de banco de dados relacional são:

Facilidade de uso: O Lucidchart possui uma interface de arrastar e


soltar que torna a criação de diagramas de entidade-relacionamento fácil e
intuitiva, mesmo para usuários sem experiência prévia em modelagem de
dados.

Colaboração em tempo real: O Lucidchart permite que várias pessoas


colaborem em um diagrama de MER em tempo real, o que é especialmente útil
para equipes de desenvolvimento de software que precisam trabalhar em
conjunto em um projeto.

Biblioteca de símbolos: O Lucidchart possui uma ampla biblioteca de


símbolos pré-definidos para a criação de diagramas de entidade-
relacionamento, incluindo símbolos para entidades, atributos, relacionamentos,
chaves primárias e estrangeiras, entre outros. Isso torna mais fácil e rápido
criar um MER completo e bem estruturado.

Flexibilidade na definição de cardinalidade: O Lucidchart permite


definir facilmente o grau de relacionamento ou cardinalidade entre as tabelas
em um MER. É possível especificar se um relacionamento é 1:1 (um para um),
1:N (um para muitos) ou N:M (muitos para muitos), bem como adicionar outras
restrições, como cardinalidade mínima e máxima.

Exportação e integração com outras ferramentas: O Lucidchart


permite exportar os diagramas de MER em vários formatos, como PDF,
imagem e até mesmo código SQL. Além disso, o Lucidchart pode ser integrado
10

com outras ferramentas de desenvolvimento de software, como o Jira e o


Confluence, para facilitar a colaboração e a documentação do projeto.

O uso do Lucidchart como ferramenta CASE para a criação de um MER


em um projeto de banco de dados relacional oferece facilidade de uso,
colaboração em tempo real, biblioteca de símbolos, flexibilidade na definição de
cardinalidade e integração com outras ferramentas, tornando o processo de
modelagem de dados mais eficiente e preciso.

Tarefa 4:

Em Algoritmos e Programação Estruturada, temos a busca pela


facilitação da compreensão de programas através do número restrito de
mecanismos de controle da execução de programas. Faça um programa
na linguagem C, utilizando qualquer compilador, em que peça como
entrada, seu nome, endereço e telefone, por fim, exiba esses dados na
tela.

#include <stdio.h>

int main() {
// Variáveis para armazenar os dados do usuário
char nome[100];
char endereco[100];
char telefone[15];

// Solicitar ao usuário para inserir seu nome


printf("Digite seu nome: ");
fgets(nome, sizeof(nome), stdin);

// Solicitar ao usuário para inserir seu endereço


printf("Digite seu endereco: ");
11

fgets(endereco, sizeof(endereco), stdin);

// Solicitar ao usuário para inserir seu telefone


printf("Digite seu telefone: ");
fgets(telefone, sizeof(telefone), stdin);

// Exibir os dados inseridos pelo usuário


printf("\nDados inseridos:\n");
printf("Nome: %s", nome);
printf("Endereco: %s", endereco);
printf("Telefone: %s", telefone);

return 0;
}
Neste programa, utilizamos a função printf para exibir mensagens na tela
e a função fgets para solicitar a entrada do usuário. Os dados inseridos pelo
usuário são armazenados em variáveis do tipo string (char arrays) e, em
seguida, exibidos na tela usando a função printf novamente. Note que usamos
fgets em vez de scanf para evitar problemas de buffer overflow, já que fgets
limita o tamanho da entrada lida para o tamanho máximo do array.

Tarefa 5:

O diagrama de classes da UML é um diagrama estrutural, que tem como


objetivo principal ilustrar graficamente a estrutura do software, em níveis
mais e menos abrangentes. Além disso, o diagrama de classes mostra
como se dá a interligação entre os componentes da estrutura do sistema.
Para compreender o diagrama de classes, é preciso entender os
relacionamentos entre as classes que poderão ser representadas no
diagrama de classes e objetos. Sabendo disso, explique os
relacionamentos listados a seguir:

a) Encapsulamento
12

O encapsulamento é um princípio da programação orientada a objetos


que busca esconder os detalhes internos de uma classe e expor somente o
que é necessário para sua utilização. É representado no diagrama de classes
da UML através do uso de modificadores de acesso, como public, private e
protected, que indicam o nível de visibilidade dos membros (atributos e
métodos) de uma classe. O encapsulamento permite a criação de interfaces
bem definidas e ajuda a proteger a integridade dos dados, garantindo que
sejam acessados e modificados apenas de acordo com as regras
estabelecidas pela classe.

b) Herança

A herança é um mecanismo da programação orientada a objetos que


permite que uma classe herde características (atributos e métodos) de outra
classe. A classe que é herdada é chamada de classe base ou superclasse, e a
classe que herda é chamada de classe derivada ou subclasse. No diagrama de
classes da UML, a herança é representada por uma seta que aponta para a
classe base, indicando que a classe derivada herda suas características. A
herança permite a reutilização de código, facilitando a criação de classes
relacionadas e promovendo a hierarquia e a especialização de classes.

c) Agregação

A agregação é um tipo de relacionamento entre classes em que uma


classe é composta por outras classes, ou seja, uma classe contém objetos de
outras classes como membros, mas a vida útil dos objetos é independente da
vida útil da classe que os contém. A agregação é representada no diagrama de
classes da UML por um losango vazio que aponta para a classe que contém os
objetos. A agregação é uma relação "todo-parte", em que uma classe
representa o todo e as outras classes representam as partes que podem ser
compartilhadas por outros objetos ou classes.
13

d) Composição

A composição é um tipo de relacionamento entre classes em que uma


classe é composta por outras classes, da mesma forma que na agregação. No
entanto, na composição, a vida útil dos objetos é diretamente dependente da
vida útil da classe que os contém, ou seja, quando a classe que contém os
objetos é destruída, os objetos também são destruídos. A composição é
representada no diagrama de classes da UML por um losango preenchido que
aponta para a classe que contém os objetos. A composição é uma relação
"todo-parte" mais forte do que a agregação, em que as partes estão
intimamente ligadas ao todo e não podem ser compartilhadas por outros
objetos ou classes.

2. CONCLUSÃO

Os relacionamentos presentes no diagrama de classes da UML são


fundamentais para representar a interação entre as classes em um sistema
orientado a objetos. O encapsulamento permite ocultar os detalhes internos de
uma classe, protegendo seus atributos e métodos. A herança permite criar
classes especializadas a partir de classes mais genéricas, reutilizando código e
estabelecendo uma hierarquia de classes. A agregação e a composição
permitem representar a relação de todo-parte entre as classes, onde a
agregação é uma relação mais fraca e a composição é uma relação mais forte.

É essencial compreender os conceitos e características de cada tipo de


relacionamento, bem como sua aplicação adequada na modelagem de
sistemas. O uso correto dos relacionamentos no diagrama de classes contribui
para uma representação clara e precisa da estrutura do software, auxiliando na
compreensão e no desenvolvimento do sistema.
14

Portanto, o estudo dos relacionamentos no diagrama de classes da UML


é fundamental para a modelagem de sistemas orientados a objetos, permitindo
uma representação visual clara e estruturada da interação entre as classes. É
uma ferramenta importante para os desenvolvedores compreenderem a
estrutura e o funcionamento do sistema, auxiliando na implementação e
manutenção de software de qualidade.

3. REFERÊNCIAS

FAARRELL, Joyce. Lógica para Desenvolvimento de Programação de


Computadores. Editora Cengage Learning, 2014.
JACOBSON, Ivar. "UML - Guia do Usuário" Editora Campus, 2005.
WERLICH, N. Modelagem de Dados. In: WERLICH, N. (org.). Livro Didático
de Banco de Dados. 1ª edição. Editora X, 2018.

Você também pode gostar