• Nenhum resultado encontrado

FAM-DEP-APS-AULA-01

N/A
N/A
Protected

Academic year: 2021

Share "FAM-DEP-APS-AULA-01"

Copied!
20
0
0

Texto

(1)

AULA 01

https://sites.google.com/site/fabionmiranda/facfaminas

Revisão de conceitos de Orientação a Objetos

Atributo

Classe

Método

Objeto

Diagrama de Classes

PROF. FÁBIO MIRANDA

FAMINAS - BH

(2)

1. objetivos

• Compreender os conceitos básicos da Orientação a Objetos. • Abstrair informações e classificar conceitos.

• Conhecer diferentes formas de relacionamento entre objetos.

2. Conteúdos

• Definição de Abstração, Objeto e Classe.

• Conceitos: Generalização, Especificação, Encapsulamento e Polimorfismo. • Relacionamentos: Herança, Agregação e Associação.

3. Orientações

Antes de iniciar o estudo desta unidade, é importante que você leia as orientações a se- guir:

1) Leia os livros da bibliografia indicada, para que você amplie e aprofunde seus horizon- tes teóricos.

2) Reserve um período semanal para seus estudos e exercícios 3) Email do professor: fabionmiranda@gmail.com

(3)

30 © Programação Orientada a Objetos

4. introdução

Nesta unidade, apresentaremos os principais conceitos da Orientação a Objetos (OO), bem como teremos a oportunidade de aprender a interpretar diagramas que representam tais conceitos. Conheceremos, também, as motivações que levaram a seu surgimento.

Bom estudo!

5. Conceitos básicos

A queda nos preços dos equipamentos de informática na década de 1970 motivou diversas empresas de pequeno e médio porte a informatizarem seus processos operacionais. Nessa época, os conhecimentos técnicos relacionados ao desenvolvimento de software não eram suficientes para resolver alguns problemas de desenvolvimento de sistemas.

Essa necessidade tornou-se evidente com a crescente demanda do público consumidor de software. Os novos usuários de sistemas não eram especialistas em computação, e sim pro- fissionais de outras áreas. Foi esse cenário que motivou o surgimento da Orientação a Objetos (OO).

Portanto, a Orientação a Objetos surgiu da necessidade de simular a realidade, criando abstrações na tentativa de representar as características relevantes dos objetos envolvidos no sistema que se deseja desenvolver. A compreensão do software tornou-se mais fácil, pois a representação em objetos é um processo natural.

Com o uso da Orientação a Objetos, a engenharia de software conseguiu avançar na habilidade de modelar e projetar softwares, que representam os problemas do mundo real no mundo computacional. O desenvolvedor aproveita os aspectos mais importantes do mundo real para realizar as representações no mundo computacional.

A modelagem conceitual descreve as informações que o sistema irá gerenciar. Uma das formas de modelagem mais utilizadas atualmente e que emprega os conceitos da orientação a objetos é a UML (Unified Modeling Language), que em português significa Linguagem de Modelagem Unificada (BOOCH; RUMBAUGH; JACOBSOn, 2005), que possui vários tipos de diagramas necessários para representar diferentes tipos de informações de um sistema.

Dessa forma, constata-se que a tarefa mais importante de um processo de desenvolvimento de software é realizar a análise do domínio da aplicação e a modelagem dos objetos. A análise do domínio da aplicação corresponde às informações do ambiente em que a aplicação está inserida. Por exemplo, para projetar um sistema de biblioteca, é necessário que o desenvolvedor compreenda todas as regras de negócio relacionadas ao funcionamento da biblioteca (controle de livros, empréstimo, devolução etc.).

A compreensão do domínio da aplicação é pré-requisito para um bom projeto de software. Já a modelagem são fenômenos que ocorrem sobre estes, independentemente da forma como serão implementados posteriormente. nesse sentido, o processo de modelagem dos objetos envolve dois mecanismos:

• Abstração. • Representação.

(4)

Figura 1 Modelagem Conceitual.

Abstração

A abstração é o mecanismo utilizado na análise de um domínio da aplicação, em que se observa a realidade e dela se abstraem entidades e ações que são consideradas essenciais para uma aplicação, excluindo todos os aspectos julgados irrelevantes.

A representação é o processo de traduzir essas informações essenciais no mundo computacional. na modelagem orientada a objetos, destacamos as representações em formato gráfico (UML) e em formato de código (linguagem de programação Orientada a Objetos).

A ideia básica da Orientação a Objetos é perceber o mundo como uma coleção de objetos que interagem entre si. na modelagem de sistemas orientada a objetos, um objeto é uma entidade que possui: a) características; b) comportamento; c) estado; d) identidade única. cor aparência peso tamanho Correr Brincar Criar Comer Figura 2 Abstração.

(5)

32 © Programação Orientada a Objetos

na Figura 2, observe que uma pessoa poderia olhar um coelho como um animal de estimação e descrevê-lo com as características “cor” e “aparência”, e com os comportamentos “correr” e “brincar”. Um médico veterinário, ao olhar o mesmo coelho, iria se preocupar com as características “peso” e “tamanho”, bem como com os comportamentos “criar” e “comer”. note que um mesmo objeto pode possuir diferentes características, pois depende da abstração ou visão da pessoa que o analisa.

