You are on page 1of 12

1/12

APS/UML – Conteúdo de Aula 01


Disciplina: APS – Análise e Projeto de Sistemas
UML – Unified Modeling Language
Tópico: Introdução
Introdução à Orientação a Objetos
Subtópico(s): Abstração, Classe, Objeto, Herança, Polimorfismo, Generalização, Associação e
Encapsulamento

1 Introdução
Atualmente, as empresas enfrentam um ambiente altamente competitivo e,
por esse motivo, a cada dia surgem novos desafios: por exemplo, melhorar o ciclo de
vendas, aumentar a produtividade, buscar cada vez mais a satisfação do cliente, e
muitos outros.
Para que os desafios possam ser enfrentados, são necessárias ferramentas
que proporcionem, com grande segurança, funcionalidades que facilitem a tomada
de decisão e que transformem os dados em informações.
Apenas para lembrar, os dados são fatos em sua forma primária e, por isso,
precisam ser organizados e arranjados de uma maneira mais significativa.
Um conjunto de dados organizados de tal maneira que adquirem valor
adicional além do valor do dado em si, transforma-se em informação. Assim, para
que o administrador possa tomar decisões com segurança, é necessário que as
informações que ele recebe sejam:

Te Precisas informações sem erros;


Completas contêm todos os fatos importantes;
Econômicas valor das informações comparado com o custo de sua produção:
“fica mais caro o molho do que o peixe”;
Flexíveis podem ser usadas para diversas finalidades;
Confiáveis o método de coleta dos dados tem que ser confiável;
Relevantes importantes para o tomador de decisões;
Simples informações sofisticadas e detalhadas podem não ser
necessárias;
Em tempo geradas no exato momento de sua necessidade;
Verificáveis podem ser checadas (através de outras fontes).

Se uma informação não é precisa ou está incompleta, decisões ruins podem


ser tomadas, custando à organização milhares ou milhões de reais.
Se uma previsão de demandas futuras indica que as vendas serão muito altas
quando é o oposto que acontece, uma empresa pode investir milhões de reais
desnecessariamente.
Se uma informação não é fornecida aos tomadores de decisões no tempo certo
ou é complexa demais para ser compreendida, ela pode ter pouco valor para a
organização.
Portanto, para processar o grande volume de dados existentes em uma
empresa, gerando informações com as características citadas, é necessário que
todos os setores estejam envolvidos, em todos os aspectos, pelos Sistemas de
Informação, que possuem um papel fundamental em todas as organizações.
Os Sistemas de Informação são tipos especializados de sistemas que podem
ser criados utilizando os mais diversos critérios, visando atender às necessidades da
empresa.

Prof. Luiz Afonso Peccini


2/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

Por isso, a demanda por novos softwares cresce de forma assustadora e, como
consequência, os profissionais que desenvolvem tais sistemas precisam produzir
cada vez mais e em menos tempo porém, não deixando de lado a qualidade e
confiabilidade das informações que serão geradas.
Esses softwares tornaram-se alvos de um novo paradigma de
desenvolvimento: a Programação Orientada a Objetos. Os softwares criados com
essa tecnologia possuem uma modularização em nível de componentes e não em
nível de subsistemas, trazendo como grande vantagem (entre outras) a reutilização
de componentes que fornecem soluções comuns, proporcionando um ajuste mais
adequado na implementação.
A pesquisa sobre metodologias orientadas a objetos, para desenvolvimento de
sistemas de processamento de dados, trouxe como resultado a criação de uma
linguagem de modelagem de software denominada UML (Unified Modeling Language
ou Linguagem de Modelagem Unificada).
A UML é uma linguagem de modelagem padrão que utiliza-se de símbolos e
notações, que são os blocos de construção, para o desenvolvimento de modelos
orientados a objetos.
O que se pretende fazer ou conseguir com a UML é uma padronização na
documentação, na visualização de toda a estrutura do software, na especificação
dos requisitos e na construção de softwares orientados a objetos.

2 Introdução à Orientação a Objetos


