Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

RELACIONAMENTOS ENTRE CLASSES, Exercícios de Linguagem de Programação

a) Plana Bidirecional b) Agregação Bidirecional. Figura 6-Exemplo de Associação. Quadro 3a) – Códigos C++ e Java do Exemplo da Figura 7a). Saxofonista.

Tipologia: Exercícios

2022

Compartilhado em 07/11/2022

Andre_85
Andre_85 🇧🇷

4.5

(124)

218 documentos

1 / 22

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). 1
Prof. Robinson Vida Noronha
Tema: Relacionamento entre Classes
RELACIONAMENTOS ENTRE CLASSES
Conteúdo
Introdução...........................................................................................................2
Tipos de Relacionamentos .................................................................................3
O Relacionamento de Dependência ( “ precisa de ” ).......................................5
O Relacionamento de Generalização ( “ é um tipo de ” )..................................6
O Relacionamento de Associação......................................................................9
Multiplicidade. ..............................................................................................12
Quadro 4 a) – Código C++ e Java do Exemplo da Figura 8 a)..................13
Quadro 4 b) – Código C++ e Java do Exemplo da Figura 8 b)..................14
Relações Unidirecionais de Associação........................................................14
Quadro 5 – Código C++ e Java do Exemplo da Figura 9 .........................15
Composição ( “...pertence exclusivamente a ...” ) .............................16
Quadro 6 – Códigos C++ e Java do Exemplo da Figura 10.......................17
Propriedades Da Relação .................................................................................17
Dicas.................................................................................................................19
Resumo.............................................................................................................20
Exercício:..........................................................................................................21
Referência Bilbiográfica Utilizada...................................................................22
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16

Pré-visualização parcial do texto

Baixe RELACIONAMENTOS ENTRE CLASSES e outras Exercícios em PDF para Linguagem de Programação, somente na Docsity!

Prof. Robinson Vida Noronha

Tema: Relacionamento entre Classes

RELACIONAMENTOS ENTRE CLASSES

  • Introdução........................................................................................................... Conteúdo
  • Tipos de Relacionamentos .................................................................................
  • O Relacionamento de Dependência ( “ precisa de ” ).......................................
  • O Relacionamento de Generalização ( “ é um tipo de ” ) ..................................
  • O Relacionamento de Associação......................................................................
    • Multiplicidade. ..............................................................................................
      • Quadro 4 a) – Código C++ e Java do Exemplo da Figura 8 a) ..................
      • Quadro 4 b) – Código C++ e Java do Exemplo da Figura 8 b)..................
    • Relações Unidirecionais de Associação........................................................
      • Quadro 5 – Código C++ e Java do Exemplo da Figura 9 .........................
    • Composição ( “...pertence exclusivamente a ...” ) .............................
      • Quadro 6 – Códigos C++ e Java do Exemplo da Figura 10.......................
  • Propriedades Da Relação .................................................................................
  • Dicas .................................................................................................................
  • Resumo.............................................................................................................
  • Exercício:..........................................................................................................
  • Referência Bilbiográfica Utilizada...................................................................

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

RELACIONAMENTOS ENTRE CLASSES

Introdução

Classes são representações de elementos, conceitos, idéias, grupo de objetos ou qualquer outra entidade conhecida. Para o engenheiro, Classes são peças de um quebra-cabeça, ou engrenagens. Essas peças devem ser “juntadas” ou “associadas” de tal forma a solucionar uma questão ou problema. Outra forma de visualizar Classes é imaginar que elas definem um vocabulário básico. Esses elementos do vocabulário, por sua vez, necessitam ser estruturados ou relacionados de tal forma a representar uma ou mais idéias. Podendo as Classes serem consideradas engrenagens ou peças de um quebra-cabeça, uma questão surge naturalmente: Como essas peças poderiam ser relacionadas? Este material procura descrever, de maneira reduzida, como as classes podem ser relacionadas. O que é apresentado não é um conjunto de regras que busque delimitar a criatividade do engenheiro, mas sim, orientações ou recomendações. Nesse contexto, analisam-se relacionamentos entre duas classes. Apesar dessa limitação, os conceitos apresentados neste material podem ser aplicados para definir relacionamentos entre três ou mais classes. Este material utiliza a linguagem UML e códigos C++ e Java para representar os relacionamentos entre as classes. Os exemplo foram produzidos na ferramenta ArgoUML. De maneira geral, espera-se desenvolver no aluno a habilidade de ser capaz de traduzir uma representação gráfica de um modelo para uma linguagem de programação.

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