Assim, na análise realizada pelo veterinário, o animal coelho foi representado no objeto Coe-

lho, e tem como características “peso” e “tamanho”, e como comportamentos “criar” e “comer”.

Coelho

peso tamanho

criar comer

Figura 3 Objeto Coelho.

Características

Comportamentos

É importante considerar, ainda, o Estado de um objeto, que corresponde ao conjunto de valores associados às características do objeto. Dessa forma, considere o objeto Coelho e os dois estados representados na Figura 4:

Coelho Coelho

peso = 650 gm peso = 500 gm tamanho = 39 cm tamanho = 35 cm

criar criar

comer comer

hoje 3 meses antes

Figura 4 Estados.

A Figura 4 ilustra o Estado do Objeto coelho no dia de “hoje” e em “3 meses antes”. Perceba que o estado pode mudar com o passar do tempo.

Assim, cada objeto tem uma identidade única, que o diferencia dos demais. Em um sistema orientado a objetos, por exemplo, cada objeto Coelho terá uma identificação única que o diferenciará de quaisquer outros coelhos que venham a existir no sistema.

Classe e objeto

Segundo Deitel e Deitel (2007), quando estamos modelando um sistema usando a Orien- tação a Objetos, notamos que existem vários objetos com características e comportamentos similares. A análise desses objetos semelhantes pode gerar, conforme a visão da abstração, uma

(6)

representação única chamada Classe, a qual, na Orientação a Objetos, incorpora essa operação por meio da abstração dos atributos (características) e dos métodos (comportamentos) que caracterizam objetos semelhantes.

ClASSE

<nome do objeto>

<atributos>

<métodos>

Figura 5 Estrutura de Classe (UML).

Enquanto um objeto é uma abstração de uma entidade do mundo real, por meio das ca- racterísticas e comportamentos, a classe é a abstração de um conjunto de objetos similares do mundo real, que descreve a estrutura de dados e o comportamento de objetos similares.

Uma classe representa, portanto, um conjunto de objetos que possui características semelhantes (atributos), os mesmos comportamentos (métodos), os mesmos relacionamentos com outros objetos e a mesma semântica.

CASA

Sala

Quarto

Cozinha

Banheiro

Reformar

Mobiliar

Limpar

Figura 6 Classe Casa.

na Figura 6, definimos a Classe Casa como a representação de vários objetos que possuem características (sala, quarto, cozinha e banheiro) e comportamentos (reformar, mobiliar e limpar) semelhantes. A ação de criar classes por meio da abstração de objetos similares é denominada

Classificação.

A ação de criar objetos com base em uma classe é denominada Instanciação. É importante ressaltar, ainda, que todo objeto é uma instância de uma classe. Em um sistema Orientado a Objetos, não há limites relacionados à quantidade de objetos que podem ser instanciados ou criados a partir de uma classe.

(7)

34 © Programação Orientada a Objetos

Encapsulamento

na Orientação a Objetos, todo objeto está relacionado a uma classe que o representa e que serve como um modelo ou molde para ele. O objeto terá os atributos e os métodos que estão definidos na estrutura da classe que o representa, e os detalhes relacionados à implemen- tação desses atributos e métodos estão reunidos dentro da implementação da classe. Essa ca- racterística de “esconder” os detalhes da implementação recebe o nome de Encapsulamento.

nas linguagens de programação estruturada (como, por exemplo, Pascal e C), as estruturas de dados abstratas eram acessadas por meio de funções sem a possibilidade do tratamento de segurança para controle de acesso a esses dados e sem os devidos tratamentos para uma reusabilidade de código. A Orientação a Objetos, por meio do Encapsulamento, proporciona meios para o controle de acesso a características e métodos das classes, resultando em melhor qualidade na reusabilidade dos códigos.

Dessa forma, o Encapsulamento é uma técnica para minimizar interdependências entre objetos por meio da definição de métodos que possibilitam o acesso aos dados do objeto. Assim, mudanças na definição e na implementação de uma classe, desde que preservem os métodos de acesso, não afetam o restante do sistema. O Encapsulamento produz, então, um controle diferenciado de acesso aos atributos e métodos de um objeto. Logo, as partes de um objeto podem ser divididas em:

• Parte privada (visão interna sem permissão de acesso externo):

a) corresponde à parte interna do objeto, isto é, àquela que é inacessível a outros objetos;

b) pode representar tanto atributos como métodos do objeto.

• Parte compartilhada ou interface (visão externa com acesso disponível):

a) corresponde à parte externa do objeto, isto é, àquela que é vista por outros obje- tos com a finalidade de invocar os métodos que o objeto realiza;

b) agrupa um conjunto de mensagens a que o objeto pode responder;

c) representa as mensagens que especificam quais operações sobre o objeto podem ser realizadas, mas não como a operação será executada.