Programação Orientada a Objetos é um paradigma de programação no qual
conjuntos de dados e rotinas são tratados como unidades (ditas objetos)
relativamente autônomas, que interagem por meio de mensagens (Dic Aurélio – Séc
XXI, 1999).
Orientação a Objetos é uma metodologia de programação e análise baseada
na identificação e definição de classes de objetos e de relações (Dic Aurélio – Séc
XXI, 1999). É um modelo de análise, projeto e programação de sistemas de
processamento de dados, baseado na reunião e interação entre diversas unidades
de um programa chamadas objetos, onde dados e processos são organizados e
manipulados por objetos e não por programas.
A análise e projeto orientados a objetos têm como meta identificar o melhor
conjunto de objetos para descrever um sistema de processamento de dados cujo
funcionamento se dá através do relacionamento e troca de mensagens entre estes
objetos.
Na programação orientada a objetos, implementa-se um conjunto de classes
que definem os objetos presentes no sistema de processamento de dados. Cada
classe determina o comportamento (definido nos métodos) e estados possíveis
(atributos) de seus objetos, assim como o relacionamento com outros objetos.

Linguagens de programação com suporte a orientação a objetos: Smalltalk, Perl, Python,


Ruby, Php, C++, Java e C#.

A divisão da modelagem de um sistema orientado a objetos requer a


visualização de sua arquitetura sob várias perspectivas e diferentes níveis de

APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini


3/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

detalhamento pois, cada participante envolvido no seu desenvolvimento tem a sua


necessidade e forma de entendimento.
Portanto, para procurar atender as necessidades dos gerentes, analistas,
programadores, usuários finais e etc., a arquitetura de um sistema deve ser
visualizada por meio de cinco visões:

Figura 1 Visões da arquitetura de um sistema

♦ Visão de Caso de Uso: essa visão focaliza os comportamentos de um sistema. A


visão deve ser transparente para todos os envolvidos na construção do sistema.
Diagramas:
aspectos estáticos: diagramas de caso de uso.
aspectos dinâmicos: diagramas de interação, diagramas de atividades e
diagramas de máquina de estados (gráfico de estados).
♦ Visão de Projeto: essa visão focaliza a estrutura (esqueleto) do sistema. A visão
sob essa perspectiva demonstra as classes, colaborações e as interfaces de um
sistema em construção.
Diagramas:
aspectos estáticos: diagramas de classes e diagramas de objetos.
aspectos dinâmicos: diagramas de interação, diagramas de atividades e
diagramas de máquina de estados (gráfico de estados).
♦ Visão de Processo: essa visão focaliza as questões de desempenho,
escalabilidade, mecanismos de concorrência e de sincronização.
Diagramas:
aspectos estáticos: diagramas de classes e diagramas de objetos.
aspectos dinâmicos: diagramas de interação, diagramas de atividades e
diagramas de máquina de estados (gráfico de estados).
♦ Visão de Implementação: essa visão focaliza os artefatos físicos para a efetiva
montagem do sistema. São abordados componentes e outros arquivos que
servem para a montagem do sistema.
Diagramas:
aspectos estáticos: diagramas de componentes.
aspectos dinâmicos: diagramas de interação, diagramas de atividades e
diagramas de máquina de estados (gráfico de estados).
♦ Visão de Implantação: essa visão focaliza os nós que formam a topologia de
hardware em que o sistema será executado.
Diagramas:
aspectos estáticos: diagramas de implantação.
aspectos dinâmicos: diagramas de interação, diagramas de atividades e
diagramas de máquina de estados (gráfico de estados).
APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini
4/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

2.1 Abstração

Abstração é o ato de separar mentalmente um ou mais elementos de uma


totalidade complexa (coisa, representação, fato), os quais só mentalmente podem
subsistir fora dessa totalidade (Dic Aurélio – Séc XXI, 1999). É a habilidade de se
concentrar nos aspectos essenciais de um contexto qualquer, ignorando
características menos importantes ou acidentais.
Em modelagem orientada a objetos, uma classe é uma abstração de entidades
existentes no domínio do sistema de software. Por exemplo, imaginemos a abstração
referente a classe Polígono. Há várias entidades na classe Polígono como Polígono
Regular, Polígono Equilátero e Polígono Equiângulo que são também subclasses da
classe Polígono, onde há objetos que contêm cada subclasse como Quadrado,
Triângulo, Círculo e outros.