Figura 1- Representação de Dependência

Figura 2-Relação de Generalização

Figura 3-Relação de Associação

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

O Relacionamento de Dependência ( “ precisa de ” )

Duas classes possuem um relacionamento de Dependência quando uma alteração em uma dessas classes poder afetar a outra classe. O inverso não é verdade. Nesse contexto, diz-se que uma classe utiliza a outra como argumento em sua assinatura. Representa-se uma relação de Dependência apontando de uma classe que possui um método ou operação para a classe que é utlizada como um parâmetro para essa operação. Por exemplo, na Figura 4, as classes DVD-PLAYER e DVD-MIDIA apresentam um relacionamento de dependência. A assinatura do método play da classe DVD-PLAYER recebe como parâmetro um objeto ou instância da classe DVD-MIDIA. Nesse exemplo da Figura 4, esse objeto é rotulado por “filme”. O sentido da seta indica quem depende de quem.

Figura 4-Exemplo de Dependência No quadro a seguir, as duas classes e seu relacionamento representadas na Figura 4 são codificadas ou traduzidas para as linguagens C++ (arquivos “.cpp” e “.h”) e Java (arquivo “.java”). Esse código gerado é representado nos arquivos .h e .cpp dessas duas classes.

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

A relação de Generalização é identificada por meio do texto “ é um “. Na Figura 5, a seguir, simplifica-se um modelo genérico de generalização. Nesse exemplo, a seta terminadora aponta sempre para a classe mais genérica.

Figura 5 -Relacionamento de Generalização

O Quadro 2 apresenta os arquivos gerados para as classes C1 e C2 da Figura 5. Destaca-se que no código de definição da classe C2, informa-se de maneira explicita qual é a classe Pai. Na linguagem C++ isso é feito por meio do caracter “ : ”, da forma de acesso ( public nesse caso) e do nome da classe genérica. Por outro lado, na linguagem Java, utiliza-se apenas a palavra reservada “ extends ” seguida do nome da classe genérica ou classe-pai.

Quadro 2 – Código C++ e Java do Exemplo da Figura 6 C1 C

.h #ifndef C1_h

#define C1_h

class C1 {};

#endif // C1_h

#ifndef C2_h #define C2_h

#include "C1.h"

class C2 : public C1 {};

#endif // C2_h

.cpp #include "C1.h"^ #include "C2.h"

.java public class C1 { }^ public class C2^ extends C1^ {^ }

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

Como outro exemplo de generalização, a Figura 6 a seguir, três classes são representadas: Pessoa, Engenheiro e Musico. Nessa representação, a generalização permite dizer “Engenheiro é um(a) Pessoa” e “Musico é um(a) Pessoa”. Ou seja, os objetos do mundo real representados pela classe Engenheiro e pela classe Pessoa, possuem algumas características comuns ( atributos e método ). Essas características comuns são os atributos e métodos da classe Pessoa.

Figura 5-Exemplo de Generalização

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

A Figura 7b) representa que “Musico toca_em Orquestra”. Nesse contexto, deseja-se destacar que a classe Orquestra é “mais importante ou maior” que a classe Músico. Os Quadros 3a) e 3b), apresentam respectivamente os códigos Java e C++ dessas classes representadas respectivamente nas Figuras 7a) e 7b).

a) Plana Bidirecional b) Agregação Bidirecional Figura 6-Exemplo de Associação

Quadro 3a) – Códigos C++ e Java do Exemplo da Figura 7a) Saxofonista Baterista

.h #ifndef Saxofonista_h

