Baixe o app para aproveitar ainda mais
Prévia do material em texto
Conceitos OO Engenharia de Software II ! profa. Ana Marcia Debiasi Duarte O que influenciou a criação da OO • Avanços na tecnologia de arquiteturas de computadores, suportando sofisticados ambientes de programação e interfaces homem máquina. • Avanços na área de linguagens de programação como modularização, ocultamento de informação, etc. • Crise do Software: termo utilizado para descrever problemas associados ao modo como o software é desenvolvido, como é feita a manutenção e como acompanhar a demanda por mais software. Vantagens • Facilita a reutilização de código; • Os modelos refletem o mundo real de maneira mais aproximada: • Descrevem de maneira mais precisa os dados; • A decomposição é baseada em um particionamento natural; • Mais fáceis de entender e manter. • Pequenas mudanças nos requisitos não implicam em alterações massivas no sistema em desenvolvimento. • Implementação de Tipos Abstratos de Dados O que é OO • É um paradigma para o desenvolvimento de software que baseia-se na utilização de componentes individuais (objetos) que colaboram para construir sistemas mais complexos. A colaboração entre os objetos é feita através do envio de mensagens. • Um paradigma é um conjunto de regras que estabelecem fronteiras e descrevem como resolver problemas dentro desta fronteira. Um paradigma ajuda-nos a organizar a e coordenar a maneira como olhamos o mundo. O que é OO • O paradigma de objetos baseia-se nos seguintes conceitos: • Objetos • Classes • Herança • Polimorfismo Abstração Abstração • Processo de identificar o que é necessário, deixando os detalhes de lado. • Na terminologia filosófica, a abstração é o processo de pensamento onde as idéias são distanciadas dos objetos.3 A abstração usa a estratégia de simplificação, em que detalhes concretos são deixados ambíguos, vagos ou indefinidos; assim uma comunicação efetiva sobre as coisas abstraídas requerem uma intuição ou experiência comum entre o comunicador e o recipiente da comunicação. Isso é verdade para todas as formas de comunicação verbal/abstrata. • O uso da abstração na computação pode ser exemplificada da seguinte forma: Imagine que um determinado processamento é realizado em vários pontos de um sistema, da mesma forma ou de forma idêntica. Ao invés de repetirmos o trecho de código responsável por este processamento, o abstraímos na forma de um procedimento ou função, e apenas fazemos uma chamada à tal procedimento, onde quer que necessitemos e por quantas vezes se fizer necessário Objetos • Informalmente um objeto representa uma entidade, tanto física quanto conceitual ou de software. • Exemplos: • Entidade Física: caminhão, carro, bicicleta, etc. • Entidade Conceitual: processo químico, matrícula, etc • Entidade de Software: lista encadeada, arquivo, etc. • Podemos afirmar que um objeto é um conceito, abstração, ou entidade com limites bem definidos e um significado para a aplicação. Objetos Objetos - Encapsulamento • Atributos e operações de um objeto devem estar armazenados no próprio objeto. Dizemos então que eles estão encapsulados no objeto. • O objetivo do encapsulamento é proteger os dados do acesso descontrolado. O acesso é feito através de mensagens trocadas entre os objetos. • As operações são como serviços que os objetos fornecem ao mundo exterior. Objetos • Formalmente, um objeto é algo que possui: • um estado que é normalmente implementado através de seu conjunto de propriedades (denominadas atributos), com os valores das propriedades, mais as ligações que o objeto pode ter com outros objetos; • uma identidade única. Identidade é a propriedade de um objeto que distingue-o de outros objetos. Identidade não é o nome do objeto, nem o endereço de memória onde ele está armazenado, é um conceito de linguagens de programação que não é visível para os “usuários”. • um comportamento. O comportamento define como um objeto reage às requisições de outros objetos,em termos de mudanças de mudanças de estado e passagem de mensagens. Classes • É a descrição de um grupo de objetos com propriedades similares (atributos), comportamento comum(operações) , relacionamentos com outros objetos e semânticas idênticas. • Todo objeto é instância de uma classe • Enquanto um objeto individual é uma entidade concreta que executa algum papel no sistema, uma classe captura a estrutura e comportamento comum a todos os objetos que estão relacionados Classes • Uma classe define a estrutura e o comportamento de qualquer objeto da classe, atuando como um padrão para a construção de objetos. • Os objetos são agrupados em classes: Pessoa nome: string idade: inteiro calcular_idade() (pessoa) João (pessoa) Romário (pessoa) Clarissa Identificação Atributos Métodos Classes • A definição da classe consiste na definição dos atributos e operações dos objetos desta classe; • Um atributo é uma característica de uma classe. Atributos não apresentam comportamento, eles definem a estrutura da classe • Operações caracterizam o comportamento de um objeto, e são o único meio de acessar, manipular e modificar os atributos de um objeto. Herança • É um mecanismo existente no paradigma orientado a objetos que permite a reutilização da estrutura e do comportamento de uma classe ao se definir novas classes; • A herança também é conhecida como relacionamento “é-um”; • A classe que herda o comportamento é chamada de subclasse e a que definiu o comportamento superclasse. Especialização Generalização Herança Herança Múltipla • É a possibilidade de se definir uma com mais de uma superclasse Polimorfismo • É a habilidade de variáveis terem “mais de um tipo”. Funções são ditas polimórficas quando seus operandos podem ter mais de um tipo. ! ! ! • Assim, pode-se adicionar um comportamento específico (implementação) às subclasses de uma hierarquia de generalização / especialização. Relacionamentos entre Classes • Associação: É uma conexão entre classes, e também significa que é uma conexão entre objetos daquelas classes. Em UML, uma associação é definida com um relacionamento que descreve uma série de ligações, onde a ligação é definida como a semântica entre as duplas de objetos ligados. Relacionamentos entre Classes • Generalização: É um relacionamento de um elemento mais geral e outro mais específico. O elemento mais específico pode conter apenas informações adicionais. Uma instância (um objeto é uma instância de uma classe) do elemento mais específico pode ser usada onde o elemento mais geral seja permitido. Relacionamentos entre Classes • Dependência e Refinamentos: Dependência é um re lacionamento entre e lementos, um independente e outro dependente. Refinamento é um relacionamento entre duas descrições de uma mesma entidade, mas em níveis diferentes de abstração. Associações Normais • O tipo mais comum de associação é apenas uma conexão entre classes. É representada por uma linha sólida entre duas classes. A associação possui um nome (junto à linha que representa a associação), normalmente um verbo, mas substantivos também são permitidos. Associações Normais • Para expressar a multiplicidade entre os relacionamentos, um intervalo indica quantos objetos estão relacionados no link. O intervalo pode ser de zero para um (0..1), zero para vários (0..* ou apenas *), um para vários (1..*), dois (2), cinco para 11 (5..11) e assim por diante. É também possível expressar uma série de números como (1, 4, 6. .12) . Se não for descr i to nenhuma multiplicidade, então é considerado o padrão de um paraum (1..1 ou apenas 1). Associações Normais No exemplo acima vemos um relacionamento entre as classes Cliente e Conta Corrente se relacionam por associação. Associação Recursiva É possível conectar uma classe a ela mesma através de uma associação e que ainda representa semanticamente a conexão entre dois objetos, mas os objetos conectados são da mesma classe. Uma associação deste tipo é chamada de associação recursiva. Associação Exclusiva Em alguns modelos nem todas as combinações são válidas, e isto pode causar problemas que devem ser tratados. Uma associação exclusiva é uma restrição em duas ou mais associações. Ela especifica que objetos de uma classe podem participar de no máximo uma das associações em um dado momento. Uma associação exclusiva é representada por uma linha tracejada entre as associações que são parte da associação exclusiva, com a especificação "{ou}" sobre a linha tracejada. Associação de Classe Uma classe pode ser associada a uma outra associação. Este tipo de associação não é conectada a nenhuma das extremidades da associação já existente, mas na própria linha da associação. Esta associação serve para se adicionar informações extra a associação já existente. A associação da classe Fila com a associação das classes Cliente e Processo pode ser estendida com operações de adicionar processos na fila, para ler e remover da fila e de ler o seu tamanho. Se operações ou atributos são adicionados a associação, ela deve ser mostrada como uma classe. Associação Ternária Mais de duas classes podem ser associadas entre si, a associação ternária associa três classes. Ela é mostrada como um grade losango (diamante) e ainda suporta uma associação de classe ligada a ela, traçaria-se, então, uma linha tracejada a partir do losango para a classe onde seria feita a associação ternária. No exemplo acima a associação ternária especifica que um cliente poderá possuir 1 ou mais contratos e cada contrato será composto de 1 ou várias regras contratuais. Agregação Indica que um elemento é parte ou está contida em outra classe. Representa uma relação do tipo parte/todo. No exemplo acima um atleta é parte de um time. Significa também que o atleta pode fazer parte de diferentes times dependendo do momento. Composição É uma agregação mais forte, a existência do Objeto-Parte NÃO faz sentido se o Objeto-Todo não existir. Não faz sentido existirem itens do pedido sem existir um pedido onde tais itens estariam contidos. Eles só existem se existir um pedido do qual eles fazem parte. Se o pedido é destruído, todos os seus itens também são. Generalização Na generalização normal a classe mais específica, chamada de subclasse, herda tudo da classe mais geral, chamada de superclasse. Os atributos, operações e todas as associações são herdadas. Multiplicidade Multiplicidade • Define a quantidade de instâncias de um objeto que uma classe pode ter em relação a outra classe. 1 para 1 • As Classes A e B devem ter apenas uma ocorrência do objeto definido pela classe da outra extremidade. 1 1 Classe A Classe B 1 para N • A Classe A deve ter no mínimo UMA e no máximo N ocorrências do objeto definido pela Classe B. • A Classe B deve ter pelo menos UMA ocorrência do objeto definido pela classe A. 1..* 1 Classe A Classe B 0 ou 1 para 1 • A Classe A pode ter NENHUMA ou no máximo UMA ocorrência do objeto definido pela Classe B. • A Classe B deve ter pelo menos UMA ocorrência do objeto definido pela classe A. 0..1 1 Classe A Classe B 0 ou N para 1 • A Classe A pode ter NENHUMA ou no máximo N ocorrências do objeto definido pela Classe B. • A Classe B deve ter pelo menos UMA ocorrência do objeto definido pela classe A. 0..1 1 Classe A Classe B 1 ou N para 1 ou N • As Classes A e B devem ter pelo menos UMA e no máximo N ocorrências do objeto definido pela outra Classe. 0..1 1 Classe A Classe B Fim
Compartilhar