Polígono regular: que tem todos os lados e todos os ângulos iguais; polígono simultaneamente
equilátero e equiângulo.
Polígono equilátero: que tem todos os lados iguais.
Polígono equiângulo: que tem todos os ângulos iguais.

2.2 Classe

Em programação ou modelagem orientada a objetos, classe é uma categoria


descritiva geral, que abrange o conjunto de objetos que compartilham uma ou mais
características quanto a seus itens de dados e procedimentos associados. É uma
coleção de objetos que se define pelo fato de tais objetos, e só eles, terem uma ou
mais características comuns ou ainda, é uma coleção ou grupo de coisas que se
distinguem pela natureza, uso, etc. (Dic Aurélio – Séc XXI, 1999). Uma classe
abstrai (separa/isola) um ou mais elementos de um todo, um conjunto de objetos
com características similares (que tem a mesma natureza, a mesma função, o
mesmo efeito, ou a mesma aparência).

2.2.1 Estrutura da Classe

Uma classe define o comportamento de seus objetos, através da


implementação de métodos, e de quais estados possíveis estes objetos são capazes
de manter, através de atributos. Em outras palavras, uma classe descreve os
serviços disponibilizados por seus objetos e quais informações eles podem
armazenar; representa um conjunto de objetos com características afins
(semelhantes).

Figura 2 Representação gráfica de uma classe em UML

APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini


5/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

2.2.2 Atributos

Os atributos, em programação orientada a objetos, são os elementos que


definem a estrutura de uma classe. Também são conhecidos como variáveis de
classe, e podem ser divididos em dois tipos básicos: atributos de instância e
atributos de classe. Os valores dos atributos de instância determinam o estado de
cada objeto. Um atributo de classe possui um estado que é compartilhado por todos
os objetos de uma classe.

2.2.3 Propriedades

Propriedades são as qualidades especiais e particularidades de uma classe.


Elas definem, também, o acesso a um estado do objeto instância dessa classe.
Algumas propriedades são predefinidas, enquanto outras podem ser definidas pelo
usuário. Uma propriedade é um valor designado com forte efeito significativo que
revela uma característica de uma classe.

2.2.4 Métodos

Em orientação a objeto, um método é uma rotina que é executada por um


objeto ao receber uma mensagem. As mensagens (chamadas aos métodos) enviadas
a um objeto podem mudar o valor de um ou mais atributos, alterando o estado de
um objeto.
Os métodos determinam o comportamento dos objetos de uma classe e são
análogos às funções da programação estruturada. São procedimentos que formam
os comportamentos e serviços oferecidos por objetos de uma classe e os atributos
indicam as possíveis informações por eles armazenadas, representando o estado de
cada objeto.

Método Construtor: em linguagens de programação orientadas a objeto é um método que vai


ser chamado assim que uma nova instância do objeto for criada. Os métodos
construtores definem o comportamento no momento da criação de um objeto de uma
classe.
Método Destrutor: é um membro de uma classe, um método, invocado quando a classe deve
ser destruída. É utilizado, normalmente, para liberar a memória alocada dinamicamente
pela classe e para eliminar as possíveis referências à classe, quando ela não mais
existir. Não recebe parâmetros de entrada ou de saída. Os métodos destrutores definem
o comportamento no momento da destruição do objeto de uma classe.

2.2.5 Tipos de Classes

As classes podem ser abstratas ou concretas.


Uma classe abstrata serve apenas como superclasse, isto é, não existem
instâncias desta classe. Numa classe abstrata os métodos são declarados mas os
seus comportamentos (códigos) não são definidos. Normalmente, classes abstratas
são utilizadas para a definição de interfaces ou de templates (gabarito/modelo) que
serão utilizados (através da herança) por classes concretas.
Uma classe concreta possui todas as definições dos seus métodos, portanto
desta classe podem ser instanciados objetos.
APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini
6/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

2.3 Objeto

Objeto é uma instância (ocorrência) de uma classe. Um objeto é capaz de