#define Saxofonista_h

class Baterista;

class Saxofonista {

public: *Baterista toca_com; }; #endif // Saxofonista_h

#ifndef Baterista_h #define Baterista_h

class Saxofonista;

class Baterista {

public: *Saxofonista toca_com; }; #endif // Baterista_h

.cpp #include "Saxofonista.h"^ #include "Baterista.h"

.java import java.util.Vector;

public class Saxofonista { public Vector toca_com; }

import java.util.Vector;

public class Baterista { public Vector toca_com; }

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

Quadro 3b) – Códigos C++ e Java do Exemplo da Figura 7b) Musico Orquestra

.h #ifndef Musico_h

#define Musico_h

class Orquestra;

class Musico {

public:

*Orquestra toca_em; };

#endif // Musico_h

#ifndef Orquestra_h #define Orquestra_h

class Musico;

class Orquestra {

public:

Musico toca_em;* };

#endif // Orquestra_h

.cpp #include "Musico.h"^ #include "Orquestra.h"

.java import java.util.Vector;

public class Musico { public Vector toca_em; }

import java.util.Vector;

public class Orquestra { public Vector toca_em; }

Nos quadros 3 a) e b), pode-se observar a referência cruzada entre as duas classes da relação. A classe Baterista possui uma referência para a classe Saxofonista e vice e versa no Quadro 3a). A classe Musico possui uma referencia para a classe Orquestra e vice e versa. Por padrão, a relação de Associação é bidirecional. Apesar disso, pode-se também definir relações de Associação unidirecional. O que significa ser bidirecional? No exemplo apresentado na Figura 3a), significa que a classe Saxofonista tem registrado com quem o saxofonista toca e

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

Caso seja necessário especificar uma quantidade mínima diferente de um, é só informar. Por exemplo, pode-se especificar que a relação deve ser delimitada entre 4 e 8 integrantes. Nesse caso, ao invés de registrar “1..*”, seria “4..8”.

Quadro 4 a) – Código C++ e Java do Exemplo da Figura 8 a) Saxofonista Baterista

.h #ifndef Saxofonista_h

#define Saxofonista_h

class Baterista;

class Saxofonista {

public:

*Baterista toca_com; };

#endif // Saxofonista_h

#ifndef Baterista_h #define Baterista_h

#include

class Saxofonista;

class Baterista {

public:

std::vector< Saxofonista > toca_com;* };

#endif // Baterista_h

.cpp #include "Saxofonista.h"^ #include "Baterista.h"

.java public class Saxofonista

{ public Baterista toca_com; }

import java.util.Vector;

public class Baterista { public Vector toca_com; }

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

Quadro 4 b) – Código C++ e Java do Exemplo da Figura 8 b) Musico Orquestra

.h #ifndef Musico_h

#define Musico_h

class Orquestra;

class Musico {

public:

*Orquestra toca_em; };

#endif // Musico_h

#ifndef Orquestra_h #define Orquestra_h #include

class Musico;

class Orquestra {

public:

std::vector< Musico > toca_em;* };

#endif // Orquestra_h

.cpp #include "Musico.h"^ #include "Orquestra.h"

.java

public class Musico { public Orquestra toca_em; }

import java.util.Vector;

public class Orquestra { public Vector toca_em; }

Relações Unidirecionais de Associação

As relações de Associação apresentadas até o presente momento são bidirecionais. Ou seja, todas as classes que participam da relação tem a consciência disso. Em algumas situações, pode-se desejar que uma das classes que participa da relação não tenha consciência disso. Nesses casos, têm-se uma relação Unidirecional.

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

Composição ( “...pertence exclusivamente a ...” )

