Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1...

80
1 Orientação a Objetos - Programação em C++ Slides 5: Lista, Relações (via Ponteiros), Alocação Dinâmica. OO – Engenharia Eletrônica Prof. Jean Marcelo SIMÃO

Transcript of Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1...

Page 1: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

1

Orientação a Objetos -

Programação em C++

Slides 5: Lista, Relações (via Ponteiros), Alocação Dinâmica.

OO – Engenharia Eletrônica

Prof. Jean Marcelo SIMÃO

Page 2: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

2

Exercício anterior

- Cada Objeto oriundo da Classe Disciplina poderá ter um númerodeterminado de objetos Alunos relacionados (de uma Classe Aluno).

- Este número será determinado no construtor da classe, cujo valorpadrão (default) será 45.

- As referências (endereços) dos objetos Aluno serão armazenadosem uma lista duplamente encadeada em cada objeto Disciplina.

- Os objetos Aluno serão “registrados” em ordem alfabética nosobjetos Disciplina relacionados.

- Alunos poderão ser incluídos e excluídos das listas das Disciplinas.

Page 3: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

3

Diagrama de Classes – Análise - Associação

Disciplina

-id: int-nome: char[150]-area_conhecimento: char[150]

<<create>>-Disciplina(i: int, na: int, ac: char*)<<create>>+Disciplina()<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char*): void+getNome(): char*

Aluno

-RA: int

<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): intCursar

1..*1..*

Page 4: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

4

Diagrama de Classes – Análise –Agregação-Simples

Disciplina

-id: int-nome: char[150]-area_conhecimento: char[150]

<<create>>-Disciplina(i: int, na: int, ac: char*)<<create>>+Disciplina()<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char*): void+getNome(): char*

1..* 1..*

Aluno

-RA: int

<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int

Page 5: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

5

Diagrama de Classes – Análise

Disciplina

-id: int-nome: char[150]-area_conhecimento: char[150]

<<create>>-Disciplina(i: int, na: int, ac: char*)<<create>>+Disciplina()<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char*): void+getNome(): char*

Aluno

-RA: int

<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): int

Cursar 1..*1..*

1..* 1..*

A agregação simples se REALIZA por meio de uma associação

Page 6: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

6

Diagrama de Classes – Análise

A agregação simples se REALIZA por meio de uma associação

Disciplina

-id: int-nome: char[150]-area_conhecimento: char[150]

<<create>>-Disciplina(i: int, na: int, ac: char*)<<create>>+Disciplina()<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char*): void+getNome(): char*

Aluno

-RA: int

<<destroy>>+Aluno()<<create>>+Aluno(i: int)+setRA(ra: int): void+getRA(): intCursar

1..*1..*

Page 7: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

7

Diagrama de Classes – Projeto

Disciplina

-id: int-nome: char[150]-area_conhecimento: char[150]-pDeptoAssociado: Departamento*+pProx: Disciplina*+pAnte: Disciplina*-pAlunoPrim: Aluno*-pAlunoAtual: Aluno*+numero_alunos: int+cont_alunos: int

<<create>>-Disciplina(i: int, na: int, ac: char)<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char): void+getNome(): char+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+incluaAluno(pa: Aluno*): void+listeAlunos(): void+listeAlunos2(): void

Aluno

-RA: int+pProx: Aluno*+pAnte: Aluno*

<<create>>+Aluno(i: int)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): intCursar

1..*1..*

Implementado por uma lista duplamente encadeada

Page 8: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

8

#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* pDeptoAssociado;

Aluno* pAlunoPrim;Aluno* pAlunoAtual;

public:Disciplina ( int na = 45, char* ac = "" );~Disciplina ( );

Disciplina* pProx;Disciplina* pAnte;

void setId ( int n ) ;int getId ( );

void setNome ( char* n );char* getNome ( );

void setDepartamento ( Departamento* pdpto );Departamento* getDepartamento ( );

void incluaAluno ( Aluno* pa );void listeAlunos ( );void listeAlunos2 ( );

};#endif

#ifndef _ALUNO_H_#define _ALUNO_H_#include “Pessoa.h“

class Departamento;

