Aula 9 Fases do desenvolvimento de software UML 1 Ideia do cliente 2 2003/2004 Programação Orientada para Objectos Resultado da falta de planeamento 3 2003/2004 Programação Orientada para Objectos Cuidado! 4 Tal como não faz sentido que o arquitecto comece o seu trabalho assentando tijolos no edifício final sem antes o ter projectado, também não faz qualquer sentido uma empresa de desenvolvimento de software começar a resolver um problema escrevendo linhas de código 2003/2004 Programação Orientada para Objectos Fases do desenvolvimento de software Análise Desenho Decisão dos conceitos identificados que serão modelados através de classes e suas relações Resultado: modelo de desenho Implementação 5 Identificação dos conceitos importantes e suas relações Resultado: modelo de análise ou modelo conceptual Implementação do modelo de desenho numa linguagem de programação Resultado: programa 2003/2004 Programação Orientada para Objectos Processo iterativo Análise Desenho Implementação 6 2003/2004 Programação Orientada para Objectos Outras fases do processo de desenvolvimento de software Especificação de requisitos Análise Desenho Implementação Teste Implantação Manutenção 7 2003/2004 Programação Orientada para Objectos Criatividade A criatividade é uma qualidade importante no desenvolvimento de software 8 Deve utilizar-se no desenvolvimento da solução Não na forma como a solução é escrita ou apresentada 2003/2004 Programação Orientada para Objectos Programa 9 Um programa é um modelo simplificado de parte do mundo Uma solução só deve ser complexa se não existir uma solução mais simples 2003/2004 Programação Orientada para Objectos UML: Unified Modelling Language Linguagem gráfica de modelação Grady Booch Ivar Jacobson James Rumbaugh Diagramas representam modelo simplificado Ferramenta importante de comunicação 10 2003/2004 Programação Orientada para Objectos Diagramas em UML Estáticos: 11 De classes De objectos Casos de Utilização Sequência Colaboração Estado Actividade Implementação 2003/2004 Programação Orientada para Objectos Diagramas de classes 12 Representam as classes e as relações que existem entre elas Vários diagramas é melhor que apenas um: ênfase numa parte do modelo Domínio do problema: conceitos - modelo de análise Domínio da solução: classes - modelo de desenho Estáticos: as relações entre as classes não se alteram ao longo da execução do programa 2003/2004 Programação Orientada para Objectos Classes Língua natural Nome comum: “humano” Empregado Classe concreta. UML Humano Empregado C++ Empregado {abstract} 13 Classe abstracta. 2003/2004 class Humano { // … }; Programação Orientada para Objectos Características de uma classe Conjunto das operações e dos atributos de uma classe Empregado - nome_: string - sexo_: Sexo + nome(): string + salário(): double Empregado Atributos - nome_: string - sexo_: Sexo Operações Empregado + nome(): string + salário(): double 14 2003/2004 Programação Orientada para Objectos Características de uma classe Visibilidade 15 +, características públicas #, características protegidas -, características privadas 2003/2004 Programação Orientada para Objectos Características de uma classe Forma … + desenha() + nova(inout entrada: ifstream&): Forma* … Característica com âmbito de instância. Característica com âmbito de classe, Em C++: class Forma { public static Forma* nova(ifstream& entrada); // … }; 16 2003/2004 Programação Orientada para Objectos Notas, comentários e restrições Notas Isto é uma nota. Empregado Classe representando empregados… Restrições {Isto é uma restrição.} Racional - numerador_: int - denominador_: int 17 «invariant» {denominador_ 0 mdc(numerador_, denominador_) = 1} 2003/2004 Programação Orientada para Objectos Operações Cada linha corresponde a uma operação 18 nome_de_função(lista_de_parâmetros): tipo_de_devolução nome_de_procedimento(lista_de_parâmetros) 2003/2004 Programação Orientada para Objectos Operações: parâmetros tipo_de_passagem nome: tipo Tipo de passagem 19 in: alterações ao parâmetro feitas pelo método que implementa a operação não se reflectem no valor do respectivo argumento inout: valor inicial do parâmetro é importante e, além disso, alterações ao parâmetro feitas pelo método que implementa a operação reflectem-se no valor do respectivo argumento out: valor inicial não é importante (ou não existe de todo), mas valores atribuídos ao parâmetro pelo método que implementa a operação reflectem-se no valor do respectivo argumento 2003/2004 Programação Orientada para Objectos Operações Empregado Operações inspectoras. + nome(): string {query} + salário(): double {query} Forma - posição_: Posição Construtores. Inspectores. «constructor» + Forma(in posição: Posição) «query» + posição(): Posição {isPolymorphic = false} + desenha() Modificadores. «update» + movePara(in posição: Posição) + nova(inout entrada: ifstream&): Forma* 20 2003/2004 Programação Orientada para Objectos Operações: PC e CO Racional - numerador_: int - denominador_: int + Racional(in numerador: int, in denominador: int) … 21 2003/2004 «precondition» {denominador 0} Programação Orientada para Objectos Métodos Racional - numerador_: int - denominador_: int … + numerador(): int {query} … 22 { return numerador_; } 2003/2004 Programação Orientada para Objectos Atributos Especificação Multiplicidade 23 nome: tipo nome [multiplicidade]: tipo nome: tipo = valor_inicial n - um número fixo n de valores n..m - de n a m valores * - um número arbitrário de valores n..* - pelo menos n valores 2003/2004 Programação Orientada para Objectos Atributos PilhaFixaDe100Int - número_de_itens: int = 0 - número_máximo_de_itens: int = 100 {frozen} - itens [número_de_itens]: int … PilhaFixaDe100Int - número_de_itens: int = 0 - número_máximo_de_itens: int = 100 {frozen} - itens: int[número_máximo_de_itens] … 24 2003/2004 Programação Orientada para Objectos Atributos FormaComposta - formas [*]: Forma … … FormaComposta - formas: vector<Forma*> … … 25 Implementação: class FormaComposta: public Forma { public: … private: vector<Forma*> formas; … }; 2003/2004 Programação Orientada para Objectos Relação de generalização Relação é um Forma Círculo 26 Rectângulo 2003/2004 FormaComposta Programação Orientada para Objectos Relação de generalização: exemplos Língua natural "Um humano é um mamífero.", ou "Qualquer humano é um mamífero.". UML Mamífero Humano C++ class Humano : public Mamífero { // … }; 27 2003/2004 Programação Orientada para Objectos Relação de generalização: exemplos Língua natural "Um hidroavião é um avião e é também um veículo naval.", ou "Qualquer hidroavião é um avião e é um veículo naval.". UML VeículoNaval Avião Hidroavião C++ class Hidroavião : public Avião, public VeículoNaval { // … }; 28 2003/2004 Programação Orientada para Objectos Relação de amizade Menos forte que generalização Mais forte que associação ListaDeInt «friend» ListaDeInt::Iterador Dependência. 29 2003/2004 Programação Orientada para Objectos Relações de associação Composição Agregação Relação parte/todo ou possui um Pode implicar o controlo do tempo de vida de um objecto por outro Associação simples 30 Relação é composto por um Os tempos de vida dos objectos envolvidos estão relacionados Não há conceito de posse Os tempos de vida dos objectos ligados entre si são independentes 2003/2004 Programação Orientada para Objectos Associação simples Empregado Empregado Empregado Empregado 31 Chefe empregados * - empregados * - empregados * chefe Chefia 0..1 - chefe Chefia 2003/2004 Chefe 0..1 - chefe Chefia Chefe Chefe 0..1 Programação Orientada para Objectos Associações e outras… Empregado - empregados * Chefia Chefe - chefe 0..1 32 2003/2004 Programação Orientada para Objectos Associação simples Língua natural "Qualquer empregado é chefiado por (tem [fraco]) no máximo um chefe." UML - chefe Empregado ÉChefiadoPor Chefe 0..1 C++ class Empregado { // … private: Chefe* chefe; }; 33 2003/2004 Programação Orientada para Objectos Agregação Especificada por losango vazio - frota Empresa 0..1 34 2003/2004 Veículo * Programação Orientada para Objectos Agregação Língua natural "Uma empresa possui (tem [médio]) um número arbitrário de veículos." UML - frota Empresa 0..1 Veículo * C++ class Empresa { // … private: list<Veículo*> frota; }; 35 2003/2004 Programação Orientada para Objectos Composição Especificada por losango preenchido Forma - formas * {incomplete} FormaComposta 0..1 36 2003/2004 Programação Orientada para Objectos Composição Língua natural "Um humano é composto por (tem [forte]) uma cabeça e dois braços." UML - cabeça Humano Cabeça 1 - braços Braço 2 C++ class Humano { // … private: Cabeça cabeça_; Braço braços[2]; }; 37 2003/2004 Programação Orientada para Objectos Diagramas de objectos Mostram como as instâncias das classes, ou seja, os objectos, se ligam entre si no sistema em execução num dado instante de tempo Estáticos: dizem respeito ao estado do programa 38 2003/2004 Programação Orientada para Objectos Objectos zé: Humano Objecto sem nome associado. : Humano Objecto cuja classe pode ser inferida. zé Constante. zé: Humano {frozen} Estado do objecto. : Racional numerador_ = 3 denominador_ = 2 39 2003/2004 Programação Orientada para Objectos Ligações : Círculo : FormaComposta : Rectângulo : Círculo : Círculo : FormaComposta : Rectângulo : Círculo 40 2003/2004 Programação Orientada para Objectos Aula 9: Sumário Fases do desenvolvimento de software UML Diagramas de classes Classes Relações Diagramas de objectos Objectos ou instâncias Ligações 41 2003/2004 Programação Orientada para Objectos