OO Engenharia Eletrnica Orientao a Objetos Programao em
OO – Engenharia Eletrônica Orientação a Objetos - Programação em C++ 4 a Slides: Listas de Objetos Prof. Jean Marcelo SIMÃO – DAELN / UTFPR 1
Relembrando: Qual tem sido nosso exemplo para estudos? Um sistema acadêmico! 2
Definindo Requisitos Funcionais (e Gerais) do Sistema Acadêmico • Registrar no sistema um conjunto de Universidades. • Registrar no sistema um conjunto de Departamentos relacionados a Universidades. • Registrar no sistema um conjunto relacionados a Departamentos. de Disciplinas • Registrar um conjunto de Professores relacionados a entidades pertinentes como Departamentos e Disciplinas. • Registrar um conjunto de Alunos relacionados a entidades pertinentes como Departamentos e Disciplinas. • . . . Obs. : Estes são requisitos funcionais (e gerais) que serão expandidos e refinados (inclusive em termos técnicos) nos enunciados de exercícios. Isto porque estamos no âmbito de uma disciplina aprendendo conceitos progressivamente. Em um sistema real, os requisitos deveriam ser definidos e estabelecidos o quanto antes (dentro do ciclo de engenharia de software). 3
Sistema Acadêmico Diagrama de Classes de Projeto de um Sistema Acadêmico. 4
Exercício 1 A Baseando-se nos requisitos funcionais (sejam gerais ou específicos), pode-se derivar requisitos técnicos, como estes abaixo que compõem o exercício 1 A. - Crie uma classe Disciplina. - Associe cada Disciplina a um Departamento. - Cada Departamento deve ser capaz de armazenar uma lista de disciplinas. - Esta lista deverá ser simplesmente encadeada. 5
Diagrama de Classes – Análise. Do ponto de vista da análise, é uma COMPOSIÇÃO (ou agregação-forte). 6
Diagrama de Classes – Projeto. Do ponto de vista do projeto, é uma agregação simples (ou fraca). 7
‘Correção de Exercício’ #ifndef _DISCIPLINA_H_ #define _DISCIPLINA_H_ #include “Departamento. h” class Disciplina { private: int id; char nome[150]; char area_conhecimento[150]; Crie uma classe Disciplina Departamento* p. Depto. Associado; p. Depto. Associado public: Disciplina ( char* ac = "" ); ~Disciplina ( ); void set. Id(int n); int get. Id(); Associe cada Disciplina a um Departamento. void set. Nome ( char* n ); char* get. Nome ( ); void set. Departamento ( Departamento* pdpto ); Departamento* get. Departamento(); }; #endif 8
‘Correção de Exercício’ #ifndef _DEPARTAMENTO_H_ #define _DEPARTAMENTO_H_ class Universidade; class Disciplina; Cada Departamento deve ser capaz de armazenar uma lista de disciplinas class Departamento { private: char nome[100]; // Associação para com uma Universidade* p. Univ; // Associação para com várias Disciplinas. Disciplina *p. Discipl. Prim; Disciplina *p. Discipl. Atual; public: Departamento ( ); Esta lista deverá ~Departamento ( ); ser simplesmente encadeada. void set. Nome ( char* n ); char* get. Nome ( ); void set. Universidade ( Universidade* pu ); Universidade* get. Universidade ( ); void inclua. Disciplina ( Disciplina* pd ); void liste. Disciplinas ( ); }; #endif #ifndef _DISCIPLINA_H_ #define _DISCIPLINA_H_ #include "Aluno. h“ #include “Departamento. h” class Disciplina { private: int id; char nome [ 150 ]; char area_conhecimento [ 150 ]; Departamento* p. Depto. Associado; public: Disciplina ( char* ac = "" ); ~Disciplina ( ); Disciplina* p. Prox; void set. Id ( int n ); int get. Id ( ); void set. Nome ( char* n ); char* get. Nome ( ); void set. Departamento (Departamento* pdpto); Departamento* get. Departamento ( ); }; #endif 9
‘Correção de Exercício’ #ifndef _DEPARTAMENTO_H_ #define _DEPARTAMENTO_H_ class Universidade; class Disciplina; #ifndef _DISCIPLINA_H_ #define _DISCIPLINA_H_ #include "Aluno. h“ #include “Departamento. h” class Departamento { private: char nome[130]; class Disciplina { private: int id; char nome[150]; char area_conhecimento[150]; Departamento* p. Depto. Associado; public: Disciplina ( char* ac = "" ); ~Disciplina ( ); Universidade* p. Univ; Disciplina *p. Discipl. Prim; Disciplina *p. Discipl. Atual; public: Departamento ( ); ~Departamento ( ); Disciplina* p. Prox; void set. Nome ( char* n ); char* get. Nome ( ); void set. Universidade ( Universidade* pu ); Universidade* get. Universidade ( ); void set. Id ( int n ); int get. Id ( ); void set. Nome ( char* n ); char* get. Nome ( ); void inclua. Disciplina ( Disciplina* pd ); void liste. Disciplinas ( ); void set. Departamento ( Departamento* pdpto ); Departamento* get. Departamento ( ); }; #endif Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual Disciplina Computacao 1_2006. . . p. Prox 10
#include "Departamento. h" #include "Universidade. h" #include "Disciplina. h" #include <stdio. h> void Departamento: : inclua. Disciplina ( Disciplina* pd ) Departamento: : inclua. Disciplina { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } Departamento: : Departamento ( ) { p. Discipl. Prim = NULL; p. Discipl. Atual = NULL; } Departamento: : ~Departamento ( ) { p. Discipl. Prim = NULL; p. Discipl. Atual = NULL; } void Departamento: : set. Nome ( char* n ) { strcpy ( nome, n ); } } void Departamento: : liste. Disciplinas ( ) Departamento: : liste. Disciplinas { Disciplina* p. Aux; p. Aux = p. Discipl. Prim; char* Departamento: : get. Nome ( ) { return nome; } while ( p. Aux != NULL ) { printf (" A disciplina %s pertence ao Departamento %s n", p. Aux->get. Nome(), nome ); void Departamento: : set. Universidade ( Universidade* pu ) { p. Univ = pu; } Universidade* Departamento: : get. Universidade ( ) { return p. Univ; } p. Aux = p. Aux->p. Prox; } } Refazer o código usando cout. . . 11
#include "Disciplina. h" #include <stdio. h> #include <string. h> Disciplina: : Disciplina ( char* ac ) { p. Depto. Associado = NULL; p. Prox = NULL; strcpy (area_conhecimento, ac); } void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; } Departamento* Disciplina: : get. Departamento ( ) { return p. Depto. Associado; } Disciplina: : ~Disciplina ( ) { p. Depto. Associado = NULL; p. Prox = NULL; } void Disciplina: : set. Id ( int n ) { id = n; } int Disciplina: : get. Id ( ) { return id; } 1 a Versão void Disciplina: : set. Nome (char* n) { strcpy ( nome, n ); } char* Disciplina: : get. Nome ( ) { return nome; } 12
‘Correção de Exercício’ #ifndef _PRINCIPAL_H_ #define _PRINCIPAL_H_ // Disciplinas Disciplina Computacao 1_2006; Disciplina Introd_Alg_2007; Disciplina Computacao 2_2007; Disciplina Metodos 2_2007; #include “Professor. h" #include "Universidade. h" #include "Aluno. h" #include "Disciplina. h" class Principal { private: // Universidades Universidade UTFPR; Universidade Princeton; Universidade Cambridge; int int dia. Atual; mes. Atual; ano. Atual; public: Principal ( ); // Inicializações. . . void Inicializa ( ); void Inicializa. Universidades ( ); void Inicializa. Departamentos ( ); void Inicializa. Professores ( ); void Inicializa. Disciplinas ( ); // Departamentos Departamento DAELN; Departamento Matematica. UTFPR; Departamento Fisica. UTFPR; Departamento Matematica. Princeton; Departamento Fisica. Princeton; Organização void Executar ( ); void Departamento Matematica. Cambridge; Departamento Fisica. Cambridge; Calc. Idade. Profs ( ); Univ. Onde. Profs. Trabalham ( ); Dep. Onde. Profs. Trabalham ( ); Liste. Disc. Deptos ( ); . . . }; // Professores Professor Simao; Professor Einstein; Professor Newton; #endif 13
#include "Principal. h" #include <stdio. h> void Principal: : Inicializa. Professores ( ) { Principal: : Principal ( ) { // leitura da data atual. . . // Inicialização do(s) ojeto(s) da classe Professor Simao. Inicializa ( 3, 10, 1976, "Jean Simão" ); Einstein. Inicializa ( 14, 3, 1879, "Albert Einstein" ); Newton. Inicializa ( 4, 1, 1643, "Isaac Newton“ ); Inicializa(); // "Filiação" a universidade. Simao. set. Univ. Filiado ( &UTFPR ); Einstein. set. Univ. Filiado ( &Princeton ); Newton. set. Univ. Filiado ( &Cambridge ); } void Principal: : Inicializa ( ) { Inicializa. Univesidades ( ); Inicializa. Departamentos ( ); Inicializa. Professores ( ); Inicializa. Disciplinas ( ); } // "Filiação" ao departamento. Simao. set. Departamento ( &DAELN ); Einstein. set. Departamento ( &Fisica. Princeton ); Newton. set. Departamento ( &Matematica. Cambridge ); } void Principal: : Inicializa. Univesidades ( ) { // Registro do(s) nome(s) da(s) universidade(s) UTFPR. set. Nome ( "UTFPR" ); Princeton. set. Nome ( "Princeton" ); Cambridge. set. Nome ( "Cambridge" ); } void Principal: : Inicializa. Departamentos ( ) { // Registro do(s) nome(s) do(s) departamento(s) DAELN. set. Nome ( "Eletronica UTFPR" ); Matematica. UTFPR. set. Nome ( "Matematica UTFPR" ); Fisica. UTFPR. set. Nome ( "Fisica UTFPR" ); Matematica. Princeton. set. Nome ( "Matematica Princeton" ); Fisica. Princeton. set. Nome ( "Fisica Pirnceton" ); Matematica. Cambridge. set. Nome ( "Matematica Cambridge“ ); Fisica. Cambridge. set. Nome ( "Fisica Cambridge" ); . . . } 14
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); DAELN. inclua. Disciplina. . . ( &Computacao 1_2006); ( & Introd_Alg_2007); ( &Computacao 2_2007); ( &Metodos 2_2007); } void Principal: : Calc. Idade. Profs ( ) { // Cálculo da idade. Simao. Calc_Idade ( dia. Atual, mes. Atual, ano. Atual ); Einstein. Calc_Idade ( dia. Atual, mes. Atual, ano. Atual ); Newton. Calc_Idade ( dia. Atual, mes. Atual, ano. Atual ); printf ("n"); } void Principal: : Univ. Onde. Profs. Trabalham ( ) { // Universidade que a Pessoa trabalha. Simao. Onde. Trabalho ( ); Einstein. Onde. Trabalho ( ); Newton. Onde. Trabalho ( ); printf ("n"); } void Principal: : Dep. Onde. Profs. Trabalham ( ) { // Departamento que a Pessoa trabalha. Simao. Qual. Departamento. Trabalho ( ); Einstein. Qual. Departamento. Trabalho ( ); Newton. Qual. Departamento. Trabalho ( ); printf ( "n“ ); } void Principal: : Liste. Disc. Deptos ( ) { DAELN. liste. Disciplinas ( ); printf ("n"); } void Principal: : Executar ( ) { Calc. Idade. Profs ( ); Univ. Onde. Profs. Trabalham ( ); Dep. Onde. Profs. Trabalham ( ); Liste. Dep. Por. Univ ( ); // Metodos 2. liste. Alunos(); Liste. Disc. Deptos ( ); } 1 a Versão 15
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. . inclua. Disciplina ( &Introd_Alg_2007); ); DAELN & DAELN. ); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); }. . . 1 a Versão 16
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); DAELN. inclua. Disciplina ( &Computacao 1_2006); ( & Introd_Alg_2007); ( &Computacao 2_2007); ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL Disciplina Computacao 1_2006. . . p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina NULL 17
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL Disciplina Computacao 1_2006. . . p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina NULL 18
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. ); DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL pd Disciplina Computacao 1_2006. . . p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina NULL 19
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. ); DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL pd Disciplina Computacao 1_2006. . . p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina NULL 20
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; pd p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. ); DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL pd Disciplina Computacao 1_2006. . . p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina NULL 21
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. ); DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pd Disciplina Computacao 1_2006. . . p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina NULL 22
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. ); DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual Disciplina Computacao 1_2006. . . p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina NULL 23
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual Disciplina Computacao 1_2006. . . p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina NULL 24
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pd Disciplina Computacao 1_2006. . . p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina NULL 25
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pd Disciplina Computacao 1_2006. . . p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina NULL 26
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual-> p. Prox = pd; p. Discipl. Atual->p. Prox pd; p. Discipl. Atual = pd; } } DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pd Disciplina Computacao 1_2006. . . p. Prox Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 27
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual-> p. Prox = pd; p. Discipl. Atual->p. Prox pd; p. Discipl. Atual = pd; } } DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pd Disciplina Computacao 1_2006. . . p. Prox Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 28
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim Disciplina Computacao 1_2006. . . p. Prox p. Discipl. Atual Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 29
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim Disciplina Computacao 1_2006. . . p. Prox p. Discipl. Atual Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 30
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pd Disciplina Computacao 1_2006. . . p. Prox Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 31
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pd Disciplina Computacao 1_2006. . . p. Prox Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 32
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual-> p. Prox = pd; p. Discipl. Atual->p. Prox pd; p. Discipl. Atual = pd; } } DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pd Disciplina Computacao 1_2006. . . p. Prox Disciplina Introd_Alg_2007. . . p. Prox Disciplina Metodos 2_2007. . . Computacao 2_2007. . . p. Prox NULL 33
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pd Disciplina Computacao 1_2006. . . p. Prox Disciplina Introd_Alg_2007. . . p. Prox Disciplina Metodos 2_2007. . . Computacao 2_2007. . . p. Prox NULL 34
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } DAELN. inclua. Disciplina ( &Computacao 1_2006); DAELN. inclua. Disciplina ( & Introd_Alg_2007); DAELN. inclua. Disciplina ( &Computacao 2_2007); DAELN. inclua. Disciplina ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim Disciplina Computacao 1_2006. . . p. Prox p. Discipl. Atual Disciplina Introd_Alg_2007. . . p. Prox Disciplina Metodos 2_2007. . . Computacao 2_2007. . . p. Prox NULL 35
Continue a “simulação”. . . por meio do “diagrama de cubos” 36
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); DAELN. inclua. Disciplina ( &Computacao 1_2006); ( & Introd_Alg_2007); ( &Computacao 2_2007); ( &Metodos 2_2007); Computacao 1_2006. set. Departamento ( &DAELN ); Introd_Alg_2007. set. Departamento ( &DAELN ); Computacao 2_2007. set. Departamento ( &DAELN ); Metodos 2_2007. set. Departamento ( &DAELN ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Depto. Associado Disciplina Computacao 1_2006. . . p. Prox p. Discipl. Atual p. Depto. Associado Disciplina Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 2_2007. . . p. Prox p. Depto. Associado Disciplina Metodos 2_2007. . . p. Prox NULL 37
Neste cenário simule o código considerado void Departamento: : liste. Disciplinas ( ) { Disciplina* p. Aux; p. Aux = p. Discipl. Prim; void Principal: : Liste. Disc. Deptos ( ) { DAELN. liste. Disciplinas ( ); printf ("n"); while ( p. Aux != NULL ) { printf (" A disciplina %s pertence ao Departamento %s n", p. Aux->get. Nome(), nome ); } p. Aux = p. Aux->p. Prox; } } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Depto. Associado Disciplina Computacao 1_2006. . . p. Prox p. Discipl. Atual p. Depto. Associado Disciplina Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . p. Prox NULL 38
Voltando ao código. . . para melhorá-lo 39
Usando o ponteiro implícito this. #include "Disciplina. h" #include <stdio. h> #include <string. h> void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; Disciplina: : Disciplina ( char* ac ) { p. Depto. Associado = NULL; p. Prox = NULL; strcpy (area_conhecimento, ac); } Disciplina: : ~Disciplina ( ) { Depto. Associado = NULL; p. Prox = NULL; } void Disciplina: : set. Id ( int n ) { id = n; } // Cada vez que um Departamento é associado a uma Disciplina, // esta Disciplina passa a fazer parte da lista de disciplina // do Departamento, por meio do comando abaixo. pdpto->inclua. Disciplina ( this ); } Departamento* Disciplina: : get. Departamento ( ) { return p. Depto. Associado; } int Disciplina: : get. Id ( ) { return id; } void Disciplina: : set. Nome (char* n) { strcpy ( nome, n ); } char* Disciplina: : get. Nome ( ) { return nome; } 2 a versão. 40
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( & DAELN } void Principal: : Calc. Idade. Profs ( ) { // Cálculo da idade. Simao. Calc_Idade ( dia. Atual, mes. Atual, ano. Atual ); Einstein. Calc_Idade ( dia. Atual, mes. Atual, ano. Atual ); Newton. Calc_Idade ( dia. Atual, mes. Atual, ano. Atual ); printf ("n"); } void Principal: : Univ. Onde. Profs. Trabalham ( ) { // Universidade que a Pessoa trabalha. Simao. Onde. Trabalho ( ); Einstein. Onde. Trabalho ( ); Newton. Onde. Trabalho ( ); printf ("n"); } void Principal: : Dep. Onde. Profs. Trabalham ( ) { // Departamento que a Pessoa trabalha. Simao. Qual. Departamento. Trabalho ( ); Einstein. Qual. Departamento. Trabalho ( ); Newton. Qual. Departamento. Trabalho ( ); printf ( "n“ ); } ); ); void Principal: : Liste. Disc. Deptos ( ) { Eletronica. UTFPR. liste. Disciplinas ( ); printf ("n"); } void Principal: : Executar ( ) { Calc. Idade. Profs ( ); Univ. Onde. Profs. Trabalham ( ); Dep. Onde. Profs. Trabalham ( ); Liste. Dep. Por. Univ ( ); // Metodos 2. liste. Alunos(); Liste. Disc. Deptos ( ); } 2 a versão. 41
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL p. Depto. Associado Disciplina p. Depto. Associado Computacao 1_2006. . . NULL Metodos 2_2007. . . p. Prox NULL p. Depto. Associado Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina NULL NULL 42
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->inclua. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL pdpto NULL p. Depto. Associado Disciplina Computacao 1_2006. . . Metodos 2_2007. . . p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina NULL NULL 43
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->inclua. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL pdpto NULL p. Depto. Associado Disciplina Computacao 1_2006. . . Metodos 2_2007. . . p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina NULL NULL 44
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } . . . p. Discipl. Prim NULL p. Discipl. Atual pdpto pd NULL p. Depto. Associado Disciplina Computacao 1_2006. . . Metodos 2_2007. . . p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina NULL NULL 45
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; pd p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } . . . p. Discipl. Prim p. Discipl. Atual pdpto pd NULL p. Depto. Associado Disciplina Computacao 1_2006. . . Metodos 2_2007. . . p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina NULL NULL 46
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } . . . p. Discipl. Prim p. Discipl. Atual pdpto pd p. Depto. Associado Disciplina Computacao 1_2006. . . Metodos 2_2007. . . p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina NULL NULL 47
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } . . . p. Discipl. Prim p. Discipl. Atual pdpto p. Depto. Associado Disciplina Computacao 1_2006. . . Metodos 2_2007. . . p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina NULL NULL 48
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->set. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual p. Depto. Associado Disciplina Computacao 1_2006. . . Metodos 2_2007. . . p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina NULL NULL 49
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual p. Depto. Associado Disciplina Computacao 1_2006. . . Metodos 2_2007. . . p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina NULL NULL 50
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->inclua. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pdpto p. Depto. Associado Disciplina Computacao 1_2006. . . Metodos 2_2007. . . p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina NULL NULL 51
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->inclua. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pdpto NULL p. Depto. Associado Disciplina p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina Computacao 1_2006. . . p. Depto. Associado NULL 52
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } . . . p. Discipl. Prim p. Discipl. Atual pdpto NULL pd p. Depto. Associado Disciplina p. Depto. Associado p. Prox NULL Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox Disciplina Computacao 1_2006. . . p. Depto. Associado NULL 53
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual-> p. Prox = pd; p. Discipl. Atual->p. Prox pd; p. Discipl. Atual = pd; } } . . . p. Discipl. Prim p. Discipl. Atual pdpto NULL p. Depto. Associado Disciplina Computacao 1_2006. . . p. Prox pd p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 54
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } . . . p. Discipl. Prim p. Discipl. Atual pdpto NULL p. Depto. Associado Disciplina Computacao 1_2006. . . p. Prox pd p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 55
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; p. Discipl. Atual = pd; } } . . . p. Discipl. Prim p. Discipl. Atual pdpto NULL p. Depto. Associado Disciplina Computacao 1_2006. . . p. Prox p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 56
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->set. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL p. Depto. Associado Disciplina Computacao 1_2006. . . p. Prox p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 57
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL p. Depto. Associado Disciplina Computacao 1_2006. . . p. Prox p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox NULL 58
Continue a “simulação”. . . por meio do “diagrama de cubos” 59
Exercício 1 B No exercício anterior, faça com que a lista seja duplamente encadeada. 60
Digrama de Classes - Projeto 61
‘Correção de Exercício’ #ifndef _DEPARTAMENTO_H_ #define _DEPARTAMENTO_H_ class Universidade; class Disciplina; Cada Departamento deve ser capaz de armazenar uma lista de disciplinas class Departamento { private: char nome[130]; // Associação para com uma Universidade* p. Univ; // Associação para com várias Disciplinas. Disciplina *p. Discipl. Prim; Disciplina *p. Discipl. Atual; public: Departamento ( ); Esta lista deverá ~Departamento ( ); #ifndef _DISCIPLINA_H_ #define _DISCIPLINA_H_ #include "Aluno. h“ #include “Departamento. h” class Disciplina { private: int id; char nome[150]; char area_conhecimento[150]; Departamento* p. Depto. Associado; p. Depto. Associado public: Disciplina ( char* ac = "" ); ~Disciplina ( ); Disciplina* p. Prox; ser duplamente encadeada. void set. Nome ( char* n ); char* get. Nome ( ); void set. Universidade(Universidade* u); Universidade* get. Universidade ( ); Disciplina* p. Ante; void set. Id ( int n ); int get. Id ( ); void set. Nome ( char* n ); char* get. Nome ( ); void inclua. Disciplina ( Disciplina* d ); void liste. Disciplinas ( ); void liste. Disciplinas 2 ( ); }; #endif // Deveria ser privado: // re-fazer. . . // Idem void set. Departamento (Departamento* pd); Departamento* get. Departamento ( ); }; 62
#include "Departamento. h" #include "Universidade. h" #include "Disciplina. h" #include <stdio. h> Departamento: : Departamento ( ) { p. Discipl. Prim = NULL; p. Discipl. Atual = NULL; } Departamento: : ~Departamento ( ) { p. Discipl. Prim = NULL; p. Discipl. Atual = NULL; } void Departamento: : set. Nome ( char* n ) { strcpy ( nome, n ); } char* Departamento: : get. Nome ( ) { return nome; } void Departamento: : set. Universidade ( Universidade* pu ) { p. Univ = pu; } Universidade* Departamento: : get. Universidade ( ) { return p. Univ; } void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->prox = pd; pd->p. Ante = p. Discipl. Atual; p. Discipl. Atual = pd; } } void Departamento: : liste. Disciplinas ( ) { Disciplina* p. Aux; p. Aux = p. Discipl. Prim; while ( paux != NULL ) { printf(" A disciplina %s pertence ao Departamento %s n", p. Aux->get. Nome(), nome ); p. Aux = p. Aux->p. Prox; } } void Departamento: : liste. Disciplinas 2 ( ) { Disciplina* p. Aux; p. Aux = p. Discipl. Atual; while ( p. Aux != NULL ) { printf(" A disciplina %s pertence ao Departamento %s n", p. Aux->get. Nome(), nome); p. Aux = p. Aux->p. Ante; } } 63
#include "Disciplina. h" #include <stdio. h> #include <string. h> void Disciplina: : set. Departamento ( Departamento* pd ) { Depto. Associado = pd; Disciplina: : Disciplina ( char* ac ) { p. Depto. Associado = NULL; p. Prox = NULL; p. Ante = NULL; strcpy (area_conhecimento, ac); } Disciplina: : ~Disciplina ( ) { p. Depto. Associado = NULL; p. Prox = NULL; p. Ante = NULL; } // Cada vez que um Departamento é associado a uma Disciplina, // esta Disciplina passa a fazer parte da lista de disciplina // do Departamento, por meio do comando abaixo. pd-> inclua. Disciplina ( this ); pd->inclua. Disciplina } Departamento* Disciplina: : get. Departamento ( ) { return Depto. Associado; } void Disciplina: : set. Id ( int n ) { id = n; } int Disciplina: : get. Id ( ) { return id; } void Disciplina: : set. Nome (char* n) { strcpy ( nome, n ); } char* Disciplina: : get. Nome ( ) { return nome; } 64
Faça uma “simulação”. . . por meio do “diagrama de cubos” da constituição da lista duplamente encadeada. 65
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL p. Depto. Associado p. Ante NULL Metodos 2_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado Disciplina NULL NULL 66
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->inclua. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL pdpto p. Depto. Associado p. Ante NULL Metodos 2_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado Disciplina NULL NULL 67
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->inclua. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL pdpto p. Depto. Associado p. Ante NULL Metodos 2_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado Disciplina NULL NULL 68
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN. . . p. Discipl. Prim NULL void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; pd->p. Ante = p. Discipl. Atual; p. Discipl. Atual = pd; } } . . . p. Discipl. Atual NULL pdpto pd p. Depto. Associado p. Ante NULL Metodos 2_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado Disciplina NULL NULL 69
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN. . . p. Discipl. Prim void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; pd p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd pd->p. Ante = p. Discipl. Atual; p. Discipl. Atual = pd; } } . . . p. Discipl. Atual NULL pdpto pd p. Depto. Associado p. Ante NULL Metodos 2_2007. . . NULL p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado Disciplina NULL NULL p. Prox NULL 70
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN. . . p. Discipl. Prim void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; pd->p. Ante = p. Discipl. Atual; p. Discipl. Atual = pd; } } . . . p. Discipl. Atual pdpto pd p. Depto. Associado p. Ante NULL Metodos 2_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado Disciplina NULL NULL 71
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN. . . p. Discipl. Prim void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; pd->p. Ante = p. Discipl. Atual; p. Discipl. Atual = pd; } } . . . p. Discipl. Atual pdpto p. Depto. Associado p. Ante NULL p. Ante p. Prox NULL Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado Disciplina NULL NULL p. Prox p. Ante p. Prox NULL 72
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->inclua. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual p. Depto. Associado p. Ante NULL Metodos 2_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado Disciplina NULL NULL 73
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual p. Depto. Associado p. Ante NULL Metodos 2_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado Disciplina NULL NULL 74
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->inclua. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pdpto p. Depto. Associado p. Ante NULL Metodos 2_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado Disciplina NULL NULL 75
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->inclua. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual pdpto NULL p. Depto. Associado Disciplina p. Ante NULL Metodos 2_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado NULL 76
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN. . . p. Discipl. Prim void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; pd->p. Ante = p. Discipl. Atual; p. Discipl. Atual = pd; } } . . . p. Discipl. Atual pdpto NULL pd p. Depto. Associado Disciplina p. Ante NULL Metodos 2_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina Computacao 2_2007. . . Introd_Alg_2007. . . p. Prox p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante p. Depto. Associado NULL 77
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN. . . p. Discipl. Prim void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual-> p. Prox = pd; p. Discipl. Atual->p. Prox pd; pd->p. Ante = p. Discipl. Atual; p. Discipl. Atual = pd; } } . . . p. Discipl. Atual pdpto NULL p. Depto. Associado pd Disciplina Computacao 1_2006. . . p. Ante p. Prox NULL p. Depto. Associado Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . NULL p. Prox p. Ante p. Prox NULL Disciplina p. Ante p. Depto. Associado NULL 78
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN. . . p. Discipl. Prim void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual-> p. Prox = pd; p. Discipl. Atual->p. Prox pd; pd-> p. Ante = p. Discipl. Atual; pd->p. Ante p. Discipl. Atual; p. Discipl. Atual = pd; } } . . . p. Discipl. Atual pdpto NULL p. Depto. Associado pd Disciplina Computacao 1_2006. . . p. Ante NULL p. Prox p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Ante p. Depto. Associado NULL p. Prox p. Ante p. Prox NULL 79
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN. . . p. Discipl. Prim void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; pd->p. Ante = p. Discipl. Atual; p. Discipl. Atual = pd; } } . . . p. Discipl. Atual pdpto NULL p. Depto. Associado pd Disciplina Computacao 1_2006. . . p. Ante NULL p. Prox p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Ante p. Depto. Associado NULL p. Prox p. Ante p. Prox NULL 80
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto-> inclua. Disciplina ( this ); pdpto->inclua. Disciplina } ); ); } Principal Objeto. Principal Departamento DAELN. . . p. Discipl. Prim void Departamento: : inclua. Disciplina ( Disciplina* pd ) { if ( p. Discipl. Prim == NULL ) { p. Discipl. Prim = pd; p. Discipl. Atual = pd; } else { p. Discipl. Atual->p. Prox = pd; pd->p. Ante = p. Discipl. Atual; p. Discipl. Atual = pd; } } . . . p. Discipl. Atual pdpto NULL p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante NULL p. Prox p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Ante p. Depto. Associado NULL p. Prox p. Ante p. Prox NULL 81
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN void Disciplina: : set. Departamento ( Departamento* pdpto ) { p. Depto. Associado = pdpto; pdpto->inclua. Disciplina ( this ); } ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante NULL p. Prox p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Ante p. Depto. Associado NULL p. Prox p. Ante p. Prox NULL 82
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( “Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Intro de Algde Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. set. Departamento ( &DAELN ( &DAELN ); ); } Principal Objeto. Principal . . . Departamento DAELN. . . p. Discipl. Prim p. Discipl. Atual NULL p. Depto. Associado Disciplina Computacao 1_2006. . . p. Ante NULL p. Prox p. Depto. Associado Disciplina Metodos 2_2007. . . Computacao 2_2007. . . Introd_Alg_2007. . . p. Ante p. Depto. Associado NULL p. Prox p. Ante p. Prox NULL 83
Continue a “simulação”. . . por meio do “diagrama de cubos” 84
Exercício 2 - Cada Objeto oriundo da Classe Disciplina poderá ter um número determinado de objetos Alunos relacionados (de uma Classe Aluno). - Este número será determinado no construtor da classe, cujo valor padrão (default) será 45. - As referências (endereços) dos objetos Aluno serão armazenados em uma lista duplamente encadeada em cada objeto Disciplina. - Os objetos Aluno serão “registrados” em ordem alfabética nos objetos Disciplina relacionados. - Alunos poderão ser incluídos e excluídos das listas das Disciplinas. 85
Diagrama de Classes – Análise - Associação 86
Diagrama de Classes – Análise – Agregação-Simples 87
Diagrama de Classes – Análise A agregação simples se REALIZA por meio de uma associação 88
Diagrama de Classes – Projeto 89
‘Correção de Exercício’ #ifndef _DISCIPLINA_H_ #define _DISCIPLINA_H_ #include "Aluno. h“ #include “Departamento. h” class Disciplina { private: int id; char nome[150]; char area_conhecimento[150]; int numero_alunos; int cont_alunos; Departamento* p. Depto. Associado; Cada Objeto oriundo da Classe Disciplina poderá ter um número determinado de objetos Alunos relacionados. Aluno *p. Aluno. Prim; Aluno *p. Aluno. Atual; public: Disciplina (int na = 45, char* ac = ""); ~Disciplina ( ); . . . Disciplina* p. Prox; Disciplina* p. Ante; void set. Id ( int n ); int get. Id ( ); void set. Nome ( char* n ); char* get. Nome ( ); void set. Departamento ( Departamento* pdpto ); Departamento* get. Departamento ( ); #ifndef _ALUNO_H_ #define _ALUNO_H_ #include “Pessoa. h“ class Departamento; class Aluno : public Pessoa { private: int RA; As referências (endereços) dos objetos Aluno serão armazenados em uma lista duplamente encadeada em cada objeto Disciplina. public: Aluno *p. Prox; Aluno *p. Ante; Aluno ( ); ~Aluno ( ); void set. RA ( int ra ); int get. RA ( ); Este número será determinado no construtor da classe, cujo valor padrão (default) será 45. }; #endif void inclua. Aluno (Aluno* pa ); void liste. Alunos ( ); void liste. Alunos 2 ( ); }; #endif 90
#include "Disciplina. h" #include <stdio. h> #include <string. h> void Disciplina: : inclua. Aluno ( Aluno* pa ) { if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ) { if ( p. Aluno. Prim == NULL ) { p. Aluno. Prim = pa; p. Aluno. Atual = pa; } else { p. Aluno. Atual->p. Prox = pa; pa->p. Ante = p. Aluno. Atual; p. Aluno. Atual = pa; } cont_alunos++; } else { printf ( "Aluno não incluído. Turma já lotada n" ); } } Disciplina: : Disciplina ( int na, char* ac ) { p. Depto. Associado = NULL; p. Aluno. Prim = NULL; p. Aluno. Atual = NULL; p. Prox = NULL; p. Ante = NULL; cont_alunos = 0; numero_alunos = na; strcpy (area_conhecimento, ac ) ; } Disciplina: : ~Disciplina ( ) { p. Depto. Associado = NULL; p. Aluno. Prim = NULL; p. Aluno. Atual = NULL; p. Prox = NULL; p. Ante = NULL; } void Disciplina: : set. Id ( int n ) int Disciplina: : get. Id ( ) void Disciplina: : set. Nome ( char* n ) char* Disciplina: : get. Nome ( ) { id = n; } { return id; } { strcpy (nome, n); } { return nome; } void Disciplina: : set. Departamento ( Departamento* pdpto ) { // Cada vez que um Departamento é associado a uma Disciplina, // esta Disciplina passa a fazer parte da lista de disciplina // do Departamento, por meio do comando abaixo. p. Depto. Associado = pdpto; pd->set. Disciplina ( this ); } Departamento* Disciplina: : get. Departamento ( ) { return p. Depto. Associado; } void Disciplina: : liste. Alunos ( ) { Aluno* paux; paux = p. Aluno. Prim; while ( paux != NULL ) { printf ( "Aluno %s matriculado em %s n", paux->get. Nome(), nome ); paux = paux->p. Prox; } } void Disciplina: : liste. Alunos 2 ( ) { Aluno* paux; paux = p. Aluno. Atual; while ( paux != NULL ) { printf ( "Aluno %s matriculado em %s n", paux->get. Nome( ), nome ); paux = paux->p. Ante; } } 91
void Disciplina: : inclua. Aluno( Aluno* pa ) { if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ) { Este slide apenas destaca/salienta if ( p. Aluno. Prim == NULL ) { métodos set. Aluno e liste. Alunos p. Aluno. Prim = pa; classe Disciplina. p. Aluno. Atual = pa; } else { p. Aluno. Atual->p. Prox = pa; pa->p. Ante = p. Aluno. Atual; p. Aluno. Atual = pa; } cont_alunos++; } void Disciplina: : liste. Alunos ( ) else { { Aluno* paux; printf ( "Aluno não incluído. Turma já lotada n" ); paux = p. Aluno. Prim; } } while ( paux != NULL ) os da { printf ( "Aluno %s matriculado em %s n", paux->get. Nome ( ), nome); paux = paux->p. Prox; } } void Disciplina: : liste. Alunos 2 ( ) { Aluno* paux; paux = p. Aluno. Atual; while ( paux != NULL ) { printf ("Aluno %s matriculado em %s n", paux->get. Nome(), nome); paux = paux->p. Ante; } } 92
#ifndef _PRINCIPAL_H_ #define _PRINCIPAL_H_ #include "Professor. h" #include "Universidade. h" #include "Aluno. h" #include "Disciplina. h" // Alunos Aluno AAA; Aluno BBB; Aluno CCC; Aluno DDD; Aluno EEE; class Principal { private: // Universidades Universidade UTFPR; Universidade Princeton; Universidade Cambridge; int int public: Principal ( ); // Departamentos Departamento DAELN; Departamento Matematica. UTFPR; Departamento Fisica. UTFPR; // Inicializações. . . void Inicializa ( ); void Inicializa. Univesidades ( ); void Inicializa. Departamentos ( ); void Inicializa. Professores ( ); void Inicializa. Alunos ( ); void Inicializa. Disciplinas ( ); Departamento Matematica. Princeton; Departamento Fisica. Princeton; Departamento Matematica. Cambridge; Departamento Fisica. Cambridge; . . . // Professores Professor Simao; Professor Einstein; Professor Newton; // Disciplinas Disciplina Computacao 1_2006; Disciplina Introd_Alg_2007; Disciplina Computacao 2_2007; Disciplina Metodos 2_2007; dia. Atual; mes. Atual; ano. Atual; void Executar ( ); void void Calc. Idade. Profs ( ); Univ. Onde. Profs. Trabalham ( ); Dep. Onde. Profs. Trabalham ( ); Conhec. Pessoa ( ); Liste. Disc. Deptos ( ); Lista. Aluno. Disc ( ); }; #endif 93
‘Correção de Exercício’ void Principal: : Inicializa. Alunos ( ) {. . . } void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( "Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Introducao de Algoritmos de Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento Introd_Alg_2007. set. Departamento Computacao 2_2007. set. Departamento Metodos 2_2007. inclua. Aluno ( &AAA ); Metodos 2_2007. inclua. Aluno ( &BBB ); Metodos 2_2007. inclua. Aluno ( &CCC ); Metodos 2_2007. inclua. Aluno ( &DDD ); Metodos 2_2007. inclua. Aluno ( &EEE ); } ( &DAELN ); void Principal: : Liste. Alunos. Disc ( ) { Metodos 2_2007. liste. Alunos ( ); printf ( "n" ); Metodos 2_2007. liste. Alunos 2 ( ); printf ( "n" ); } void Principal: : Executar ( ) { Calc. Idade. Profs ( ); Univ. Onde. Profs. Trabalham ( ); Dep. Onde. Profs. Trabalham ( ); Conhec. Pessoa ( ); Liste. Disc. Deptos ( ); Liste. Alunos. Disc ( ); } 94
void Principal: : Inicializa. Disciplinas ( ) { Computacao 1_2006. set. Nome ( "Computacao I 2006" ); Introd_Alg_2007. set. Nome ( "Introducao de Algoritmos de Programacao 2007" ); Computacao 2_2007. set. Nome ( "Computao II" ); Metodos 2_2007. set. Nome ( "Métodos II" ); Computacao 1_2006. set. Departamento ( & DAELN); Introd_Alg_2007. set. Departamento ( & DAELN); Computacao 2_2007. set. Departamento ( & DAELN); Metodos 2_2007. inclua. Aluno ( &AAA ); Metodos 2_2007. inclua. Aluno ( &BBB ); Metodos 2_2007. inclua. Aluno ( &CCC ); Metodos 2_2007. inclua. Aluno ( &DDD ); Metodos 2_2007. inclua. Aluno ( &EEE ); Computacao 2_2007. inclua. Aluno ( &AAA ); Computacao 2_2007. inclua. Aluno ( &EEE ); Computacao 2_2007. inclua. Aluno ( &FFF ); PROBLEMA! Qual é o problema ? Como resolver? } 95
Faça uma “simulação”. . . por meio do “diagrama de cubos” para descobrir o problema 96
- Slides: 96