Além disso, o Encapsulamento oferece os seguintes benefícios:

• Segurança: protege os atributos dos objetos de terem seus valores corrompidos por outros objetos.

• Independência: ao “esconder” seus atributos, um objeto protege outros objetos de complicações de dependência de sua estrutura interna.

A comunicação entre os objetos ocorre por meio do envio de mensagens, em que um objeto (emissor) envia uma mensagem a outro objeto (receptor), que executará o método invocado por esta. As mensagens só interagem com a interface do objeto (parte compartilhada), e não com a sua parte interna correspondente (parte privada).

Cada objeto possui seu próprio conjunto de métodos, conforme a definição realizada no processo de classificação (criação da classe). Os métodos são intrínsecos aos objetos e descrevem uma sequência de ações a serem executadas por um objeto.

Para efetuar uma operação, ao receber uma mensagem, um objeto determinará como a operação será efetuada, uma vez que este tem comportamento próprio.

(8)

nesse sentido, como a responsabilidade é do receptor e não do emissor, pode acontecer que uma mesma mensagem ative métodos diferentes, dependendo da classe de objeto para onde é enviada a mensagem. Essa característica é denominada Polimorfismo, que veremos com mais detalhes a seguir.

Polimorfismo

O Polimorfismo permite a criação de várias classes com interfaces idênticas, porém com objetos e implementações diferentes. Ele possibilita que uma mensagem seja executada de acordo com as características do objeto que está recebendo o pedido de execução do serviço.

Vimos que uma classe representa um conjunto de objetos que possuem características semelhantes (atributos e comportamentos). Além disso, uma classe pode se relacionar com outras classes, possibilitando, assim, uma melhor modelagem dos conceitos do mundo real no mundo computacional. Destacamos três principais formas de relacionamento entre classes: Herança, Agregação e Associação.

Em muitas ocasiões, o processo de classificação identifica objetos com características semelhantes que não podem ser agrupados em uma única representação (classe), pois apre- sentam regras de uso e comportamentos diferentes dentro de um sistema. Com o intuito de reaproveitar ao máximo os conceitos abstraídos em uma classe, a Orientação a Objetos permite a criação de “classes filhas” que se baseiam nas definições de uma classe já existente. Esse rela- cionamento entre classes com o intuito de reaproveitamento recebe o nome de Herança.

Herança

Herança é o mecanismo que permite definir uma nova classe (subclasse) a partir de uma

já existente (superclasse). Ao se estabelecer uma subclasse, ela herda todas as características da superclasse, ou seja, a especificação dos atributos e dos métodos da superclasse passa a fazer parte da especificação dos atributos e dos métodos da subclasse. Assim, a subclasse pode adi- cionar novos métodos, como também reescrever os métodos herdados da superclasse.

CASA Sala Quarto Cozinha Banheiro Reformar Mobiliar Limpar Classe Casa (superclasse) HERAnçA

Classe Residencial Classe Comercial (subclasse) (subclasse) Figura 7 Herança. RESIDENCIAL Piscina Sauna Quadra Limpar Piscina COMERCIAL Vaga Luminoso Ligar Luminoso

(9)

36 © Programação Orientada a Objetos

na Figura 7, a Classe Residencial (subclasse) e a Classe Comercial (subclasse) herdam as definições da Classe Casa (superclasse), ou seja, um objeto instanciado a partir da Classe Residencial terá como atributos: sala, quarto, cozinha, banheiro, piscina, sauna e quadra; e como métodos: reformar, mobiliar, limpar e limpar piscina. Já um objeto instanciado a partir da Classe

Comercial terá como atributos: sala, quarto, cozinha, banheiro, vaga e luminoso; e como métodos:

reformar, mobiliar, limpar e ligar luminoso.

Note que um objeto do tipo da Classe Residencial não terá a característica vaga nem poderá executar o método ligar luminoso. O inverso também é verdade para atributos e métodos que são exclusivos da Classe Residencial em relação a um objeto da Classe Comercial.

Com base no conceito de Herança, podemos afirmar que um objeto do tipo residencial é, também, um objeto do tipo casa, porém não podemos afirmar que todo objeto do tipo casa é um objeto do tipo residencial, pois ele poderá ser um objeto do tipo residencial ou comercial.

no processo de modelagem orientado a objetos, realizamos uma Generalização quando criamos uma classe (superclasse) com características e comportamentos comuns a outras classes (subclasses). nesse processo, deseja-se generalizar na superclasse os atributos e métodos que são comuns a todas as subclasses.

Entretanto, quando desejamos criar subclasses, identificamos as características específi- cas e únicas de cada subclasse. Esse processo de criação de subclasses é denominado Especia-

lização.

Agregação e Composição

Além da Herança, a Orientação a Objetos oferece outras formas de reutilização e relação entre classes. O processo de modelagem orientado a objetos possibilita, também, a criação de classes que utilizam outras classes como parte de sua definição. Esse processo recebe o nome de

Agregação ou Composição e tem como objetivo principal reutilizar classes já existentes para

compor outras classes mais complexas.