A Agregação Simples possui uma variante, a Composição. Essa variação adiciona um grau de importância semântica à relação. Ela define a relação de posse ou possessão. Isso significa que um objeto da classe pertence apenas e exclusivamente ao objeto da outra classe. Como a classe mais importante (ou todo) é responsável pela disposição das partes. Isso significa que ela precisa gerenciar a criação e destruição das partes que a compõe. Por exemplo, na Figura 10, a seguir, representa-se a classe TabuleiroDeXadrez que deve conter instâncias da classe Casa. A classe Casas, que pode ter o atributo cor como sendo “preta” ou “branca”, compõe um Tabuleiro de Xadrez. Mais especificamente, um tabuleiro de Xadrez é formado, composto por 32 casas pretas e 32 casas brancas.

Figura 9-Exemplo de Relacionamento de Composição No Quadro 6, os respectivos códigos das classes da Figura 10 são apresentados. Destaca-se nesse relacionamento, a inexistência de ponteiro na classe TabuleiroDeXadrez. Como os elementos da classe Casa compõe apenas a classe TabuleiroDeXadrez e existem apenas com essa principal finalidade, não há a necessidade de ponteiro. A classe TabeuleiroDeXadrez deverá instanciar os 64 elementos dessa classe.

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

Quadro 6 – Códigos C++ e Java do Exemplo da Figura 10 TabuleiroDeXadrez Casa

.h #ifndef TabuleiroDeXadrez_h

#define TabuleiroDeXadrez_h

#include "Casa.h"

class TabuleiroDeXadrez {

public:

Casa contem[64]; };

#endif // TabuleiroDeXadrez_h

#ifndef Casas_h #define Casas_h

class TabuleiroDeXadrez;

class Casa {

public:

*TabuleiroDeXadrez contem; };

#endif // Casa_h

.cpp #include "TabuleiroDeXadrez.h"^ #include "Curso.h"

.java public class TabuleiroDeXadrez

{ Casas contem = new Casa[64]; }

public class Casa { TabuleiroDeXadrez contem; }

De maneira similar aos outros relacionamentos, a Composição também pode ser unidirecional. Nesse caso, a classe que desconhece a relação nãofaz referência à ela em seu código.

Propriedades Da Relação

Em algumas situações, a relação entre duas classes possui propriedades. Por exemplo, a relação entre a classe Paciente e AgendaDoMédico é a Consulta. Essa classe só existe para representar as propriedades da relação entre as duas classes Paciente e AgendoDoMedico. Nesses casos, representa-se em UML as três classes, conforme exemplifica a Figura 11 a seguir.

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

PropriedadesDaRelacao #ifndef PropriedadesDaRelacao_h

#define PropriedadesDaRelacao_h

#include "C1.h" #include "C2.h"

class PropriedadesDaRelacao { public: C1 myC1; C2 myC2; };

#endif // PropriedadesDaRelacao_h

C2 #ifndef C2_h

#define C2_h

class PropriedadesDaRelacao;

class C2 { public: PropriedadesDaRelacao *PropriedadesDaRelacaoAssoc; };

#endif // C2_h

Dicas

Ao modelar relações em UML:

  • Utilize Dependências apenas quando o relacionamento modelado não for estrutural.
  • Utilize Generalização apenas quando voce conseguir ter um “ é um tipo de “ entre as classes representadas.

Prof. Robinson Vida Noronha Tema: Relacionamento entre Classes

  • Cuidado com a generalização cíclica. Generalização cíclica é quando um ciclo fechado é definido entre classes que se relacionam pela Generalização.
  • Utilize Associação primeiramente quando houver uma relação estrutural entre os objetos.

Resumo.

Programar de maneira orientada a objetos, consiste, entre outras coisas, definir classes e seus relacionamentos. Classes se relacionam com outras Classes com a finalidade de representar objetos e sistemas do mundo real. Em resumo, os relacionamentos apresentados neste material são:

Relacionamento Símbolo Significado Dependência A classe C1 depende da classe C2 para executar alguma tarefa. Pode-se dizer que: “C1 precisa de C2”. Generalização ou Herança

A classe C1 é dita filha da classe C2. A classe C1 possui toda a estrutura da classe C2. Pode-se dizer: “ C1 é um tipo de C2 “. Associação Plana As classes C1 e C2 são igualmente importantes e são associadas de maneira estrutural para representar uma idéia, conceito ou um todo.