class Aluno : public Pessoa{

private:int RA;

public:

Aluno *pProx;Aluno *pAnte;

Aluno ( );~Aluno ( );

void setRA ( int ra );int getRA ( );

};#endif

As referências (endereços)dos objetos Aluno serãoarmazenados em uma listaduplamente encadeada emcada objeto Disciplina.

Cada Objeto oriundo daClasse Disciplina poderá terum número determinado deobjetos Alunos relacionados.

Este número serádeterminado no construtorda classe, cujo valorpadrão (default) será 45.

‘Correção de Exercício’

Page 9: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

#include "Disciplina.h"#include "Departamento.h"#include <stdio.h>#include <string.h>

Disciplina::Disciplina ( int na, char* ac ){

pDeptoAssociado = NULL;pAlunoPrim = NULL;pAlunoAtual = NULL;pProx = NULL;pAnte = NULL;cont_alunos = 0;numero_alunos = na;strcpy ( area_conhecimento, ac ) ;

}

Disciplina::~Disciplina ( ){

pDeptoAssociado = NULL;pAlunoPrim = NULL;pAlunoAtual = NULL;pProx = NULL;pAnte = NULL;

}

void Disciplina::setId ( int n ) { id = n; }int Disciplina::getId ( ) { return id; }void Disciplina::setNome ( char* n ) { strcpy ( nome, n ); }char* Disciplina::getNome ( ) { return nome; }

void Disciplina::setDepartamento ( Departamento* pd ){

// 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.pDeptoAssociado = pd;pd->setDisciplina ( this );

}

Departamento* Disciplina::getDepartamento ( ){

return pDeptoAssociado;}

void Disciplina::incluaAluno ( Aluno* a ){

if ( ( cont_alunos < numero_alunos ) && ( a != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = a;pAlunoAtual = a;

}else{

pAlunoAtual->pProx = a;a->pAnte = pAlunoAtual;pAlunoAtual = a;

}cont_alunos++;

}else{

printf ( " Aluno não incluído. Turma já lotada \n" );}

}

void Disciplina::listeAlunos ( ){

Aluno* paux;paux = pAlunoPrim;while ( paux != NULL ){

printf ( " Aluno %s matriculado em %s \n ", paux->getNome(), nome );paux = paux->pProx;

}}

void Disciplina::listeAlunos2 ( ){

Aluno* paux;paux = pAlunoAtual;while ( paux != NULL ){

printf ( "Aluno %s matriculado em %s \n", paux->getNome( ), nome );paux = paux->pAnte;

}}

Page 10: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

10

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else{

printf ( "Aluno não incluído. Turma já lotada \n" );}

}

void Disciplina::listeAlunos ( ){

Aluno* paux;paux = pAlunoPrim;while ( paux != NULL ){

printf ( "Aluno %s matriculado em %s \n", paux->getNome ( ), nome);paux = paux->pProx;

}}

void Disciplina::listeAlunos2 ( ){

Aluno* paux;paux = pAlunoAtual;while ( paux != NULL ){

printf ("Aluno %s matriculado em %s \n", paux->getNome(), nome);paux = paux->pAnte;

}}

Este slide apenas destaca/salientaos métodos incluaAluno elisteAlunos da classe Disciplina.

Page 11: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

11

#ifndef _PRINCIPAL_H_#define _PRINCIPAL_H_#include "Professor.h"#include "Universidade.h"#include "Aluno.h"#include "Disciplina.h"

class Principal{private:

// UniversidadesUniversidade UTFPR;Universidade Princeton;Universidade Cambridge;

// DepartamentosDepartamento DAELN;Departamento MatematicaUTFPR;Departamento FisicaUTFPR;

Departamento MatematicaPrinceton;Departamento FisicaPrinceton;

Departamento MatematicaCambridge;Departamento FisicaCambridge;

// ProfessoresProfessor Simao;Professor Einstein;Professor Newton;

// DisciplinasDisciplina Computacao1_2006;Disciplina Introd_Alg_2007;Disciplina Computacao2_2007;Disciplina Metodos2_2007;

// AlunosAluno AAA;Aluno BBB;Aluno CCC;Aluno DDD;Aluno EEE;

int diaAtual;int mesAtual;int anoAtual;

public:

Principal ( int dia, int mes, int ano );

// Inicializações...void Inicializa ( );void InicializaUnivesidades ( );void InicializaDepartamentos ( );void InicializaProfessores ( );void InicializaAlunos ( );void InicializaDisciplinas ( );

void Executar ( );

void CalcIdadeProfs ( );void UnivOndeProfsTrabalham ( );void DepOndeProfsTrabalham ( );void ConhecPessoa ( );void ListeDiscDeptos ( );

};