armazenar estados através de seus atributos e reagir a mensagens enviadas a ele,
assim como se relacionar e enviar mensagens a outros objetos.
No conceito de sistemas orientados a objetos, um objeto representa uma
entidade que pode ser física, conceitual ou de software. É uma abstração de algo
que possui fronteira definida e significado para a aplicação.
Dentro da terminologia das linguagens de programação, um objeto passa a
existir a partir de um ‘molde’. Este ‘molde’, definido como classe do objeto, define os
limites, seus atributos e suas funções.
Podem ser criados vários objetos ou instâncias de uma classe (p.ex., classe
Polígono: objetos Quadrado, Triângulo, Círculo, etc.).
A vantagem do uso de objetos na programação é que estes permitem utilizar
funções e atributos conhecidos (interface) sem necessidade de conhecimento sobre
sua estrutura interna (encapsulamento).

Mensagem é uma chamada a um objeto para invocar um de seus métodos, ativando um


comportamento descrito por sua classe.

2.3.1 Eventos

Eventos definem os pontos em que os objetos podem chamar outros


procedimentos de acordo com o comportamento e estado interno de cada um desses
objetos.
Um evento pode ser considerado, também, uma ocorrência de um estímulo
gerado para o objeto, capaz de fazer a mudança de seu estado atual, ou seja, é uma
ocorrência significativa com localização no tempo e espaço que pode ativar uma
transição de estado.

2.4 Herança

A herança é um princípio da programação orientada a objetos que permite


que as classes compartilhem atributos e operações baseados em um
relacionamento, geralmente generalização. É um relacionamento pelo qual uma
classe, chamada de subclasse, herda todos os comportamentos e estados possíveis
de outra classe, chamada de superclasse ou classe base. Essa relação é
normalmente chamada de relação “é um” (p.ex., Polígono é superclasse de
Triângulo, portanto, Triângulo “é um” Polígono).
É permitido que a subclasse estenda os comportamentos e estados possíveis
da superclasse (por isso este relacionamento também é chamado de extensão).
Em outras palavras, herança é o mecanismo pelo qual uma classe (subclasse)
pode estender outra classe (superclasse), aproveitando seus comportamentos
(métodos) e estados possíveis (atributos). Essa extensão ocorre adicionando-se
novos membros à subclasse, como novos métodos e atributos. Pode acontecer,
também, que a subclasse altere os comportamentos e estados possíveis da
superclasse – neste caso, a subclasse sobrescreve membros da superclasse
(tipicamente métodos).
APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini
7/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

Figura 3 Representação de herança entre classes em UML

Quando uma classe herda de mais de uma superclasse, ocorre uma herança
múltipla (uma subclasse possui mais de uma superclasse). Esta técnica é possível
em C++ mas não é possível em Java e C#, no entanto estas linguagens permitem
múltipla tipagem através do uso de interfaces (permitem que uma classe
implemente várias interfaces).
A herança múltipla é o principio, implementado em algumas linguagens de
programação orientadas a objetos, que possibilita o compartilhamento de atributos
e operações de duas ou mais classes em uma subclasse.
O uso indiscriminado desta característica pode levar a uma codificação
confusa que dificulta a manutenção do código.

Figura 4 Representação de herança múltipla entre classes em UML

2.5 Polimorfismo

Na programação orientada a objetos os padrões de projeto de software


baseiam-se no uso de polimorfismo.
O termo polimorfismo é originário do grego e significa “muitas formas”, “que
se apresenta sob diversas formas” (poly = muitas, morphos = formas).
A utilização de polimorfismo é importante porque permite:
» que referências de tipos de classes mais abstratas representem o
comportamento das classes concretas que referenciam;
» que a semântica de uma interface seja efetivamente separada da
implementação que a representa;

APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini


8/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

» que uma referência de um tipo de uma superclasse tenha seu


comportamento alterado de acordo com a instância da classe filha a ela
associada;
» a criação de superclasses abstratas, ou seja, com métodos definidos
(declarados) e não implementados, onde a implementação ocorre somente
nas subclasses não abstratas.
Assim, um mesmo método pode apresentar várias formas, de acordo com seu
contexto.

