Escolar Documentos
Profissional Documentos
Cultura Documentos
Engenharia
de Software
Wagner Sanchez
Wagner Sanchez
Código Logístico Fundação Biblioteca Nacional
ISBN 978-65-5821-067-2
I0 0 0 3 5 8 9 786558 210672
Engenharia de
Software
Wagner Sanchez
IESDE BRASIL
2021
© 2021 – IESDE BRASIL S/A.
É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização por escrito do autor e do
detentor dos direitos autorais.
Projeto de capa: IESDE BRASIL S/A. Imagem da capa: garagestock/shutterstock
Sanchez, Wagner
Engenharia de software / Wagner Sanchez. - 1. ed. - Curitiba [PR] :
Iesde, 2021.
106 p. : il.
Inclui bibliografia
ISBN 978-65-5821-067-2
3 Orientação a objetos 51
3.1 Orientação a objetos 53
3.2 Classes e objetos 53
3.3 Abstração 56
3.4 Encapsulamento 57
3.5 Polimorfismo 60
3.6 Herança 61
10 Engenharia de Software
O sistema operacional permite que o computador execute funções
básicas, fornecendo uma interface para que os usuários interajam com
ele e uma plataforma na qual os aplicativos sejam executados. O sistema
“abstrai” muitas tarefas comuns para aplicativos a fim de minimizar a re-
dundância. Por exemplo, oferece impressão como um serviço para aplica-
tivos, de modo que cada programa não precisa ter sua própria maneira de
enviar arquivos para a impressora.
bsd/shutterstock
escrito por humanos em forma de código de máquina
de nível inferior que pode ser interpretado diretamen-
te pelo hardware do computador. A existência de
compiladores torna prático criar um software extre-
bsd/shutterstock mamente sofisticado.
12 Engenharia de Software
O computador surgiu essencialmente como uma ferramenta de
trabalho. Era utilizado por bancos, instituições financeiras, governos,
exércitos e cientistas para a execução, em tempo hábil, de cálculos en-
volvendo uma grande quantidade de valores ou operações. Porém, na
década de 1970, como veremos mais adiante, essas máquinas passa-
ram a ser adquiridas por pessoas não ligadas a essas áreas para, além
do trabalho, serem usadas para diversão, aprendizagem, comunicação
e muitas outras coisas (VELLOSO, 2014).
Babich Alexander/Shutterstock
A Pascaline, como foi apelidada, consistia em seis engrenagens,
cada uma com a gravação dos algarismos de 0 a 9, sendo possí-
vel somar até três parcelas por vez considerando que o total não
ultrapassasse 999.999. Por exemplo, uma multiplicação de 30 por 10
era feita somando 10 vezes o número 30 (VELLOSO, 2014).
Pascal recebeu do rei da França uma patente para que pudesse ven-
der a sua máquina no comércio. Ela teve uma vida útil de aproximada-
mente 200 anos (sem muitas “atualizações”); hoje um computador é
considerado “atual” por apenas seis meses!
14 Engenharia de Software
As máquinas registradoras tornaram as operações matemáticas mui-
to mais seguras, porém ainda tinham vários pontos fracos, como a en-
trada de valores que, além de lenta, estava sujeita a erros de digitação.
16 Engenharia de Software
Tudo isso foi descrito originalmente em 1837, mais de um século
antes que qualquer outro equipamento do gênero tivesse sido cons-
truído com sucesso.
18 Engenharia de Software
Os computadores dessa geração eram muito menores que os
valvulados, não exigiam preaquecimento, consumiam menos ener-
gia, esquentavam menos, duravam mais e eram mais rápidos e
mais confiáveis.
Rama & M
usée Bolo
/Wikimed
ia Common
s
Apple II
20 Engenharia de Software
Commons
Boffy b/Wikimedia
IBM 5150
22 Engenharia de Software
• documentar de modo que qualquer parte interessada possa en-
tender (todos os detalhes devem ser escritos);
• adaptar as alterações sugeridas e/ou necessárias no tempo e no
custo adequados;
• atender às necessidades do cliente;
• dar suporte ao desenvolvimento de softwares de acordo com as
mudanças tecnológicas.
1
Coleta de
requisitos
5 2
Análise de
Implantação
sistema
4 3
Teste Codificação
24 Engenharia de Software
O desenvolvedor, então, decide um roteiro de seu plano, que in-
clui o estabelecimento das limitações e abrangências do software. De
acordo com o requisito e a análise, é feito um projeto de software. A
implementação do design de software começa com a escrita do código
do programa em uma linguagem de programação adequada.
26 Engenharia de Software
• Refinamento: remove as impurezas, ou seja, refina algo para re-
mover quaisquer impurezas presentes e aumentar a qualidade.
O conceito de refinamento de projeto de software é, na verdade,
um processo de desenvolver ou apresentar o software ou o siste-
ma de modo detalhado. O refinamento é muito necessário para
descobrir qualquer erro, se houver, e reduzi-lo.
• Padrão: reaproveitamento de códigos. É uma forma ou um dese-
Livro
nho repetido várias vezes para formar um padrão. Este refere-se
Com oito edições e mais de
à repetição de uma solução para um problema recorrente e co- 30 anos no topo dos livros
mum dentro de certo contexto. mais vendidos e recomen-
dados da engenharia de
• Ocultar informações: dados desnecessários não precisam software, a obra Engenharia
aparecer, isto é, significa ocultar as informações para que não de software: uma aborda-
gem profissional precisa
possam ser acessadas por uma parte indesejada. No projeto de estar na cabeceira de
software, a ocultação de informações é obtida projetando-se os todos os desenvolvedores,
engenheiros, programa-
módulos de modo que as informações coletadas ou contidas dores e profissionais de
neles sejam ocultadas e não possam ser acessadas por quais- tecnologia.
As técnicas de representação de design usadas nesse estágio são PRESSMAN, R. S. 8. ed. Porto Alegre:
AMGH, 2016.
gráficas de estruturas de softwares que veremos mais à frente.
CONCLUSÃO
Neste capítulo entendemos a definição de software e sistemas compu-
tacionais e vimos a evolução do hardware e software ao longo dos anos,
bem como os principais tipos de software.
Compreendemos a origem da engenharia de software e a importân-
cia do design de softwares atualmente no ecossistema do desenvolvi-
mento de aplicações.
Este capítulo foi uma ótima introdução aos engenheiros de softwares
que desejam ser competentes em suas funções, solucionando proble-
mas e combinando habilidades de pensamento abstrato com uma men-
talidade prática.
A partir daqui, estaremos aptos a nos aprofundar em todos os proce-
dimentos da engenharia de software, que busca garantir padronização,
aumentar qualidade e diminuir prejuízos nos projetos de softwares.
ATIVIDADES
Atividade 1
Você assumiu a missão de um museu altamente relevante nos
Estados Unidos de criar uma experiência histórica aos visitantes:
elaborar uma linha do tempo com os principais avanços tecnoló-
gicos ao longo da história.
Para tanto, utilize os marcos trazidos neste capítulo, bem como
outras pesquisas, para criar o que conhecemos como timeline
da tecnologia. Use a criatividade para surpreender a todos com
gráficos, imagens e até animação gráfica.
Atividade 2
Escolha um aplicativo que você utiliza no seu dia a dia e de-
senvolva um documento com os itens do design de software
tratados neste capítulo. Fale como a abstração, a modularidade,
a arquitetura, o refinamento, o padrão, a ocultação de informa-
ções e a refatoração podem ser encontrados no aplicativo.
28 Engenharia de Software
REFERÊNCIAS
ENGHOLM JR., H. Engenharia de software na prática. São Paulo: Novatec, 2010.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Rio de
Janeiro: Elsevier, 2011.
PFLEEGER, S. L. Engenharia de software: teoria e prática. São Paulo: Pearson Prentice
Hall, 2007.
PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem profissional. 8. ed.
Porto Alegre: AMGH, 2016.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson Education, 2011.
TSUI, F.; KARAM, O. Fundamentos de engenharia de software. São Paulo: LTC, 2013.
VELLOSO, F. de. C. Informática: conceitos básicos. 9. ed. Rio de Janeiro: Elsevier, 2014.
Podemos comparar isso à receita que você segue para assar seu
bolo favorito. Se o primeiro passo for combinar farinha com cacau em
pó, você terá que seguir o processo para garantir um bolo bem assado.
No entanto, se você misturar os ingredientes mencionados de uma vez,
talvez não valha a pena saborear o bolo.
30 Engenharia de Software
de software de qualidade. Se você perder alguma das etapas ou segui-
-las sem precisão, os esforços desse processo serão desperdiçados.
Figura 1
Ciclo de vida de software
Levantamento de
requisitos
Implantação e Sistema
proposto Análise e projeto
manutenção
Implementação e
testes
32 Engenharia de Software
Em seguida, vamos explorar cada uma das etapas: levantamento
de requisitos; análise e projeto; implementação e testes; implantação
e manutenção.
Isso pode parecer redundante: é claro que sabemos por que esta-
mos fazendo este projeto...Não é?
34 Engenharia de Software
Essa transparência não apenas ajuda a garantir que todos estejam
na mesma página, mas também promove um senso de aceitação do
projeto em todo o seu planejamento, começando com os requisitos do
negócio.
36 Engenharia de Software
Obviamente, há muito mais que pode ser dito sobre a arte e a ciência
da coleta de requisitos, mas espero que esta lista tenha fornecido algumas
ferramentas úteis para gerenciar esse processo com sucesso. Agora que já
se sabe como definir o que está construindo vamos seguir para a próxima
etapa do ciclo de vida do processo de desenvolvimento de software.
Exemplo 1
Exemplo 2
Requisitos funcionais:
• entradas: total diário de pessoas;
• processos: calcular média diária;
• saídas: média de pessoas;
• limites: pode ser difícil encontrar alguns limites neste exemplo.
Nele, estamos usando dias da semana, portanto não usaríamos
mais do que sete dias da semana. Outro limite seria que o total
de visitantes deve ser maior que zero, pois não pode haver visi-
tantes negativos.
38 Engenharia de Software
A fase de análise e projeto de software é o momento em que os ar-
quitetos e desenvolvedores elaboram especificações técnicas avança-
das de que precisam para criar o software de acordo com os requisitos.
40 Engenharia de Software
Um ponto importante no processo de teste é que a empresa esta-
beleça uma política de testes. Trata-se de um documento que contenha
os princípios dos testes adotados pela empresa e os principais objeti-
vos de teste dela. Também explica como serão realizados e como uma
empresa mede a eficácia e o sucesso dos testes (PRESSMAN, 2016).
42 Engenharia de Software
fará os testes. Ele também descreve o escopo e as atividades do teste. O
plano de teste inclui os objetivos dos testes a serem executados e ajuda
a controlar os riscos. É uma boa prática ter um plano de teste escrito
por uma pessoa experiente, como um líder ou gerente de qualidade.
a utilizá-lo.
44 Engenharia de software
2. Crie um entendimento compartilhado
Mas tome cuidado! Essa é uma etapa ousada que corre o risco de
frustrar os funcionários, especialmente se implementada muito cedo.
Para ajudar nesse processo, comunique e enfatize as razões para a
adoção do novo software de maneira eficaz, ressaltando como a nova
ferramenta beneficiará a todos.
PureSolution/Shutterstock
46 Engenharia de Software
Dentro dessas necessidades, vale ressaltar os tipos de manutenção
que precisam ser contemplados no plano de manutenção (HIRAMA,
2011):
Manutenção corretiva
Manutenção adaptativa
Manutenção preventiva
Você não tem certeza se o seu servidor pode suportar esse tipo de
carga, mas sabe que, se o site cair com tanta atenção, você terá muitos
usuários irritados que podem abandonar o seu produto.
48 Engenharia de Software
Quando muito tráfego atinge um servidor, suas atualizações garan-
tem que novos servidores fiquem on-line automaticamente para lidar
com o tráfego extra. Não fazia sentido configurar essa infraestrutura
de escalonamento automático durante o desenvolvimento, mas, agora
que você precisa dela, é fundamental para o sucesso do seu produto. Livro
O livro Não me faça
Esse esforço é classificado como manutenção preventiva ou modifi- pensar, de Steve Krug,
cação de um produto de software após a entrega para detectar e corrigir explica que os humanos
que usam software ou
possíveis falhas no produto de software antes que elas entrem em vigor. sites tendem a aceitar
a primeira solução que
Quanto mais complexo for o software, provavelmente mais manu- lhes é apresentada. Esse
tenção será necessário para garantir o uso contínuo. As perguntas ób- ponto essencial deve ser
aproveitado por enge-
vias são “por quê” e “quanto”. Isso varia e é um pouco complicado, pois nheiros de softwares que
cada produto de software é diferente. querem se diferenciar no
mercado.
É possível minimizar os custos de manutenção por meio de planeja- O livro se concentra na
mento e execução inteligentes, mas também pode-se acabar pagando simplicidade, na objeti-
vidade e no bom senso,
mais para manter o produto do que para desenvolvê-lo se o gestor não sendo considerado por
tomar cuidado. muitos essencial para
qualquer engenheiro de
Existem muitos fatores de custo de manutenção de software: ela software. A obra ajuda
os desenvolvedores a
não se trata apenas de consertar bugs; envolve qualquer esforço para entender a experiência
manter as coisas funcionando da maneira que seus usuários esperam do usuário e a mudar sua
maneira de pensar para
que funcione – e, na maioria das vezes, isso significa outra coisa do que que o design de interface
simplesmente corrigir defeitos em seu código. seja sempre a força mo-
triz por trás das decisões
Com esta etapa, concluímos o ciclo de desenvolvimento de softwa- dos desenvolvedores.
CONSIDERAÇÕES FINAIS
Neste capítulo percorremos todas as etapas que compõem um ciclo
de desenvolvimento de software e foi possível entender que o desenvol-
vimento de software está em seu ponto de inflexão, considerando a alta
frequência de interrupções tecnológicas.
Quase todos os setores estão aproveitando o software para resolver
os problemas do usuário. A tendência do software está crescendo em um
ritmo que as empresas precisam acompanhar vigorosamente e seguir em
frente com o ciclo de vida de desenvolvimento de software para garantir
uma entrega rápida e de qualidade.
ATIVIDADES
Atividade 1
Neste momento você é o engenheiro de software chefe de uma
grande empresa de cosmético e precisa convencer todo o seu
time de desenvolvedores de que o ciclo de vida de desenvolvi-
mento de software eficiente é importante. Ressalte os principais
benefícios conseguidos com a implantação de um ciclo de vida.
Se preferir, use um ou mais slides ou, ainda, apresente esses
benefícios em um texto de no máximo uma página.
Atividade 2
Ainda como engenheiro de software chefe de uma grande
empresa de cosmético, você precisa, agora, apresentar as etapas
que compõem o ciclo de desenvolvimento de software e explicar
rapidamente cada uma dessas fases.
REFERÊNCIAS
ENGHOLM JR., H. Engenharia de software na prática. São Paulo: Novatec, 2010.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Rio de
Janeiro: Elsevier, 2011.
IAN, S. Engenharia de software. 9. ed. São Paulo: Pearson, 2011.
PFLEEGER, S. L. Engenharia de software: teoria e prática. São Paulo: Pearson Prentice Hall,
2007.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre:
AMGH, 2016.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson Education, 2011.
TSUI, F.; KARAM, O. Fundamentos de engenharia de software. São Paulo: LTC, 2013.
50 Engenharia de Software
3
Orientação a objetos
Objetivos de aprendizagem
Orientação a objetos 51
em todas as etapas do desenvolvimento das soluções e já é a forma mais
utilizada no mundo (HASSAN, 2011).
52 Engenharia de Software
3.1 Orientação a objetos
Vídeo
A orientação a objetos (OO) é um paradigma alcançado pelos pro-
gramadores de softwares que emprega na modelagem objetos, ao
passo que a programação tradicional utiliza em sua modelagem fun-
ções e procedures. Um objeto pode ser entendido como um agente
abstrato que pertencerá ao sistema com atributos e métodos específi-
cos (WAZLAWICK, 2019).
Orientação a objetos 53
Eles normalmente fazem parte de um grupo de itens semelhantes
chamados classes. O desejo de colocar itens em classes não é novo.
Descrever o mundo como sendo feito de animais, vegetais e minerais é
um exemplo de classificação.
A ideia por trás das classes é ter um ponto de referência e descrever
um objeto específico em termos de suas semelhanças ou diferenças
em relação aos membros de sua própria classe.
Ao fazer isso, é mais eficiente para alguém dizer: “o urso coala é um
marsupial (ou animal com bolsa) com uma grande cabeça redonda e
orelhas peludas”, do que descrever um urso coala com todas suas ca-
racterísticas como um mamífero.
É mais eficiente descrever características, aparências e até mesmo
comportamentos dessa maneira. Quando ouvimos a palavra reutili-
zável no mundo orientado a objetos, significa que podemos ser mais
eficientes, porque não precisamos começar do início para descrever
um objeto sempre que ele for necessário para o desenvolvimento de
software (WAZLAWICK, 2019).
Uma classe é um dispositivo abstrato, utilizado para demonstrar
objetos relevantes aos sistemas de maneira concreta. As classes de
objetos são formas de categorizar instâncias dentro do sistema que
será desenvolvido, tais como: Produtos, Alunos, Professores, Nota Fis-
cal, Contas a Pagar, Contas a receber, entre outros.
Dentro das classes temos os atributos que irão especificar os
objetos, por exemplo: CPF do cliente, E-mail, Endereço, Preço, Nota
(HIRAMA, 2011).
Além dos atributos, as classes possuem métodos, que são as ope-
rações que os objetos podem desempenhar dentro do sistema, como:
Incluir cliente, Vender produto, Excluir aluno etc.
Um método é um pedaço de código-fonte escrito dentro de uma
classe que foi nomeada e tem a capacidade de ser chamada. Ele sem-
pre faz parte de alguma classe e é frequentemente usado para modifi-
car o estado interno de um objeto instanciado de uma classe.
Cada classe deve ter um nome que a diferencie de todas as outras
classes, geralmente são substantivos ou frases curtas e começam com
uma letra maiúscula.
54 Engenharia de Software
atributos e uma série de métodos. Esses itens descrevem uma classe,
a unidade de análise que é uma grande parte do que chamamos de
análise e design orientado a objetos.
Figura 1
Classe
rental_car
- placa do automóvel
- modelo
- cor
- ano
- tamanho
Por exemplo, um carro pode ser azul, branco ou de alguma outra cor.
Mais adiante, demonstraremos que você pode ser mais específico sobre
o intervalo de valores dessas propriedades. Ao especificar atributos, a
primeira letra geralmente é minúscula.
Figura 2
Classe com métodos
rental_car
- placa do automóvel
- modelo
- cor
- ano
- tamanho
inclusão()
exclusão()
saída()
Orientação a objetos 55
Para ficar mais claro, vamos hipoteticamente definir os métodos do
Rental_Car:
• inclusão(): será responsável por incluir carros no cadastro;
• exclusão(): executará a exclusão de carros do cadastro;
• saída(): controlará as saídas de carros para locação.
inclusão() alteração()
consulta() relatório()
venda()
Fonte: Elaborada pelo autor.
3.3 Abstração
Vídeo
Este é um processo de selecionar o método e os atributos necessários
para especificar o objeto. A abstração se concentra nas características es-
senciais de um objeto em relação à perspectiva do usuário (HIRAMA, 2011).
56 Engenharia de Software
Abstrair significa mostrar apenas dados relevantes e esconder deta-
lhes desnecessários de um objeto do usuário. Por exemplo, quando você
faz login em sua conta Amazon on-line, você insere seu user_id e senha e
clica em login. Nesse momento, o processo acessa seu banco de dados e
retorna com o acesso ou uma mensagem de senha incorreta.
Em vez disso, você interage com o código por meio de uma interface
de usuário projetada para otimizar sua experiência e facilitar o acesso
às funções e aos métodos necessários para concluir uma tarefa. Nesse
caso, a interface é abstraída da implementação real do código.
3.4
Vídeo
Encapsulamento
Encapsular, na orientação a objetos, significa agrupar atributos e
métodos com um funcionamento único. Esse conceito também é fre-
quentemente usado para ocultar a representação interna, ou estado,
Orientação a objetos 57
de um objeto de fora. Isso é chamado de ocultação de informações
(SOMMERVILLE, 2011).
Para ficar mais claro, vamos imaginar uma classe de objetos cha-
mada Maquina de Café, sendo que seus atributos poderiam ser: vol-
tagem da Máquina de café, capacidade de cafés por dia, método de
moagem de café, cor, tamanho, entre outros. Para o conceito do en-
capsulamento, podemos ter um método, por exemplo, “fazer café”,
que engloba vários outros métodos, ficando invisível para o usuário
os métodos mais simples.
58 Engenharia de Software
Se houve a possibilidade dos atributos serem acessados diretamen-
te em qualquer parte do código-fonte, o programador estará correndo o
risco do saldo ser atualizado sem que o método de depositar tenha sido
executado. Para evitar esse problema, é indicado que o engenheiro use os
métodos específicos para esse fim, por exemplo: “atualiza saldo”.
Manutenção de código
Reuso de código
Orientação a objetos 59
O pilar do encapsulamento auxilia de maneira incrível o desen-
volvimento orientado a objetos, trazendo também proteção aos da-
dos sensíveis ou sigilosos.
3.5 Polimorfismo
Vídeo Polimorfismo é originalmente uma palavra grega que significa a ca-
pacidade de assumir várias formas. No paradigma orientado a objetos,
ele implica o uso de operações de maneiras diferentes, dependendo da
instância na qual estão operando.
Cada figura tem sua fórmula para calcular a área. Quando um objeto
da classe Circulo invoca seu método Calcula_Area (), a operação encontra
a área do círculo sem nenhum conflito com o método Calcula_Area() da
classe Quadrado, eles entendem que devem usar fórmulas diferentes.
60 Engenharia de Software
E para finalizar, outro exemplo, o jogo de xadrez apresenta várias
peças, certo? Para sermos mais precisos, no xadrez moderno cada jo-
gador irá dispor de 16 peças, sendo oito peões, dois bispos, dois ca-
valos, duas torres, um rei e uma dama, sendo que cada componente
possui um movimento particular.
O peão, por exemplo, se desloca para frente, o cavalo, por sua vez,
anda em L, enquanto o bispo se movimenta na diagonal e assim por
diante. Dentro do conceito do polimorfismo, podemos afirmar que to-
dos são peças, porém com métodos de deslocamentos diferentes.
3.6 Herança
Vídeo Herança é um dos principais conceitos da OO, pois é onde o progra-
mador pode derivar uma classe de outra classe para uma hierarquia de
classes que compartilham um conjunto de atributos e métodos.
Orientação a objetos 61
Suponhamos que você desenvolverá um software para o controle
dos animais, provavelmente seria essencial criar uma classe chama-
da animal.
Lembrando que criar uma classe única para cada animal rapidamen-
te se tornaria muito repetitivo, porque existem algumas propriedades
e comportamentos que se aplicam a cada animal, desde um papagaio
até uma girafa.
Figura 4
Herança única
Class A Class B
62 Engenharia de Software
Herança múltipla: é uma herança em que uma classe se estende a
mais de uma classe.
Figura 5
Herança múltipla
Class A Class B
Class C
Figura 6
Herança multinível
Orientação a objetos 63
Livro
Na obra de iniciação à
Figura 7
orientação a objetos, Orien-
Herança hierárquica
tação a objetos: aprenda
seus conceitos e suas aplica-
bilidades de forma efetiva,
você poderá irá iniciar a
leitura com um breve histó- Class A
rico do tema conhecendo
o início desse conceito
que surgiu na Noruega,
aprofundando os conceitos
de reuso, coesão e acopla-
mento. Suas definições de
classe, atributo, método e Class B Class C Class D
objeto são bastante claras
e objetivas, ajudando você
a se aprofundar num as-
sunto que, algumas vezes, Fonte: Elaborada pelo autor.
parece mais complicado
do que é. A obra finaliza Na herança hierárquica, conforme mostrado no diagrama da Figura
com boas práticas no uso
7, a Class C, B e D herdam atributos da superclasse A.
da orientação a objetos,
chamando atenção para
Com essas estruturas, o programador pode escolher entre a melhor
herança, polimorfismo, en-
capsulamento e abstração, opção para desenvolver seus modelos orientados a objetos, sempre
e como eles podem ser
buscando eficiência, eficácia em seus códigos.
úteis no desenvolvimento
de sistema eficientes. Dentro dos recursos da orientação a objetos, vale ressaltarmos a
CARVALHO, T. L. São Paulo: Casa do generalização e a especialização. Eles representam uma hierarquia
Código, 2016. de relacionamentos entre classes, em que as subclasses herdam de
superclasses.
CONCLUSÃO
Neste capítulo foi possível compreender como os princípios de obje-
tos, encapsulamento, herança e polimorfismo são as bases para o desen-
volvimento de sistemas orientados a objetos.
Para compreender e expressar os recursos essenciais e interessantes
de um aplicativo no complexo mundo real, um modelo orientado a ob-
jetos é construído em torno destes. Um objeto encapsula dados e com-
portamentos, o que implica que os analistas podem usar a abordagem
orientada a objetos para modelagem de dados e modelagem de processo.
Vimos também que objetos específicos em um sistema podem herdar
características da instância global de um objeto. Por exemplo, muitos ti-
pos de objetos podem ter um nome e uma data de criação.
Objetos específicos podem herdar essas características globais de
objetos pais que incluem apenas características globais e podem herdar
características de mais de um objeto pai. A herança tenta evitar a definição
64 Engenharia de Software
redundante de características semelhantes que podem ser incorporadas
em níveis superiores do sistema.
Outro conceito importante abordado foi o polimorfismo, funcionalida-
de conceitualmente semelhante entre objetos diferentes, é extraída em
um nível global.
Esse processo limita a produção de funcionalidade paralela e agiliza
a interface de informações. O polimorfismo direciona o redator da es-
pecificação a compreender a funcionalidade de um processo e torná-lo
disponível para qualquer objeto que requeira uma instância semelhante
de funcionalidade.
E foi assim que exploramos melhores práticas para a análise e o de-
senvolvimento de sistemas computacionais, sempre visando não só aten-
der às necessidades dos usuários, e sim surpreendê-los em menor tempo
com menor custo possível.
ATIVIDADES
Atividade 1
Você foi chamado para convencer um time de engenheiros de
softwares que a orientação a objetos é muito mais adequada para
o atual momento quando comparamos com os antigos padrões
de análise e desenvolvimento de software. Para essa missão, você
deverá construir um quadro que compare e ressalte os benefícios
entre a orientação a objetos e os métodos tradicionais.
Atividade 2
Seguindo os exemplos vistos, escolha e desenvolva mais três
classes de objetos com no mínimo três atributos e três métodos
para um sistema de supermercado.
REFERÊNCIAS
HASSAN, G. Software modeling and design: UML, use cases, patterns, and software
architectures. Cambridge: Cambridge University Press, 2011.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Rio de
Janeiro: Elsevier, 2011.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre:
AMGH, 2016.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson Education, 2011.
WAZLAWICK, R. S. Engenharia de software: conceitos e práticas. São Paulo: GEN LTC, 2019.
Orientação a objetos 65
4
UML – Unified Modeling
Language
Objetivos de aprendizagem
4.1 UML
Vídeo
UML é como é conhecida no mercado a Unified Modeling Language
– ou, em português, Linguagem de Modelagem Unificada. Trata-se de
uma forma padronizada e gráfica para a ilustração de sistemas.
66 Engenharia de Software
O UML é composto por um conjunto de diagramas confeccionado,
ao longo do tempo, por profissionais de tecnologia, buscando a espe-
cialização, visualização, construção e documentação de partes ou siste-
mas completos (HASSAN, 2011). Essa coleção de melhores práticas em
engenharia de softwares apresenta um passo a passo para que enge-
nheiros de softwares e todos os envolvidos possam dialogar de modo
eficiente na construção dos projetos.
4.3
Vídeo
Diagrama de atividades
Os diagramas de atividades são usados para desenvolver representa-
ções gráficas que ilustram os fluxos de trabalho e as atividades dos partici-
pantes do sistema, com suporte para escolha, interação e simultaneidade.
68 Engenharia de Software
Ele descreve o fluxo de controle do sistema de destino, como a
exploração de regras e as operações de negócios complexas, descre-
vendo o caso de uso e, também, o processo de negócios.
70 Engenharia de Software
O diagrama de classes possui alguns objetivos específicos:
• mostrar a estrutura estática dos classificadores em um sistema;
• fornecer uma notação básica para outros diagramas de estrutu-
ra, prescritos pela UML;
• ser útil para desenvolvedores e outros membros da equipe também;
• ser usado pelos analistas de negócios para modelar sistemas
por meio de uma perspectiva de negócios.
Figura 2
Classe de objetos
Nome da classe
Atributo da classe
Métodos da classe
Figura 3
Diagrama de classe: salas de aula
Turma
codigo: Texto
esta-matriculado-em sala: Texto e-ministrada-por
horario: Horario
estaAberta()
definirProfessor(professor)
Aluno incluirAluno(aluno) Professor
definirNome(nome) definirNome(nome)
obterNome() obterNome()
definirNome() definirTitulacao(titulo)
definirMatricula(matricula) obterTitulacao
obterMatricula
Figura 4
Diagrama de classe: berçário
Uma pessoa pode ser um bebê,
um médico ou uma mãe
Pessoa
Nome
Data de nascimento
0..*
Ingere
0..*
Medicamento Medicacao
Descricao Quantidade
Quantidade em estoque Data
UnidadeMedida Hora
Fonte: Elaborada pelo autor.
72 Engenharia de Software
O diagrama de classes é um modelo estático utilizado para ilustrar,
com uma visão estática, o funcionamento de um sistema a ser projeta-
do. Esse tipo de diagrama é essencial, também, para os codificadores
implementarem seus códigos.
Além disso, algumas pessoas podem até pensar que eles são iguais,
porque na ferramenta UML eles usam as notações para diagrama de
classes e diagrama de objetos, que são colocadas dentro do mesmo
editor de diagramas – diagrama de classes.
74 Engenharia de Software
Com isso, podemos concluir que, com o diagrama de objetos,
é possível demonstrar a todos os interessados os objetos com seus
respectivos relacionamentos, para o pleno funcionamento do sistema
a ser desenvolvido.
Figura 6
Linha do tempo
LifeLine
• Linha de vida
76 Engenharia de Software
Figura 7
Ativações
• Ativações
• Mensagem de retorno
Figura 9
A mensagem de retorno é um tipo de mensagem que repre- Mensagem de retorno
senta a passagem de informações de volta para o chamador de
1.1:
uma mensagem anterior correspondente.
Figura 10 • Automensagem
Automensagem
A própria mensagem é um tipo de mensagem que representa a
invocação de mensagem da mesma linha de vida.
1: message
• Mensagem recursiva
Figura 11
Mensagem recursiva é um tipo de mensagem que representa a
Autorrecursiva
invocação de mensagem da mesma linha de vida. Seu alvo aponta para
uma ativação em cima da ativação de onde a mensagem foi invocada.
1: message
• Observação Figura 15
Observação
Uma nota (comentário) permite anexar várias observações aos ele-
mentos. Um comentário não carrega nenhuma força semântica, mas
pode conter informações que são úteis para um modelador.
Fonte: Elaborada pelo autor.
A seguir, há um exemplo genérico de diagrama de sequência.
Figura 16
Diagrama de sequência genérico
objeto 1:
objeto2 :nome da classe
nome da classe
Nome ator:
classe ator
1: evento
2: operação 3: operação (lista parâmetros)
Acesso ao banco de
Inclui dados cadastrais Validação dos campos
dados para a gravação
do aluno inseridos
dos dados
CONCLUSÃO
Neste capítulo foi possível compreender como os diagramas UML são
essenciais para a construção de um software. Eles devem ser usados pe-
los engenheiros de softwares antes de começarem a codificar; ainda, os
diagramas UML podem ajudar todos a estarem na mesma página.
Compreender o sistema que eles estão tentando criar permite que
os desenvolvedores deleguem trabalho, identifiquem problemas em po-
ATIVIDADES
Atividade 1
Dentro do ecossistema do UML, temos vários diagramas que
colaboram integralmente na construção de softwares. Nesse
sentido, você deve se colocar como um engenheiro de softwares
de uma grande empresa e desenvolver um documento de no
máximo duas páginas, que ilustre de maneira resumida as dife-
renças entre os seguintes diagramas:
a) Diagrama de atividades
b) Diagrama de classe
c) Diagrama de objetos
d) Diagrama de sequência
Atividade 2
Nesta atividade, a missão é compreender a figura deste livro,
chamada Diagrama de atividades: elaborando um texto, dentro da
Seção 4.3, e transformá-la para atender a um processo de login
em um aplicativo comum, como o Facebook ou Instagram.
Imagine o passo a passo que você executa para acessar sua rede
social preferida. Para tanto, você pode usar qualquer software
que tenha mais facilidade ou pegar um lápis e folha de papel e
soltar sua criatividade.
REFERÊNCIAS
HASSAN, G. Software modeling and design: UML, use cases, patterns and software
architectures. Cambridge: Cambridge University Press, 2011.
HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Rio de
Janeiro: Elsevier, 2011.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre:
AMGH, 2016.
WAZLAWICK, R. Engenharia de software: conceitos e práticas. São Paulo: GEN LTC, 2019.
80 Engenharia de Software
5
Diagrama de caso de uso
Objetivos de aprendizagem
82 Engenharia de Software
Podemos afirmar que o diagrama de caso de uso deixa a relação en-
tre a pessoas envolvidas no desenvolvimento do software muito mais
harmônica e produtiva (SOMMERVILLE, 2011).
5.2 Cenário
Vídeo
De acordo com Pressman (2016), conforme os requisitos são levan-
tados, uma visão geral sobre as características e funções do sistema
começa a se concretizar. No entanto, é difícil entender como essas ca-
racterísticas e funções serão usadas por diferentes usuários. Para isso,
é possível criar um conjunto de cenários que identifique um roteiro de
uso para o sistema a ser desenvolvido.
Quadro 1
Cenário – venda de laranjas
Item Descrição
Caso de uso Comprar laranjas
Ator Cliente
Pré-condição Ter estoque disponível
Pós-condição Registrar a compra
O cliente seleciona o produto e a quantidade, o sistema
Fluxo principal
verifica o estoque e calcula o valor a pagar
O cliente pode alterar a quantidade antes de fechar a
Fluxo alternativo
compra
Fluxo exceção Cartão de crédito inválido
Fonte: Elaborado pelo autor.
84 Engenharia de Software
5.4 Relacionamentos
Vídeo
O estabelecimento de relacionamentos entre os elementos dos
casos de uso permite a reutilização daqueles casos de uso que preci-
sam ser definidos repetidamente, e isso reduz os esforços dos desen-
volvedores. Nos casos de uso, podemos utilizar os seguintes tipos de
relacionamentos:
• incluir;
• estender;
• generalizar.
Incluir
O relacionamento de inclusão é utilizado entre os casos de uso
quando um componente inclui a sequência de métodos e funções de
outro componente. Os casos de uso que precisam ser descritos repeti-
damente para um sistema complexo ou grande são modelados uma vez
e incluídos nos demais casos de uso, quando necessário (WAZLAWICK,
2019).
Estender
Estender relacionamento adiciona a sequência de comportamento
ao caso de uso padrão. É semelhante ao relacionamento de inclusão,
mas a direção de adição da sequência de comportamento ao caso de
uso base é oposta.
86 Engenharia de Software
Generalização
Generalização é o termo mais comum em computadores. Na gene-
ralização existe uma classe pai que consiste em atributos e operações
comuns, e a classe filha contém os atributos e operações particulares
(WAZLAWICK, 2019).
Etapa 2
• Identifique os atores.
Etapa 3
• Documentação do caso de uso.
88 Engenharia de Software
• Gerente
• Funcionário
• Operadora do cartão de crédito
dados
registro do pagamento
do pedido
entrega
Dica
Com base nos casos levantados, seguimos para a identificação dos
O relacionamento indica
relacionamentos envolvidos nesse cenário.
quem solicita, quem exe-
cuta e como será executa-
Deve-se analisar se todo ator tem, no mínimo, uma associação com
da uma funcionalidade.
um caso de uso e se todo caso de uso interage com algum ator ou com
outro caso de uso.
90 Engenharia de Software
Figura 3
Modelagem de e-commerce de sucos naturais
<<includes>>
Solicitar
Registrar <<extend>> Operadora
autorização de de cartão de
pagamento
pagamento crédito
<<extend>>
Consultar <<extend>>
Gerente
Emitir Nota Fiscal
pagamento
funcionário
Etapa 3
• Documentação do caso de uso.
Vamos à solução!
Login/cadastro de usuários/
parametrização do sistema
92 Engenharia de Software
Etapa 3: Documentação do caso de uso
Quadro 2
Módulo de parametrização e administração do aplicativo
Quadro 3
Login / Cadastro de usuários / Parametrização do sistema
Quadro 4
Monitoramento de Bio Sinais
94 Engenharia de Software
Quadro 5
Alerta de alterações clínicas
Quadro 6
Controle de dieta do paciente
(Continua)
Quadro 7
Controle dos exercícios físicos
Fluxo Alternativo
FA07 Aceite do usuário quanto aos exercícios
Aplicativo solicita ao médico sequência de exercícios caso não tenha en-
FA08
viado
Regras do negócio
Os exercícios precisam ser informados e validados pelo médico do pa-
RN04
ciente
Fonte: Elaborada pelo autor.
Como foi citado, para complementarmos a documentação do siste-
ma para seu desenvolvimento, falta apenas a modelagem dimensional
do data mart da aplicação em health tech, ou seja, vamos apresentar o
MER – Modelo Entidade Relacionamento do sistema.
96 Engenharia de Software
Figura 5
MER – Modelo Entidade Relacionamento do sistema do health tech
Tabela Fato:
Dimensão: Paciente Dimensão: Dieta
Dieta_Paciente
ID_Paciente PK
Paciente_nome FK ID_dieta ID_dieta PK
Paciente_endereço ID_paciente FK dieta_nome
Paciente_email ID_medico dieta_calorias
Paciente_convenio Data_inicio dieta_procedimento
Paciente_celular Data_termino dieta_lista_de_alimentos
Paciente_senha
Tabela Fato:
Tabela Fato: Login Dimensão: Bio_sinais
Monitoramento
FK ID_Bio ID_Bio PK
FK ID_usuario (médico ou
ID_paciente FK Bio_descricao
paciente)
Data Bio_medicao maxima
Data
Hora Bio_medicao minima
Hora
Medicao Bio_importancia
ID_medico PK
Medico_nome FK ID_atividade
ID_atividade PK
Medico_endereco ID_paciente FK
atividade_nome
Medico_email ID_medico FK
atividade_calorias
Medico_especialidade Data_inicio
atividade_procedimento
Medico_celular Data_termino
Medico_senha
Dimensão Paciente
ID_Paciente Chave primária de paciente, será armazenado um código único para cada paciente
Paciente_nome Será armazenado o nome do paciente
Paciente_endereco Será armazenado o endereço do paciente
Paciente_email Será armazenado o e-mail do paciente
Paciente_convenio Será armazenado o convênio do paciente
Paciente_celular Será armazenado o celular do paciente
Paciente_senha Será armazenada a senha do paciente
Dimensão Médico
ID_medico Chave primária de médico, será armazenado um código único para cada médico
Medico_nome Será armazenado o nome do médico
Medico_endereco Será armazenado o endereço do médico
Medico_email Será armazenado o e-mail do médico
Medico_especialidade Será armazenada a especialidade do médico
Medico_celular Será armazenado o celular do médico
Medico_senha Será armazenada a senha do médico
Dimensão Biossinais
ID_Bio Chave primária de biossinais, será armazenado um código único para biossinal
Bio_descricao Será armazenada a descrição do biossinal
Bio_medicao maxima Será armazenado o limite máximo do biossinal
Bio_medicao minima Será armazenado o limite mínimo do biossinal
Bio_importancia Será armazenada a importância do biossinal
Dimensão Atividades_Físicas
Chave primária das Atividades Físicas, será armazenado um código único para
ID_atividade
cada atividade física
atividade_nome Será armazenado o nome da atividade física
atividade_calorias Será armazenada a quantidade de calorias gastas com a atividade física
atividade_procedimento Será armazenado o procedimento para executar as atividades físicas
98 Engenharia de Software
Informações úteis para o usuário paciente Livro
Nesta indicação temos
Consultar suas dietas
uma abordagem prática
Consultar suas atividades físicas do uso do UML na cons-
trução de softwares. São
Consultar os resultados de suas medições de biossinais apresentados exemplos
práticos de como o enge-
Informações para o usuário médico nheiro pode iniciar suas
primeiras modelagens de
Inserir dietas ao paciente sistemas computacionais.
O mapeamento das
Inserir atividades físicas ao paciente classes é bem prático e
objetivo, levando ao leitor
Analisar os biossinais dos pacientes a uma grande viagem
dentro da engenharia
Questões de negócio de software sem haver
descuidos quanto aos
Quantos usuários do perfil Médicos estão cadastros no aplicativo? conceitos essenciais,
principalmente a genera-
Quantos usuários do perfil Paciente estão cadastros no aplicativo?
lização, tão importante na
otimização dos códigos.
Qual é o índice de utilização do aplicativo por parte dos médicos?
Qual é o índice de utilização do aplicativo por parte dos pacientes? LIMA, A. S. G. UML 2.5: do requisito
à solução. São Paulo: Érica, 2014.
Qual é o índice de cadastros cancelados do perfil Paciente?
CONCLUSÃO
Neste capítulo foi possível compreender e interpretar diagramas de
caso de uso e como eles são importantes na construção de softwares,
apresentando a todos os envolvidos ilustrações que posteriormente irão
se tornar códigos executáveis.
Pudemos também entender o papel de cada componente dentro dos
cenários onde irão operar o sistema; vimos como ator, relacionamentos e
cenários se fundem em um só projeto para dar vida aos sistemas.
Atividade 2
Nesta atividade a missão é desenvolver um caso de uso simples,
no qual o usuário irá inserir seu login e senha, e o sistema irá
validar e devolver uma mensagem de erro ou acesso concebido.
REFERÊNCIAS
HASSAN, G. Software modeling and design: UML, use cases, patterns and software
architectures. Cambridge: Cambridge University Press, 2011.
IAN, S. Engenharia de software. 9. ed. São Paulo: Pearson, 2011.
PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre:
AMGH, 2016.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson Education, 2011.
WAZLAWICK, R. Engenharia de software: conceitos e práticas. São Paulo: GEN LTC, 2019.
3 Orientação a objetos
1. Você foi chamado para convencer um time de engenheiros de
softwares que a orientação a objetos é muito mais adequada para
o atual momento quando comparamos com os antigos padrões
de análise e desenvolvimento de software. Para essa missão, você
deverá construir um quadro que compare e ressalte os benefícios
entre a orientação a objetos e os métodos tradicionais.
Nesta atividade você deverá citar os principais benefícios da orientação
a objetos ressaltando seus pontos positivos em relação aos métodos
tradicionais, tais como: reutilização de código, manutenção do código,
forma de execução, entre outros. Ressaltando que provê uma melhor
organização do código, ajuda para o reaproveitamento de código,
alinhamento com os novos mindsets dos programadores etc.
a) Diagrama de atividades
• É utilizado para desenvolver representações gráficas
que ilustram os fluxos de trabalho e as atividades dos
participantes do sistema.
• Descreve o fluxo de controle do sistema de destino.
• Tem como objetivo modelar processos computacionais
e organizacionais.
• Descreve como as atividades são coordenadas para fornecer
um serviço que pode estar em diferentes níveis de abstração.
b) Diagrama de classes
• Auxilia na modelagem de todos os métodos da orientação
a objetos.
• Impulsiona a descrição dos tipos de objetos nos projetos
e os respectivos tipos de relacionamentos que existem
entre eles.
Se dados incorretos
Mensagem de erro
Valida dados
Resposta do
acesso
Wagner Sanchez
Wagner Sanchez
Código Logístico Fundação Biblioteca Nacional
ISBN 978-65-5821-067-2
I0 0 0 3 5 8 9 786558 210672