#endif

Page 12: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

12

void Principal::InicializaAlunos ( ){// . . .

}

void Principal::InicializaDisciplinas ( ){

Computacao1_2006.setNome ( "Computacao I 2006" );Introd_Alg_2007.setNome ( "Introducao de Algoritmos de Programacao 2007" );Computacao2_2007.setNome ( "Computao II" );Metodos2_2007.setNome ( "Métodos II" );

Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN);Computacao2_2007.setDepartamento ( &DAELN);Metodos2_2007.setDepartamento ( &DAELN);

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

void Principal::ListeAlunosDisc ( ){

Metodos2_2007.listeAlunos ( );printf ( "\n" );

Metodos2_2007.listeAlunos2 ( );printf ( "\n" );

}

void Principal::Executar ( ){

CalcIdadeProfs ( );UnivOndeProfsTrabalham ( );DepOndeProfsTrabalham ( );ConhecPessoa ( );ListeDiscDeptos ( );ListeAlunosDisc ( );

}

Page 13: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

13

Faça uma “simulação”...

por meio do “diagrama de cubos” da constituição da lista duplamente encadeada cubos”

Page 14: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

14

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

NULLNULL

NULL

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal . . .

NULL

pAnte

NULL

pAnte

NULL

pAnte

NULL

pAnte

. . .

Page 15: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

15

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

NULL

NULL

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

paNULL

NULL

pAnte

NULL

pAnte

NULL

pAnte

NULL

pAnte

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else{

cout << " Aluno não incluído. Turma já lotada" << endl;}

}

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 16: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

16

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

NULL

NULL

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

NULLpa

NULL

pAnte

NULL

pAnte

NULL

pAnte

NULL

pAnte

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else{

cout << " Aluno não incluído. Turma já lotada" << endl;}

}

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 17: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

17

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

NULL

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pa

NULL

pAnte

NULL

pAnte

NULL

pAnte

NULL

pAnte

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){

if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else{

cout << " Aluno não incluído. Turma já lotada" << endl;}

}

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 18: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

18

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

NULL

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

NULL

pAnte

NULL

pAnte

NULL

pAnte

NULL

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 19: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

19

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

NULL

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pa

NULL

pAnte

NULL

pAnte

NULL

pAnte

NULL

pAnte

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else{

cout << " Aluno não incluído. Turma já lotada" << endl;}

}

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 20: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

20

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pa

NULL

pAnte

NULL

pAnte

NULL

pAnte

NULL

pAnte

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else{

cout << " Aluno não incluído. Turma já lotada" << endl;}

}

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 21: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

21

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pa

NULL

pAnte pAnte

NULL

pAnte

NULL

pAnte

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else{

cout << " Aluno não incluído. Turma já lotada" << endl;}

}

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 22: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

22

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pa

pAnte pAnte

NULL

pAnte

NULL

pAnte

NULL

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else{

cout << " Aluno não incluído. Turma já lotada" << endl;}

}

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 23: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

23

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte

NULL

pAnte

NULL

pAnte

NULL

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else{

cout << " Aluno não incluído. Turma já lotada" << endl;}

}

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 24: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

24

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

NULL

BBB. . .

pProx

Aluno

NULL

CCC. . .

pProx

Aluno

NULL

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte

NULL

pAnte

NULL

pAnte

NULL

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 25: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

25

Continue a “simulação”

utilizando o “diagrama de cubos”.

Page 26: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

26

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

}

Page 27: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

27

void Principal::InicializaDisciplinas ( ){

Computacao1_2006.setNome ( "Computacao I 2006" );Introd_Alg_2007.setNome ( "Introducao de Algoritmos de Programacao 2007" );Computacao2_2007.setNome ( "Computao II" );Metodos2_2007.setNome ( "Métodos II" );

Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );

