Você está na página 1de 23

CURSO SUPERIOR DE ANÁLISE E DESENVOLVIMENTO DE

SISTEMAS

NOME DO AUTOR: ITALO FILIPE CORDEIRO PUSSI

PROJETO INTEGRADO II

SÃO PAULO
2022

Público
NOME DO AUTOR: ITALO FILIPE CORDEIRO PUSSI

PROJETO INTEGRADO II

Produção Textual Referente ao Projeto Integrado


Interdisciplinar do 2º Semestre do Curso Superior de
Tecnologia em Análise e Desenvolvimento de Sistemas,
apresentado como requisito parcial para a obtenção de
média semestral na disciplina de:
 Projeto Integrado - II

Orientador: Prof. Esp. Tiago Barroso dos Santos


Professores Titulares:
 Prof.ª. Ms. Adriane Aparecida Loper
 Prof. Ms. Wesley Viana Pereira
 Prof.ª. Ms. Vanessa Matias Leite
 Prof. Ms. Marco Ikuro Hisatomi

Público
SUMÁRIO

1 INTRODUÇÃO...................................................................................................3
2 DESENVOLVIMENTO.......................................................................................4
2.1 Lógica computacional.....................................................................................4
2.1.1 A Teoria dos conjuntos...................................................................................5
2.1.2 Diagrama de Venn............................................................................................6
2.1.3 Resolução da situação-problema...................................................................7
2.2 Engenharia de Software..................................................................................9
2.2.1 Tipos de testes automatizados.....................................................................10
2.2.2 As três fases do TDD.....................................................................................11
2.3 Modelagem de Sistemas................................................................................12
2.3.1 ACID: Os 4 pilares de um SGBD...................................................................12
2.3.2 Cardinalidade no banco de dados................................................................13
2.3.3 Ferramentas CASE.........................................................................................13
2.4 Algoritmos e Programação Estruturada......................................................14
2.5 Análise e Modelagem de Sistemas...............................................................16
2.5.1 Programação orientada a objetos (POO).....................................................17
2.5.2 Encapsulamento.............................................................................................17
2.5.3 Herança............................................................................................................18
2.5.4 Agregação vs Composição...........................................................................18
3 CONCLUSÃO..................................................................................................20
4 REFERÊNCIAS BIBLIOGRÁFICAS...............................................................21

Público
3

1 INTRODUÇÃO

A World Wide Web (www) ou rede mundial de computadores surgiu no início


da década de 1990, criada pelo visionário Tim Berners-Lee. Em seu surgimento as
conhecidas páginas WEB eram estáticas e sem um design apurado: O usuário
somente conseguia ler o conteúdo pré-inserido e não havia possibilidade de
iteração.
Através da criação do Facebook, em 2004, começa o período conhecido
como WEB 2.0. Nele surgem as páginas dinâmicas, facilmente alteráveis e
customizáveis pelo usuário: Streaming, posts, likes, comentários... A lista de
funcionalidades é quase infinita. Porém, um dos problemas existentes é o uso de
dados sensíveis e a privacidade dos seus utilizadores.
A Web 3.0, porém é uma promessa que planeja mudar essa perspectiva:
Com tecnologias revolucionárias como a Blockchain, há uma expectativa que o
controle dos dados venha para a mão dos próprios usuários: Ele decidirá onde,
como e se compartilhará suas informações, além de ter o controle de anúncios e
propagandas direcionadas.
Todas essas mudanças refletem sobre o aspecto tecnológico da internet e do
desenvolvimento, mas se olharmos para as pessoas, o que um profissional
desenvolvedor deverá conhecer para fazer parte dessa realidade?
De uma forma macro, é isso que esse trabalho acadêmico buscará responder
ao longo do seu desenvolvimento: Entenderemos as bases tecnológicas que o
profissional desenvolvedor deve ter, através da resolução de situações-problemas
pré-definidas, isso para ele para ele continuar atuando no mercado de uma forma
eficiente e acompanhando as tendências e requerimentos do desenvolvedor do
futuro.

