Orientação a Objetos Programação em C++jeansimao/Fundamentos1/Lingua... · 2018-04-05 · 1...
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/1.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/2.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/3.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/4.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/5.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/6.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/7.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/8.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/9.jpg)
#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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/10.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/11.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/12.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/13.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/14.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/15.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/16.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/17.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/18.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/19.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/20.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/21.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/22.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/23.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/24.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/25.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/26.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/27.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/28.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/29.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/30.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/31.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/32.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/33.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/34.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/35.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/36.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/37.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/38.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/39.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/40.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/41.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/42.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/43.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/44.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/45.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/46.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/47.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/48.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/49.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/50.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/51.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/52.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/53.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/54.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/55.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/56.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/57.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/58.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/59.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/60.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/61.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/62.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/63.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/64.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/65.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/66.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/67.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/68.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/69.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/70.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/71.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/72.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/73.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/74.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/75.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/76.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/77.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/78.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/79.jpg)
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),](https://reader034.fdocument.pub/reader034/viewer/2022042810/5f990e0f8e39026fca54d9e3/html5/thumbnails/80.jpg)
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.