Figura 5 Representação de polimorfismo em UML

Por exemplo, a classe abstrata Poligono serve apenas como superclasse, isto
é, não existem instâncias desta classe e o método CalcularArea() é declarado mas o
seu comportamento (código) não é definido. As classes concretas Quadrado,
Triangulo e Circulo possuem todas as definições dos seus métodos CalcularArea(),
portanto destas classes podem ser instanciados objetos.
Podemos imaginar diversas operações que se encaixam na sua interface, como
cálculo da área do quadrado (Lado x Lado), cálculo da área do triângulo (Base x
Altura / 2), cálculo da área do círculo (Pi x Raio2), entre outros. Embora a natureza
do cálculo mude, a semântica do método CalcularArea() não muda, ou seja, ele
sempre calcula a área da figura geométrica plana que está sendo trabalhada; o seu
comportamento varia de acordo com a classe ao qual ele está representando.

2.5.1 Benefícios do Polimorfismo

Clareza e Manutenção do Código

Em linguagens de programação não polimórficas, para implementar o método


CalcularArea(), seria necessário recorrer a uma enumeração com o tipo de operação
e, dentro do método, testar o valor da enumeração com um case. Além do código ser
maior e mais difícil de ser lido, essa implementação tem outros problemas.
Provavelmente esse não será o único método a utilizar cálculo de áreas e, portanto,
pode-se esperar não um, mas vários switchs como esse pelo código. O que acontece,
então, se um novo cálculo de área for adicionado ao sistema? Será necessário que
todos os switchs sejam encontrados e substituídos.
Com o polimorfismo, a modificação resume-se apenas à criação de uma nova
classe.

APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini


9/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

Divisão da Complexidade

Com o polimorfismo pode-se separar métodos genéricos de métodos mais


específicos, dividindo a aplicação de acordo com o seu grau de abstração.
Bibliotecas que usam esse recurso (herança + polimorfismo) são chamadas
frameworks (estruturas básicas – às quais as implementações podem se adequar –
de uma base de dados ou processo ou programa). Exemplos de frameworks
conhecidas são a VCL (Visual Components Library ou Biblioteca de Componentes
Visuais) e CLX (Component Library for Cross-Platform ou Biblioteca de Componentes
Independente de Plataforma) do Delphi (ferramenta de programação visual
desenvolvida pela Borland Software Corporation) e a Swing do Java.

Framework é uma estrutura de suporte definida em que um outro projeto de software pode ser
organizado e desenvolvido; pode incluir programas de suporte, bibliotecas de código,
linguagens de script e outros softwares para ajudar a desenvolver e juntar diferentes
componentes de um projeto de software. Especificamente em orientação a objeto,
framework é um conjunto de classes com objetivo de reutilização de um design,
provendo um guia para uma solução de arquitetura em um domínio específico de
software. Os frameworks são projetados com a intenção de facilitar o desenvolvimento
de software, habilitando designers e programadores a gastarem mais tempo
determinando as exigências do software do que com detalhes tediosos de baixo nível do
sistema. Framework se diferencia de uma simples biblioteca (toolkit), pois esta se
concentra apenas em oferecer implementação de funcionalidades, sem definir a
reutilização de uma solução de arquitetura (design).
Swing é uma API Java para interfaces gráficas. A API Swing procura desenhar por conta
própria todos os componentes, ao invés de delegar essa tarefa ao sistema operacional,
como a maioria das outras APIs de interface gráfica trabalham. Por ser uma API de mais
alto nível, ou seja, mais abstração, menor aproximação das APIs do sistema opercional,
ela tem bem menos performance que outras APIs gráficas e consome mais memória RAM
em geral. Porém, ela é bem mais completa, e os programas que usam Swing têm uma
aparência muito parecida, independente do Sistema Operacional utilizado.
API – Application Programming Interface ou Interface de Programação de Aplicativos –
é um conjunto de rotinas e padrões estabelecidos por um software para utilização de
suas funcionalidades por programas aplicativos, isto é, programas que não querem
envolver-se em detalhes da implementação do software, mas apenas usar seus
serviços. De modo geral, a API é composta por uma série de funções acessíveis somente
por programação, e que permitem utilizar características do software menos evidentes
ao usuário tradicional. Por exemplo, um sistema operacional (como o Linux) possui uma
grande quantidade de funções na API, que permitem ao programador criar janelas,
acessar arquivos, criptografar dados, etc. Ou então programas de desenho geométrico
que possuem uma API específica para criar automaticamente entidades de acordo com
padrões definidos pelo usuário. No caso de sistemas operacionais, a API costuma ser
dissociada de tarefas mais essenciais, como manipulação de blocos de memória e
acesso a dispositivos. Estas tarefas são atributos do Kernel ou núcleo do sistema, e
raramente são programáveis. Mais recentemente o uso de APIs tem se generalizado nos
chamados plugins, acessórios que complementam a funcionalidade de um programa. Os
autores do programa principal fornecem uma API específica para que outros autores
criem plugins, extendendo as funcionalidades do programa para os usuários comuns.