Computacao2_2007.setDepartamento ( & DAELN );Metodos2_2007.setDepartamento ( & DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno ( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

PROBLEMA!

Qual é o problema ?Como resolver?

Page 28: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

28

Faça uma “simulação”...

por meio do “diagrama de cubos” para descobrir o problema

Page 29: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

29

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN ) ;Introd_Alg_2007.setDepartamento ( &DAELN ) ;Computacao2_2007.setDepartamento ( &DAELN ) ;Metodos2_2007.setDepartamento ( &DAELN ) ;

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno ( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

DDD. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

Page 30: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

30

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN ) ;Introd_Alg_2007.setDepartamento ( &DAELN ) ;Computacao2_2007.setDepartamento ( &DAELN ) ;Metodos2_2007.setDepartamento ( &DAELN ) ;

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno ( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else { cout << " Aluno não incluído. Turma já lotada" << endl; }

}

Computacao2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

pa

Page 31: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

31

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN ) ;Introd_Alg_2007.setDepartamento ( &DAELN ) ;Computacao2_2007.setDepartamento ( &DAELN ) ;Metodos2_2007.setDepartamento ( &DAELN ) ;

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno ( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else { cout << " Aluno não incluído. Turma já lotada" << endl; }

}

Computacao2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

pa

Page 32: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

32

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN ) ;Introd_Alg_2007.setDepartamento ( &DAELN ) ;Computacao2_2007.setDepartamento ( &DAELN ) ;Metodos2_2007.setDepartamento ( &DAELN ) ;

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno ( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else { cout << " Aluno não incluído. Turma já lotada" << endl; }

}

Computacao2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

pa

Page 33: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

33

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN ) ;Introd_Alg_2007.setDepartamento ( &DAELN ) ;Computacao2_2007.setDepartamento ( &DAELN ) ;Metodos2_2007.setDepartamento ( &DAELN ) ;

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno ( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else { cout << " Aluno não incluído. Turma já lotada" << endl; }

}

Computacao2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

Page 34: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

34

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN ) ;Introd_Alg_2007.setDepartamento ( &DAELN ) ;Computacao2_2007.setDepartamento ( &DAELN ) ;Metodos2_2007.setDepartamento ( &DAELN ) ;

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno ( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

Computacao2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

Page 35: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

35

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN ) ;Introd_Alg_2007.setDepartamento ( &DAELN ) ;Computacao2_2007.setDepartamento ( &DAELN ) ;Metodos2_2007.setDepartamento ( &DAELN ) ;

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno ( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

Computacao2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else { cout << " Aluno não incluído. Turma já lotada" << endl; }

}

pa

Page 36: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

36

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN ) ;Introd_Alg_2007.setDepartamento ( &DAELN ) ;Computacao2_2007.setDepartamento ( &DAELN ) ;Metodos2_2007.setDepartamento ( &DAELN ) ;

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno ( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

Computacao2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

void Disciplina::incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else { cout << " Aluno não incluído. Turma já lotada" << endl; }

}

pa

Page 37: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

37

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN ) ;Introd_Alg_2007.setDepartamento ( &DAELN ) ;Computacao2_2007.setDepartamento ( &DAELN ) ;Metodos2_2007.setDepartamento ( &DAELN ) ;

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

Computacao2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

void Disciplina:: incluaAluno ( Aluno* pa ){

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){if ( pAlunoPrim == NULL ){

pAlunoPrim = pa;pAlunoAtual = pa;

}else{

pAlunoAtual->pProx = pa;pa->pAnte = pAlunoAtual;pAlunoAtual = pa;

}cont_alunos++;

}else { cout << " Aluno não incluído. Turma já lotada" << endl; }

}

pa

Page 38: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

38

Metodos2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

AAA. . .

pProx

Aluno

BBB. . .

pProx

Aluno

CCC. . .

pProx

Aluno

PrincipalObjetoPrincipal

. . .

pAnte pAnte pAnte pAnte

NULL

Computacao2_2007. . .

Disciplinas

pAlunoPrim pAlunoAtual

pa