Apesar das semelhanças, a Agregação e a Composição são diferentes em relação à forma como tratam os objetos que são contidos dentro do objeto que os contém. na Agregação, os objetos contidos (agregados) podem existir sem serem parte do objeto que os contém (agrega- dor). Já na Composição, os objetos contidos não podem existir fora do contexto do objeto que os contém. Observe, a seguir, quais são as vantagens de se utilizar a Agregação e a Composição:

• Simplificar os detalhes de programação de uma classe por meio da criação de imple- mentações mais simples, utilizando classes agregadas.

• Reutilizar as classes já existentes; o que possibilita a vantagem desse processo é que as classes que estão prontas poderão ser utilizadas como parte da definição de outras classes.

A Figura 8 demonstra duas classes relacionadas por meio de Agregação. nela, a classe

Casa (agregadora) utiliza a classe Sala (agregada) como parte de sua definição.

(10)

CASA

Sala

Quarto

Cozinha

Banheiro

Reformar

Mobiliar

Limpar

Figura 8 Composição.

SALA

TEM

Largura

COMPOSIçãO

Comprimento

área

Os detalhes da implementação da Classe Sala estão descritos dentro da Classe Sala e, portanto, podemos dizer que suas definições são visíveis e pertinentes apenas à própria classe (Encapsulamento). Contudo, a Classe Casa poderá utilizá-la como parte de sua definição. nesse caso, entendemos que a Classe Casa possui Sala como uma característica de sua definição e, assim, poderá criar (instanciar) vários objetos do tipo Sala para definir suas características.

nesse contexto, um objeto criado a partir da Classe Sala conterá os atributos Largura e

Comprimento, bem como o método Área.

veja, na Figura 9, dois objetos (sala 1 e sala 2) criados com base na Classe Sala.

SAlA = n° 1

Largura = 3,00 Comprimento = 3,00

área

Figura 9 Objetos do tipo Sala.

SAlA = n° 2

Largura = 3,50 Comprimento = 4,00

área

Observe que os dois objetos Sala podem ser utilizados como parte integrante de um ob- jeto do tipo Casa Comercial, que foi criado com base na Classe Casa. Assim, enquanto o objeto agregador (por exemplo, Casa Comercial) existir, também existirão os objetos Sala 1 e Sala 2.

Se o sistema desejar informar os dados sobre a área útil do imóvel, o objeto Casa poderá enviar uma mensagem aos objetos agregados para calcular a sua área. Os detalhes relacionados ao cálculo de área estão “encapsulados” na Classe Sala, porém a execução do método Área retornará, como informação, o valor da área da sala.

na Composição, os objetos do tipo Sala estão vinculados ao objeto Casa, porém, se este deixar de existir quando for destruído, também deixarão de existir os objetos Sala que estão a ele relacionados.

(11)

38 © Programação Orientada a Objetos

CASA

Sala

Quarto

Cozinha

Banheiro

Reformar

Mobiliar

Limpar

Figura 10 Agregação.

MORADOR

TEM

Nome

AGREGAçãO

Idade

Trabalhar

A Figura 10 exibe duas classes relacionadas por meio de Agregação. nela, a Classe Casa (agregadora) utiliza a Classe Morador (agregada) como parte de sua definição.

Os detalhes da implementação da Classe Morador, conforme Figura 10, estão descritos den- tro da Classe Morador e, portanto, podemos dizer que suas definições são visíveis e pertinentes apenas à própria classe (Encapsulamento). Contudo, a Classe Casa poderá utilizá-la como parte de sua definição. nesse caso, entendemos que a Classe Casa possui Morador como parte de sua definição e, assim, poderá criar (instanciar) vários objetos do tipo Morador para sua definição.

Diferentemente da situação ocorrida na Composição, na Agregação os objetos vinculados (agregados) podem existir independentemente da classe que os contém (agregadora). Quando a classe agregadora deixar de existir, os objetos agregados permanecem vivos e podem ser agregados a outros objetos do tipo Casa.

Tanto na agregação como na Composição, um objeto poderá ter vínculo com vários ob- jetos de outras classes, visto que a quantidade de objetos vinculados é definida no momento da modelagem do sistema. As classes também poderão relacionar-se com mais de uma classe. Ressaltamos que a modelagem do sistema indica quais serão as classes que farão parte das de- finições de outras classes, bem como qual será a quantidade de objetos vinculados.

Associação

Além da Herança e da Agregação, a Orientação a Objetos oferece mais um tipo de relacionamento entre classes: a Associação. Em uma associação, as classes envolvidas não apresentam estruturas comuns como acontece na Herança e na Agregação. O que se observa normalmente é que, na Associação, as classes relacionadas apresentam estruturas distintas e o tipo de relação está vinculado a alguma regra de negócio do sistema.

CASA

Sala

Quarto

Cozinha

Banheiro

Reformar

Mobiliar

Limpar

Figura 11 Associação.

PESSOA

aluga

Nome

ASSOCIAçãO

DataNascimento

Profissão

Trabalhar

(12)