Aplicações Flexíveis

O polimorfismo combinado à reflexão permite facilmente a criação de plugins.


A aplicação original cria interfaces e classes que têm muito conhecimento
semântico, mas a sua implementação efetiva ficará a cargo de terceiros.
APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini
10/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

Uma aplicação gráfica, por exemplo, poderia ser implementada de forma a


desenhar linhas, formas e gráficos precisos de acordo com operações matemáticas
fornecidas. Enquanto isso, empresas terceiras, nos diversos campos de suas
atuações, implementariam as operações matemáticas exatas para os seus
empreendimentos.

Um plugin ou plug-in é um programa de computador que serve normalmente para adicionar


funções a outros programas para prover alguma função particular ou muito específica.
Os exemplos típicos são os para exibição de figuras (p.ex., o SVG, se o navegador não o
suporta), para rodar arquivos multimídia, para criptografar/descriptografar e-mails, ou
para filtrar imagens em programas gráficos. O programa principal (um navegador web
ou um gerenciador de e-mails) provê que os plugins sejam registrados automaticamente
com o programa, além de um protocolo de troca de dados entre plugins. Plugins são
diferentes de extensões, que modificam ou adicionam funcionalidades.

Padrões de Projeto

Finalmente, boa parte dos padrões de projeto de software baseiam-se no uso


de polimorfismo.

2.6 Generalização

A generalização é o processo pelo qual se reconhecem características comuns


a vários objetos singulares, daí resultando quer na formação de um novo conceito
ou ideia, quer no aumento da extensão de um conceito já determinado que passa a
cobrir uma nova classe de exemplos. É a extensão de um princípio ou de um
conceito a todos os casos a que se pode aplicar.
Uma generalização é um relacionamento do tipo “é um tipo de”, ou seja, a
classe inferior é uma classificação da classe superior (p.ex., a subclasse Triângulo “é
um tipo de” classe Polígono).

2.7 Associação

Associação é um mecanismo de relacionamento pelo qual um objeto se


conecta com outro e utiliza os recursos desse outro. A associação demonstra a
colaboração entre eles. Pode tratar-se de uma associação simples “usa um” ou de
uma agregação por composição “é parte de” ou uma agregação compartilhada (uma
associação é compartilhada por vários objetos).

2.8 Encapsulamento

Encapsulamento consiste na separação de aspectos internos e externos de


um objeto. Este mecanismo é utilizado amplamente para impedir o acesso direto ao
estado de um objeto (seus atributos), disponibilizando externamente apenas os
métodos que alteram estes estados. Por exemplo, não é necessário conhecer os
detalhes dos circuitos eletrônicos internos de um televisor para utilizá-lo. Embora
eles existam, ficam “encapsulados” em sua carcaça e, através de uma interface mais
amigável (botões) o televisor é utilizado, normalmente.

APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini


11/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

Em programação orientada a objetos, encapsulamento é o mecanismo que


