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