Perdeu-se a conexão de AAA para BBBnecessária a lista (duplamente) encadeadade Metodos2_2007.

Page 39: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

39

Uma primeira solução

Page 40: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

40

Disciplina

-id: int-nome: char[150]-area_conhecimento: char[150]-pDeptoAssociado: Departamento*+pProx: Disciplina*+pAnte: Disciplina*-pElAlunoPrim: ElAluno*-pElAlunoAtual: ElAluno*+numero_alunos: int+cont_alunos: int

<<create>>-Disciplina(i: int, na: int, ac: char)<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char): void+getNome(): char+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+incluaAluno(pa: Aluno*): void+listeAlunos(): void+listeAlunos2(): void

Aluno

-RA: int

<<create>>+Aluno(i: int)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int

Cursar

1..*1..*

ElAluno

-pAL: Aluno*+pProx: ElAluno*+pAnte: ElAluno*

+ElAluno()+ElAluno()+setAluno(pa: Aluno*): void+getAluno(): Aluno*+getNome(): char*

Tratar Aluno na Lista

1

1..*

Isto é uma classe de Associação que servepara implementar uma dada relação modelada.

Conhecer Primeiro

1

1

Conhecer Atual

1

1

Conhecer Próximo

0..10..1

Conhecer Anterior

0..1 0..1

Page 41: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

41

Diagrama de Classes – Projeto – Classe de AssociaçãoDisciplina

-id: int-nome: char[150]-area_conhecimento: char[150]-pDeptoAssociado: Departamento*+pProx: Disciplina*+pAnte: Disciplina*-pElAlunoPrim: ElAluno*-pElAlunoAtual: ElAluno*+numero_alunos: int+cont_alunos: int

<<create>>-Disciplina(i: int, na: int, ac: char)<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char): void+getNome(): char+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+incluaAluno(pa: Aluno*): void+listeAlunos(): void+listeAlunos2(): void

Aluno

-RA: int

<<create>>+Aluno(i: int)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int

Cursar

1..*1..*

ElAluno

-pAL: Aluno*+pProx: ElAluno*+pAnte: ElAluno*

+ElAluno()+ElAluno()+setAluno(pa: Aluno*): void+getAluno(): Aluno*+getNome(): char*

Tratar Aluno na Lista

1

1..*

1..*

1

Isto é uma classe de Associação que servepara implementar uma dada relação modelada.

Conhecer Primeiro

1

1

Conhecer Atual

1

1

Conhecer Próximo

0..10..1

Conhecer Anterior

0..1 0..1

Page 42: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

42

Disciplina

-id: int-nome: char[150]-area_conhecimento: char[150]-pDeptoAssociado: Departamento*+pProx: Disciplina*+pAnte: Disciplina*-pElAlunoPrim: ElAluno*-pElAlunoAtual: ElAluno*+numero_alunos: int+cont_alunos: int

<<create>>-Disciplina(i: int, na: int, ac: char)<<destroy>>-Disciplina()+setId(i: int): void+getId(): int+setNome(n: char): void+getNome(): char+setDepartamento(d: Departamento*): void+getDepartamento(): Departamento*+incluaAluno(pa: Aluno*): void+listeAlunos(): void+listeAlunos2(): void

Aluno

-RA: int

<<create>>+Aluno(i: int)<<destroy>>+Aluno()+setRA(ra: int): void+getRA(): int

ElAluno

-pAL: Aluno*+pProx: ElAluno*+pAnte: ElAluno*

+ElAluno()+ElAluno()+setAluno(pa: Aluno*): void+getAluno(): Aluno*+getNome(): char*

Tratar Aluno na Lista

1

1..*

Isto é uma classe de Associação que servepara implementar uma dada relação modelada.

Conhecer Primeiro

1

1

Conhecer Atual

1

1

Conhecer Próximo

0..10..1

Conhecer Anterior

0..1 0..1

Page 43: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

43

#ifndef _ALUNO_H_#define _ALUNO_H_#include “Pessoa.h"

class Departamento;

class Aluno : public Pessoa{

private:int RA;

public:

Aluno ( );~Aluno ( );

void setRA ( int ra );int getRA ( );

};#endif

