Upload
hatuyen
View
213
Download
0
Embed Size (px)
Citation preview
Modelagem de SoftwareOrientada a Objetos
com UML
Luiz Fernando Martha
André Pereira
CIV2802 – Sistemas Gráficos para Engenharia
2018.1
Conteúdo
• Conceitos Básicos de Orientacão a Objetos
• UML (Unified Modeling Language)
• Modelagem de Software Orientada a ObjetosCalculadora RPN
• Introdução aos Padrões de Projeto
A maioria dos métodos utilizados em ambientes de desenvolvimento desoftware se baseia em uma decomposição funcional e/ou controlada por dados
dos sistemas. Estas abordagens se diferem em diversos aspectos das abordagensque adotam metodologias orientadas a objetos, onde dados e funções são
altamente integrados.
O desenvolvimento de software com a abordagem orientada à objetosconsiste na construção de módulos independentes ou objetos que podem serfacilmente substituídos, modificados e reutilizados. Ela retrata a visão do mundoreal como um sistema de objetos cooperativos e colaborativos. Neste caso, osoftware é uma coleção de objetos discretos que encapsulam dados e operações
executadas nesses dados para modelar objetos do mundo real. A classe descreveum grupo de objetos que têm estruturas semelhantes e operações similares.
A filosofia Orientada a Objetos é muito similar ao mundo real e, portanto,vem ganhando popularidade pois os sistemas aqui são vistos como um conjuntode objetos que interagem assim como no mundo real. Para implementar esteconceito, a programação estruturada baseada em processos não é utilizada; emvez disso, os objetos são criados usando estruturas de dados. Assim como todalinguagem de programação oferece vários tipos de dados, da forma similar, nocaso dos objetos certos tipos de dados são pré-definidos. (Nath, 2014 – LectureNotes on Object-Oriented Methodology)
Orientacão a Objetos
Orientacão a ObjetosA abordagem orientada a objetos possibilita uma melhor organização, versatilidade e
reutilização do código fonte, o que facilita atualizações e melhorias nos programas. Aabordagem orientada a objetos é caracterizada pelo uso de classes e objetos, e de outrosconceitos que serão esclarecidos a seguir.
• Classes são espécies de montadoras de objetos, que definem suascaracterísticas como, quais funções são capazes de realizar e quais os atributosque o objeto possui. Essa forma de programar permite ao usuário resolverproblemas utilizando conceitos do mundo real.
• Objeto é uma instancia gerada a partir de uma classe. Um objeto éidentificado a partir dos métodos e dos atributos que possui.
• Encapsulamento é o ato de esconder do usuário os processos internos de umobjeto, classe ou método.
• Herança (e Polimorfismo) é uma característica que permite a determinadaclasse herdar as características de outra classe. Ou seja, a classe descendenteadquiri todos os métodos e atributos da classe pai.
Métodos são as funções que objeto pode realizar.Atributo é tudo que um objeto possui como variável.
Orientacão a Objetos
Classe, Objeto e Encapsulamento
#ifndef STACK_H
#define STACK_H
class Stack
{
public:
Stack();
~Stack();
void push(double _n);
double pop();
bool isEmpty();
void show();
private:
int m_top;
double *m_elems;
};
#endif
#ifndef REAL_H
#define REAL_H
class Real
{
public:
Real(double _val);
~Real();
Real sum(Real _n);
Real sub(Real _n);
Real mul(Real _n);
Real div(Real _n);
private:
double m_value;
};
#endif
Orientacão a Objetos
Classe, Objeto e Encapsulamento
#ifndef STACK_H
#define STACK_H
class Stack
{
public:
Stack();
~Stack();
void push(double _n);
double pop();
bool isEmpty();
void show();
private:
int m_top;
double *m_elems;
};
#endif
#ifndef REAL_H
#define REAL_H
class Real
{
public:
Real(double _val);
~Real();
Real sum(Real _n);
Real sub(Real _n);
Real mul(Real _n);
Real div(Real _n);
private:
double m_value;
};
#endif
#ifndef STACK_H
#define STACK_H
#include "real.h"
class Stack
{
public:
Stack();
~Stack();
void push(Real _n);
Real pop();
bool isEmpty();
void show();
private:
int m_top;
Real* m_elems;
};
#endif
Orientacão a ObjetosA abordagem orientada a objetos possibilita uma melhor organização, versatilidade e
reutilização do código fonte, o que facilita atualizações e melhorias nos programas. Aabordagem orientada a objetos é caracterizada pelo uso de classes e objetos, e de outrosconceitos que serão esclarecidos a seguir.
• Classes são espécies de montadoras de objetos, que definem suascaracterísticas como, quais funções são capazes de realizar e quais os atributosque o objeto possui. Essa forma de programar permite ao usuário resolverproblemas utilizando conceitos do mundo real.
• Objeto é uma instancia gerada a partir de uma classe. Um objeto éidentificado a partir dos métodos e dos atributos que possui.
• Encapsulamento é o ato de esconder do usuário os processos internos de umobjeto, classe ou método.
• Herança (e Polimorfismo) é uma característica que permite a determinadaclasse herdar as características de outra classe. Ou seja, a classe descendenteadquiri todos os métodos e atributos da classe pai.
Métodos são as funções que objeto pode realizar.Atributo é tudo que um objeto possui como variável.
#ifndef COMPLEX_H
#define COMPLEX_H
class Complex
{
public:
Complex(double _re,
double _im);
~Complex();
Complex sum(Complex _n);
Complex sub(Complex _n);
Complex mul(Complex _n);
Complex div(Complex _n);
private:
double m_real;
double m_imag;
};
#endif
Orientacão a Objetos
Herança e Polimorfismo
#ifndef REAL_H
#define REAL_H
class Real
{
public:
Real(double _val);
~Real();
Real sum(Real _n);
Real sub(Real _n);
Real mul(Real _n);
Real div(Real _n);
private:
double m_value;
};
#endif
#ifndef NUMBER_H
#define NUMBER_H
class Number
{
public:
Number(int _type);
~Number();
Number sum(Number _n);
Number sub(Number _n);
Number mul(Number _n);
Number div(Number _n);
private:
int m_type;
};
#endif
#ifndef COMPLEX_H
#define COMPLEX_H
class Complex
{
public:
Complex(double _re,
double _im);
~Complex();
Complex sum(Complex _n);
Complex sub(Complex _n);
Complex mul(Complex _n);
Complex div(Complex _n);
private:
double m_real;
double m_imag;
};
#endif
Orientacão a Objetos
Herança e Polimorfismo
#ifndef REAL_H
#define REAL_H
class Real
{
public:
Real(double _val);
~Real();
Real sum(Real _n);
Real sub(Real _n);
Real mul(Real _n);
Real div(Real _n);
private:
double m_value;
};
#endif
#ifndef NUMBER_H
#define NUMBER_H
class Number
{
public:
Number(int _type);
~Number();
Number sum(Number _n);
Number sub(Number _n);
Number mul(Number _n);
Number div(Number _n);
protected:
int m_type;
};
#endif
#ifndef COMPLEX_H
#define COMPLEX_H
#include "number.h"
class Complex : Number
{
public:
Complex(double _re,
double _im);
~Complex();
Number sum(Number _n);
Number sub(Number _n);
Number mul(Number _n);
Number div(Number _n);
private:
double m_real;
double m_imag;
};
#endif
Orientacão a Objetos
Herança e Polimorfismo
#ifndef REAL_H
#define REAL_H
#include "number.h"
class Real : Number
{
public:
Real(double _val);
~Real();
Number sum(Number _n);
Number sub(Number _n);
Number mul(Number _n);
Number div(Number _n);
private:
double m_value;
};
#endif
#ifndef NUMBER_H
#define NUMBER_H
class Number
{
public:
Number(int _type);
~Number();
virtual Number sum(Number _n) = 0;
virtual Number sub(Number _n) = 0;
virtual Number mul(Number _n) = 0;
virtual Number div(Number _n) = 0;
protected:
int m_type;
};
#endif
#ifndef COMPLEX_H
#define COMPLEX_H
#include "number.h"
class Complex : Number
{
public:
Complex(double _re,
double _im);
~Complex();
Number sum(Number _n);
Number sub(Number _n);
Number mul(Number _n);
Number div(Number _n);
private:
double m_real;
double m_imag;
};
#endif
Orientacão a Objetos
Herança e Polimorfismo
#ifndef REAL_H
#define REAL_H
#include "number.h"
class Real : Number
{
public:
Real(double _val);
~Real();
Number sum(Number _n);
Number sub(Number _n);
Number mul(Number _n);
Number div(Number _n);
private:
double m_value;
};
#endif
UMLLinguagem de Modelagem Unificada
UML é uma linguagem padrão da indústria para:
Componentes de um Software
(Modelagem de negócios) (Comunicações)
(Especificação) (Visualização) (Construção) (Documentação)
UMLLinguagem de Modelagem Unificada
Definição:
É uma linguagem gráfica para visualizar, especificar, construir e documentar os artefatos de um sistema computacional orientado a objetos
UMLLinguagem de Modelagem Unificada
Definição:
É uma linguagem gráfica para visualizar, especificar, construir e documentar os artefatos de um sistema computacional orientado a objetos
Vantagens:
- Desenvolvimento de programas de forma rápida, eficiente e efetiva;
- Revela a estrutura desejada e o comportamento do sistema;
- Permite a visualização e controle da arquitetura do sistema;
- Melhor entendimento do sistema que está sendo construído e gerenciamento de riscos.
UMLVisões (Arquitetura de um Sistema OO)
De acordo com a UML, deve-se ter uma visão de casos de uso, expondo as exigênciasdo sistema; uma visão de projeto, capturando o vocabulário do espaço do problema e doespaço da solução; uma visão do processo, modelando a distribuição dos processos elinhas do sistema; uma visão de implementação, dirigindo-se à realização física dosistema; e uma visão de distribuição, focando na edição da engenharia de sistema.
Cada uma dessas visões pode ter aspectos estruturais, assim como comportamentais.Juntas, essas visões representam a especificação completa de um sistema computacional.
Blocos de Construção da UML
Elementos (Things):
São as entidades básicas no modelo.
Relações (Relationships):Conecta e amarra os elementos.
Diagramas (Diagrams):Eles são os gráficos dos elementos e suas relações.
Elementos: Classes em UMLBlocos de Construção
#ifndef NUMBER_H
#define NUMBER_H
class Number
{
public:
Number(int _type);
~Number();
virtual Number sum(Number _n) = 0;
virtual Number sub(Number _n) = 0;
virtual Number mul(Number _n) = 0;
virtual Number div(Number _n) = 0;
protected:
int m_type;
};
#endif
Como representar
esta classe em UML?
Elementos: Classes em UMLBlocos de Construção
#ifndef NUMBER_H
#define NUMBER_H
class Number
{
public:
Number(int _type);
~Number();
virtual Number sum(Number _n) = 0;
virtual Number sub(Number _n) = 0;
virtual Number mul(Number _n) = 0;
virtual Number div(Number _n) = 0;
protected:
int m_type;
};
#endif
Number
m_type
sum(_n)
sub(_n)
mul(_n)
div(_n)
Number
# m_type:int
+ sum(_n:Number) : Number
+ sub(_n:Number) : Number
+ mul(_n:Number) : Number
+ div(_n:Number) : Number
Elementos: Classes em UMLBlocos de Construção
#ifndef NUMBER_H
#define NUMBER_H
class Number
{
public:
Number(int _type);
~Number();
virtual Number sum(Number _n) = 0;
virtual Number sub(Number _n) = 0;
virtual Number mul(Number _n) = 0;
virtual Number div(Number _n) = 0;
protected:
int m_type;
};
#endif
Real
m_value
sum(_n)
sub(_n)
mul(_n)
div(_n)
Complex
– m_real:double
– m_imag:double
+ sum(_n:Number) : Number
+ sub(_n:Number) : Number
+ mul(_n:Number) : Number
+ div(_n:Number) : Number
Number
m_type
sum(_n)
sub(_n)
mul(_n)
div(_n)
Number
# m_type:int
+ sum(_n:Number) : Number
+ sub(_n:Number) : Number
+ mul(_n:Number) : Number
+ div(_n:Number) : Number
Relações: entre Classes UMLBlocos de Construção
Real
m_value
sum(_n)
sub(_n)
mul(_n)
div(_n)
Complex
– m_real:double
– m_imag:double
+ sum(_n:INumber) : INumber
+ sub(_n:INumber) : INumber
+ mul(_n:INumber) : INumber
+ div(_n:INumber) : INumber
Stack
m_top:int
m_elems:*INumber
push(_n:INumber)
pop() : INumber
isEmpty() : bool
show()
INumber
# m_type:int
+ sum(_n:INumber) : INumber
+ sub(_n:INumber) : INumber
+ mul(_n:INumber) : INumber
+ div(_n:INumber) : INumber
Como estas classes
estão relacionadas?
Como representar estas
relações em UML?
Relações: entre Classes UMLBlocos de Construção
Real
m_value
sum(_n)
sub(_n)
mul(_n)
div(_n)
Complex
– m_real:double
– m_imag:double
+ sum(_n:INumber) : INumber
+ sub(_n:INumber) : INumber
+ mul(_n:INumber) : INumber
+ div(_n:INumber) : INumber
Stack
m_top:int
m_elems:*INumber
push(_n:INumber)
pop() : INumber
isEmpty() : bool
show()
INumber
# m_type:int
+ sum(_n:INumber) : INumber
+ sub(_n:INumber) : INumber
+ mul(_n:INumber) : INumber
+ div(_n:INumber) : INumber
Uma metodologia é um processo organizado de produção de software, que utiliza técnicas predefinidas e notações convencionais.
As etapas que compõem este processo correspondem ao ciclo de vida do software.
Tradicionalmente, a formulação inicial do problema, a análise, o projeto, a implementação, os testes e a operação (manutenção e aperfeiçoamento) compõem estas etapas do ciclo de vida.
“Um modelo é uma abstração de alguma coisa, cujo propósito é permitir que se conheça essa coisa antes de se construí-la” (Rumbaugh, 1994).
Modelagem Orientada a Objetos
Modelagem Orientada a Objetos
• Exigências
- Pré-requisitos / Requerimentos
- Interface com o Usuário
• Análise Orientada a Objetos
- Casos de Uso
- Diagrama de Robustez
• Projeto Orientado a Objetos
- Diagramas de Sequência
- Diagramas de Classe
• Programação Orientada a Objetos
Exigências / Pré-requisitos
Deve ser possível inserir vários números na calculadora. Os números podem
ser inteiros, reais e complexos. Os números reais têm duas casas decimais e
os complexos têm duas casas decimais nas partes real e imaginária.
Deve ser possível realizar as quatro operações básicas: adição, subtração,
multiplicação e divisão.
As operações devem ser realizadas com os dois últimos números que
entraram na calculadora. Portanto, o pré-requisito para fazer uma operação é
ter entrado com pelo menos dois números. O resultado de cada operação é
um novo número criado, que substitui os dois números utilizados na operação.
O restante dos números fica inalterado.
Devem ser visualizados apenas os quatro últimos números entrados.
Modelagem Orientada a Objetosde uma Calculadora RPN
Modelagem Orientada a Objetosde uma Calculadora RPN
Interface com o Usuário
Esboço da Interface gráfica do programa.
Estão faltando no esboço os seguintes botões:
- enter
- apagar o último número inserido
- chavear diferente tipo de número
Análise Orientada a Objetosda Calculadora RPN
Casos de Uso- Escolher o Tipo de NúmeroPode ser uma opção realizada no início da execução do programa, que irá definir o
comportamento da calculadora. Durante a execução do programa, o usuário também pode
pressionar um botão para escolher o tipo de número que ele quer trabalhar. Os números
que já estão na calculadora, devem ser automaticamente convertidos para o novo formato.
- Inserir um NúmeroO caso de uso “Inserir um Número" é inicializado quando o usuário pressiona um botão
correspondente ao número que ele deseja inserir na calculadora. Se o número for do tipo
Inteiro ou Real basta ele clicar no botão com o número, porém se o tipo for complexo ele
precisa inserir primeiro á parte real e em seguida, após um espaço, a parte imaginária.
- Executar uma OperaçãoEsse caso de uso é inicializado quando o usuário pressiona o botão correspondente a
operação que ele deseja realizar. Qualquer operação é realizada com os dois últimos
números que entraram na calculadora, porém o resultado depende da operação.
- Remover o último númeroRemove o último número sem fazer nenhuma operação. O penúltimo passa a ser o último.
- Sair do ProgramaEsse caso de uso é inicializado quando o usuário clica a caixa de fechamento do programa
na janela principal do aplicativo. Os valores que estão na calculadora são perdidos.
Análise Orientada a Objetosda Calculadora RPN
Diagrama de RobustezUm diagrama de robustez é basicamente um diagrama de colaboração UML simplificado.
Uma leitura inicial dos casos de uso sugere que o seguinte será parte do sistema:
- Um objeto ou entidade única para representar a calculadora (RPN).
- Uma quantidade arbitrária de objetos, cada representando um determinado número (Number) Esse número ainda pode ser: inteiro (Integer), real (Real)
ou complexo (Complex).
- Uma estrutura de dados especial para armazenar os números, sendo que o
último número entrado é o primeiro a ser operado ou removido. Logo, a estrutura que demonstra ser a mais adequada para essa aplicação é a pilha (Stack).
- Um objeto gráfico representando a interface entre o sistema calculadora e o usuário (RPN_GUI).
- A controller object that carries out the use cases in response to user gestures on the GUI (RPNController). (Para um problema pequeno como esse, um único
controle é suficiente.)
Análise Orientada a Objetosda Calculadora RPN
Diagrama de RobustezOs vários casos de uso trabalham com esses objetos, como se segue:
- Inserir um número envolve pegar a nova informação do usuário, e então dizer ao
objeto RPN para adicionar um novo número com essa informação na sua coleção.
-Executar uma operação envolve retirar os dois últimos números guardados no
objeto RPN, executar a operação com esses números e mostrar na tela o seu
resultado, o qual é adicionado como um novo número na sua coleção.
- etc…
Projeto Orientado a Objetosda Calculadora RPN
Diagramas de SequênciaCada um dos casos de uso descobertos na Análise do sistema será realizado por
uma sequência de operações envolvendo os vários objetos que constituem o
sistema:
Padrões de Projeto
- Identificação de Objetos (tarefa difícil)
- Técnicas de Decomposição do Sistema em Objetos
- Identificação das Abstrações Menos Óbvias