no exemplo da Figura 11, uma pessoa poderá alugar uma casa. nesse sentido, Casa e

Pessoa são classes diferentes e não representam objetos de características ou comportamentos

comuns ou semelhantes. A relação entre ambos acontece apenas porque o vínculo entre eles existe como uma regra de negócio do sistema a ser modelado.

Portanto, para que o vínculo de associação aconteça, é necessário que os objetos associados sejam criados antes da criação do relacionamento. Da mesma forma, se uma associação deixar de existir, os objetos que estavam associados permanecem no sistema, podendo até mesmo estabelecer novas associações com outros objetos.

integrando os conceitos

A Figura 12, denominada Diagrama de Classes, ilustra os conceitos de Herança, Agregação e Associação. Esse diagrama é parte da etapa de modelagem da Orientação a Objetos, desenvolvida com base na UML.

CASA

Sala

Quarto

Cozinha

Banheiro

Reformar

Mobiliar

Limpar

RESIDENCIAL Piscina Sauna Quadra aluga

ASSOCIAçãO

COMERCIAL Vaga Luminoso

PESSOA

Nome

DataNascimento

Profissão

Trabalhar

1 .. n

SALA

Largura

Comprimento

Limpar Piscina Ligar Luminoso

área

(13)

6. ExEMPlo PRáTiCo

Para aprimorarmos os conceitos tratados nesta unidade, vamos exemplificar com uma nova situação. Consideremos que uma faculdade deseje desenvolver um sistema para controlar as orientações e defesas dos Trabalhos de Conclusão de Curso (TCC). Para isso, utilizará a Orientação a Objetos para identificar os principais conceitos que, posteriormente, serão implementados usando uma linguagem orientada a objetos.

Destacamos as seguintes funcionalidades referentes ao sistema de controle de orientações de TCC:

a) armazenamento de dados de alunos, professores e cursos da instituição; b) identificação dos professores que trabalham como coordenadores de curso; c) registro das matrículas dos alunos nos cursos;

(14)

d) armazenamento dos dados sobre as orientações de TCC;

e) cadastramento das informações sobre as bancas de defesa de TCC realizadas na insti- tuição.

Com base nas funcionalidades descritas, iniciamos o processo de abstração para identificar os objetos envolvidos no novo sistema. Após uma breve análise, identificamos os seguintes objetos:

a) aluno; b) professor; c) curso; d) coordenador; e) TCC; f) banca.

Muitas dúvidas devem surgir no momento da abstração dos objetos, pois essa é uma dificuldade comum para aqueles que estão iniciando o aprendizado dos conceitos da Orientação a Objetos. note que os objetos sempre possuirão informações que os descrevem (por exemplo, o objeto Aluno possui as seguintes características: nome, ra, telefone, endereço etc.).

Assim, no momento da abstração e da identificação dos objetos, você pode se orientar procurando informações que deverão de algum modo aparecer em seu sistema. Ao analisar quem é o “dono” da informação, você descobre o objeto que possui aquela característica.

Sabendo que objetos podem ser representados por uma classe que reúne em sua estrutura as características e os comportamentos comuns a eles, detalhamos, a seguir, as classes inicialmente identificadas, por meio de um diagrama de classes da representação UML (Figura 13). note que nesse momento representamos apenas as características como atributos nas classes, enquanto os comportamentos serão identificados posteriormente, quando estivermos analisando as relações existentes entre as classes.

Aluno

nome

ra

Coordenador

ramal

cargaHoraria

Figura 13 Classes (UML).

Professor

Curso

nome

nome

titulacao

sigla

email

area

Tcc

Banca

titulo

ano

data

situacao

parecer

notas

Note que apenas algumas características foram identificadas em cada uma das classes. O intuito nesse exemplo é praticar os conceitos da Orientação a Objetos; por isso, simplificamos um pouco a definição das classes. Lembre-se de que os nomes das classes, seus atributos e métodos devem ser identificados sem o uso de acentuação e símbolos especiais, pois posterior- mente serão codificados usando uma linguagem de programação. Nas linguagens de programa- ção, incluindo Java, o uso de acentuação e de símbolos especiais não é permitido.

(15)

© Orientação a Objetos 41

Uma vez que foram identificadas as classes, vamos agora analisar as relações entre elas. Destacamos as seguintes:

• Herança.

• Agregação/Composição. • Associação.

Observamos que a Herança é a relação que permite definir uma nova classe usando como base as definições já existentes em outra classe. A pergunta-chave que podemos fazer para auxi- liar na identificação da herança entre classes é se um objeto da classe A “é um” objeto da classe B. Assim, ao analisarmos as classes identificadas na Figura 13, notamos que existe uma relação de herança entre as classes Professor e Coordenador. Isto é, um Coordenador “é um” Professor. Expandindo um pouco mais essa análise, constatamos que todo Coordenador “é um” Professor, mas nem todo Professor “é um” Coordenador.