Público
4

2 DESENVOLVIMENTO

A primeira situação abordada no desenvolvimento desse trabalho é no âmbito


da disciplina “Lógica Computacional”, ministrada pela professora mestre Adriane
Loper. Nela estudaremos os princípios de interação de conjuntos no mundo real,
com um exemplo direcionado a agricultura.
Já na disciplina “Engenharia de Software”, ministrada pela professora mestre
Vanessa Leite, iremos abordar o estudo da técnica de desenvolvimento TDD (Test
Driven Development) e suas vantagens de utilização no mundo contemporâneo.
Sobre “Modelagem de dados” ministrada pelo mestre Marco Hisatomi, será
explicada a utilização do Modelo de Entidade-Relacionamentos (MER) através da
utilização de uma ferramenta CASE.
Em “Algoritmos e Programação Estruturada”, faremos um exemplo na prática
de uma aplicação simples, desenvolvida na linguagem C. Onde deverão ser
coletados alguns dados do usuário e em seguida esses dados devem ser exibidos
na tela.
Por fim, na “Análise e Modelagem de Sistemas”, também ministrada pela
Vanessa Leite, aprofundaremos nos conceitos de Classes existentes no modelo de
programação orientado a objetos, explicando alguns de seus conceitos como
encapsulamento, polimorfismo, herança, composição etc.

2.1 LÓGICA COMPUTACIONAL

A matemática, mesmo que de forma invisível, faz parte do nosso cotidiano em


praticamente todas as situações e vivências que experienciamos ao longo da vida.
Um dos seus princípios mais utilizados é a análise lógica e a iteração de conjuntos
ou listas com nossas tarefas cotidianas.
Para entendimento de conjuntos matemáticos, imaginemos a seguinte
situação-problema: Para um grupo de 13.500 agricultores verificou-se que:
• 7.000 plantam arroz;
• 4.100 plantam banana;
• 3.100 plantam uva;
• 2.100 plantam arroz e banana;
• 1.400 plantam arroz e uva;

Público
5

• 1000 plantam banana e uva;


• 400 plantam arroz, banana e uva.
Como podemos, através da lógica, chegarmos a uma conclusão que nos
informe visualmente as particularidades desse cenário? Por exemplo: Quantas
pessoas plantam, ao menos uma das três espécies?

2.1.1 A TEORIA DOS CONJUNTOS

Na Álgebra, um conjunto é uma lista ordenada de elementos similares:


Conjunto de números pares, Conjunto de números ímpares, Conjunto de vogais,
consoantes, animais. A lista de possibilidades é extensa e praticamente infinita.
Assim como uma expressão matemática, o conjunto possuía operações
próprias que regem o entrosamento e a interação entre conjuntos de elementos
distintos. Por exemplo: Podemos combinar o conjunto de números inteiros pares e o
conjunto de números inteiros ímpares em um só conjunto e com essa junção
teríamos simplesmente o conjunto de números inteiros.
Com base na tabela abaixo, vejamos as principais funções matemáticas que
podem ser utilizadas na Teoria dos Conjuntos:
TABELA 1 – Principais operações com conjuntos
Símbolo Expressão Descrição
∈ x∈A Indica que o elemento x faz parte do conjunto A.
∉ x∈A Indica que o elemento x não faz parte do conjunto A.
⊂ A⊂B Todos os elementos do conjunto A fazem parte do conjunto
B.
∪ A∪B=C Representa a junção de dois conjuntos distintos, nesse
caso A e B. O resultado é um conjunto único (C) com os
elementos de ambos os subconjuntos.
∩ A∩B=C Representa a criação de um conjunto C somente com os
elementos que existirem simultaneamente nos
subconjuntos A e B.
– A–B=C Representa a diferença entre os conjuntos A e B. Nesse
caso, o conjunto resultante será os elementos de B cujo
não existirem em A.

Público
6

Fonte: Tabela criada pelo autor