A lista não serátratada na ClasseAluno, mas sim emuma outra classerelacionada.

#ifndef _LALUNO_H_#define _LALUNO_H_#include "Aluno.h"class ElAluno{private:

Aluno* pAl;public:

ElAluno ( );~ElAluno ( );ElAluno *pProx;ElAluno *pAnte;void setAluno( Aluno* pa );Aluno* getAluno ( );char* getNome ( );

};#endif

#include "LAluno.h"#include <stdio.h>// …

void ElAluno::setAluno ( Aluno *pa ){

pAl = pa;}

Aluno* ElAluno::getAluno ( ){

return pAl;}

char* ElAluno::getNome ( ){

pAl->getNome ( );}

Page 44: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

44

#ifndef _DISCIPLINA_H_#define _DISCIPLINA_H_#include “ElAluno.h“#include “Departamento.h”

class Disciplina{private:

int id;char nome [ 150 ];char area_conhecimento [ 150 ];int numero_alunos;int cont_alunos;Departamento* pDeptoAssociado;

ElAluno *pElAlunoPrim;ElAluno *pElAlunoAtual;

public:Disciplina ( int na = 45, char* ac = "" );~Disciplina ( );

...

void incluaAluno ( Aluno* pa );void listeAlunos ( );void listeAlunos2 ( );

};#endif

Page 45: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

45

void Disciplina::incluaAluno ( Aluno* pa ){

// Aqui é criado um ponteiro para LAlunoElAluno* paux = NULL;// Aqui é criado um objeto LAluno, sendo seu endereço armazenado em auxpaux = new ElAluno ( );

// Aqui recebe uma cópia do objeto interm.paux->setAluno ( pa );

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{

pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else{

printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos );}

}

Page 46: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

46

void Disciplina::listeAlunos(){

ElAluno* paux;paux = pElAlunoPrim;

while ( paux != NULL ){

printf(" Aluno %s matriculado na Disciplina %s \n", paux->getNome(), nome);paux = paux->pProx;

}}

void Disciplina::listeAlunos2 ( ){

ElAluno* pAux;pAux = pElAlunoAtual;

while ( paux != NULL ){

printf (" Aluno %s matriculado na Disciplina %s \n", paux->getNome(), nome);paux = paux->pAnte;

}

}

Page 47: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

47

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

NULLNULL

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

Page 48: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

48

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007. incluaAluno ( &BBB );Metodos2_2007. incluaAluno ( &CCC );Metodos2_2007. incluaAluno ( &DDD );Metodos2_2007. incluaAluno ( &EEE );. . .

}

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

NULLNULL

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

void Disciplina:: incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

pa

Page 49: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

49

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

NULLNULL

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

pa

paux

Page 50: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

50

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

NULLNULL

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

pa

paux

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

Page 51: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

51

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

NULLNULL

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

pa

paux

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

Page 52: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

52

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

NULL

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

pa

paux

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

Page 53: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

53

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

pa

paux

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

Page 54: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

54

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

Page 55: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

55

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

Page 56: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

56

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

pa

Page 57: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

57

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenadopaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

pa

paux

Page 58: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

58

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

pa

paux

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

Page 59: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

59

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

pa

paux

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

void Disciplina:: incluaAluno( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

Page 60: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

60

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

NULL

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

pa

paux

NULLNULL

---------------------. . .

pProx

ElAluno

pAnte

void Disciplina::incluaAluno( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

Page 61: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

61

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

NULL

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

pa

paux

NULL

---------------------. . .

pProx

ElAluno

pAnte

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

Page 62: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

62

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

NULL

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

pa

paux

NULL

---------------------. . .

pProx

ElAluno

pAnte

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

Page 63: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

63

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

NULL

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

NULL

---------------------. . .

pProx

ElAluno

pAnte

void Disciplina::incluaAluno ( Aluno* pa ){ // Aqui abaixo é criado um ponteiro para LAluno

ElAluno* paux;// Aqui abaixo é criado um objeto LAluno, sendo seu endereço armazenado empaux = new ElAluno ( );// Aqui abaixo recebe uma cópia do objeto interm.paux->setAluno ( pa );if ( ( cont_alunos < numero_alunos ) && ( pa != NULL) ){

if ( pElAlunoPrim == NULL ){

pElAlunoPrim = paux;pElAlunoAtual = paux;

}else{pElAlunoAtual->pProx = paux;paux->pAnte = pElAlunoAtual;pElAlunoAtual = paux;

}cont_alunos++;

}else { printf ("Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos

}

Page 64: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

64

Continue a “simulação”

utilizando o “diagrama de cubos”.

Page 65: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

65

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

DDD. . .

Aluno

PrincipalObjetoPrincipal . . .. . .

NULL

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN );Introd_Alg_2007.setDepartamento ( &DAELN );Computacao2_2007.setDepartamento ( &DAELN );Metodos2_2007.setDepartamento ( &DAELN );

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );. . .

}

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