Por meio da herança entre as classes Professor e Coordenador, temos que a superclasse Professor estende suas definições para a subclasse Coordenador. A classe Coordenador herda todas as características existentes na classe Professor, o que possibilita o reaproveitamento de código e a facilidade de manutenção de código.

Professor

nome

titulacao

email

Coordenador

ramal

cargaHoraria

Figura 14 Herança entre as Classes Professor e Coordenador (UML).

Analisemos agora a relação de Agregação/Composição. Esta relação possibilita utilizar como parte da definição de uma classe outra(s) classe(s) já existente(s). A maior motivação de seu uso é permitir a reutilização de classes. Em nosso sistema, podemos identificar a relação de agregação entre a classe Banca e a classe Professor (Figura 15), pois os Objetos Banca e Professor podem existir independentemente uns dos outros. A Composição não é definida, nesse caso, porque os objetos podem existir separados uns dos outros.

Banca

Professor

data

parecer

atribuirProfessor

nome

titulacao

email

Figura 15 Agregação entre as Classes Banca e Professor (UML).

A Agregação entre Banca e Professor pode ser expressa pela indicação de que uma Banca possui como parte de sua definição a participação de dois Professores. A relação parte-todo caracteriza a agregação entre classes. Professor é parte da definição de uma Banca. note que existe a indicação, na seta de agregação, de que dois Professores participam da agregação com a classe Banca (Figura 15).

(16)

Como reflexo da agregação entre classes, novos comportamentos podem ser adicionados às classes existentes. Assim, adicionamos o método “atribuirProfessor” à classe Banca, que será responsável por criar o vínculo entre as classes Banca e Professor (Figura 15). A quantidade de comportamentos adicionados às classes depende única e exclusivamente da análise que se realiza. É importante ressaltar que uma vez adicionado um comportamento a uma classe, este deverá ser codificado posteriormente no momento da programação orientada a objetos.

Outra agregação que podemos destacar é a que ocorre entre Curso e Coordenador e que um Coordenador está relacionado a um Curso. Assim, a classe agregadora Curso possui como parte de sua definição o Coordenador que o coordena. note que, quando apenas um objeto participa da relação, não precisamos identificar a quantidade junto à seta de agregação do diagrama de classes da UML.

Como reflexo da agregação entre Curso e Coordenador, adicionamos um novo comportamento à classe Curso chamado: “trocarCoordenador”. Este será representado no diagrama de classes (Figura 16) em forma de um método, quando a classe Curso for codificada usando uma linguagem orientada a objetos.

Curso

nome

sigla

area

trocarCoordenador

Coordenador

ramal

cargaHoraria

Figura 16 Agregação entre as Classes Curso e Coordenador (UML).

Outra agregação existente no sistema relaciona a classe Tcc com a classe Aluno, indicando que um Tcc utiliza como parte de sua definição o aluno responsável pelo trabalho. Como forma de permitir que um Aluno seja vinculado ao Tcc, adicionamos o comportamento “vincularAluno” na classe Tcc (Figura 17).

Tcc

Aluno

titulo

ano

nome

situacao

ra

notas

vincularAluno

Figura 17 Agregação entre as Classes Tcc e Aluno (UML).

A composição é outra relação existente no sistema que relaciona a classe Tcc com a classe Banca, indicando que um Tcc utiliza como parte de sua definição a banca que examinará o trabalho. na Composição, um objeto do tipo Banca é relacionado ao objeto do tipo Tcc, e o objeto Banca só existirá se estiver vinculado ao objeto Tcc. Quando o objeto Tcc deixar de existir, o objeto Banca também será destruído. Como forma de permitir que uma Banca seja vinculada ao Tcc, adicionamos o comportamento “vincularBanca” na classe Tcc (Figura 18).

(17)

© Orientação a Objetos 43

Tcc

Banca

titulo ano data situacao parecer notas vincularAluno vincularBanca atribuirProfessor Figura 18 Agregação entre as Classes Tcc e Banca (UML).

Por fim, analisaremos a relação de Associação. A associação permite representar as relações entre objetos que apresentam estruturas e comportamentos diferenciados, e não se caracterizam por vínculos do tipo “parte-todo” (agregação ou Composição) e “é um” (herança). Como exemplo, destaca-se a relação entre as classes Aluno e Curso, em que um aluno se matricula em um determinado Curso.

Aluno

Curso

nome

ra

nome

sigla

area

fazMatricula trocarCoordenador Figura 19 Associação entre as Classes Aluno e Curso (UML).

A associação matrícula pode resultar na criação de comportamentos nas duas classes relacionadas. Note que podemos criar um novo comportamento na classe Aluno chamado “fazMatricula”, que se encarregará de estabelecer a verdadeira relação entre os objetos das classes relacionadas (Figura 19).

Por fim, apresentamos na Figura 20 o diagrama de classes completo, resultante da análise orientada a objetos do sistema de controle de orientações e defesas de TCC:

Aluno

nome

ra

fazMatricula

Tcc

titulo

ano

situacao

notas

Curso

matricula nome

sigla

area

trocarCoordenador

Banca

data

parecer

Coordenador

ramal

cargaHoraria

Professor