2.1.2 DIAGRAMA DE VENN

John Venn (1834-1923) foi um matemático britânico responsável por diversas


contribuições matemáticas ao mundo moderno, sendo mais conhecido pela criação
de um modelo visual para representação de conjuntos numéricos no século XIX,
modelo esse que foi popularizado com seu nome e hoje é chamado de Diagrama de
Venn.
Esse modelo busca representar a interação de conjuntos distintos em um
plano visual, através da utilização de formas geométricas simples e suas
intersecções como o círculo e o retângulo.

FIGURA 1 – Exemplo do Diagrama de Venn

Fonte: Beduka (2020)


No exemplo acima, podemos notar a representação de dois conjuntos A e B
pertencentes a um mesmo universo. Analisando a imagem, podemos chegar nas
seguintes conclusões:
 Universo: Representa o total de elementos envolvidos na situação, nesse
caso, 8.
 Círculo rosa: Representa os elementos totais do conjunto A
 Círculo azul: Representa os elementos totais do conjunto B

Público
7

 Intersecção entre círculo azul e rosa: Representa o resultado da


expressão A ∩ B.
 Complementar: Embora ausente nessa imagem, seria o número
representado no retângulo, fora dos círculos, que representaria os
elementos cujo não fazem parte de nenhum dos conjuntos.

2.1.3 RESOLUÇÃO DA SITUAÇÃO-PROBLEMA

Voltemos ao início desse subcapítulo para resolução da situação-problema


proposta. Utilizando a abordagem visual do diagrama de Venn, começamos
colocando a quantidade de agricultores totais no universo e a quantidade de
agricultores que plantam os três tipos de plantação.
FIGURA 2 – Representação do Diagrama de Venn

Fonte: Elaborado pelo autor


Para o próximo preenchimento, devemos focar nos campos B, D e E onde
serão colocados os valores de intersecção entre duas plantações distintas. Um
detalhe lógico importante é que esse valor é o resultado entre a subtração da
quantidade de pessoas que plantam as duas plantações e a quantidade de pessoas
que plantam as três plantações. Por exemplo: O resultado de B é 1700, pois é o
resultado da subtração de 2100 (pessoas que plantam banana e Arroz) menos 400
(pessoas que plantam as três plantações).

Público
8

FIGURA 3 – Representação do Diagrama de Venn

Fonte: Elaborado pelo autor


Agora repetiremos o mesmo processo para A, C e F. Dessa vez subtraindo
tanto os valores de quem planta as três plantações quanto quem planta apenas
duas.
FIGURA 4 – Representação do Diagrama de Venn

Fonte: Elaborado pelo autor

Público
9

Por fim, basta realizamos a soma de todos os valores representados dentro


do círculo e subtraímos do conjunto universo. Assim teremos o complementar G
desse caso de uso.
FIGURA 5 – Representação do Diagrama de Venn

Fonte: Elaborado pelo autor


Pois bem, agora a representação visual desse caso está finalizada e
podemos responder logicamente quaisquer dúvidas que tivemos sobre essa
situação-problema. Por exemplo:
 Quantos plantam ao menos uma das três espécies? É o resultado da
soma dos valores existentes nos círculos, ou seja, 10100.
 Quantos não plantam nenhuma das três espécies? É o complementar
do gráfico, cujo resultado é 3400 agricultores.
 Quantos plantam arroz ou banana mas não plantam uvas? É a soma
dos que plantam arroz, banana e arroz & banana, logo 7000.
 Quantos plantam apenas uva? 1100 agricultores.

2.2 ENGENHARIA DE SOFTWARE

A maior dor de cabeça para um desenvolvedor é a manutenção de uma


aplicação legada: Basicamente esse tipo de aplicação geralmente se encontra há
anos na estrutura corporativa, é desenvolvida em uma linguagem de pouca
relevância atual, está integrada com diversos sistemas e aplicações da companhia

Público
10

além de ser de extrema importância para o funcionamento core da empresa.


