Você está na página 1de 38

PROJETO E

ARQUITETURA DE
SOFTWARE
(visão geral)
Anderson A. Namen
Introdução

Análise → o que fazer?


Projeto → como fazer?
Análise X Projeto
◼ Ex.: O conceito “Livro” em um sistema de biblioteca

Conceito Representação Representação


de domínio na análise no projeto

Livro Livro
título título
imprimir()

public class Livro


{
Representação public void imprimir();
no código
private String titulo;
}
Análise X Projeto
“Diferentemente do modelo de análise, que enfoca
a descrição dos dados, funções e comportamento
requeridos, o modelo de projeto fornece detalhe
sobre a estrutura de dados, arquitetura, interfaces
e componentes de software necessários para
implementar o sistema”
(Pressman)
Projeto de software
◼ Objetivo final: qualidade
◼ Boa manutenibilidade
 Fácil entendimento
 Facilidade nas alterações
 Reuso
◼ Custos reduzidos
A relação entre manutenção e projeto

Fonte: Stair, R.
Projeto de software
◼ Criação de abstrações procedurais e de dados
 Procedurais
Ex: abrir porta = ande até a porta; segure a
maçaneta; gire a maçaneta; puxe a porta
 Dados
Ex: atributos de porta: tipo de porta, peso,
dimensões, direção de giro, etc
 Tipos Abstratos de Dados
Projeto de software
◼ Definir a arquitetura de software
◼ Arquitetura? Organização dos componentes do
programa, o modo de interação entre os mesmos e
as estruturas de dados usadas
◼ Utilizar padrões de projeto
◼ Buscar modularidade
Projeto de software
◼ Princípio do ocultamento da informação
(encapsulamento em OO)
◼ Ouvistes falar (mal) de variáveis globais?
◼ Independência funcional
 Coesão alta e baixo acoplamento
◼ Divisão em camadas
◼ Pensar sempre em reutilização!!
Da Análise para o Projeto
Caso de Uso:
Vender Itens
Vender Itens :Sistema
...
1. Este caso de Caixa
uso começa... entrarItem(idprod, qtde)

terminarVenda() CtrVenderItens
Caso de Uso (Controladora)
registrarPagamento(quantia)
entrarItem()
DSS´s terminarVenda()

entrarPagamento()
Operação:
entrarItem Operação: Operações de sistema
terminarVenda
...
Pós-condições . . .
... Pós-condições:
...
Contratos
Iniciando o Projeto

Vender Itens

idProd

Produto
Pertence-a CatalogoProdutos
* Descrita-por 1 1..* 1
descricao
preco
idProd
Extraído de Larman
Projeto – Diagrama de Comunicação
(ou colaboração – antes da UML 2.0)

:CtrVenderItens

Exemplo de Larman
Projeto – Diagrama de Sequência
:CtrVenderItens

Exemplo de Larman
Projeto – Diagrama de Sequência

:CtrVenderItens

Exemplo de Larman
Projeto – Diagrama de Sequência

:CtrVenderItens

Exemplo de Larman
Projeto - Camadas

1.1.

:CtrVenderItens 1.1.1.

Extraído de Larman
Projeto – Diagrama de Classes

CtrVenderItens

Exemplo de Larman
Diagrama de Classes (OO)

◼ No projeto:

 há preocupação com os métodos

 também com artefatos de software (ex: classe janela,


classe com métodos para atualizar BD, segurança, etc)
Diagrama de Classes

Extraído de Larman
Outros diagramas já vistos
◼ Diagramas como o de estado, também podem ser
usados no projeto. Veja esse exemplo:

Extraído de Guedes, G.
Diagrama de Pacotes
◼ Representa a arquitetura lógica do sistema

◼ Ou seja, a organização de classes em subsistemas

◼ Cada subsistema provê ou utiliza serviços de


outros subsistemas

◼ Pensar em coesão, acoplamento e divisão em


camadas
Diagrama de Pacotes

VenderItens

Adaptado de Larman
Diagrama de Implantação
◼ Representa a arquitetura física do sistema