Page 66: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

66

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

PrincipalObjetoPrincipal. . .

NULL

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

void Principal::InicializaDisciplinas ( ){

. . .Computacao1_2006.setDepartamento ( &DAELN ) ;Introd_Alg_2007.setDepartamento ( &DAELN ) ;Computacao2_2007.setDepartamento ( &DAELN ) ;Metodos2_2007.setDepartamento ( &DAELN ) ;

Metodos2_2007.incluaAluno ( &AAA );Metodos2_2007.incluaAluno ( &BBB );Metodos2_2007.incluaAluno ( &CCC );Metodos2_2007.incluaAluno ( &DDD );Metodos2_2007.incluaAluno ( &EEE );

Computacao2_2007.incluaAluno ( &AAA );Computacao2_2007.incluaAluno ( &CCC );Computacao2_2007.incluaAluno ( &FFF );

}

Computacao2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

NULL

NULL

Page 67: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

67

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

PrincipalObjetoPrincipal. . .

NULL

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

Computacao2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

NULL

NULL

• Está solução é apropriada, pois cada vez que um aluno éinserido em uma lista de disciplina, é também criado umelemento_aluno para tratá-lo naquela lista em específico.

Page 68: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

68

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

PrincipalObjetoPrincipal. . .

NULL

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

Computacao2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

NULL

NULL

• Simule a execução do código

Exercício

void Disciplina::listeAlunos(){

ElAluno* paux;paux = pElAlunoPrim;while ( paux != NULL ){

printf(" Aluno %s matriculado na Disciplina %s \n", paux->getNome(), nome);paux = paux->pProx;

}}

void Principal::ListeAlunosDisc ( ){

Metodos2_2007.listeAlunos ( );printf("\n");Metodos2_2007.listeAlunos2 ( );printf("\n");

. . .}

Page 69: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

69

void Principal::Executar ( ){

CalcIdadeProfs ( );UnivOndeProfsTrabalham ( );DepOndeProfsTrabalham ( );ConhecPessoa ( );ListeDiscDeptos ( );ListeAlunosDisc ( );

}

void Principal::ListeAlunosDisc ( ){

Metodos2_2007.listeAlunos ( );printf("\n");Metodos2_2007.listeAlunos2 ( );printf("\n");

Computacao2_2007.listeAlunos ( );printf("\n");Computacao2_2007.listeAlunos2 ( );printf("\n");

}

Page 70: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

70

void Principal::Executar ( ){

CalcIdadeProfs ( );UnivOndeProfsTrabalham ( );DepOndeProfsTrabalham ( );ConhecPessoa ( );ListeDiscDeptos ( );ListeAlunosDisc ( );

AAA.setNome ( "Teste" );printf ( "O novo nome de AAA é: %s \n", AAA.getNome ( ) );Computacao2_2007.listeAlunos ( );

}

OK!

Page 71: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

71

Consideração

Uma solução de “clonagem” podeapresentar problemas de desincronização...

Page 72: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

72