Uma das áreas de desenvolvimento que se potencializou ainda mais com a
criação do “Manifesto Ágil” foi a “Engenharia e Qualidade de Software” que busca,
entre outras coisas, garantir que os softwares sejam sustentáveis e sigam princípios
que facilitem sua usabilidade, confidencialidade, funcionalidade e manutenibilidade,
evitando assim a criação de aplicações que no futuro possam ser consideradas
“legado” pela empresa.
Um dos métodos de desenvolvimento mais utilizado para esse fim é o TDD
(Test Driven Development ou Desenvolvimento Orientado a Testes), nele é realçado
a importância de criação de testes automatizados e essa funcionalidade se torna a
base para todo o desenvolvimento da aplicação.
Um teste automatizado busca analisar o funcionamento do código com base
em diversas situações distintas, validando o comportamento e resultado do
processamento de diversos inputs previstos e não-previstos garantindo que o output
esteja de acordo com o esperado.

2.2.1 TIPOS DE TESTES AUTOMATIZADOS

O teste automatizado mais importante e ao mesmo tempo o mais básico de


ser implementado é o teste unitário. Nele, é validado a eficiência de código e
funcionamento de um pedaço de código mínimo da aplicação, sem iteração com
outras funcionalidades. Geralmente utilizado para análise de procedimentos e
funções simples. Um exemplo seria a função responsável pela soma em uma
calculadora ou a função atualizar de um banco de dados.
Já o teste de integração analisa o funcionamento em conjunto de duas ou
mais funcionalidades, validando se o comportamento final segue o resultado
esperado. Por exemplo, a iteração de microsserviços distintos.
O teste funcional, por outro lado, valida os requisitos de negócio solicitados
para a aplicação e se o funcionamento desse requisito está de acordo com as regras
estabelecidas. Para um sistema acadêmico, poderia ser a capacidade de realização
de prova por parte de um aluno ou a funcionalidade do boletim.
O último teste cujo é válido mencionar nesse artigo acadêmico é o teste
ponta-a-ponta. Nele a aplicação é analisada de forma completa sob a perspectiva do
usuário final. Garantindo o pleno funcionamento de todas as funcionalidades

Público
11

unitárias, suas integrações e os requisitos de negócio do sistema.

2.2.2 AS TRÊS FASES DO TDD

FIGURA 6 – Representação do Processo de TDD

Fonte: TreinaWEB (2019)


A primeira fase do Desenvolvimento Orientado a Testes é conhecida como
fase red / vermelha. Nela, o objetivo é que o desenvolvedor crie os testes baseando
na funcionalidade que será desenvolvida posteriormente. O objetivo principal é
garantir que ao término do ciclo, aquele teste execute com sucesso validando a
funcionalidade criada para a aplicação. É válido notar que sempre o teste irá falhar
nessa fase vide que não há nenhum código desenvolvido nesse momento.
Na fase green / verde, é realizado o desenvolvimento de código da
funcionalidade escolhida buscando que todos os testes criados no passo anterior
sejam concluídos com sucesso. Toda nova função criada que não esteja mapeada,
deve primeiramente ser escrita como teste e depois desenvolvida em código.
Já a última fase, chamada de refactor / refatoração é responsável pela
manutenibilidade do código, enxugando e melhorando as funcionalidades
desenvolvidas anteriormente concomitantemente mantendo a excelência e validade
dos testes criados.

Público
12

2.3 MODELAGEM DE SISTEMAS

Tema recorrente nessa produção textual, a organização e planejamento são


alguns dos pontos essenciais de um desenvolvedor moderno. Não há mais espaço
no mercado de trabalho para desenvolvedores singulares cujo não saibam
desenvolver em equipe e não tenham uma organização básica para seu projeto.
Uma das áreas de TI cujo esse mindset é extremamente utilizado é a criação
e manutenção de banco de dados. Devido ao alto volume de informações
armazenadas ali, a estrutura de um SGBD (Sistema Gerenciador de Banco de
Dados) deve ser robusta, eficaz e eficiente garantindo a operação constante com o
mínimo número de problemas possíveis.