nome

titulacao

email

vincularAluno

atribuirProfessor

(18)

7. QUESTõES AUToAvAliATivAS

Sugerimos que você procure responder, discutir e comentar as questões a seguir que tratam da temática desenvolvida nesta unidade.

A autoavaliação pode ser uma ferramenta importante para você testar o seu desempenho. Se você encontrar dificuldades em responder a essas questões, procure revisar os conteúdos estudados para sanar as suas dúvidas. Esse é o momento ideal para que você faça uma revisão desta unidade. Lembre-se de que, na Educação a Distância, a construção do conhecimento ocor- re de forma cooperativa e colaborativa; compartilhe, portanto, as suas descobertas com os seus colegas.

Confira, a seguir, as questões propostas para verificar o seu desempenho no estudo desta unidade:

1) na Orientação a Objetos, como você define a relação existente entre os conceitos de classe e objeto?

2) Considerando o sistema de uma faculdade, defina pelo menos cinco características e três comportamentos para cada um dos seguintes objetos: Funcionário, Departamento e Projeto.

3) Considerando as classes Carro, Casa, Pessoa, Moto, veículo, Pneu, Proprietário e Locatário, crie um diagrama de classes que permita agrupar todas as classes representadas por tais objetos em apenas um único diagrama de classes da UML.

4) Sabemos que a Orientação a Objetos possui uma série de conceitos importantes. Cite e defina pelo menos qua- tro conceitos relacionados exclusivamente à Orientação a Objetos.

5) Qual é a importância do conceito de Encapsulamento da Orientação a Objetos para a programação de um sis- tema? Destaque pelo menos uma vantagem e uma desvantagem no uso do Encapsulamento para a codificação, usando uma linguagem orientada a objetos.

Gabarito

Depois de responder às questões autoavaliativas, é importante que você confira o seu desempenho, a fim de que possa saber se é preciso retomar o estudo desta unidade.

1) Para responder a esta pergunta você terá que primeiro definir separadamente cada um dos conceitos de classe e objeto. Assim, em relação à Orientação a Objetos, o que são objetos? Objetos são abstrações de informações do mundo real para o mundo computacional que possuem características e comportamentos. Um objeto pode ser algo que possui existência física ou apenas um conceito não tangível. Um objeto possui similaridade com uma infinidade de outros objetos semelhantes a ele. Quando analisamos todos os objetos similares e identifi- camos neles suas características e comportamentos comuns, encontramos a Classe que representa esse grupo de objetos.

Classes são representações que possuem características e comportamentos comuns a um conjunto de objetos. Uma classe é definida como um modelo para os objetos que ela representa ou define.

Uma vez que definimos os conceitos de classe e objeto, vamos agora responder à questão inicial. A relação existente entre classe e objeto é que uma classe é identificada como um molde para objetos que ela representa, e todos os objetos criados com base na classe possuirão características e comportamentos idênticos.

2) nesta questão, você deverá abstrair informações relacionadas ao sistema de uma faculdade. não existem res- postas corretas ou incorretas, pois não definimos o escopo do projeto. Use sua criatividade para identificar as informações mais relevantes ao sistema fictício proposto. Acompanhe, a seguir, algumas características e com- portamentos possíveis para essa abstração.

Funcionário: Características: nome, Código Funcionário, Telefone, Endereço, Data de Contratação. Comportamentos: chefiaDepartamento, trabalhaProjeto e coordenaProjeto.

Departamento: nome, Sigla, Descrição, Data de Criação e Localização. Comportamentos: adicionaFuncionário, vinculaProjeto e trocaDiretor.

Projeto: Código, Descrição, Data de Início, Data de Término e Situação. Comportamentos: vinculaFuncionario, associaDepartamento e finalizaProjeto.

(19)

© Orientação a Objetos 45

3) Comece analisando cuidadosamente os objetos citados na questão. Busque identificar diferentes tipos de re- lações existentes entre eles. A figura, a seguir, exibe um diagrama de classes da UML que permite representar todos os conceitos envolvidos na questão. note como as relações de herança, agregação e associação foram indicadas no diagrama.

Veículo

aluga

possui Inquilino

Carro Moto Proprietário

4 2

Pneu Pessoa

4) nessa questão você deverá indicar quatro conceitos importantes relacionados à orientação a objetos. A seguir, citamos sete conceitos. Quanto mais conceitos você citar, mais estará ciente da conceituação existente.

- Encapsulamento: técnica para minimizar interdependências entre objetos, por meio da definição de métodos que possibilitam o acesso aos dados do objeto. Assim, mudanças na definição e na implementação de uma classe, desde que preservem os métodos de acesso, não afetam outras classes presentes no restante do sistema.

- Abstração: mecanismo utilizado na análise de um domínio de aplicação em que se observa a realidade e dela se identificam informações consideradas essenciais para uma aplicação, excluindo todos os aspectos julgados irrele- vantes.

- Classificação: ação de criar classes por meio da abstração de conceitos existentes em objetos que possuem características e comportamentos iguais.

