Projeto Orientado A Objetos Utilizando Uml
Projeto Orientado A Objetos Utilizando Uml
Projeto Orientado A Objetos Utilizando Uml
SUMÁRIO
1 INTRODUÇÃO..................................................................................... 3
9 REFERÊNCIAS ................................................................................. 31
2
1 INTRODUÇÃO
Prezado aluno!
O Grupo Educacional FAVENI, esclarece que o material virtual é
semelhante ao da sala de aula presencial. Em uma sala de aula, é raro – quase
improvável - um aluno se levantar, interromper a exposição, dirigir-se ao professor
e fazer uma pergunta, para que seja esclarecida uma dúvida sobre o tema tratado.
O comum é que esse aluno faça a pergunta em voz alta para todos ouvirem e todos
ouvirão a resposta. No espaço virtual, é a mesma coisa. Não hesite em perguntar,
as perguntas poderão ser direcionadas ao protocolo de atendimento que serão
respondidas em tempo hábil.
Os cursos à distância exigem do aluno tempo e organização. No caso da
nossa disciplina é preciso ter um horário destinado à leitura do texto base e à
execução das avaliações propostas. A vantagem é que poderá reservar o dia da
semana e a hora que lhe convier para isso.
A organização é o quesito indispensável, porque há uma sequência a ser
seguida e prazos definidos para as atividades.
Bons estudos!
3
2 MODELO DE ANÁLISE DE SOFTWARE (ORIENTADA A OBJETOS)
Fonte: google.com.br
4
3 ENGENHARIA DE SOFTWARE APLICADA À ANÁLISE DE SOFTWARE
ORIENTADA A OBJETOS
A era tecnológica almeja por softwares cada vez mais complexos. Essa
complexidade está ligada diretamente à grande quantidade de informações que
devem ser processadas simultaneamente. Com o tempo, os recursos tecnológicos
passaram por diversas mudanças, tanto em seus dispositivos físicos quanto lógicos.
A Engenharia de Software surgiu devido à necessidade de haver técnicas que
norteassem o processo de desenvolvimento do software (Morais, 2018).
Diante dos diversos conceitos, métricas e ferramentas que regem a
Engenharia de Software, foram desenvolvidas maneiras de realizar a análise de
software. Primeiramente, o modelo mais utilizado foi o modelo de análise
estruturada, que ficou conhecido também como um modelo clássico. Por ser
clássico, ele traz conceitos de base para se realizar a análise de um software.
Porém, como citado anteriormente, vivemos em uma era em que os artefatos
tecnológicos devem ser cada vez mais robustos e compatíveis às novas
tecnologias. (Morais, 2018).
A OOA (análise orientada a objetos, em inglês object-oriented analysis,) é
uma técnica de análise semiformal para o paradigma de orientação a objetos. A
análise orientada a objetos é um componente-chave do paradigma de orientação a
objetos. Quando esse fluxo de trabalho é realizado, as classes são extraídas. Os
casos de uso e as classes são a base de um produto de software orientado a objetos
a ser desenvolvido (SCHACH, 2010, p.395). Dessa forma, “concentra-se na
definição de classes e na maneira como colaboram entre si para atender aos
requisitos dos clientes” (PRESSMAN; MAXIM, 2016, p. 172). Uma classe traz um
conceito do mundo real, representa algum conceito, um objeto, que tem
comportamento e características e que executa ações.
Assim como as diversas vertentes da Engenharia de Software, a
metodologia de análise de software também requer técnicas específicas para que
todos os detalhes observados sejam documentados, seja por meio da escrita de
5
uma documentação específica, seja pelo uso de recursos gráficos. Veremos quais
elementos são utilizados pela análise orientada a objetos no próximo tópico.
Uma das metodologias existentes na Engenharia de Software é a
metodologia ágil e que pode ser aplicada na análise de software. No The Official
Agile Modeling Site, Scott Ambler (apud PRESSMAN; MAXIM, 2016, p. 81),
descreve modelagem ágil (AM) da seguinte maneira:
Fonte:google.com.br
6
até mesmo porque o uso de uma metodologia ou ferramenta irá depender do
contexto ao qual ela será inserida. Dessa forma, para a realização da análise de
software orientado a objetos, se faz comum o uso da linguagem de modelagem
unificada (do inglês UML – unified modeling language) como elemento de
representação gráfica e informacional de dados e informações de um software.
(Morais, 2018).
7
melhor entender o código existente em diagramas UML; ou geração
de código (Engenharia avante).
8
4.2 Diagrama de classe
O diagrama de classe
9
apontar, da classe que está disponibilizando, seus atributos e operações.
Chamamos essa classe de superclasse (Figura 2).
10
4.3 Casos de uso
11
produto de software são os clientes e os funcionários do banco, como
caixas e gerentes.
12
• Que exceções poderiam ser consideradas à medida que uma
jornada é descrita?
• Quais são as variações possíveis na interação do ator?
• Que informações de sistema o ator adquire, produz ou modifica?
• O ator terá de informar o sistema sobre mudanças no ambiente
externo?
• Que informações o ator deseja do sistema?
• O ator gostaria de ser informado sobre mudanças inesperadas?
13
5 VANTAGENS E DESVANTAGENS DA ANÁLISE ORIENTADA A OBJETOS
14
15
6 PADRÕES DE PROJETOS
16
Uma analogia nos ajudará a ilustrar este ponto. Os novelistas ou autores de
roteiros (cinema, teatro, televisão) raramente projetam suas tramas do zero. Em vez
disso, eles seguem padrões como “O herói tragicamente problemático” (Macbeth,
Hamlet, etc.) ou “A Novela Romântica” (um sem-número de novelas de romances).
Do mesmo modo, projetistas de software orientado a objetos seguem padrões como
“represente estados como objetos” e “adorne objetos de maneira que possa
facilmente acrescentar/remover características”. Uma vez que você conhece o
padrão, uma grande quantidade de decisões de projeto decorre automaticamente.
(SAGAH, 2018)
Todos sabemos o valor da experiência de projeto. Quantas vezes você já
não passou pela experiência do déja vu durante um projeto – aquele sentimento de
que já resolveu um problema parecido antes, embora não sabendo exatamente
onde e como? Se pudesse lembrar os detalhes do problema anterior e de que forma
o resolveu, então poderia reutilizar a experiência em lugar de redescobri-la.
Contudo, nós não fazemos um bom trabalho ao registrar experiência em projeto de
software para uso de outros. (SAGAH, 2018)
Os padrões de projeto tornam mais fácil reutilizar projetos e arquiteturas
bem-sucedidas. Expressar técnicas testadas e aprovadas as torna mais acessíveis
para os desenvolvedores de novos sistemas. Os padrões de projeto ajudam a
escolher alternativas de projeto que tornam um sistema reutilizável e a evitar
alternativas que comprometam a reutilização. Os padrões de projeto podem
melhorar a documentação e a manutenção de sistemas ao fornecer uma
especificação explícita de interações de classes e objetos e o seu objetivo
subjacente. Em suma, ajudam um projetista a obter mais rapidamente um projeto
adequado. (SAGAH, 2018)
Nenhum dos padrões de projeto descreve projetos novos ou não-testados.
Incluímos somente projetos que foram aplicados mais de uma vez em diferentes
sistemas. Muitos deles nunca foram documentados antes. São parte do folclore da
comunidade de desempenho de software orientado a objetos ou elementos de
sistemas orientados a objetos bem-sucedidos — em nenhum dos casos é fácil para
projetistas novatos aprender as lições. Assim, embora esses projetos não sejam
17
novos, nós os capturamos numa forma nova e acessível: como um catálogo de
padrões, que tem um formato consistente. (SAGAH, 2018)
18
inflexível. Algumas vezes, o problema incluirá uma lista de condições
que devem ser satisfeitas para que faça sentido aplicar o padrão.
19
aplicação inteira ou subsistema. Padrões de projeto, neste livro, são descrições de
objetos e classes comunicantes que precisam ser personalizadas para resolver um
problema geral de projeto num contexto particular. (SAGAH, 2018)
Um padrão de projeto nomeia, abstrai e identifica os aspectos-chave de
uma estrutura de projeto comum para torná-la útil para a criação de um projeto
orientado a objetos reutilizável. O padrão de projeto identifica as classes e
instâncias participantes, seus papéis, colaborações e a distribuição de
responsabilidades. Cada padrão de projeto focaliza um problema ou tópico
particular de projeto orientado a objetos. Ele descreve em que situação pode ser
aplicado, se ele pode ser aplicado em função de outras restrições de projeto e as
consequências, custos e benefícios de sua utilização. Uma vez que em algum
momento devemos implementar nossos projetos, um padrão de projeto também
fornece exemplos em código – nesse caso, C++ e, algumas vezes, Smalltalk – para
ilustrar uma implementação. (SAGAH, 2018)
Embora padrões de projeto descrevam projetos orientados a objeto,
baseiam-se em soluções reais que foram implementadas nas principais linguagens
de programação orientadas a objeto, como Smalltalk e C++, em vez de
implementações em linguagens procedurais (Pascal, C, Ada) ou linguagens
orientadas a objetos mais dinâmicas (CLOS, Dylan, Self). Nós escolhemos Smalltalk
e C++ por razões práticas: a nossa experiência do dia a dia foi com estas linguagens
e elas estão se tornando cada vez mais populares. (SAGAH, 2018)
A escolha da linguagem de programação é importante porque influencia o
ponto de vista do projetista (usuário do pradrão): nossos padrões assumem
recursos de linguagem do nível do Smalltalk/C++, e essa escolha determina o que
pode, ou não, ser implementado facilmente. Se tivéssemos assumido o uso de
linguagens procedurais, deveríamos ter incluído padrões de projetos como
“Herança”, “Encapsulamento” e “Polimorfismo”. De maneira semelhante, alguns dos
nossos padrões são suportados diretamente por linguagens orientadas a objetos
menos comuns. Por exemplo, CLOS tem multi- métodos que diminuem a
necessidade de um padrão como Visitor (pág. 305). De fato, há bastante diferenças
20
entre Smalltalk e C++, o que significa que alguns padrões podem ser expressos
mais facilmente em uma linguagem que em outra. (SAGAH, 2018)
21
Além disso, alguns programadores e projetistas começaram a perceber que
algumas necessidades não eram atendidas com as atuais linguagens de
programação imperativa de decomposição funcional e abstração de dados, como
os padrões de graphical user interfaces (GUI), que poderiam ser melhor
implementadas com o conceito de objetos que pudessem trocar mensagens uns
com os outros. Uma GUI poderia ser mais facilmente implementada se
considerarmos, por exemplo, que seus componentes (botões, áreas de texto,
imagens etc.) são tratados como objetos que podem interagir entre si e com o
usuário do sistema. (SAGAH, 2018)
Assim, a POO surge como um paradigma centrado no desenvolvimento de
objetos, no lugar da atual decomposição funcional e abstração de dados. Na Figura,
você pode perceber um pouco dessa diferença entre a atual programação
estruturada e o conceito de objetos. (SAGAH, 2018)
22
serve como um modelo para que diversas instâncias de um objeto sejam criadas a
partir de sua estrutura. (SAGAH, 2018)
Ao analisar a Figura, você pode perceber que um programa em
programação estrutural possui um desempenho melhor que um mesmo programa
em POO, e isso ocorre pelo fato de, na programação estruturada, um código ser
executado após o outro sequencialmente, ao passo que na POO são necessários
alguns desvios. Entretanto, a POO traz outros pontos que acabam sendo mais
interessantes no contexto de aplicações modernas. Como, na maioria das
aplicações, o desempenho das aplicações não é uma das grandes preocupações
(devido ao poder de processamento dos computadores atuais), a POO se tornou
muito difundida. (SAGAH, 2018)
Na próxima seção, vamos abordar como as linguagens Java, C# e Python
implementam os conceitos da POO. Essas linguagens serão exemplos por serem
muito utilizadas atualmente no contexto de desenvolvimento de software.
23
Em Java, todo o programa usa classes e objetos, e é fundamental que o
programador compreenda esses conceitos da POO para conseguir programar em
Java. Os programas são escritos em pequenos pedaços separados, chamados de
objetos. Segundo Machado, Franco e Bertagnolli (2016, p. 78), “Objetos são
pequenos programas que guardam dentro de si os dados — em suma, as variáveis
— que precisam para executar suas tarefas”. Os objetos também trazem em si,
como sub-rotinas, as instruções para processar esses dados. As variáveis que um
objeto guarda são chamadas de atributos, e as suas sub- -rotinas são chamadas de
métodos. (SAGAH, 2018)
Veja o exemplo de uma classe Cachorro em Java com os atributos nome,
peso, altura e cor e o método pular ().
24
Agora, vamos analisar a linguagem C#. A linguagem C# (lê-se C Sharp) é
definida pela Microsoft, que a desenvolve como uma linguagem de POO que faz
parte de sua plataforma de desenvolvimento .NET. Embora a linguagem C# tenha
sido criada totalmente do zero pela Microsoft, foi baseada na linguagem C++, e
possui muitos elementos das linguagens Java e Pascal. (SAGAH, 2018)
A plataforma .NET na qual teve seu desenvolvimento inicial, apresentou
algumas limitações que motivaram que, em 1999, fosse montada uma força tarefa
para o desenvolvimento de uma nova linguagem para essa plataforma.
Segundo Ledur (2018, p. 108):
25
Você pode perceber que, assim como em Java, C# possui uma estrutura
semelhante com a declaração dos atributos da classe logo no início e depois em
seus métodos, além de uma semelhança na sintaxe entre as duas linguagens, o
que é explicado devido ao embasamento do C# na linguagem Java. (SAGAH, 2018)
Para finalizar esta seção, vamos abordar a POO na linguagem de
programação Python, que é uma linguagem de programação bastante utilizada por
sua facilidade de aprendizado, aliada as suas características de programação de
alto nível, de script, imperativa, OO e interpretada. (SAGAH, 2018)
Python é uma linguagem que permite o desenvolvimento tanto no conceito
de programação estruturada como a POO. Possui suporte a tipificação dinâmica,
recursos de gerenciamento de uso de memória, além de oferecer uma abrangente
biblioteca padrão. Os interpretadores Python possuem suporte para diversos
sistemas operacionais, possibilitando a adaptação dos sistemas construídos.
(SAGAH, 2018)
26
A origem do nome Python, apesar de confundido com o animal cobra, na
realidade é oriunda do grupo de comédia britânico que era assistido pelo criador da
linguagem, chamado Monty Python, formado por Graham Chapman, John Cleese,
Eric Idle, Michael Palin, Terry Jones e Terry Gilliam. (SAGAH, 2018)
Carinhosamente, são chamados de Pythonistas os programadores Python,
e as referências aos trabalhos do grupo de comédia estão espalhadas pelos tutoriais
e sua documentação (LUTZ; ASCHER, 2007).
Python é uma linguagem muito simples, fácil de usar e aprender, apesar
disso, também é uma linguagem extremamente robusta e utilizada nas mais
diversas soluções:
• back-end de sistemas Web, customer relationship management
(CRM), ou gerenciamento de relacionamento com o cliente;
• pesadas simulações de engenharia;
• processamento pesado de efeitos especiais de filmes;
• soluções de análise de dados (data analytics);
• aprendizado de máquina, do inglês machine learning (ML).
27
Apesar da sintaxe do Python ser um pouco diferente da sintaxe de Java e
C#, é possível verificar a estrutura da classe com a definição de atributos e métodos
e que Python é outro exemplar de linguagem OO. Na próxima seção, você verá
alguns exemplos da aplicação da programação OO em classes de exemplos, para
fixar o entendimento. (SAGAH, 2018)
28
• classes;
• heranças.
Observe na Figura, onde consta a classe Pessoa.
29
É possível, portanto, observar que no início da classe Aluno existe a
declaração extends. Essa declaração significa que a classe Aluno está dizendo que
herda a classe Pessoa, dessa forma, os atributos que são comuns à classe Pessoa
não necessitam ser repetidos. Além disso, percebe-se que a classe Aluno possui o
atributo matrícula, que é específico do Aluno. (SAGAH, 2018)
Por fim, veja que, na classe Aluno, o método tirarCopias é alterado de
acordo com o valor específico para os Alunos, o que é possível em razão de um
outro recurso de POO: o polimorfismo. Polimorfismo é um recurso que permite ao
objeto ter um comportamento diferente, dependendo da situação. Nesse caso, o
cálculo do valor da cópia se altera por conta da situação de desconto de aluno.
Pelos exemplos apresentados, percebe-se na prática alguns recursos e
usos da programação OO e seus benefícios para a programação, possibilitando,
principalmente, a reutilização do código. (SAGAH, 2018)
Conceitos como os observados nos exemplos das Figuras 3 e 4 são casos
comuns em POO, por isso é importante todo programador conseguir abstrair
classes com seus atributos e métodos separados e, quando utilizar conceitos bases
da POO, como herança de classes, evitar reutilização de código. (SAGAH, 2018)
30
9 REFERÊNCIAS
31
LEDUR, C. L. Desenvolvimento de sistemas com C#. Porto Alegre: SAGAH,
2018. 268 p.
32