void Disciplina::incluaAluno (Aluno* pa){

// Aqui é criado um ponteiro para LAlunoElAluno* paux;

// Aqui é criado um objeto LAluno, sendo seu endereço armazenado em auxpaux = new ElAluno ( );

// Aqui recebe uma cópia do objeto a.. Isto é uma “clonagem”...Aluno* pa2 = new Aluno();*pa2 = *pa;paux->setAluno ( pa2 );

if ( ( cont_alunos < numero_alunos ) && ( pa != NULL ) ){

if ( pAlunoPrim = = NULL){

pAlunoPrim = paux;pAlunoAtual = paux;

}else{

pAlunoAtual->pProx = paux;paux->pAnte = pAlunoAtual;pAlunoAtual = paux;

}cont_alunos++;

}else{

printf ( "Aluno não incluído. Turma já lotada em %i alunos \n", numero_alunos );}

}

Page 73: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

73

void Principal::Executar (){

CalcIdadeProfs ( );UnivOndeProfsTrabalham ( );DepOndeProfsTrabalham ( );ConhecPessoa ( );ListeDiscDeptos ( );ListeAlunosDisc ( );

AAA.setNome ( "Teste“ );printf ( "O novo nome de AAA é: %s \n", AAA.getNome ( ) );Computacao2_2007.listeAlunos ( );

}

PROBLEMA!

Qual é o problema ?

Page 74: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

74

Exercício 1

- No destrutor da classe Disciplina, liberar a memória alocadapara lista de Alunos (ElAlunos”), liberando/destruindo cadaobjeto criado dinamicamente.

- Obs.: usar o comando delete... Por exemplo: delete aux;

Page 75: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

75

Solução

Disciplina::~Disciplina(){

ElAluno *paux1, *paux2;

paux1 = pElAlunoPrim;

while ( paux1 != NULL ){

paux2 = paux1->pProx;delete ( paux1 );paux1 = paux2;

}

pDeptoAssociado = NULL;pElAlunoPrim = NULL;pElAlunoAtual = NULL;pProx = NULL;pAnte = NULL;

}

Para entender melhor a solução, queira simulação em um diagrama de “cubos”.

Page 76: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

76

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

PrincipalObjetoPrincipal. . .

NULL

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

Computacao2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

NULL

NULL

Simule a execução do código: Disciplina::~Disciplina(){

ElAluno *paux1, *paux2;paux1 = pElAlunoPrim;

while ( paux1 != NULL ){

paux2 = paux1->pProx;delete ( paux1 );paux1 = paux2;

}. . .

}

Page 77: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

77

Disciplina::~Disciplina(){

ElAluno* paux; // ponteiro para ElAlunopaux = pElAlunoPrim;

while ( NULL != pElAlunoPrim ){

pElAlunoPrim = pElAlunoPrim->pProx;delete paux;paux = pElAlunoPrim;

}

pDeptoAssociado = NULL;pElAlunoAtual = NULL;

}

Outra solução

- No destrutor daclasse Disciplina,liberar a memóriaalocada para lista deAlunos (“LAlunos”),liberando-destruindocada objeto criadodinamicamente.

- Obs.: usar o comandodelete... Por exemplo:delete aux;

Page 78: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

78

Metodos2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

AAA. . .

Aluno

BBB. . .

Aluno

CCC. . .

Aluno

PrincipalObjetoPrincipal. . .

NULL

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

Computacao2_2007. . .

Disciplinas

pElAlunoPrim pElAlunoAtual

---------------------. . .

pProx

ElAluno

pAnte

---------------------. . .

pProx

ElAluno

pAnte

NULL

NULL

Simule a execução do código Disciplina::~Disciplina(){

ElAluno* paux; // ponteiro para ElAlunopaux = pElAlunoPrim;

while ( NULL != pElAlunoPrim ){

pElAlunoPrim = pElAlunoPrim->pProx;delete paux;paux = pElAlunoPrim;

}pDeptoAssociado = NULL;pElAlunoAtual = NULL;

}

Page 79: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

79

Exercício 2

- Cada Departamento deve ser capaz de armazenaruma lista de disciplinas.

- A classe Disciplina, entretanto, não deverá possuir umponteiro para o Próximo. Isto deverá estar em umaclasse associada chamada ElDisciplina relacionada aDisciplina...

Page 80: Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1 Orientação a Objetos -Programação em C++ Slides 5: Lista, Relações (via Ponteiros),

80

Exercício 3

- Elaborar uma solução para o armazenar as notas(1a parcial, 2a parcial e final) e número de faltas decada aluno em cada disciplina.