- Instanciação: corresponde à ação de criar objetos com base em uma classe. Todo objeto criado é uma instância de uma classe.

- Herança: mecanismo que permite definir uma nova classe (subclasse) a partir de uma já existente (superclas- se). Ao se estabelecer uma subclasse, ela herda todas as características da superclasse, ou seja, a especificação dos atributos e dos métodos da superclasse passa a fazer parte da especificação dos atributos e dos métodos da subclasse. Assim, a subclasse pode adicionar novos métodos, como também reescrever os métodos herdados da superclasse. A relação estabelecida é chamada de “é do tipo”, em que uma subclasse “é do tipo” da superclasse. - Agregação: tipo de relação existente entre classes que permite a reutilização de classes já existentes para compor classes de estruturas mais complexas. A relação estabelecida é do tipo “parte-todo”, em que se criam classes (agregadoras) que se utilizam de outras classes (agregadas) como parte de sua definição.

- Associação: outro tipo de relação existente entre classes. As classes envolvidas não apresentam estruturas co- muns como acontece na Herança e na Agregação. O que se observa normalmente é que, na Associação, as classes relacionadas apresentam estruturas distintas, e o tipo de relação está vinculado a alguma regra de negócio do sistema.

(20)

5) Ao analisar a importância do Encapsulamento para um sistema, você deve considerar que o Encapsulamento é uma técnica importante para minimizar interdependências entre objetos, por meio do uso de modificadores de acesso que restringem o acesso direto a detalhes internos do objeto (atributos e métodos) e que compartilham acesso a eles por meio, principalmente, de métodos de acesso. A importância desse conceito para a programa- ção de um sistema é que as mudanças na definição e na implementação de uma classe, desde que preservados os métodos de acesso, não afetam outras classes presentes no restante do sistema.

vantagem: mais robustez no sistema, pois a menor interdependência entre classes resulta em uma menor incidência de erros quando os códigos das classes sofrem modificações.

Desvantagem: códigos mais complexos e de maior tamanho em virtude da utilização de modificadores de acesso de uso restrito sobre atributos e criação de métodos de acesso.

8. ConSiDERAçõES

Os conceitos e definições abordados nesta unidade serão complementados no decorrer do estudo desta disciplina, cujo foco estará voltado à programação e à modelagem orientadas a objetos. Objetos, Classes, Generalização, Especialização, Encapsulamento, Polimorfismo, Herança, Agregação, Composição e Associação são conceitos que fazem parte do vocabulário da Orientação a Objetos.

9. E-REfERênCiAS

BLUEJ. The Interactive Java Environment. Disponível em:<http://www.bluej.org>. Acesso em: 09 dez. 2010.

SUn DEvELOPERS nETwORk (SDn). Sun Microsystems. Disponível em:<http://java.sun.com>. Acesso em: 09 dez. 2010.

10. REfERênCiAS BiBliogRáfiCAS

CADEnHEAD, R.; LEMAY, L. Aprenda em 21 dias Java 2. Tradução de Daniel vieira e Ana Beatriz Tavares. 4. ed. Rio de Janeiro: Elsevier, 2005.

DEITEL, H. M.; DEITEL, P. J. Java: como programar. Tradução de Edson Furmankiewicz. 6. ed. São Paulo: Pearson Prentice Hall, 2007.

BOOCH, G.; RUMBAUGH, J.; JACOBSOn, I. UML: guia do usuário. Tradução de Fábio Freitas da Silva et al. 2 ed. rev. atual. Rio de Janeiro: Elsevier, 2005.

Referências

Documentos relacionados

A pesquisa “Estratégias para o varejo brasileiro – Reflexões sobre os anseios do consumidor” realizada pela Deloitte em 2010 apresentou de forma muito objetiva o que

E) CRIE NO SEU CADERNO UM TÍTULO PARA ESSA HISTÓRIA EM QUADRINHOS.. 3- QUE TAL JUNTAR AS SÍLABAS ABAIXO PARA FORMAR O NOME DE CINCO SUGESTÕES DE PRESENTE PARA O DIA

Tal Filosofia (a classificação de primeira não significa que depois dela venha uma filosofia segunda) deve ser entendida como a forma suprema do saber - por ser capaz

Os motins na América Portuguesa tanto quanto na Espanhola derivam do colapso das formas acomodativas - como será melhor explicado à frente -, ou melhor dizendo, do rompimento

As coisas relativas à vida com Deus e ao seu serviço lhes são tediosas, e não podem encontrar qualquer alegria nelas, porque apagaram o Espírito Santo e

que a população tem direito, como Transportes da Secretaria de Saúde o Ambulâncias Novas, UTI Móvel, Veículos senhor Francisco Belinho de Almeida, o para o Transporte de

NASF (Núcleo de Apoio à Saúde da Família)  Os NASF fazem parte da atenção básica, mas não se constituem como serviços com unidades físicas independentes ou especiais, e não

Por outro lado, quando se fala em pequenas e médias empresas, onde o número de funcionários é maior, é mais bem dividida e o uso da Intranet se torna