2.3.1 ACID: OS 4 PILARES DE UM SGBD

FIGURA 7 – Representação da sigla ACID

Fonte: BeTrybe (2021)


ACID é a sigla utilizada para denominar os 4 pilares principais para gestão de
um banco de dados: Atomicidade, Consistência, Isolamento e Durabilidade.
Atomicidade é o pilar responsável por garantir a qualidade e acuracidade dos
dados armazenados no banco de dados. Ele garante que todas as transações
efetuadas no banco tenham seu status definido pelo todo. Ou seja, a transação será
completamente com sucesso ou totalmente com falha, pois caso ocorra um erro no
meio de uma transação, ela deve sofrer um rollback, deixando o ambiente como ele
estava.
Similar em conceito mas diferente na prática, a consistência é o pilar

Público
13

responsável por garantir a integridade da informação armazenada de acordo com os


padrões pré-estabelecidos. Caso algum dos requisitos não sejam validados com
sucesso, ele impede a transação de ser realizada e realiza seu rollback.
O Isolamento, por outro lado, impede que transações simultâneas interfiram
no resultado uma das outras. Cada uma das transações é feita de forma isolada,
garantindo que o dado sempre esteja puro.
Por fim a durabilidade é o aspecto principal de um SGBD, ele garante que
após armazenada, a informação permaneça acessível e sempre consistente com as
informações armazenadas.

2.3.2 CARDINALIDADE NO BANCO DE DADOS

A cardinalidade em um banco de dados é responsável por indicar o


funcionamento e relação de duas ou mais tabelas distintas. Com ela, entendemos
como as informações se relacionam e como devemos interagir com elas.
Os principais tipos de cardinalidade são:
 Um-Para-Muitos (1:N): Indica que um registro de uma tabela se
relaciona com um número indeterminado de registros de outra. Por
exemplo: Imagine um SGBD de uma escola onde tenhamos as tabelas
professor e disciplina. Nesse caso um professor pode lecionar uma ou
mais disciplinas, constituindo um relacionamento Um-Para-Muitos (1:N).
 Um-Para-Um (1:1): Um registro da tabela A se relaciona somente com
um registro da tabela B. No caso duas tabelas, pessoas e CPF, uma
única pessoa se relaciona com um único CPF e vice-versa.
 Muitos-Para-Muitos (N:N): Indica que vários registros da tabela A se
relacionam com vários outros registros da tabela B. Voltando ao ambiente
acadêmico, podemos se basear em alunos e cursos. Um aluno pode se
inscrever em vários cursos e um curso pode ter vários alunos.

2.3.3 FERRAMENTAS CASE

Segundo o Ministério da Saúde: “Uma ferramenta CASE (do inglês Computer-


Aided Software Engineering) é uma classificação que abrange toda ferramenta
baseada em computadores que auxilia atividades de engenharia de software, desde

Público
14

análise de requisitos e modelagem até programação e testes.”. Ou seja, é uma


ferramenta responsável por prover a realização de uma estruturação lógica e
planejamento de um sistema tecnológico, inclusive para SGBDs.
Uma das ferramentas mais famosas para esse fim é o LucidChart. Com ele
podemos criar e estruturar todo o nosso banco de dados, buscando eliminar
duplicidades e garantindo a integridade de nosso sistema.

2.4 ALGORITMOS E PROGRAMAÇÃO ESTRUTURADA

Um dos requisitos funcionais mais requisitados no desenvolvimento de