◼ Identifica as máquinas que suportarão o sistema

◼ O que cada uma conterá

◼ E como estarão conectadas

◼ Desnecessário em sistemas simples


Diagrama de implantação

Extraído de Larman
Diagrama de Componentes
◼ Também representa a arquitetura física do sistema

◼ Identifica os arquivos que compõem o software


 Módulos
 Bibliotecas
 Formulários
 Arquivos de help

◼ E também como os componentes se relacionam

◼ Muito ligado ao ambiente de programação

◼ Importante para reutilização


Diagrama de Componentes

Extraído de Guedes, G.
Modelagem de dados - Projeto
◼ Lembrar do Modelo Lógico

 Tabelas

 Chaves primárias, estrangeiras, índices

 Mecanismos para garantir integridade


Codificação – Dicas
(Adaptado de “A prática de programação” – Kernighan e Pike)

Exemplo:
if ( (pais == CING) || (pais == BRU) ||
(pais == POL) || (pais == ITA) )
{
/* Se o país for Cingapura, Brunei ou Polônia
* então a hora atual é a hora de resposta
* em vez da hora livre.
*/
...
 Qual o relacionamento entre Cingapura, Brunei,
Polônia e Itália?
 Por que Itália não está no comentário?
Codificação - Dicas
NOMES:
class UserQueue {
int noOfItemsInQ, frontOfTheQueue, queueCapacity;
public int noOfUsersInQueue() {...}
}
n= queue.noOfUsersInQueue();
---------------------------------------------------------------------
OU
n = queue.nusers();
class UserQueue {
int nitems, front, capacity;
public int nusers() {...}
}
Codificação - Dicas
Nomes de funções:
if (checaprimo(c)) ...

OU

if (ehprimo(c))
Codificação - Dicas
Nomes descritivos para variáveis
globais e curtos para locais:
int comprfila = 0; //comprimento atual da fila de entrada

for (indicedoelemento=0; indicedoelemento<numero


deelementos; indicedoelemento++)
arraydeelementos[indicedoelemento]=indicedoelemento;

OU

for (i=0; i < nelems; i++)


elem[i] = i;
Codificação - Dicas
BUSQUE CLAREZA
for (n=0; n<100; field[n++]=‘\0’);
*i =‘\0’; return(‘\n’);

OU

for (n=0; n<100; field[n++]=‘\0’)


;
*i =‘\0’;
return(‘\n’);

OU

for (n=0; n<100; n++)


field[n]=‘\0’);
*i =‘\0’;
return(‘\n’);
Codificação - Dicas
USE A FORMA NATURAL NAS
EXPRESSÕES

if ( !(x < valormin) || !(x >= valormax) )

OU

if ( ( x >= valormin) || (x < valormax) )


Codificação - Dicas
USE parênteses para esclarecer

if ( y % 4 == 0 && y % 100 != 0 || y % 400 == 0)

OU

if ( (y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0) )


Codificação - Dicas
COMENTE AS FUNÇÕES
 Interessante identificar as entradas, a saída da função
e o objetivo (processamento) da mesma.

 O setor de desenvolvimento deve criar uma


padronização de formato dos comentários de funções
Codificação - Dicas
PENSE SEMPRE EM REUSO
 Questione-se sempre!!

 Esse trecho de código pode ser usado em outro local,


em outro momento?

 Como criar uma função, procedimento ou método que


possa ser usado e entendido de forma simples?

 Lembre-se que o que importa é a interface. Ninguém


precisa saber como foi implementada a função.
Codificação - Dicas
DÊ NOME AOS NÚMEROS MÁGICOS
if ( (lin <= 24) && (col <=80) )
...

OU

const int MAXLINS = 24, MAXCOLS = 80; // em C++


if ( (lin <= MAXLINS) && (col <= MAXCOLS) )
...
Codificação - Dicas
ENFIM ...

O QUE IMPORTA É A CLAREZA E A


FACILIDADE DE MANUTENÇÃO

PADRONIZAÇÕES AJUDAM O
ENTENDIMENTO

PENSE SEMPRE EM REUSO

Você também pode gostar