permite separar um mecanismo de funcionamento de sua interface. Um exemplo
disso é que para utilizarmos um televisor, não precisamos saber detalhes do
funcionamento de seus circuitos eletrônicos. A única interface conhecida são seus
botões.
Em linguagens orientadas a objeto, é possível encapsular o estado de um
objeto. Em termos práticos, isso se realiza limitando o acesso a atributos de uma
classe exclusivamente através de seus métodos. Para isso, as linguagens orientadas
a objeto oferecem limitadores de acesso para cada membro de uma classe.
Tipicamente os limitadores de acesso que determinam a visibilidade dos
atributos ou métodos, são:
» público (public) representado pelo sinal + como prefixo do nome: o membro
(atributo ou método) pode ser acessado por qualquer classe.
» protegido (protected) representado pelo sinal # como prefixo do nome: o
membro (atributo ou método) pode ser acessado apenas pela própria classe
e suas subclasses.
» privado (private) representado pelo sinal – como prefixo do nome: o
membro (atributo ou método) pode ser acessado apenas pela própria
classe.
» pacote (package) representado pelo sinal ~ como prefixo do nome: o
membro (atributo ou método) pode ser acessado apenas pelas classes
declaradas no mesmo pacote.
Cada linguagem de programação pode possuir limitadores de acesso próprios.
Por exemplo, em Java, o nível de acesso padrão de um membro permite que ele seja
acessado por qualquer classe de seu pacote (package); em C#, o limitador de acesso
interno (internal) permite que o membro seja acessado por qualquer classe do
Assembly (isto é, da biblioteca ou executável).
Uma grande vantagem do encapsulamento é que toda parte encapsulada pode
ser modificada sem que os usuários da classe em questão sejam afetados.
Novamente, no exemplo do televisor, o técnico poderia substituir o alto-falante do
equipamento por um outro totalmente diferente, sem que o usuário seja afetado,
afinal, ele continuará somente tendo que pressionar o botão.
O encapsulamento protege o acesso direto (referência) aos atributos de uma
instância fora da classe onde estes foram declarados. Esta proteção consiste em se
usar modificadores de acesso mais restritivos sobre os atributos definidos na classe.
Depois devem ser criados métodos para manipular de forma indireta os atributos da
classe.
Encapsular atributos também auxilia na garantia de que o estado e o
comportamento de um objeto se mantenham coesos.

Bibliografia

Sobre o tema exposto no texto, e para um maior aprofundamento acerca do


assunto, sugere-se a leitura dos materiais constantes na lista de referências
bibliográficas abaixo:

BEZERRA, E. Princípios de análise e projeto de sistemas com UML. Rio de Janeiro: Elsevier,
2007.
APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini
12/12
Tópico: Introdução, Introdução à Subtópico(s): Abstração, Classe, Objeto, Herança,
Orientação a Objetos Polimorfismo, Generalização, Associação e
Encapsulamento

BOOCH, G; RUMBAUGH, J.; JACOBSON, I. UML: guia do usuário. Rio de Janeiro: Elsevier,
2005.

FERREIRA, A. B. de H. Dicionário Aurélio Eletrônico – Século XXI. Lexicon Informática Ltda.,


1999.

FIORINI, S. T.; von STAA, A.; BAPTISTA, R. M. Engenharia de software com CMM. Rio de
Janeiro: Brasport, 1998.

FURLAN, J. D. Modelagem de objetos através da UML – the Unified Modeling Language. São
Paulo: Makron Books, 1998.

GUEDES, G. T. A. UML2 guia de consulta rápida. São Paulo: Novatec, 2005.

LAUDON, K. C.; LAUDON, J. P. Sistemas de informação com Internet. Rio de Janeiro: LTC,
1999.

PAGE-JONES, M. Fundamentos do desenho orientado a objeto com UML. Tradução Celso


Roberto Paschoa. São Paulo: Pearson Education, 2001.

SILVA, D. M. UML guia de consulta rápida. São Paulo: Novatec, 2001.

STAIR, R. M. Princípios de Sistemas de informação: uma abordagem gerencial. Rio de


Janeiro: LTC, 1998.

UOL. Dicionário Michaelis. Amigo Mouse Software Ltda.

WIKIPÉDIA, a enciclopédia livre (http://www.wikipedia.org).

APS_UML_ConteudoAula_01.doc Prof. Luiz Afonso Peccini

You might also like