sistemas é a iteração com o usuário: desde a aplicação reagir a um clique até a
coleta de informações através de um formulário ou até mesmo a exibição de um
campo customizado. Tudo isso pode ser considerado uma iteração.
O desenvolvedor moderno deve ser capaz de fazer isso com maestria,
lidando com os diferentes tipos de dados e tratando as diversas possibilidades de
informações que podem ser passadas pelo usuário: Afinal, a lista de possibilidades é
quase imensa e por princípios de segurança devemos regular o máximo os valores
permitidos e realizar a sanitização de qualquer dado provindo do usuário.
Para essa situação-problema, deve ser criado um programa em C, capaz de
realizar a coleta de três informações passadas pelo usuário: Seu nome, endereço e
telefone. Após a iteração, é preciso exibir na tela as informações coletadas.
Veja na imagem abaixo, o código desenvolvido pelo autor para lidar com essa
situação:

Público
15

FIGURA 8 – Código Desenvolvido em C

Fonte: Código criado pelo autor

Apesar de se tratar de um código relativamente simples, é válido


mencionarmos a utilização de algumas funções e técnicas de programação
específicas para melhor aproveitamento do programa.

Público
16

O primeiro destaque, se encontra na linha 8 da imagem, com a utilização da


função “setlocale”. Ela é utilizada para aplicação ser capaz de lidar com caracteres
especiais inerentes ao sistema do usuário do programa, por exemplo, a exibição do
caractere “ç” utilizado na língua Portuguesa.
Outro ponto a ser mencionado é a utilização da função “fgets” em parceria
com a “fflush” ao longo do programa. Elas servem para limitar a quantidade de
caracteres digitadas pelo usuário e prevenir a exploração de vulnerabilidades de
segurança, como o Buffer Overflow.
Para finalizarmos, vejamos abaixo o resultado da compilação do programa e
inserção das informações pelo usuário:
FIGURA 9 – Execução do Código Compilado

Fonte: Autor

2.5 ANÁLISE E MODELAGEM DE SISTEMAS

Uma das qualidades mais importantes de um programador ou desenvolvedor


de sistemas é sua capacidade de abstrair e representar conceitos do mundo real no
ambiente virtual. Por exemplo: Como representar programaticamente a vasta fauna
e flora existentes na humanidade? Como diferenciar um elefante e uma zebra no
código de forma eficiente? Reaproveitando as características intrínsecas que ambos
os animais possuem por estar no grupo mamífero, ao mesmo tempo ressaltando
suas amplas diferenças e particularidades?

Público
17

2.5.1 PROGRAMAÇÃO ORIENTADA A OBJETOS (POO)

A programação orientada a objetos é um paradigma de programação que


busca resolver a situação relatada acima. Com ela, temos a representação de
objetos específicos através da utilização de abstrações, também chamadas de
classes. Nesse caso a classe representa um esqueleto, ou molde, cujo relata os
atributos e métodos de um objeto em sua forma genérica.
O atributo é uma característica: se falarmos de uma pessoa, poderia ser
nome, data de nascimento ou sexualidade. Para um carro, falaríamos da capacidade
do tanque do combustível ou se ele é elétrico. O importante é entendermos que
quaisquer características distintas de um objeto podem ser representadas em uma
classe.
Já o método retrata das ações a serem realizadas pelos objetos daquela
classe: Usando novamente o exemplo de um ser humano, poderíamos dizer que
alguns dos seus métodos são comer, andar, ou dormir. Para um carro, seria
acelerar, parar ou habilitar o ar-condicionado.
Um bom programador entende bem esses conceitos e é capaz de extrair as
características de um objeto e representá-lo através de uma classe. Além disso é
capaz de entender conceitos e propriedades especificas desse paradigma e utilizá-lo
com eficiência.

2.5.2 ENCAPSULAMENTO

Encapsulamento é um dos principais conceitos do paradigma POO.


Basicamente, ele é utilizado para garantir princípios de segurança e privacidade
preservando os atributos e métodos privados de determinado objeto.
Imagine a seguinte situação: Geralmente em um cartão bancário, possuímos
de forma impressa atributos utilizados para representar o signatário ou conta
atrelada ao mesmo. Nome, data de expiração, número da agência e conta são
apenas alguns dos valores mais comuns a serem encontrados. Agora, o que
aconteceria se a senha daquele cartão também estivesse impressa diretamente no
mesmo? Onde qualquer pessoa com acesso, conseguiria utilizá-lo.
Pois é, apesar de ser um exemplo fictício, serve para ilustrar na pratica a
utilização do encapsulamento: Com ele, os atributos de uma classe podem ser

Público
18

categorizados principalmente como público ou privado.


O atributo público, pode ser acessado por quaisquer classes, objetos ou
funções externas enquanto o atributo privado só pode ser acessado dentro da
própria classe. Uma vez inicializado, ele não pode ser lido novamente de forma
externa, somente alterado.

2.5.3 HERANÇA

Voltando ao exemplo da girafa e elefante, pense se para cada elemento


similar tivermos que criar classes distintas completamente do zero? O quanto nosso
código ficaria poluído se tivéssemos que criar uma classe para cada tipo de animal
que quiséssemos representar em nossa aplicação.
Para isso, utilizamos o conceito de herança. Com ele podemos criar
subclasses através de uma classe mãe e reaproveitar todos os seus atributos e
métodos, além de customizá-los para uma subclasse específica, se necessário.
Tecnicamente um elefante poderia ser herdeiro da classe mamífera e a
classe mamífera herdar da classe animal, assim para representar a girafa não
precisaríamos reescrever novamente todos os atributos compartilhados, bastaria
criarmos uma classe que também herdasse da classe mamífera.
FIGURA 10 – Exemplo de herança

Fonte: UFCG (2011)

2.5.4 AGREGAÇÃO VS COMPOSIÇÃO

A agregação é uma funcionalidade especial do POO para lidarmos com a

Público
19

interação de classes distintas em um mesmo contexto. Podemos utilizar o exemplo


de um carrinho de compras: Enquanto ele é uma classe por si só, cada produto
existente nesse carrinho também pode ser representado através de uma classe.
Nisso, apesar de serem classes independentes e funcionalmente distintas, no
sistema final, suas funcionalidades são cruzadas e para o funcionamento final elas
são agregadas em um só TODO. Cabe salientar que nesse caso, as classes existem
também de forma independente, um carrinho pode estar vazio e um produto pode
existir sem estar em um carrinho.
Por outro lado, apesar de funcionalmente similar, a composição trabalha com
uma relação mais estrita: Um objeto apesar de ser representado através de uma
classe isolada, não pode existir por si próprio e deve estar atrelado a uma única
outra classe. Podemos citar as edições de uma revista como exemplo: Elas existem
de forma isolada mas sempre fazem parte de uma revista, nunca existem de forma
isolada.

Público
20

3 CONCLUSÃO

Conforme vimos ao longo do desenvolvimento desse estudo, o desenvolvedor


moderno passou por longas mudanças ao longo dos anos e hoje deve ser capaz de
realizar diversos feitos aquém código.
A primeira característica que esse profissional deve ter é um profundo
conhecimento de ambas as lógicas: A lógica (no seu contexto puro) e a lógica de
programação. Com essas áreas desenvolvidas plenamente em seu cérebro, ele é
capaz de trabalhar em um conceito tático, entendendo as diretrizes de programação
de uma forma ampla e conseguindo utilizar esses contextos de forma micro em uma
linguagem específica. Esse profissional é capaz de desenvolver em várias
linguagens de programação distinta pois seu conhecimento está no macro.
Além disso, ele é capaz de trabalhar com tendências de programação
moderna como desenvolvimento ágil, TDD, POO. Compreendendo os benefícios
dessas metodologias e as utilizando em seu cotidiano de acordo com a
necessidade.
Por fim, ele é um multidisciplinar e sabe trabalhar em grupos, criando e
planejando documentações em conjunto além de entender um pouco sobre cada
parte do ciclo de desenvolvimento de software.

Público
21

4 REFERÊNCIAS BIBLIOGRÁFICAS

“Os conceitos de WEB 1.0, 2.0 e 3.0”. Fapcom, 29 de maio de 2014. Disponível em:
< https://www.fapcom.edu.br/blog/os-conceitos-de-web-1-0-2-0-e-3-0.html>. Acesso
em: 08 de out. de 2022.
GOUVEIA, Rosimar. “Teoria dos Conjuntos”. Toda Matéria, [S.D]. Disponível em: <
https://www.todamateria.com.br/teoria-dos-conjuntos/>. Acesso em: 14 de out. de
2022.
OLIVEIRA, Raul. “Teoria dos Conjuntos”. Mundo Educação, [S.D]. Disponível em: <
https://mundoeducacao.uol.com.br/matematica/teoria-dos-conjuntos.htm>. Acesso
em: 14 de out. de 2022.
LUIZ, Robson. “Operações com conjuntos”. Brasil Escola, [S.D]. Disponível em: <
https://brasilescola.uol.com.br/matematica/operacoes-com-conjuntos.htm>. Acesso
em: 14 de out. de 2022.
“John Venn”. Só Matemática, [S.D]. Disponível em: <
https://www.somatematica.com.br/biograf/venn.php>. Acesso em: 14 de out. de
2022.
“Diagrama de Venn”. Beduka, 01 de set. de 2020. Disponível em: <
https://beduka.com/blog/materias/matematica/diagrama-de-venn/>. Acesso em: 14
de out. de 2022.
HENRIQUE, João. “Programação orientada a objetos e programação estruturada”.
Alura, 11 de maio de 2022. Disponível em: <https://www.alura.com.br/artigos/poo-
programacao-orientada-a-objetos>. Acesso em: 15 de out. de 2022.
“Os 4 pilares da programação orientada a objetos”. DevMedia, [S.D]. Disponível em:
<https://www.devmedia.com.br/os-4-pilares-da-programacao-orientada-a-objetos/
9264>. Acesso em: 15 de out. de 2022.
MELO, Izabela. “Herança vs Composição”. UFCG, [S.D]. Disponível em: <
http://www.dsc.ufcg.edu.br/~pet/jornal/junho2011/materias/recapitulando.html>.
Acesso em: 15 de out. de 2022.
MORAES, Marcos. “Associação, agregação e composição”. Centro Paula Souza,
[S.D]. Disponível em: <http://www.cpscetec.com.br/adistancia/poo_php/aula5.html>.
Acesso em: 15 de out. de 2022.
BRANDON, John. “Aplicações legadas, um problema difícil de lidar”. ItFórum, 01 de
ago. de 2011. Disponível em: <https://itforum.com.br/noticias/aplicacoes-legadas-

Público
22

um-problema-dificil-de-lidar/>. Acesso em: 28 de out. de 2022.


“Qualidade de Software - Engenharia de Software 29”. DevMedia, [S.D]. Disponível
em: <https://www.devmedia.com.br/qualidade-de-software-engenharia-de-software-
29/18209>. Acesso em: 28 de out. de 2022.
PITTET, Sten. “Diferentes tipos de testes de software”. Atlassian, [S.D]. Disponível
em: <https://www.atlassian.com/br/continuous-delivery/software-testing/types-of-
software-testing>. Acesso em 28 de out. de 2022.
GUEDES, Marylene. “Afinal, o que é TDD?”. TreinaWEB, [S.D]. Disponível em:
<https://www.treinaweb.com.br/blog/afinal-o-que-e-tdd>. Acesso em 28 de out. de
2022.
MARCHIORI, Lucas. "O que é ACID e porque usar em Bancos de Dados?".
BeTrybe, 10 de set. de 2021. Disponível em: <
https://blog.betrybe.com/tecnologia/acid-porque-usar/>. Acesso em: 29 de out. de
2022.
“Ferramenta CASE”. DataSUS, 08 de ago. de 2019. Disponível em: <
https://datasus.saude.gov.br/glossario/ferramenta-case/>. Acesso em: 29 de out. de
2022.

Público

Você também pode gostar